当前位置:网站首页>ramdisk实践1:将根文件系统集成到内核中

ramdisk实践1:将根文件系统集成到内核中

2022-08-11 05:32:00 千册

https://ke.qq.com/course/4032547?flowToken=1042705

前言

ramdisk的概念就不写了,其他地方多的很。直接上干货,

本来是想做一个独立的ramdisk,然后把根文件系统放进去,结果做了很多实验,没有验证成功,反倒把集成到内核的根文件系统测出来了,独立的,等测好了,放到下一篇文章里吧

先放个Makefile文件出来嗮嗮。

all:
    @echo "create ramdisk"
    sudo rm ramdisk.img -f
    sudo dd if=/dev/zero of=ramdisk.img bs=1024 count=65536
    sudo mke2fs -F -m0 ramdisk.img
    sudo mount -t ext2 ramdisk.img /home/lkmao/imx/linux/ramdisk/loop
    sudo cp /home/lkmao/nfsroot/buildrootfs/* /home/lkmao/imx/linux/ramdisk/loop/ -afR
    sudo umount /home/lkmao/imx/linux/ramdisk/loop
ram:
    @echo "make ram"
    dd if=/dev/zero of=ram2 bs=1k count=4096
    sudo mke2fs -F -m0 ramdisk.img
    sudo mount -t ext2 ram2 /home/lkmao/imx/linux/ramdisk/loop
    sudo cp /home/lkmao/imx/linux/ramdisk/rootfs/* /home/lkmao/imx/linux/ramdisk/loop/ -afR
    sudo umount /home/lkmao/imx/linux/ramdisk/loop
    cp ram2 /home/lkmao/tftproot/ram
mount:
    @echo "mount ramdisk"
    sudo mount -t ext2 ramdisk.img /home/lkmao/imx/linux/ramdisk/loop
umount:
    @echo "umount ramdisk"
    sudo umount /home/lkmao/imx/linux/ramdisk/loop
cp:
    @echo "cp ramdisk to ram"
    cp ramdisk.img /home/lkmao/tftproot/ram

.PHONY:clean
clean:
    @echo "del ramdisk.img"
    sudo rm ramdisk.img -f

下面开始介绍如何将文件系统集成到内核中

一 在内核中配置文件系统路径

 首先,在配置路径General setup下,找到上图所示的地方,配置根文件系统的绝对路径,我这个根文件系统是使用buildrootfs创建的。就别用busybox了,真的很麻烦。

 其次,要强调的是,这个文件系统不要太大,要不然编译出来的内核就很大啦,我这个内核编译出的内核会很大的。

二 配置uboot启动参数

ramdisk能不能启动就看这里了。

setenv bootcmd 'tftp 80800000 zImage;tftp 86000000 emmc.dtb;bootz 80800000 - 86000000;'
setenv bootargs 'console=ttymxc0,115200  root=/dev/ram0 rootfstype=ramfs rdinit=/linuxrc rootwait rw'

不同的芯片的启动参数肯定是不同的这里的关键在于rdinit=/linuxrc,因为我早期就是卡在这里。

rdinit=/linuxrc
[email protected]:~/tftproot$ ls -lsh zImage
26M -rwxrwxr-x 1 lkmao lkmao 26M 8月  10 15:00 zImage

三 启动测试

怎么证明我这个文件系统确实是跑在内存中呢?

只要愿意想,还真有找到了。

第一证明,这个是uboot传进来的启动命令

/proc/cmdline文件,这个是不能作假的,算一个

结论:OK

第二个证明,创建个文件,重启后验证它是否还在

写一个文件,重启后,这个文件不见了,这个吗,只能说明这个目录是掉电丢失数据的,临时目录也有这个效果。

结论:不行

第三个证明 在根目录执行 rm -rf *

这个够狠吧

连基本的ls命令都不见了。

好的,重启 

好吧,reboot也删掉了,重新上电

 启动

 结论:不够切中要害

第四个证明 使用df命令参看当前分区的挂载情况

能够证明的理由,这里没有挂载外部设备的记录

# df -h
Filesystem                Size      Used Available Use% Mounted on
tmpfs                   247.8M         0    247.8M   0% /dev/shm
tmpfs                   247.8M     28.0K    247.7M   0% /tmp
tmpfs                   247.8M     16.0K    247.7M   0% /run

结论:需要对比

第五个证明 想不到了。。。

四 挂载磁盘

系统不可能不存储数据,还是还是要挂载磁盘


# mount -t ext4 /dev/mmcblk1p2 /mmcblk1p2/

这个不同的板子,的块设备的名字是不一样的,

然后df -h


# df -h
Filesystem                Size      Used Available Use% Mounted on
tmpfs                   247.8M         0    247.8M   0% /dev/shm
tmpfs                   247.8M     28.0K    247.7M   0% /tmp
tmpfs                   247.8M     16.0K    247.7M   0% /run
/dev/mmcblk1p2            6.9G    155.8M      6.4G   2% /mmcblk1p2

从结果可知,挂载成功了。

五  /dev/ram0设备的测试

看看它的真身


# ls /dev/ram0 -ls
     0 brw-rw----    1 root     root        1,   0 Jan  1 01:14 /dev/ram0

它是一个块设备,所以它可以被格式化,可以被挂载,可以存储数据,从名字就可以知道,它是内存盘。

下面是我对它的配置,红框里的就是。

 

格式化

# mk
mkdir     mkdosfs   mke2fs    mkfifo    mknod     mkpasswd  mkswap    mktemp
# mke2fs /dev/ram0
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
16384 inodes, 65536 blocks
3276 blocks (5%) reserved for the super user
First data block=1
Maximum filesystem blocks=262144
8 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
        8193, 24577, 40961, 57345
#

挂载

# mount -t ext2 /dev/ram0 /ram_disk/

如何验证呢,要lost+found 有这个目录就说明挂载成功了。如下所示,挂载成功

# cd ram_disk/
# ls
lost+found

# echo "hello lkmao" > hello
# ls
hello       lost+found
# cat hello
hello lkmao

执行df -h

# df -h
Filesystem                Size      Used Available Use% Mounted on
tmpfs                   247.8M         0    247.8M   0% /dev/shm
tmpfs                   247.8M     28.0K    247.7M   0% /tmp
tmpfs                   247.8M     16.0K    247.7M   0% /run
/dev/mmcblk1p2            6.9G    155.8M      6.4G   2% /mmcblk1p2
/dev/ram0                62.0M     14.0K     58.8M   0% /ram_disk

这几天df命令用的很多啊。

卸载

如果当前所在目录是挂载点,umout是不会成功的,所以要先退出该目录再umount。

# umount /ram_disk/
umount: can't unmount /ram_disk: Device or resource busy
# pwd
/ram_disk
# cd ..
# umount ram_disk/

再次使用df -h验证

# df -h
Filesystem                Size      Used Available Use% Mounted on
tmpfs                   247.8M         0    247.8M   0% /dev/shm
tmpfs                   247.8M     28.0K    247.7M   0% /tmp
tmpfs                   247.8M     16.0K    247.7M   0% /run
/dev/mmcblk1p2            6.9G    155.8M      6.4G   2% /mmcblk1p2

再挂载

# mount -t ext2 /dev/ram0 /ram_disk/

# cd ram_disk/
# cat hello
hello lkmao

这个说明,/dev/ram0中的数据不会因为umount以后,数据就在重启之前都是还在的,这能说明什么呢,说明这个区,在/dev/ram0被格式化了以后,它所在的内存区是受到系统保护的。所以可以放心使用。无论有没有mount,它都在那里,

所以 , /dev/ram0到底是拿来干嘛的呢?

结论

        继续写ramdisk实践2。

原网站

版权声明
本文为[千册]所创,转载请带上原文链接,感谢
https://blog.csdn.net/yueni_zhao/article/details/126266957