at91rm9200的2.4.19内核2.6.20内核及u-boot1.1.6的运行
张驿风
2007年9月7日
已近3年没有使用at91rm9200了,由于工作的需要,现在必须在at91rm9200ek上把linux2.4.19和linux2.6.20跑起来。
于是找到u-boot-1.1.4,u-boot-1.1.6 ,linux2.4.19,linux2.6.20,cross-2.95.3.tar.bz2(for arm) eldk4.0(gcc4.0) 一切准备得当后,开始工作。
一:linux2.4.17
1.首先解压2.4.19 ,配置为at91rm9200ek,然后使用2.95.3编译得到zImage.
2. 使用atmel提供的u-boot-1.0 加载zImage 到0x20008000.
3. go 0x20008000 shell在提示运行内核后就不在有显示输出了,但是发现网口灯有开始闪烁的痕迹。
4. 配置启动命令行参数如下:
setenv bootargs root=/dev/nfs rw console=ttyS0,115200 mem=32M
nfsroot=192.168.2.202:/home/target920t
ip=192.168.2.40:192.168.2.202:192.168.2.1:255.255.255.0::eth0:off
重新加载运行内核,shell依然没有显示输出,但是可以ping到192.168.2.40说明内核已经跑起来了。
5.重新检查内核代码,发现2。4的命令行空着于是把在u-boot下设置的上面的参数拷贝到内核配置里
重新编译启动发现shell有输出了。
二u-boot1.1.6
1. linux2.4.19跑起来后,想试着把2.6.20也跑起来。
2. 配置linux2.6.20目标板是at91rm9200ek
3. make uImage 编译出uImage
4. 使用u-boot加载uImage并运行,内核提示cpu 机器号不对,应该是u-boot传递的r1的数据有问题。信
息如下:
Uncompressing Linux.................................................................. done, booting the kernel.
Error: unrecognized/unsupported machine ID (r1 = 0x00000106).
Available machine support: ID (hex) NAME 000002c1 Atmel AT91RM9200-EK
Please check your kernel config and/or bootloader.
5.看来只有先做好u-boot1.1.6了,因为老u-boot 9200的机器id传递的有误,配置u-boot1.1.6目标板是
at91rm9200ek, 修改config.mk里的text_base=0x21000000 ,编译u-boot.1.1.6的到u-boot.bin
使用atmel提供的u-boot1.0加载u-boot1.1.6到9x21000000 运行没有任何反应。
6.查找问题发祥configs/at91rm9200ek.h里没有定义:
#define CONFIG_SKIP_LOWLEVEL_INIT 1
造成重新初始化系统硬件(boot.bin已经初始化好了).
加入这个定义重新编译发现u-boot.1.1.6 OK啦。
7. 使用u-boot.1.1.6加载linux.2.6.20的uImage 引导成功。
到此为止linux2.4.19,linux2.6.20,u-boot-1.1.6都在at91rm9200ek上成功跑起来。除去上面的步骤还有
一些具体的操作 方法总结如下:
1. 跳线9200ek板的bms引线从内部bootrom启动,上电。
2. 配置超级终端为115200 8,n,1
3. 看到"C"后使用xmodem方式发送loader.bin
4. loader.bin发送完毕后接着发送u-boot.bin
5. u-boot.bin发送完毕后直接运行,这时可以使用loadb 0x20000000 boot.bin并拷贝到0x10000000
flash地址空间,boot.bin就是从外启动的第一级bootloader,它会初始化芯片和硬件,然后从
0x10010000 出加载u-boot.gz到0x21f00000出运行。
6. 拷贝完boot.bin要把u-boot.gz 拷贝到0x10010000 处。
7. gzip -c u-boot.bin > u-boot.gz 压缩u-boot.bin