分享

u-boot-2009.11 在 6410上的移植-it群

 高杆灯 2010-08-22

 参考smdk6400进行的移植。
u-boot-2009.11直接就支持 6410的nand flash启动。nand、DM9000A都是直接使用里面的驱动就可以了。感觉还是挺顺的。
时间比较长了,感觉当时遇到的问题主要就是gcc优化的问题和栈的问题。
u-boot-2009.11 6410主要有两部分:u-boot和nand启动的代码。编译完成后的u-boot-nand.bin好像就是 nand_spl的u-boot-spl-16k.bin 和 u-boot的u-boot.bin直接cat就OK了。
nand启动的代码在nand_spl文件夹里面。其实主要就是 start.s、lowlevel.s等几个初始化文件、nand的驱动 s3c64xx.c、nand_ecc.c和 nand启动的nand_boot.c。初始化文件和nand的驱动都是直接链接到u-boot中的相应文件。
出的几个问题都和这个有关系。
1、start.s 里面设置stack的代码如下:
stack_setup:
#ifdef CONFIG_MEMORY_UPPER_CODE
    ldr    sp, =(CONFIG_SYS_UBOOT_BASE + CONFIG_SYS_UBOOT_SIZE - 0xc)
#else
    ldr    r0, _TEXT_BASE        /* upper 128 KiB: relocated uboot   */     
    sub    r0, r0, #CONFIG_SYS_MALLOC_LEN    /* malloc area                      */
    sub    r0, r0, #CONFIG_SYS_GBL_DATA_SIZE /* bdinfo                        */
    sub    sp, r0, #12        /* leave 3 words for abort-stack    */
#endif
我没有定义CONFIG_MEMORY_UPPER_CODE,结果压根跑不了!
仔细看了一下,问题是出在:
    ldr    r0, _TEXT_BASE        /* upper 128 KiB: relocated uboot   */ 
在u-boot里面,_TEXT_BASE = $(RAM_TEXT),也就是0x57e0000。
但是在nand_spl里面TEXT_BASE=0!
最后我改成:
    ldr    r0, =(CONFIG_SYS_UBOOT_BASE)
2、后来串口有输出了,但运行到nand初始化或者初始化环境变量的时候整个系统就挂了。
郁闷了好长时间。
最后用j-link连上以后发现,有的时候既然运行到一个全局变量的地址上去了!
开始怀疑编译器的问题。发现 u-boot 编译的时候使用了 -Os 的优化。然后就将此优化关掉(在根目录的config.mk中加的)。结果还是运行不了!
后来才发现,没有-Os的优化,u-boot-spl-16k.bin超过4K的了。没办法最后在 nand-spl的makefile又加上了 -Os的选项。
最终能跑了!我可不想去追究为啥了。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多