开发环境:
处理器: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代码,拒绝使用位置无关代码的套路。
修改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网卡的初始化
以上,仅供个人参考,学习使用。