[Linux驱动开发] cramfs文件系统制作及移植

时间:2020-12-24 16:34:10

制作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 修改内核

             [Linux驱动开发] cramfs文件系统制作及移植

根据“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

[Linux驱动开发] cramfs文件系统制作及移植

NFS测试好的文件系统rootfs通过上述命令制作成为只读的cramfs文件系统

rootfs.cramfs.将其下载到flash的第一块分区上(注意这个根据你自己的分区来指定)

U-BOOT的终端:
    3.1 烧录内核
    OpenJTAG> tftp 30800000 uImage          (/tftpbootuImage拷贝到虚拟内存的0x30800000位置)

    [Linux驱动开发] cramfs文件系统制作及移植

    OpenJTAG> nand erase 60000 200000        (Nand Flash0x60000处擦出一块200000(2MB)大小的空间)

    [Linux驱动开发] cramfs文件系统制作及移植

    OpenJTAG> nand write 30800000 60000 200000  (从虚拟内存的0x30800000读取200000大小文件内容到Nand Flash0x60000)

    [Linux驱动开发] cramfs文件系统制作及移植
    OpenJTAG> setenv bootcmd nand read 30800000 60000 200000 \;bootm 30800000    (设置环境参数,u_bootNand Flash0x60000处读取200000大小的文件内容到内存的0x30800000,并且系统从内存的0x3080000处启动)

    [Linux驱动开发] cramfs文件系统制作及移植

    3.2 烧录CRAMFS

    OpenJTAG> tftp 30800000 rootfs.cramfs    (/tftpbootrootfs.cramfs拷贝到内存0x30800000)

    OpenJTAG> nand erase 260000 800000     (同上,在Nand Flash0x260000处擦出800000(8MB)大小空间)

    [Linux驱动开发] cramfs文件系统制作及移植

    OpenJTAG> nand write 30800000 260000 800000    (将内存中0x30800000处的rootfs.cramfs写到Nand Flash0x260000处)

    这样制作好的cramfs文件系统就放置在flash的第一块分区,然后指定启动参数:

    OpenJTAG> setenv bootargs console=ttySAC0,115200 root=1f02 init=/linuxrc    (设置环境参数,此处的1f02对应我们前面设置Nand Flash分区中的rootfs分区)

    OpenJTAG> save

    OpenJTAG> boot

    [Linux驱动开发] cramfs文件系统制作及移植


    至此cramfs的文件系统挂载成功

    [Linux驱动开发] cramfs文件系统制作及移植

    cramfs文件系统的特性是启动快防止误操作,且只读

    在这里我们进行任何改变文件系统的事情是不能够执行的,比如:mkdir terry,得到如下结果:

  [Linux驱动开发] cramfs文件系统制作及移植