- 2
- 0
- 约2.53万字
- 约 17页
- 2016-10-18 发布于贵州
- 举报
Linux 嵌式系统学习资料
Linux 嵌入式系统学习资料
精通initramfs构建step by step
一、initramfs是什么
在2.6版本的linux内核中,都包含一个压缩过的cpio格式
的打包文件。当内核启动时,会从这个打包文件中导出文件到内核的rootfs文件系统,然后内核检查rootfs中是否包含有init文件,如果有则执行
它,作为PID为1的第一个进程。这个init进程负责启动系统后续的工作,包括定位、挂载“真正的”根文件系统设备(如果有的话)。如果内核没有在
rootfs中找到init文件,则内核会按以前版本的方式定位、挂载根分区,然后执行/sbin/init程序完成系统的后续初始化工作。
这
个压缩过的cpio格式的打包文件就是initramfs。编译2.6版本的linux内核时,编译系统总会创建initramfs,然后把它与编译好的
内核连接在一起。内核源代码树中的usr目录就是专门用于构建内核中的initramfs的,其中的initramfs_data.cpio.gz文件就
是initramfs。缺省情况下,initramfs是空的,X86架构下的文件大小是134个字节。
二、构建第一个initramfs:hello world
从C语言开始,学习计算机编程语言的第一个程序几乎都是hello world,因此我们也构建一个最简单的hello world式的initramfs,以说明initramfs的基本构建方法。
initramfs的灵魂是init文件(或者叫程序,因为它会被内核第一个执行),我们先写一个简单的init程序,它会在内核的console中打印出经典的hello world信息。
hello.c:
#include
#include
int main(int argc,char argv[])
{
printf(hello world, from initramfs.\n);
sleep(9999999);
return 0;
}
其中的sleep()函数语句是为了避免执行时内核很快打出panic的信息,并非功能上的需要。
接着把hello.c编译成静态连接程序:
gcc -o hello_static -static -s hello.c
命令行中的-s参数表示编译后的程序不包含调试定位信息,目的是减少编译出来的程序文件的大小。
再创建一个initramfs的构建源文件目录image,把hello_static程序拷入这个目录,并改名为init。
在image目录下,创建一个dev/console的设备文件,否init程序无法在内核console中输出信息:
mknod -m 600 dev/console c 5 1
注意,执行这个命令需要有root权限。
好了,现在可以设置内核配置参数,进行initramfs的构建了:
在general
setup配置目录下的initramfs
sources配置项下输入image的路径名,比如我的路径就是/home/wyk/initramfs-test/image。因为我们的init程
序是ELF格式的,所以内核需要支持ELF的可执行文件,否则启动这个init程序会失败。在内核的 Executable file
formats配置目录下,选择 kernel support for ELF
binaries,则可使内核支持ELF格式的可执行文件。其他内核配置参数根据实际需要设置即可,不过,为了减少内核编译时间,可参考这篇文章
/blog-htm-do-showone-uid-60710-type-blog-itemid-293122.html
设置一个最简单的内核配置。
内核配置参数设置完成后,按常规的内核编译方法进行编译,initramfs就自动连接到编译好的内核映像文件中了。
三、试验环境搭建
试验initramfs需要经常重启系统,所以使用CPU模拟器是不错的选择。我们可以选用qemu,它支持直接启动linux内核,无需在模拟器中安装OS。从方便使用的角度考虑,我们采用qemu launcher设置qemu的各项参数,它的安装可参考
/blog-htm-do-showone-uid-60710-type-blog-itemid-612280.html
。
在qemu launcher的linux配置标签中,打勾直接启动linux,然后在下面的文本框中填上刚才编译好的内核映像文件的路径名。因为qemu的运行还需要设置硬盘映像文件,所以还需要在左边的配置标签中新建一个硬盘映像文件,但实际上我们并不使用硬盘。
配置好qemu的参数后,点击launcher按钮,内核就开始在qemu中运行了。内核
您可能关注的文档
最近下载
- 反应机理(研)-高等无机化学.ppt VIP
- 218SS-PKE 摩托车操作说明书.pdf
- 2025年高考甘肃卷物理真题.docx VIP
- 凯恩帝K1TBIII-A-As数控系统用户手册.pdf
- 杭州电子科技大学信息工程学院2025-2026学年《概率论与数理统计2》第一学期期末试题(B).docx VIP
- 第2章 有理数的运算(单元测试·培优卷)含答案-2024人教版七年级数学上册.pdf VIP
- 中考1600词汇对照表(英译汉).doc VIP
- 杭州电子科技大学2025-2026学年《概率论与数理统计2》第一学期期末试题(B).docx VIP
- 香农三大定理详解.ppt VIP
- 【初中物理】专项练习:物体的密度及其测定40题(附答案).pdf VIP
原创力文档

文档评论(0)