S5pv210烧写本地文件系统到NANDflash
1.Uboot状态下根文件系统分区擦除:
nand erase 0xE00000 0xF200000
nandflash分为6个区(在内核的drivers/mtd/nand/s3c_nand.c中已经设定好了),其中第0块分区为空,第1块分区为768kmisc forbootloader.即bootloader的参数区。第3块分区为5M的kernel,地址是:0x600000-0xB00000。第4块分区为system分区共242M,地址为0xE00000-0xF200000。上面就是为烧写文件系统做准备,擦写NANDflash最后242M。
2.Uboot状态下擦除Uboot的参数区(头768K):
nand erase 0x0 0xC0000
3.设置开发板自启动命令(bootcmd环境变量):
setenv bootcmd nand read 0x20008000 0x600000 0x500000\;bootm 0x20008000
开发板上电后,从nand中把内核读取到SDRAM的0x20008000处执行,由于内核为uImage,前面还有64k的头,故内核真正的起始位置在0x20008040处。
4.下面的操作是内核加载网络文件系统之后在开发板的shell中操作的。
制作本地yaffs文件系统:
flash_eraseall /dev/mtd4
擦除第四块分区,即system分区,制作文件系统。
mount -t yaffs /dev/mtdblock4 /mnt
把yaffs文件系统类型的/dev/mtdblock4挂载到/mnt上,此时操作mnt就是操作将来的文件系统。
cp -a bin/ sbin/ dev/ etc/ lib/ opt/ srv/ usr/ linuxrc/ /mnt
mkdir -p /mnt/mnt /mnt/sys /mnt/proc /mnt/tmp /mnt/var/run
把文件系统中必要的文件拷贝进mnt里,也就是把现在网络文件系统中的必要文件拷贝进将来的本地文件系统中,bin,sbin,dev,etc,lib,opt,srv,usr,linuxrc都是启动文件系统必须的。而mnt,sys,proc,tmp,var/run都不是必须的,只是再执行过程中才添加内容的,故此处只是添加一个目录即可。
umount /mnt
5.重启开发板
6.进入u-boot状态,设置开发板启动参数setenv bootargs root=/dev/mtdblock4 console=ttySAC0,115200 init=/linuxrclcd=H43
saveenv
reset重启开发板(不要网线也可以启动)
注意:
1.必须要用网络文件系统制作本地文件系统,故需要有网线。
2.注意在网络文件系统的bin目录下是否有flash_eraseall可执行程序,否则在执行flash_eraseall /dev/mtd4 时找不到命令,可以把flash_eraseall拷贝进bin目录下。
3.启动本地文件系统之后可以命令:cat/proc/mtd查看nand的分区是否是一样的大小。