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--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的两种制作方法的更多相关文章
- angular2系列教程(十)两种启动方法、两个路由服务、引用类型和单例模式的妙用
今天我们要讲的是ng2的路由系统. 例子
- git两种合并方法 比较merge和rebase
18:01 2015/11/18git两种合并方法 比较merge和rebase其实很简单,就是合并后每个commit提交的id记录的顺序而已注意:重要的是如果公司用了grrit,grrit不允许用m ...
- 两种Ajax方法
两种Ajax方法 Ajax是一种用于快速创建动态网页的技术,他通过在后台与服务器进行少量的数据交换,可以实现网页的异步更新,不需要像传统网页那样重新加载页面也可以做到对网页的某部分作出更新,现在这项技 ...
- mysql in 的两种使用方法
简述MySQL 的in 的两种使用方法: 他们各自是在 in keyword后跟一张表(记录集).以及在in后面加上字符串集. 先讲后面跟着一张表的. 首先阐述三张表的结构: s(sno,sname. ...
- C#中的两种debug方法
这篇文章主要介绍了C#中的两种debug方法介绍,本文讲解了代码用 #if DEBUG 包裹.利用宏定义两种方法,需要的朋友可以参考下 第一种:需要把调试方法改成debug代码用 #if DEBU ...
- Service的两种启动方法
刚才看到一个ppt,介绍service的两种启动方法以及两者之间的区别. startService 和 bindService startService被形容为我行我素,而bindService被形容 ...
- jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
在asp.net webForm开发中,用Jquery ajax调用aspx页面的方法常用的有两种:下面我来简单介绍一下. [WebMethod] public static string SayHe ...
- android studio gradle 两种更新方法更新
android studio gradle 两种更新方法更新 第一种.Android studio更新 第一步:在你所在项目文件夹下:你项目根目录gradlewrappergradle-wrapper ...
- iOS学习——UITableViewCell两种重用方法的区别
今天在开发过程中用到了UITableView,在对cell进行设置的时候,我发现对UITableViewCell的重用设置的方法有如下两种,刚开始我也不太清楚这两种之间有什么区别.直到我在使用方法二进 ...
随机推荐
- Excel技巧--巧用分列功能整理日期格式
遇到这样混乱的日期列表,可以使用“分列”功能来整理: 1.选择该列,点击“数据”-->“分列”功能: 2.在对话框中的第1.2步都不用设置,到第3步选择“日期”格式: 4.完成后,再使用单元格格 ...
- Hadoop 权限管理
Hadoop的权限管理同Linux的很像,有用户,用户组之分,同时Hadoop提供了权限管理命令,主要包括: chmod [-R] mode file … 只有文件的所有者或者超级用户才有权限改变文件 ...
- 常用JVM命令
查看当前所有jvm进程 ./jps -l -m ./jps -l -m -v 查看jvm进程内存堆使用情况 ./jstat -gc $pid 生成java虚拟机当前时刻的线程快照 jstack -l ...
- Linux Bash Shell字符串分割substring等(转)
原文https://blog.csdn.net/wuyinggui10000/article/details/52779364 脚本开发中遇到的问题是:原java中的字符串分割操作(substring ...
- note 4 三大结构
程序流程图 顺序结构 选择结构 if if-else if 语句-嵌套结构(Nested) 多分支结构(Chained) if score >= 90: print 'ARM' elif sco ...
- 10-安装es
1.安装jdk(jdk要求1.8.20或1.7.55以上) 2.上传es安装包 3.解压es tar -zxvf elasticsearch-2.3.1.tar.gz -C /opt/app/ 4.e ...
- WebService . Schema约束
1. namespace 相当于schema文件的id 2. targetNamespace属性 用来指定schema文件的namespace的值 3. xmlns属性 引入一个约束, 它的值是一个s ...
- leetcode17
回溯法,深度优先遍历(DFS) public class Solution { int[] x; int N; string DIGITS; Dictionary<char, List<s ...
- Java6及以上版本对synchronized的优化
目录 1.概述 2.实现同步的基础 3.实现方式 4.Java对象头(存储锁类型) 5.优化后synchronized锁的分类 6.锁的升级(进化) 6-1.偏向锁 6-2.轻量级锁 6-3.锁的比较 ...
- 使用jQuery+huandlebars遍历中if判断
兼容ie8(很实用,复制过来,仅供技术参考,更详细内容请看源地址:http://www.cnblogs.com/iyangyuan/archive/2013/12/12/3471227.html) & ...