uboot在2440上的移植
为什么我们要用U-BOOT?显然可以将操作系统直接烧入flash中执行,但从软件的升级和程序修补来说则是不可少的。
本文引用地址:https://www.eepw.com.cn/article/201611/316103.htmU-BOOT 目录结构分析:
1. board:开发板相关目录
2. common:通用的命令函数
3. cpu:特定CPU架构相关目录,如arm920t
4. doc:uboot的开发、使用文档
5. drivers:uboot支持的设备驱动程序,比如串口,nandflash,网卡
6. fs: 支持的文件系统,Uboot现在支持cramfs、fat、fdos、jffs2和registerfs。
7. include:头文件和开发板配置文件,configs目录下是开发板的配置文件
8. lib_xxxx: 与体系结构相关的库文件。如与ARM相关的库放在lib_arm中。
9. lib_generic:通用的库函数
10. net:各种网络协议,TFTP协议、NFS协议等。
11. tools:uboot自带的工具
U-BOOT的启动分为两个阶段
第一阶段:1)设置CPU工作模式
2)关看门狗
3)设置系统时钟
4)关MMU,CACHE
5)为第二阶段准备RAM空间(borad/smdk2410/lowlevel_init.s)
6)设置堆栈
7)跳到第二阶段C入口点(lib_arm/board.c)
第二阶段:1)start_armboot函数
init_sequence:
初始化CPU,设置系统时钟,初始化定时器,初始化环境参数,初始化串口控制台,检测内存映射
2)flash_init: 初始化NORFLASH
3)env_relocate: 初始化环境变量
4)初始化系统外围设备
5)最后调用main_loop (command/main.c)(下载模式和启动模式在这里)
U-BOOT没有图形配置界面,我们只有通过手动修改文件来配置
1)移植过程要用交叉编译器(我用的arm_linux_gcc_3.3.2)
2)指定环境变量 vi /etc/profile 指定路径,把不用的注释掉,然后保存退出
3)source /etc/profile 使其生效 ,然后可以查看版本arm-linux-gcc -v 看是不是现在使用的版本
4)vi cpu/arm920t/config.mk 注释掉软浮点 因为我们使用的硬浮点编译PLATFORM_RELFLAGS += -fno-strict-aliasing -fno-common -ffixed-r8
# -msoft-float /*注释掉*/
5)修改
在smdk2410_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0
加上
TX2440_config: unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t TX2440 NULL s3c24x0
各项的意思如下:
arm: CPU的架构(ARCH)
arm920t: CPU的类型(CPU),其对应于cpu/arm920t子目录。
TX2440: 开发板的型号(BOARD),对应于board/TX2440目录。
NULL: 开发者/或经销商(vender)。
s3c24x0: 片上系统(SOC)。
在第128行:
ifeq ($(ARCH),arm)
CROSS_COMPILE = arm-linux- 指定交叉编译器,(http://xgc94418297.blog.163.com/blog/static/112966040200952971543686/)
6)把smdk2410 改为TX2440(任意改,只要统一就行)mv smdk2410 TX2440
7)删除board下的其他目录,只留TX2440 方法:mv TX2440 ../ 移动到上层
rm -rf * //删除所在层所有目录
mv ../TX2440 ./ //把上层的TX2440移动到该层
8)到这里就可以测试是否编译成功了
make TX2440_config
出现 Configuring for TX2440 board..... 表示编译成功
9)配置SDRAM(在lowlevel_Init.s中修改BANK和刷新频率)
10)在TX2440.C中修改时钟代码。
可在include/configs/TX2440.h中
#define CFG_PROMPT 后面修改你自己喜欢的命令提示符。
评论