ramfs的兩種制作方法


制作方法1

1  准備
一個已經可以使用的文件系統,假設目錄為/rootfs
Linux內核需要支持ext2文件系統及ramdisk支持(fs相應的選項要勾上)
2 在pc上制作ramdisk鏡像
(1)dd if=/dev/zero of=ramdisk.img bs=1k count=4096
   這制作的鏡像有4MB,可以根據自己的需要修改
(2)mkfs.ext2 -m0 ramdisk.img
將ramdisk.img格式化為ext2格式
(3)mount -o loop ramdisk.img /mnt/ramdisk/
將ramdisk.img掛載到/mnt/ramdisk目錄
(4)cp -a /rootfs /mnt/ramdisk
將自己的文件系統全部拷貝到/mnt/ramdisk目錄去
(5)umount /mnt/ramdisk
卸載ramdisk掛載
此時生成可用的ramdisk.img鏡像
(6)gzip -v9 ramdisk.img
壓縮鏡像,我沒試過加載壓縮的鏡像,應該也可以

3 修改開發板bootargs,添加 initrd=0x31000000,4096000
   0x3100000是ramfs文件系統的加載地址,4096000是大小

 

制作方法2-dracut:

參考信息: https://mirrors.edge.kernel.org/pub/linux/utils/boot/dracut/dracut.html

      https://www.cnblogs.com/hadex/p/5830730.html

      man dracut

  Initramfs/Initrd 用於創建一個系統啟動初期的小型用戶空間,解決復雜啟動流程問題,作為真實rootfs掛載前的過渡。Dracut完整的命令行參數,請查看dracut.cmdline(7)。

二、使用方法


創建一個通用的initramfs image

# dracut [--force] [/PATH/TO/new_image_name] [kernel version]

   -- image默認位置:/boot/initramfs-<kernel version>.img;

   -- force選項用於強行覆蓋已經存在的同名initramfs;可以在cmdline指名新image的路徑和名稱及為哪一個版本的kernel制作image

example: 生成一個基於4.19.5-300.fc29.x86_64內核版本的initramfs, 文件存放地址:/home/my_ramfs

sudo dracut --force /home/my_ramfs 4.19.5-300.fc29.x86_64

 

如果需要生成其他版本內核的initramfs,需要事先安裝好指定版本的內核包。

安裝方法:配置好倉庫地址或者准備好指定版本kernel相關包,sudo dnf install  kernel-制定版本包

 

查看initramfs包含的文件列表及某個文件的內容

lsinitrd [OPTION...] [<image> [<filename> [<filename> [...] ]]]

# sudo lsinitrd initramfs-4.19.5-300.fc29.x86_64.img | less 

# sudo lsinitrd initramfs-4.19.5-300.fc29.x86_64.img -f /etc/ld.so.conf

 

NSDL系統是通過grub2來管理啟動選項,這里可通過grub.cfg修改啟動參數

配置文件位置:/boot/efi/EFI/desktop/grub.cfg, 這里主要修改了紅色標注部分

1 修改啟動選項的顯示超時時間為10s,便於啟動時啟動修改的啟動入口(默認啟動入口為/etc/grub.d/10_linux)

2 拷貝啟動入口/etc/grub.d/10_linux內容到/etc/grub.d/20_linux_xen,並修改紅色標注部分

note:

如果是其他版本內核,需要修改綠色字段內容,如是上面的4.8.6內涵,須將綠色字段修改為vmlinuz-4.8.6-201.fc21.x86_64,將與指定內核保持一致。

terminal_output console
if [ x$feature_timeout_style = xy ] ; then
  set timeout_style=menu
  set timeout=10
# Fallback normal timeout code in case the timeout_style feature is
# unavailable.
else
  set timeout=10
fi
……

### BEGIN /etc/grub.d/10_linux ### menuentry 'NewStart Desktop Linux' --class newstart --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-4.19.5-300.fc29.x86_64-advanced-7836042c-e679-4314-b426-2552daa17827' { load_video set gfxpayload=keep insmod gzio insmod part_gpt insmod ext2 set root='hd0,gpt2' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2 7836042c-e679-4314-b426-2552daa17827 else search --no-floppy --fs-uuid --set=root 7836042c-e679-4314-b426-2552daa17827 fi linuxefi /boot/vmlinuz-4.19.5-300.fc29.x86_64 root=UUID=7836042c-e679-4314-b426-2552daa17827 ro amd_iommu=off rhgb quiet loglevel=0 LANG=zh_CN.UTF-8 initrdefi /boot/initramfs-4.19.5-300.fc29.x86_64.img } ### END /etc/grub.d/10_linux ### ### BEGIN /etc/grub.d/20_linux_xen ### menuentry 'NSDL-myramfs' --class newstart --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-4.19.5-300.fc29.x86_64-advanced-7836042c-e679-4314-b426-2552daa17827' { load_video set gfxpayload=keep insmod gzio insmod part_gpt insmod ext2 set root='hd0,gpt2' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2 7836042c-e679-4314-b426-2552daa17827 else search --no-floppy --fs-uuid --set=root 7836042c-e679-4314-b426-2552daa17827 fi linuxefi /boot/vmlinuz-4.19.5-300.fc29.x86_64 root=UUID=7836042c-e679-4314-b426-2552daa17827 ro amd_iommu=off rhgb quiet loglevel=0 LANG=zh_CN.UTF-8 initrdefi /home/my_ramfs } ### END /etc/grub.d/20_linux_xen ###

保存重啟即可測試。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM