驱动开发环境搭建-uboot,kernel,rootfs

来源:互联网 发布:儿童学编程用什么教材 编辑:程序博客网 时间:2024/06/04 18:32

道理都懂,移植这三个不就是下载,擦除,写入,再改下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:uImagenand erase 0x580000 0x400000 nand write 0x30000000 0x580000 0x400000setenv 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,我没弄出来,显示的还是上面的错误...还不知道错哪

1 0
原创粉丝点击