制作方法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

  1. # 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,将与指定内核保持一致。

  1. 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
    ……
  2.  
  3. ### BEGIN /etc/grub.d/10_linux ###
  4. 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' {
  5. load_video
  6. set gfxpayload=keep
  7. insmod gzio
  8. insmod part_gpt
  9. insmod ext2
  10. set root='hd0,gpt2'
  11. if [ x$feature_platform_search_hint = xy ]; then
  12. search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2 7836042c-e679--b426-2552daa17827
  13. else
  14. search --no-floppy --fs-uuid --set=root 7836042c-e679--b426-2552daa17827
  15. fi
  16. linuxefi /boot/vmlinuz-4.19.-.fc29.x86_64 root=UUID=7836042c-e679--b426-2552daa17827 ro amd_iommu=off rhgb quiet loglevel= LANG=zh_CN.UTF-
  17. initrdefi /boot/initramfs-4.19.-.fc29.x86_64.img
  18. }
  19.  
  20. ### END /etc/grub.d/10_linux ###
  21.  
  22. ### BEGIN /etc/grub.d/20_linux_xen ###
  23. 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' {
  24. load_video
  25. set gfxpayload=keep
  26. insmod gzio
  27. insmod part_gpt
  28. insmod ext2
  29. set root='hd0,gpt2'
  30. if [ x$feature_platform_search_hint = xy ]; then
  31. search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2 7836042c-e679--b426-2552daa17827
  32. else
  33. search --no-floppy --fs-uuid --set=root 7836042c-e679-4314-b426-2552daa17827
  34. fi
  35. linuxefi /boot/vmlinuz-4.19.5-300.fc29.x86_64 root=UUID=7836042c-e679-4314-b426-2552daa17827 ro amd_iommu=off rhgb quiet loglevel= LANG=zh_CN.UTF-
  36. initrdefi /home/my_ramfs
  37. }
  38. ### END /etc/grub.d/20_linux_xen ###

保存重启即可测试。

ramfs的两种制作方法的更多相关文章

  1. angular2系列教程(十)两种启动方法、两个路由服务、引用类型和单例模式的妙用

    今天我们要讲的是ng2的路由系统. 例子

  2. git两种合并方法 比较merge和rebase

    18:01 2015/11/18git两种合并方法 比较merge和rebase其实很简单,就是合并后每个commit提交的id记录的顺序而已注意:重要的是如果公司用了grrit,grrit不允许用m ...

  3. 两种Ajax方法

    两种Ajax方法 Ajax是一种用于快速创建动态网页的技术,他通过在后台与服务器进行少量的数据交换,可以实现网页的异步更新,不需要像传统网页那样重新加载页面也可以做到对网页的某部分作出更新,现在这项技 ...

  4. mysql in 的两种使用方法

    简述MySQL 的in 的两种使用方法: 他们各自是在 in keyword后跟一张表(记录集).以及在in后面加上字符串集. 先讲后面跟着一张表的. 首先阐述三张表的结构: s(sno,sname. ...

  5. C#中的两种debug方法

    这篇文章主要介绍了C#中的两种debug方法介绍,本文讲解了代码用 #if DEBUG 包裹.利用宏定义两种方法,需要的朋友可以参考下   第一种:需要把调试方法改成debug代码用 #if DEBU ...

  6. Service的两种启动方法

    刚才看到一个ppt,介绍service的两种启动方法以及两者之间的区别. startService 和 bindService startService被形容为我行我素,而bindService被形容 ...

  7. jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)

    在asp.net webForm开发中,用Jquery ajax调用aspx页面的方法常用的有两种:下面我来简单介绍一下. [WebMethod] public static string SayHe ...

  8. android studio gradle 两种更新方法更新

    android studio gradle 两种更新方法更新 第一种.Android studio更新 第一步:在你所在项目文件夹下:你项目根目录gradlewrappergradle-wrapper ...

  9. iOS学习——UITableViewCell两种重用方法的区别

    今天在开发过程中用到了UITableView,在对cell进行设置的时候,我发现对UITableViewCell的重用设置的方法有如下两种,刚开始我也不太清楚这两种之间有什么区别.直到我在使用方法二进 ...

随机推荐

  1. IIS 负载均衡

    在大型Web应用系统中,由于请求的数据量过大以及并发的因素,导致Web系统会出现宕机的现象,解决这一类问题的方法我个人觉得主要在以下几个方面: 1.IIS 负载均衡. 2.数据库 负载均衡. 3.系统 ...

  2. vscode编辑Markdown时的贴图工具

    参看 https://www.jianshu.com/p/74b960efb697 说明: 1. 文件-->首选项-->设置-->填入paste,设置Path值为 ${current ...

  3. ClientDataSet

    TField对象的SetText和GetText事件处理函数 使用TField对象的SetText和GetText事件处理函数可方便的解决字段的代码与代码所对应值的显示问题 TSimpleDatase ...

  4. Cannot change version of project facet Dynamic Web Module to 2.4问题解决

    问题现象: eclipse中,有个maven web项目,报错:Cannot change version of project facet Dynamic Web Module to 2.4,截图如 ...

  5. Node核心模块

    在Node中,模块主要分两大类:核心模块和文件模块.核心模块部分在 Node 源代码的编译过程中,编译进了二进制执行文件.在 Node 进启动时,部分核心模块就被直接加载进内存中,所以这部分核心模块引 ...

  6. 20175311 2018-2019-2 《Java程序设计》第1周学习总结

    教材学习内容总结 第一周我们主要尝试了怎么安装各种以后可能需要用到的软件,根据老师提供的博客教程进行自主学习安装软件,然后编写一些简单的语言程序. 教材学习中的问题和解决过程 问题1:在学习过程中主要 ...

  7. percona-toolkit(pt-online-schema-change)工具包的安装和使用

    1.下载和安装percona toolkit的包 #yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/ ...

  8. C#将List<T>转化为DataTable

    using System; using System.Collections.Generic; using System.Data; using System.Reflection; using Sy ...

  9. linux 时间和时区设置

    在linux中与时间相关的文件有 /etc/localtime /etc/timezone 其中,/etc/localtime是用来描述本机时间,而 /etc/timezone是用来描述本机所属的时区 ...

  10. css学习2

    1.垂直居中 -父元素高度确定的单行文本: 设置父元素的 height 和 line-height  高度一致来实现的.(height: 该元素的高度:line-height: 行高(行间距),指在文 ...