Qt Hello World 出来后,马不停蹄开始自己的linux移植。开发板原来的bootloader是ppcboot2.0,能用就先不理它,第一步是直接跳到内核编译。编译很快(与Qt相比 ^_^ ),通过ppcboot下载到内存,问题就出来了。执行
tftp 30008000 zImage
bootm 30008000
后,直接跳回原来的系统启动,没有从新内核启动。而执行 go 30008000 确可以跳到新内核,这里有点不解。可是新内核也有问题,就是串口在内核的默认名称已改为 ttySAC0 ,而可能ppcboot的传给内核的默认参数是console=ttyS0 。尝试通过boom 30008000 console=ttySAC0 传递,结果如上。尝试修改 ppcboot/lib_arm/armlinux.c 的 boot_cmd 参数,新问题有出现,编译不通过。看来不得不先搞定bootloader,ppcboot太旧了,试一下u-boot吧。最新的为下载是u-boot-1.2.0.tar.bz2,可惜,3.4.1和2.95.3的交叉编译都不通过。暂改用u-boot-1.1.5.tar.bz2 。这里又有一个问题,关于交叉编译链的路径问题。我原本存放在/arm/2.95.3/bin这个目录里,执行

make CROSS_COMPILE=/arm/2.95.3/bin/arm-linux-
      得到一小堆错误就停止,如下:

/arm/2.95.3/bin/arm-linux-gcc -Wa,-gstabs -D__ASSEMBLY__ -g  -Os   -fno-strict-aliasing  -fno-common -ffixed-r8 -msoft-float  -D__KERNEL__ -DTEXT_BASE=0x33F80000  -I/arm/u-boot-1.1.5/include -fno-builtin -ffreestanding -nostdinc -isystem include -pipe  -DCONFIG_ARM -D__ARM__ -mapcs-32 -march=armv4 -mabi=apcs-gnu -c -o lowlevel_init.o lowlevel_init.S
arm-linux-gcc: installation problem, cannot exec `cpp0': No such file or directory
as: unrecognized option `-marmv4'
make[1]: *** [lowlevel_init.o] Error 1
make[1]: Leaving directory `/arm/u-boot-1.1.5/board/smdk2410'
make: *** [board/smdk2410/libsmdk2410.a] Error 2
      改用3.4.1编译,

make CROSS_COMPILE=/arm/3.4.1/bin/arm-linux-

      提示链接错误,搜索后发现网上大多是因为u-boot采用软浮点的问题,但改了-msoft-float 这项后问题依旧:

                -Map u-boot.map -o u-boot
lib_arm/libarm.a(_udivsi3.o)(.text+0x8c):_udivsi3.S:67: relocation truncated to fit: R_ARM_PLT32 __div0
lib_arm/libarm.a(_umodsi3.o)(.text+0xa8):_umodsi3.S:79: relocation truncated to fit: R_ARM_PLT32 __div0
make: *** [u-boot] Error 1

      就这般无奈,一天过去。早上继续搜索,不负有心人啊,终于发现是目录问题,换回2.95.3编译成功。

ln -s /arm/2.95.3 /usr/local/arm/2.95.3

      竟然目录的位置与编译结果有关,不知是否与编译这个 cross toolchain 时的设置有关?尝试将3.4.1作同样的软链接,可惜错误依旧...这些都留到日后研究吧,下一步先搞定linux 2.6.19.2 ......







评论

  • 修改u-boot的顶级目录名就会出现这个问题,改回去就好了

    lotoz () 发表于 2009-06-01 08:48:23
  • 我编译u-boot-1.1.6的时报告错误是:
    no rule to make target '/home/at91sam9263ek/u-boot-1.1.6/include/image.h',needed by 'mkimage.o'. stop
    小弟有点不明白的是:我在 config里设置的是:
    ARCH = arm
    CPU = arm920t
    BOARD = at91rm9200dk
    SOC = at91rm9200

    却出来了at91sam9263ek的报错信息.
    望哪位大哥帮着解答下,拜谢!

    shan () 发表于 2008-08-06 09:17:57
  • 你能否向我邮箱发一份u-boot1.2,我上网找不到

     回复 feifei 说:
    麻烦大哥到这里找找,u-boot的ftp服务器^_^
    ftp://ftp.denx.de/pub/u-boot/
    (2007-09-15 09:51:57)

    feifei (http://山东) 发表于 2007-09-11 20:47:22
  • make: *** [board/smdk2410/libsmdk2410.a] Error 2

    我也有这个问题啊 和什么的目录有关啊

     回复 飞来峰 说:
    i don't know,so few error msg
    (2007-07-13 23:26:28)

    飞来峰 () 发表于 2007-07-08 16:04:45
  • weibing你好,我在用2.95.3在编译u-boot 1.1.5的时候出现很多unrecognized option `-MQ'的错误,而用3.4.1时诱导和你相同的错误。

    请问你是怎么解决的,看到你的文章《关于u-boot的编译》好像你在用2.95.3时并没有碰到这个问题,而我的为什么会出现这种问题呢?谢谢!

     回复 bairg 说:
    确实这样,我后来移植2440的U-BOOT-1.16时也有这样的情况。网上下的3.4.1用硬件浮点指令,导致无法编译U-BOOT。刚开始改用2.95.3编译时也有MQ的错误提示。后来make clean和用原来的rules.mk覆盖当前的,就没有了(具体什么步骤已记不清^_^)。
    (2007-05-31 12:43:50)

    bairg () 发表于 2007-05-30 14:30:00
  • 我用3.4.1编译u-boot-1.1.6 的时候也有这个错误.





    lib_arm/libarm.a(_udivsi3.o)(.text+0x8c):/home/sxh/down/soft/u-boot/u-boot-1.1.6/lib_arm/_udivsi3.S:67: relocation truncated to fit: R_ARM_PLT32 __div0

    lib_arm/libarm.a(_umodsi3.o)(.text+0xa8):/home/sxh/down/soft/u-boot/u-boot-1.1.6/lib_arm/_umodsi3.S:79: relocation truncated to fit: R_ARM_PLT32 __div0

    make: *** [u-boot] 错误 1


     回复 孙新虎 说:
    网上下的3.4.1编u-boot都有硬浮点这个问题..
    (2007-03-23 09:16:57)

    孙新虎 () 发表于 2007-03-22 11:48:28
  • 好文,顶一下!!!

     回复 aaron 说:
    谢谢...
    Linux-2.6.19.2还没移植好,2.6.20 又出来了,变化真快...
    (2007-02-08 10:09:19)

    aaron () 发表于 2007-02-08 09:52:13
  • 是的,我刚才也在摆弄几个不同的toolchain,发现不能改动他们编译时生成的顶极目录以下的目录树。我想起一份文档上说过,编译出来后的gcc在没有指定绝对路径时运行,会从环境变量和上下文得知所在的目录,再根据预设的目录树结构来寻找其它执行文件。所以如果改动了顶极目录以下的路径,gcc就无法按照预设找到相应程序。

     回复 Legend-X 说:
    恩,迟些用crosstool编一个软浮点的toolchain,顺便将其中的原理弄清楚。
    (2007-02-06 22:37:32)

    Legend-X (http://kenerry.bokee.com) 发表于 2007-02-06 15:34:05

发表评论

 姓名:
 E-mail:
 地址: