制作cramfs文件系统
此处将上一篇博文制作的first_fs文件系统拷贝到/opt中,并更改名称为rootfs
我们要做的是将rootfs文件系统制作成cramfs类型的文件系统,并将其烧录到Nand Flash中
1、准备事项:
添加内核菜单选项:
make menuconfig
General setup ---> (设置通用设置)
[*] Configure standard kernel features (for small systems) --->
Choose SLAB allocator (SLAB) --->
File systems --->
<*> Kernel automounter support (支持内核自动挂载)
Miscellaneous filesystems --->
<*> Journalling Flash File System v2 (JFFS2) support (JFFS2支持)
(0) JFFS2 debugging verbosity (0 = quiet, 2 = noisy)
[*] JFFS2 write-buffering support
<*> Compressed ROM file system support (cramfs) (cramfs支持)
Pseudo filesystems --->
[*] /proc file system support (procfs支持)
[*] Sysctl support (/proc/sys)
[*] sysfs file system support (sysfs支持)
[*] Virtual memory file system support (former shm fs) (tmpfs支持)
Networking --->
[*] Networking support
Networking options --->
[*] TCP/IP networking
[ ] IP: BOOTP support (去掉这个需选项)
File systems --->
Network File Systems --->
< > NFS file system support (不支持NFS)
[ ] Root file system on NFS (根文件不保存为NFS格式)
2 修改内核
根据“nand flash的布局图”,修改内核nandflash分区请修改内核源代码的arch/arm/ plat-s3c24xx/common-smdk.c
static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
.name = "uboot",
.size = 0x60000,
.offset = 0,
},
[1] = {
.name = "kernel",
.offset = 0x60000,
.size = 0x200000,
},
[2] = {
.name = "rootfs",
.offset = 0x260000,
.size = 0x800000,
}
};
重新编译内核make uImage,并将其拷贝到/tftpboot中
3 制作cramfs文件系统和部署
由于系统提供制作cramfs文件系统的工具,则可以利用。具体操作如下;
terry@terry-virtual-machine:/opt$ mkfs.cramfs rootfs rootfs.cramfs
将NFS测试好的文件系统rootfs通过上述命令制作成为只读的cramfs文件系统
rootfs.cramfs.将其下载到flash的第一块分区上(注意这个根据你自己的分区来指定)
在U-BOOT的终端:
3.1 烧录内核
OpenJTAG> tftp 30800000 uImage (从/tftpboot将uImage拷贝到虚拟内存的0x30800000位置)
OpenJTAG> nand erase 60000 200000 (在Nand Flash的0x60000处擦出一块200000(2MB)大小的空间)
OpenJTAG> nand write 30800000 60000 200000 (从虚拟内存的0x30800000读取200000大小文件内容到Nand Flash的0x60000)
OpenJTAG> setenv bootcmd nand read 30800000 60000 200000 \;bootm 30800000 (设置环境参数,u_boot从Nand Flash的0x60000处读取200000大小的文件内容到内存的0x30800000,并且系统从内存的0x3080000处启动)
3.2 烧录CRAMFS
OpenJTAG> tftp 30800000 rootfs.cramfs (从/tftpboot将rootfs.cramfs拷贝到内存0x30800000中)
OpenJTAG> nand erase 260000 800000 (同上,在Nand Flash的0x260000处擦出800000(8MB)大小空间)
OpenJTAG> nand write 30800000 260000 800000 (将内存中0x30800000处的rootfs.cramfs写到Nand Flash的0x260000处)
这样制作好的cramfs文件系统就放置在flash的第一块分区,然后指定启动参数:
OpenJTAG> setenv bootargs console=ttySAC0,115200 root=1f02 init=/linuxrc (设置环境参数,此处的1f02对应我们前面设置Nand Flash分区中的rootfs分区)
OpenJTAG> save
OpenJTAG> boot
至此cramfs的文件系统挂载成功
cramfs文件系统的特性是启动快防止误操作,且只读
在这里我们进行任何改变文件系统的事情是不能够执行的,比如:mkdir terry,得到如下结果: