大家好,欢迎来到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