第三课 Boot Loader 移植(U-boot)之一
来源:互联网 发布:linux如何禁用端口 编辑:程序博客网 时间:2024/06/06 00:09
Linux有许多Boot Loader可用,比较常见的有U-boot,vivi,RedBoot等,本课程介绍U-boot的版级移植,对应的硬件平台是S3C2440。
嵌入式系统中,系统上电或复位后,CPU通常从地址0X00000000处读取第一条指令开始执行,而Boot Loader就放置与此,他比较类似PC机的Bios。他的工作非常重要:初始化硬件设备、建立内存空间映像图,将硬件环境带到一个合适的状态。
一般我们可以把U-boot的启动过程分为两个阶段,阶段一和阶段二,第一阶段一般用汇编编写,第二阶段一般用C编写,具体如下
阶段一:
初始化基本的硬件设备(中断、关闭处理器的指令、数据Cache)
初始化系统内存
设置堆栈
跳转到第二阶段的C语言程序入口点。
阶段二:
初始化本阶段使用的硬件(串口、以太网口等)
检测系统内存映射
将内核镜像和根文件系统从Flash读到内存中。
为内核设置启动参数。
调用内核,将系统控制权交给内核。
下面我们来分析U-boot的源代码。ftp://ftp.denx.de/pub/u-boot/
下载U-boot 1.2.0压缩包u-boot-1.2.0.tar.bz2通过SSH上传到用户的跟目录/home/21iee下,解压:
tar -jxvf u-boot-1.2.0.tar.bz2
通过SSH我们可以看到U-Boot源代码结构,如图:
U-Boot的源代码高度模块化。其中我们关心的主要目录有:
Board:U-boot支持的开发板相关程序原代码。其中board/SMDK2410目录包含了三星官方SMDK2410开发板的源文件。
Common:与体系无关的文件。
cpu:包含U-Boot所支持的所以CPU的源代码。S3C2440A属于ARM920T家族,所以只需要关心cpu/arm920t目录,其中start.S文件最终会成为u-boot.bin文件的第一段代码。
Drivers:通用设备驱动程序,如串口,网口,usb等
Doc:说明文档。
fs:U-Boot支持的文件系统。
include:包含的头文件目录。其中include/configs/board_name.h中定义了所以和开发板相关的硬件资源配置参数,如网卡地址、内核启动参数、物理内存映射等。
lib_arm:与arm体系结构有关的一些公用接口代码。
net:网络相关代码。
tools:编译相关工具。
在动手操作前,不管三七二十一,先编译一把(我用的是GCC3.3.2的环境用3.4.1有一个error,可根据第二课内容更改bashrc文件修改)
命令为:Make smdk2410_config //smdk2410_config 是目标平台。
然后通过 make all 命令编译,几分钟后如果提示
说明U-Boot已经创建完成。
-----------------------------------------------------------------------------------------------------------------------
U-Boot移植到新的S3C2440A平台上,首先在board目录下增加一个新的开发板目录。
1.新建开发板目录,我取名为hztour2440A。
在u-boot-1.2.0/board/下建立目录 hztour2440A,该目录下需要几个基本文件:config.mk、flash.c、Makefile、mensetup.S、u-boot.lds,以及以开发板命名的hztour2440A.c文件。
cd board/
cp -arv smdk2410 hztour2440A //我们2440和2410类似,所以我们复杂smdk2410下的所有文件
mv hztour2440A/smdk2410.c hztour2440A/hztour2440A.c //重命名为hztour2440A.c
2.在include/configs/目录下建立目标板配置头文件。
cd include/configs
cp smdk2410.h hztour2440A.h //复制smdk2410.h头文件
3.修改Makefile文件,添加编译项
hztour2440A_config: unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t hztour2440A NULL s3c24x0
这里hztour2440A与board/目录下目标板文件夹名称hztour2440A一致。
4.确认编译环境(可选)
该Makefile中定义了CROSS_COMPILE的值,用于在交叉编译时指定交叉编译器,默认为
CROSS_COMPILE = arm-linux- //默认的交叉编译器名的前缀,如果用crosstool生产的编译器,前缀该是arm-9tdmi-linux-gnu-
endif //也可以直接写路径
5.修改board/hztour2440A下的Makefile
6.测试编译
make hztour2440A_config //出现Configuring for hztour2440A board...提示,说明配置成功
make //测试编译
到这里为止,我们编译出来的这个u-boot还不能真正适用于我们的目标板,只是实现了对新目标板的定义,接下来我们还要根据新的目标板的特性来移植,请关注 第四课 Boot Loader 移植(U-boot)之二的内容
作者:hztour 转载请注明出处
- 第三课 Boot Loader 移植(U-boot)之一
- U-boot移植之一:分析Makefile
- U-BOOT全线移植分析系列之一
- 嵌入式系统搭建之一u-boot移植
- u-boot移植到mini2440之一
- XSBase255B -- u-boot移植
- u-boot移植心得
- u-boot移植日记
- U-BOOT移植
- 移植u-boot
- u-boot移植三
- U-BOOT移植总结
- U-boot移植说明
- at91rm9200移植u-boot
- lpc2210 u-boot移植
- U-BOOT移植小解
- U-BOOT全线移植
- u-boot移植s3c2410
- vc快捷键
- _TrackMouseEvent
- 第二课 创建嵌入式Linux开发环境之交叉编译环境
- c中变量的存储区和生存期
- javascript display
- 第三课 Boot Loader 移植(U-boot)之一
- window.onerror
- U-Boot的移植之(一)基础篇:添加新的目标板定义
- JavaScript 事件大全详解
- 按键板的原理与实现 系列2---基于GPIO的按键板
- 事件
- magento -- magento不能安装在php5.2.3版本上安装
- 处理事件注意的问题
- javascript this用法