道理都懂,移植这三个不就是下载,擦除,写入,再改下bootargs,bootcmd,重启就行了。
但是真正做起来的时候,中间出现各种问题,解决也花了很多时间,现在把错过的都记录下来,防止再错。
本篇使用的开发板为:友善之臂 MINI2451,芯片为S3C2451; 采用的烧录工具为:minitool
u-boot,uImage,rootfs都是现成的,这里只是讲如何把这三个放到开发板中能让它跑起来
1.先是u-boot:
动开发板上的u-boot是最烦的,弄错了开发板就开不起来了,因为u-boot也管部分硬件的初始化(例如串口初始化),如果u-boot没烧对地方那么开发板是没法正常启动的,如果是在改flash上的u-boot导致开发板开不起来的话,那就尝试用卡刷,找一张sd卡,烧入u-boot,再放到开发板中采用sd卡启动方式。
启动后用usb连接minitool再次向flash中刷u-boot。
2.uImage:
uImage我的烧录方式有两种:
用tftp在线从虚拟机上下载:
setenv bootcmd tftp 0x30000000 192.168.1.114:uImage\;bootm;saveenv
或者是将uImage固化到flash中:
tftp 0x30000000 192.168.1.114:uImage
nand erase 0x580000 0x400000
nand write 0x30000000 0x580000 0x400000
setenv bootcmd nand read 30000000 580000 500000\;bootm;saveenv
(注意:此处的uImage烧写的位置是0x580000,此处分区是有要求的
Flash分区:
0----0xc0000 uboot
0xc0000-0x580000 env
0x580000 -0xa80000 kernel
0xa80000 - rootfs
读的位置应该是在u-boot中设置好了的,除非自己再去修改,否则按照这个分区存放uImage和rootfs才不会出错。)
3.rootfs:
我在根文件系统上卡了很久,一直会出现这个问题:
后来发现是自己的nfs中的配置中的路径和实际在开发板中挂载的nfs路径不一样,才导致的。
修改:
vim /etc/exports 中将地址改为开发板中挂载的rootfs地址路径
原先设置错的路径为:/mini2440/nfsroot/rootfs
改完后要重启设置:/etc/init.d/nfs restart
用的也是在线的方式,采用nfs挂载在linux系统上:
setenv bootargs root=/dev/nfs nfsroot=192.168.1.114:/tftphome/rootfs ip=192.168.1.20:192.168.1.114:192.168.1.1:255.255.255.0::eth0:off console=ttySAC0,115200 init=/linuxrc lcd=P43
(在这条命令中,192.168.1.114是linux虚拟机上的地址,192.168.1.20是开发板上的ipaddr地址,其他的只要默认保持在同一网段就行,一般不用改)
(还有/tftphome/rootfs是我的虚拟机上rootfs文件的地址路径)
另外一种是固化到flash:
(1)用工具将rootfs 目录做成镜像
mkcramfs /tftphome/rootfs rootfs.cramfs
(2)将rootfs.cramfs拷贝到/tftphome目录下
cp rootfs.cramfs /tftphome
(3)将rootfs.cramfs烧写到flash的第三个分区上
u-boot下执行如下命令
# tftp 0x30000000 192.168.1.114:rootfs.cramfs
# nand erase a80000 500000
# nand write 30000000 a800000 500000
(4)重新设置u-boot启动参数(分别将内核和文件系统都固化到开发板上)
# setenv bootargs root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200 ;saveenv
(注意:有时候遇到erase擦除失败或者write写不进去的时候 fail-5,是在那片区域产生了坏块,erase遇到会直接跳过去,
然后当write写入时就会错误fail-5,解决方式是直接将那片区域格式化:scrub 0xa80000 500000)
其实在最后那边固化rootfs,我没弄出来,显示的还是上面的错误...还不知道错哪