uboot 移植流程

开发环境:
处理器:s3c2440(arm920t)
uboot版本:u-boot-2012.04.01

下载、编译、烧写

tar xjf u-boot-2012.04.01.tar.bz2 //解压
make smdk2410_config  //配置,smdk2410_config 的解释见顶层Makefile
make//编译

效果:无输出

分析u-boot:

通过链接命令分析组成文件、阅读代码分析启动过程,可知需要留意的文件如下:
参考: u-boot Makefile分析
u-boot 第一段程序start.S 分析

移植uboot:

新建一个单板 smdk2440

cd board/samsung/    //进入相关单板目录
cp smdk2410 smdk2440 -rf//复制一份单板文件
cd ../../include/configs/     //进入单板配置文件目录
cp smdk2410.h smdk2440.h    //复制相关的配置文件

此时,进行 配置
make smdk2440_config

提示:no rule to make target 'smdk2440_config' 

可知:还缺上相关规则,来生成配置
源码内搜索关键字:smdk_2410

grep "smdk_2410" *nR //搜索关键字,以递归+显示行信息 的方式

可知需修改boards.cfg,增加相关的单板信息。
修改boards.cfg:
仿照
smdk2410 arm arm920t - samsung s3c24x0
添加:
smdk2440 arm arm920t - samsung s3c24x0

调试

无输出:

留意uboot的第一阶段启动代码,以及第二阶段的串口初始化相关代码
查看start.s文件,仔细阅读;参考[u-boot 第一段程序start.S 分析],(https://blog.csdn.net/guozhongwei1/article/details/79629290)
调试工具配合使用(单步+断点);

串口乱码:

第二阶段代码,串口初始化部分,

查看串口波特率的设置,发现在get_HCLK里没有定义CONFIG_S3C2440
处理措施:
include/configs/smdk2440.h: 增加 #define CONFIG_S3C2440 宏定义
编译不通过,需要去掉 //#define CONFIG_CMD_NAND

UBOOT 编译出的可执行文件巨大

原来的代码在链接时加了”-pie”选项, 使得u-boot.bin里多了”(.rel)”, “*(.dynsym)”,使得程序非常大,不利于从NAND启动(重定位之前的启动代码应该少于4K)。
处理方法:
去掉 “-pie”选项,

arch/arm/config.mk:75:LDFLAGS_u-boot += -pie 去掉这行

重新调整uboot的第一阶段start.S代码,拒绝使用位置无关代码的套路。

扫描二维码关注公众号,回复: 30683 查看本文章

修改UBOOT支持NAND FLASH

修改:include/configs/smdk2440.h: #define CONFIG_CMD_NAND
把drivers\mtd\nand\s3c2410_nand.c复制为s3c2440_nand.c

修改UBOOT支持DM9000网卡

eth_initialize
        board_eth_init
            cs8900_initialize //修改宏,进行DM9000网卡的初始化

以上,仅供个人参考,学习使用。

猜你喜欢

转载自blog.csdn.net/guozhongwei1/article/details/79958891