BootLoad通常包括以下步骤:
1. Stage 1:
(1 )硬件设备初始化;
(2 )为加载BootLoad的stage2准备RAM空间;
(3 )复制BootLoad的stage2到RAM空间;
(4 )设置好堆栈;
(5 )跳转到stage2的C入口点。
2.Stage2:
(1 )初始化本阶段要用到的硬件设备;
(2 )检测系统内存映射;
(3 )将linux内核和根文件系统映像从Flash上读到RAM空间中;
(4 )为内核设置启动参数;
(5 )调用内核。
现在以TQ2440为目标板,以u-boot1.1.6(网上资源比较丰富,便于学习)为bootload。
移植环境
交叉编译器:crosstools_3.4.5_softfloat
CPU:S3C2440
SDRAM:64M
Nor Flash :2M
NAND Flash :64M
网卡:DM9000
1、解压源码包
tar - jxvf u - boot- 1.1.6.tar.bz2
解压后在当前目录下生成 u - boot- 1.1.6 目录
2、建立自己的目标板(在board目录下建立)
--> 进入 u - boot- 1.1.6 目录。
cd u-boot-1.1.6
--> 将 board/s mdk2410 目录复制为 TQ2440目录
cp - rf board/smdk2410/ board/TQ2440
--> 修改 smdk2410.c 为 dong2440.c
mv board/dong2440/smdk2410.c board/TQ2440/TQ2440.c
--> 修改 Makefile 文件中 28 行的 COBJS 改为:
COBJS := TQ2440.o flash.o
--> 建立目标板配置文件:进入 include/configs 目录下, 将 smdk2410.h 复制为TQ2440.h
cp include/configs/smdk2410.h include/configs/TQ2440.h
--> 修改顶层(u - boot- 1.1.6 目录)Makefile 文件 1881 行,增加:
TQ2440_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t TQ2440 NULL s3c24x0
各项的意思如下:
arm: CPU 的架构(ARCH)
arm920t: CPU 的类型(CPU),其对应于cpu/arm920t 子目录。
TQ2440: 开发板的型号(BOARD),对应于board/TQ2440 目录。
NULL: 开发者/或经销商(vender)。(此处没加vender,为NULL。)
s3c24x0: 片上系统(SOC) 。
--> 配置交叉编译器:修改顶层(u - boot- 1.1.6 目录)Makefile 文件 128 行,修改:
ifeq ($(ARCH),arm)
CROSS_COMPILE=/opt/crosstools_3.4.5_softfloat/gcc- 3.4.5- glibc- 2.3.6/arm - linux/bin/arm - linux (这是我交叉编译器的路径)
endif
3、编译测试
进入 u - boot- 1.1.6 目录
#make mrproper //(或# make distclean 修改顶层 Makefile 等相关文件必须执行此步骤)
#make TQ2440_config
#make all
如果没有错误,则会生成 u - boot.bin 文件。
至此,自己的目标板已经建立,下面要做的是修改一些配置,增加一些驱动。
4、增加对S3C2440的支持
5,、配置NOR Flash
6、增加对NAND Flash读写驱动
7、支持网卡DM9000
8、引导Linux内核
9、支持Yaffs2文件系统