一、移植环境
- 主 机:VMWare--Ubuntu9.10
- 开发板:Mini2440--64MB Nand
- 内核:Kernel:2.6.31.23
- 编译器:arm-linux-gcc-3.4.5.tgz
- u-boot:u-boot-2010.09.tar.bz2
查看内核版本:
cat /proc/version
查看交叉编译器的版本:
arm-linux-gcc -v
二、移植步骤
1. uboot结构及启动过程
uboot最主要的目标是:启动内核,从flash中读出内核,然后启动。主要有两个阶段,包括stage1和stage2,
1.1 stage1阶段
u-boot的stage1代码通常放在cpu/xxxx/start.S文件中,他用汇编语言写成;主要对底层硬件进行初始化,实现的功能有如下几点:
a. 设置SVC模式
b. 关看门狗
c. 屏蔽中断
d. 初始化SDRAM
e. 设置栈
f. 时钟
g. 将flash中的代码拷贝的sdram中
h. 清除BSS段
i. 调用_start_armboot(这个是C函数,然后跳转到stage2步骤中,该函数在arch/arm/lib/board.c中)
1.2 stage2阶段
u-boot的stage2代码主要用C语言写成,实现了一些外设的功能,包括网卡,USB,串口.....等外设,stage2执行的第一个函数是start_armboot(该函数很重要),具体实现的功能可以查看代码。
2. 测试自己的开发板项目并编译
目前u-boot对很多CPU直接支持,可以查看board目录的一些子目录,如:board/samsung/目录下就是对三星一些ARM处理器的支持,有smdk2400、smdk2410和smdk6400,但没有2440,所以我们就在这里建立自己的开发板项目。
可以先测试交叉编译器是否安装正确,在uboot的主目录下输入如下命令:
make distclean
make smdk2410_config
make
如果正确,则会生成uboot.bin文件
1)因2440和2410的资源差不多,主频和外设有点差别,所以我们就在board/samsung/下建立自己开发板的项目,取名叫fl2440
#tar -jxvf u-boot-2010.09.tar.bz2 //解压源码
#cd u-boot-2010.09/board/samsung/ //进入目录
#mkdir fl2440
2)因2440和2410的资源差不多,所以就以2410项目的代码作为模板,以后再修改
#cp -rf smdk2410/* fl2440/ //将2410下所有的代码复制到2440下
#cd fl2440 //进入fl2440目录
#mv smdk2410.c fl2440.c //将fl2440下的smdk2410.c改名为my2440.c
#cd ../../../ //回到u-boot根目录
#cp include/configs/smdk2410.h include/configs/fl2440.h //建立2440头文件
#vi board/samsung/fl2440/Makefile //修改fl2440下Makefile的编译项,如下:
COBJS := fl2440.o flash.o //因在my2440下我们将smdk2410.c改名为my2440.c
3)修改u-boot跟目录下的Makefile文件。查找到smdk2410_config的地方,在他下面按照smdk2410_config的格式建立fl2440_config的编译选项,另外还要指定交叉编译器
#vi Makefile
在smdk6400的上方添加如下代码
CROSS_COMPILE ?= arm-linux- //指定交叉编译器为arm-linux-gcc
fl2440 _config : unconfig //2440编译选项格式
@$(MKCONFIG) $(@:_config=) arm arm920t fl2440 samsung s3c24x0
*说明:arm :CPU的架构(ARCH)
arm920t:CPU的类型
fl2440 :对应在board目录下建立新的开发板项目的目录
samsung:新开发板项目目录的上级目录,如直接在board下建立新的开发板项目的目录,则这里就为NULL
s3c24x0:CPU型号
*注意:编译选项格式的第二行要用Tab键开始,否则编译会出错
在boards.cfg中添加fl2440
修改如下:
在主目录下输入:
vi boards.cfg
然后在smdk2410下方添加如下代码:
fl2440 arm arm920t fl2440 samsung s3c24x0
4)测试编译新建的fl2440开发板项目:
make distclean
make fl2440_config
make
如果正常,则会生成uboot.bin