本文只是介绍不同文件系统环境变量的设置,以及制作不同映像的命令和烧写过程
引导cramfs的linux_cmd_line
#define CONFIG_BOOTARGS "noinitrd console=ttySAC0,115200 init=/linuxrc root=/dev/mtdblock3 rootfstype=cramfs mem=32M"“
引导nfs的linux_cmd_line
#define CONFIG_BOOTARGS "noinitrd root=/dev/nfs rw nfsroot=211.87.227.75:/nfsshare/fsv2.0 ip=211.87.227.35:211.87.227.75:211.87.227.1:255.255.255.0 console=ttySAC0,115200"
引导yaffs的linux_cmd_line
#define CONFIG_BOOTARGS "noinitrd console=ttySAC0,115200 init=/linuxrc root=/dev/mtdblock3 rootfstype=yaffs mem=32M"”
在uboot中设置了启动参数,并烧写到Flash上之后,内核的启动时,就会忽略自己设置的启动参数,用Flash保存的环境变量中的
启动参数
cramfs 文件系统
制作映像
./mkcramfs fs fs.img
下载到内存RAM
nfs 0x30008000 211.87.227.75:/nfsshare/fs.img
烧写到Nand Flash
nand erase 0x2b0000 0x700000
nand write 0x30008000 0x2b0000 0x****
0x**** 是块大小的整数倍,写个大数就行了……
注意:
擦除的起始地址是你存放根文件系统映像的分区的起始地址,我的 root=/dev/mtdblock3,在
第四个分区,
我的分区如下:
Creating 4 MTD partitions on "NAND 32MiB 3,3V 8-bit":
0x000000000000-0x000000080000 : "BootLoader"
0x000000080000-0x0000000b0000 : "params"
0x0000000b0000-0x0000002b0000 : "kernel"
0x0000002b0000-0x0000012b0000 : "rootFS"
把内核 kernel 下载到RAM,就可以启动了
nfs 文件系统
不用制作映像,把做好的文件系统(你的文件夹,比如我的是 fsv2.0),放到nfs 的目录即可
设置好启动参数
把内核 kernel 下载到RAM,就可以启动了
yaffs 文件系统
./mkyaffsimage fsv2.0 fsv2.0.yaffs
注意:fsv2.0.yaffs 的后缀名没有什么约束,这里只是便于记得是 yaffs 的映像,完全可以取名为
fsv2.0.img
2.
烧写根文件系统映像,将
启动 uboot,进入命令行,输入如下命令,fsv2.0.yaffs 放到 nfs 目录,
我的电脑 IP 为 211.87.227.75,nfs 目录是 /nfsshare
nfs 0x30008000 211.87.227.75:/nfsshare/fsv2.0.yaffs
nand erase 0x2b0000 0x700000
nand write.yaffs 0x30008000 0x2b0000 0x****
注意:
擦除的起始地址是你存放根文件系统映像的分区的起始地址,我的 root=/dev/mtdblock3,在
第四个分区,
我的分区如下:
Creating 4 MTD partitions on "NAND 32MiB 3,3V 8-bit":
0x000000000000-0x000000080000 : "BootLoader"
0x000000080000-0x0000000b0000 : "params"
0x0000000b0000-0x0000002b0000 : "kernel"
0x0000002b0000-0x0000012b0000 : "rootFS"
uboot 需要支持 yaffs 的烧写,这个可以看另一篇文章,关于 uboot 的修改
nand write.yaffs 0x30008000 0x2b0000 0x**** 中,最后一个参数是映像的实际大小,
当下载完成的时候会告诉你 Bytes transferred = 10858320 (a5af50 hex),如下
Load address: 0x30008000
Loading: #################################################################
....................................
#################################################################
#########################################
done
Bytes transferred = 10858320 (a5af50 hex),此处 a5af50 即为映像大小的 16 进制表示
所以,此处命令为 nand write.yaffs 0x30008000 0x2b0000 0xa5af50