Initramfs应用问题记录
Initramfs应用问题记录
因为想把升级应用和内核做到一个Image中,所以打算采用Initramfs。
先准备root文件系统,比如到/home/qianjiang/tmp/initramfs目录下。
通过kernel menuconfig打开CONFIG_BLK_DEV_INITRD,
并且设置CONFIG_INITRAMFS_SOURCE="/home/qianjiang/tmp/initramfs/",
通过调试理解如下:
内核编译时,通过CONFIG_INITRAMFS_SOURCE指定的目录生成cpio文件(所以也可以直接指定cpio文件而不是指定目录)。
内核在初始化启动的时候会先注册一个rootfs的文件系统,然后通过rootfs_initcall来生成其中的内容。
A. 当CONFIG_BLK_DEV_INITRD未选中时,rootfs_initcall调用noinitramfs.c中的default_rootfs()来生成。
B. 如果选中时:
rootfs_initcall调用initramfs.c中的populate_rootfs()函数来填充。
static int __init populate_rootfs(void)
{
char *err = unpack_to_rootfs(__initramfs_start, __initramfs_end - __initramfs_start, 0);
if (initrd_start) {
err = unpack_to_rootfs((char *)initrd_start, initrd_end ...
fd = sys_open("/initrd.p_w_picpath", O_WRONLY|O_CREAT, 0700);
if (fd >= 0) {
sys_write(fd, (char *)initrd_start, initrd_end - initrd_start);
}
}
......
}
[__initramfs_start,__initramfs_end]指定了一个cpio包的位置,
A.1 如果设置了CONFIG_INITRAMFS_SOURCE,即我们目录对应的cpio数据包。
B.1 如果未设置,对应一个默认的cpio数据包,由内核编译时生成,和default_rootfs()生成的内容类似。
没有设置的情况,需要通过比如cmdline指定[initrd_start, initrd_end],该数据段被写入文件,/initrd.p_w_picpath(见上面的函数)。
接下来调用prepare_namespace(),调用initrd_load(),然后rd_load_p_w_picpath()对initrd.p_w_picpath进行解压(可以是gz, cramfs等)。
然后mount_root()把设备挂载到/root下面。
注意:系统在启动的时候,完成了cpio到rootfs的填充后,会检查是否存在/init,如果该文件不存在,则调用prepare_namespace()来挂载文件系统。
上述内容参考了:
http://liaowb1234.blog.163.com/blog/static/771555472010025114231594/
另外一个好的链接参考http://en.gentoo-wiki.com/wiki/Initramfs
确实写得很详细。
在/init脚本的书写时出了些问题
. Kernel panic - not syncing: Attempted to kill init!
/init 脚本写得有问题
---------------------------
#!/bin/busybox sh
/bin/echo hello
---------------------------
改成如下:
---------------------------
#!/bin/busybox
---------------------------
竟然好了,而且直接进入shell。
查看/proc/1/cmdline
发现是/bin/busybox init
?还有些疑惑
转载于:https://blog.51cto.com/jiangjqian/409645
Initramfs应用问题记录相关推荐
- initramfs两种方法恢复_微信会话记录删除了怎么恢复?最权威的方法在这
随着手机软件的不断更新以及长时间使用,占用的手机内存也开始越来越大,我们只能通过清理手机内存来释放多余的空间了.如果我们在清理微信的时候删除了聊天记录,那后面有需要的时候该怎么找回呢?很多朋友都会上百 ...
- 解决Ubuntu16.04重启进入initramfs
一直没有关机的习惯,有半个月没有来实验室,今天试图重装pycharm的时候遇到"磁盘写保护"问题,于是选择暴力重启,结果重启的时候进入initramfs,导致无法开机. 估计以后还 ...
- Ramfs、rootfs 和initramfs
Ramfs, rootfs and initramfs - The Linux Kernel documentationhttps://www.kernel.org/doc/html/latest/f ...
- 【备份】使用ubuntu一个月,记录的问题和解决方案
随手记录 50.推荐Ubuntu神器:Utools 49.推荐网页快捷键操作神器:Vimium 48.vnc扩展屏幕 设置扩展 鼠标移动 47.输入法 sudo gedit clion 不跟随光标 4 ...
- Ubuntu14.04+cuda6.5+opencv2.4.9+caffe配置记录
从4月5日差不多开始安装,到今天4月15日,快两个星期了.如果加上之前自己看点Linux的时间,这折腾的有两个星期(半个月了).哎,快装好了,我也快崩溃了,真的想放弃的时候,突然找到个博客,好像照它的 ...
- 【非原创】Ubuntu14.04+cuda6.5+opencv2.4.9+caffe配置记录
Ubuntu14.04+cuda6.5+opencv2.4.9+caffe配置记录 从4月5日差不多开始安装,到今天4月15日,快两个星期了.如果加上之前自己看点Linux的时间,这折腾的有两个星期( ...
- liunx启动时:initramfs unpacking failed:write error
阅读前请看一下:我是一个热衷于记录的人,每次写博客会反复研读,尽量不断提升博客质量.文章设置为仅粉丝可见,是因为写博客确实花了不少精力.希望互相进步谢谢!! 文章目录 阅读前请看一下:我是一个热衷于记 ...
- Ubuntu 开机显示 initramfs 进不了系统
通常出现进入initramfs,是因为关机不当导致磁盘文件受损还是什么引起的,所以:我们要把主分区修复! 1.可参照此命令,在随后的多个确认对话框中输入:y fsck -t ext4 /dev/sda ...
- initramfs学习
(一)hello world 一.initramfs是什么 在2.6版本的linux内核中,都包含一个压缩过的cpio格式的打包文件.当内核启动时,会从这个打包文件中导出文件到内核的rootfs文件系 ...
最新文章
- 如何获取元素在父级div里的位置_前端面试题--元素的BFC特性和实例
- 网页简单配置捉取网购信息
- 【Java每日一题】20161128
- OpenStack 多节点纳管 vCenter 5.5
- 关于jQuery的$.getJSON乱码问题
- Sony如何启动微型计算机,索尼笔记本怎么进入bios 索尼VAIO笔记本进入bios技巧
- python3 解析html_Python3.x网页抓取HTMLParser
- 第三次学JAVA再学不好就吃翔(part16)--方法及方法重载
- 在你做推荐系的过程中都遇到过什么坑?
- Java 1.2.4 文件输入输出时——文件的位置
- 阿里 90 后科学家研发,达摩院开源新一代 AI 算法模型
- 有商在线进销存成功案例
- java对接微信公众号
- 使用Java编写一个简单的Web的监控系统cpu利用率,cpu温度,总内存大小
- HTTP代理的代理形式
- Google 创始人
- unity Maya中模型动画可能存在的问题总结
- UGUI事件系统——事件接口
- 开放存取知识库及其数据采集规范的研究
- win10用户查看系统激活码方式
热门文章
- 【AS3 Coder】任务七:初涉PureMVC——天气预报功能实现
- 从“在winform里打开网页功能”引发的问题探究
- Linux内存实际使用率
- 数据库设计中一个矛盾:数据库外键,用还是不用?你怎么看.?
- git 创建webpack项目_近期总结:手动搭建react项目,将项目从自己的库引入到新的项目中使用...
- Golang 笔记 2 函数、结构体、接口、指针
- poj2240 最短路判环
- Drawing with GoogLeNet
- linux(Centos5.1)升级至2.6.19内核+L7实现-- 续限P2P软件
- 在asp.net如何取得ActiveDirectory域中用户的信息,比如工号,邮件地址等等