Linux文件系统——ramdisk根文件系统制作

Linux文件系统——ramdisk根文件系统制作ramdisk 介绍 ramdisk 顾名思义 内存磁盘

大家好,欢迎来到IT知识分享网。

ram disk介绍

ramdisk文件系统介绍

  介绍ramdisk文件系统前,先来看一下一般linux文件系统,这里以我的ubuntu16.04虚拟机为例:

root@ubuntu:~# mount ...... /dev/sda1 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered) ...... 
[root@linux:/root]# mount /dev/root on / type ext2 (rw,relatime,block_validity,barrier,user_xattr,acl,errors=remount-ro) ...... [root@linux:/root]# readlink /dev/root ram0 

ramdisk文件系统制作

一、配置内核支持ramdisk。

  执行make menuconfig,进入内核配置界面。

General setup ---> [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support 

  这里的意思是配置内核初始化时,去寻找initramfs和initrd,initrd就是我们的ramdisk文件系统,至于initramfs,后面有机会再介绍。

Device Drivers ---> <*> RAM block device support (1) Default number of RAM disks (65536) Default RAM disk size (kbytes) 
File systems ---> <*> Second extended fs support [*] Ext2 extended attributes [*] Ext2 POSIX Access Control Lists [*] Ext2 Security Labels 

二、根文件系统的制作

(1)建立目录

创建根文件系统一些基本目录

# mkdir ramdiskfs # cd ramdiskfs/ # mkdir mnt tmp var usr sys proc etc lib dev bin sbin root home # mkdir usr/lib lib/modules 

创建部分设备节点

# sudo mknod -m 666 console c 5 1 //创建控制台设备文件 # sudo mknod -m 666 null c 1 3 //创建一个空的设备文件 
ramdiskfs# cp ../busybox-1.31.1/examples/bootfloppy/etc/ etc/ -rf 

(2)busybox编译

# tar -xjf busybox-1.31.1.tar.bz2  # cd busybox-1.31.1/ 

  配置busybox,这里我们用默认配置就好,执行

# make menuconfig 

  配置如下项:

Settings ---> (../ramdiskfs) Destination path for 'make install' (arm-linux-gnueabi-) Cross compiler prefix --- Build Options [*] Build static binary (no shared libs) 

  编译busybox

# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j8 //上面制定了编译工具链这里就可以直接make —j8, //我电脑是四核的所以-j8就行了,如果是8核就可以-j16加快编译速度,以此类推 # make install //安装编译完的可执行文件等 

  make install完成后,进到我们的ramdiskfs目录,可以看到根目录下linuxrc可执行文件,依次查看bin/ sbin/ usr/bin usr/sbin可以看到很多可执行命令。ls -l查看,可以看到所有可执行文件都是链接到bin/busybox上的。

(3)制作ramdisk根文件系统镜像、

  安装genext2fs工具

# apt-get install genext2fs 

  cd到要制作的ramdiskfs的上一级目录

# genext2fs -b 4096 -d ramdsikfs ramdisk (1) # gzip –v9 ./ramdisk (2) 

(4)配置启动参数加载ramdisk

方法一:配置内核启动参数command line
# make menuconfig Boot options ---> () Default kernel command string 

配置为console=ttyS0, root=/dev/ram0 rw init=/linuxrc initrd=0x 0x
最终在.config文件中体现为:COMFIG_CMDLINE=console=ttyS0, root=/dev/ram0 rw init=/linuxrc initrd=0x 0x
(2)uboot中配置bootargs
uboot下执行如下命令:
# setenv bootargs 'console=ttyS0, root=/dev/ram0 rw init=/linuxrc initrd=0x,0x'
# saveenv




方法二:bootm加载ramdisk.gz

  uboot在执行bootm命令加载uImage时,会对uImage 64字节数据头进行解析,进行校验。bootm加载uImage打印如下:

 Booting kernel from Legacy Image at  ... Image Name: Linux-4.14.111 Image Type: ARM Linux Kernel Image (uncompressed) Data Size:  Bytes = 5.6 MiB Load Address:  Entry Point:  Verifying Checksum ... OK 
 Loading init Ramdisk from Legacy Image at  ... Image Name: Image Type: ARM Linux RAMDisk Image (gzip compressed) Data Size:  Bytes = 2.1 MiB Load Address: 00000000 Entry Point: 00000000 Verifying Checksum ... OK 

(5)测试ramdisk.gz

  这里我使用上述第二种方式bootm传递,uboot设置环境变量

bootargs=console=ttyS0, root=/dev/ram0 rw init=/linuxrc tftp 0x uImage;tftp 0x ramdisk_1.gz;tftp 0x demo.dtb; 

  最终启动效果如下

Processing /etc/profile... Done / # / # 

  注意看一下内核找ramdisk的打印:

[ 2.] RAMDISK: gzip image found at block 0 [ 2.] EXT4-fs (ram0): mounting ext2 file system using the ext4 subsystem [ 2.] EXT4-fs warning (device ram0): ext4_update_dynamic_rev:795: updating to rev 1 because of new feature flag, running e2fsck is recommended [ 3.000863] EXT4-fs (ram0): mounted filesystem without journal. Opts: (null) [ 3.008109] VFS: Mounted root (ext2 filesystem) on device 1:0. 

  至此,一个最简单的ramdisk文件系统制作完成。有空细讲一下具体进一步的/etc下配置,如何设置用户密码,磁盘挂载等。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/130308.html

(0)
上一篇 2025-08-18 11:26
下一篇 2025-08-18 11:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信