制作方法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--b426-2552daa17827
else
search --no-floppy --fs-uuid --set=root 7836042c-e679--b426-2552daa17827
fi
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-
initrdefi /boot/initramfs-4.19.-.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--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= LANG=zh_CN.UTF-
initrdefi /home/my_ramfs
}
### 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. 对象克隆(C# 快速高效率复制对象另一种方式 表达式树转)

    1.需求 在代码中经常会遇到需要把对象复制一遍,或者把属性名相同的值复制一遍. 比如: public class Student { public int Id { get; set; } publi ...

  2. Spark程序运行常见错误解决方法以及优化

    转载自:http://bigdata.51cto.com/art/201704/536499.htm Spark程序运行常见错误解决方法以及优化 task倾斜原因比较多,网络io,cpu,mem都有可 ...

  3. kafka的log存储解析——topic的分区partition分段segment以及索引等(转发)

    原文 https://www.cnblogs.com/dorothychai/p/6181058.html 引言 Kafka中的Message是以topic为基本单位组织的,不同的topic之间是相互 ...

  4. Vue 爬坑之路(一)—— 使用 vue-cli 搭建项目

    vue-cli 是一个官方发布 vue.js 项目脚手架,使用 vue-cli 可以快速创建 vue 项目,GitHub地址是:https://github.com/vuejs/vue-cli vue ...

  5. 关于spring boot在IDE工具中可以启动成功,但是打成jar包以及运行jar包失败的问题

    1. 运行jar包报错,如下图: 2. 首先,找到pom.xml,把下面的build块中的内容改成如下所示: 3. 然后,请千万不要用Intellij idea来打包项目为Jar,你应该来到项目的根目 ...

  6. MySQL——navicat 连接 mysql 出现1251Client does not support authentication protocol requested by server的解决方案

    前期修改root密码问题(首次安装的root密码是空,直接Enter就行): cmd用管理员身份进入,然后输入 mysqladmin -u root -p password newpassword 需 ...

  7. PyQt--QTreeWidget

    转载:loster_Li QTreeWidget的继承关系如下图: 因为继承关系是 QAbstractItemView->QTreeView->QTreeWidget  ,所以和QTabl ...

  8. !!代码:baidu地图

    http://map.baidu.com/mobile/  手机开发时,嵌入地图可以嵌入这个网址!! http://developer.baidu.com/map/lbs-cloud.htm 百度地图 ...

  9. 模拟器 Unable to execute simctl install Error 117

    ios 模拟器 Unable to execute '"/usr/bin/xcrun" simctl install  "/Users/tt/PAServer/scrat ...

  10. css实现文本超出部分省略号显示

    一般超出文本显示分为两种:单行超出文本和多行超出文本省略号显示,实现方式使用纯css实现: div { // 单行 white-space: nowrap; overflow: hidden; tex ...