[导读 ]在此,我们利用现有分析,构建一个可以说是很小的根文件系统, busybox 是针对嵌
入式开发需求,集各种 unix 工具于一身的很小很强大的工具集。
企业软件热点文章
Windows XP 注册表的常用设置 如何编写 Linux 设备驱动程序
linux 内核 init 进程函数的部分代码如下:
01 if (execute_command)
02 run_init_process(execute_command);
03
04 run_init_process("/sbin/init");
05 run_init_process("/etc/init");
06 run_init_process("/bin/init");
07 run_init_process("/bin/sh");
08
09 panic("No init found. Try passing init= option to kernel.");
10 }
代码中我们看出, linux 内核在初始化的最末段,也就是挂载了跟文件系统之后,开始
了与根文件系统,也就是用户应用的沟通,我们看到:内核分别尝试了 /sbin/init, /etc/init,
/bin/init, /bin/sh 四个应用的执行,由此可以想到,只要我们准备相应的应用,并且只要满足
其中之一,就可以启动系统了,如果任何的一个都没有满足,那么久会出现很经典的内核
panic:No init found. Try passing init= option to kernel.
在此,我们利用现有分析,构建一个可以说是很小的根文件系统, busybox 是针对嵌入
式开发需求, 集各种 unix 工具于一身的很小很强大的工具集。 busybox 的编译过程不再赘述,
现假设 busybox 编译后已经生成如下文件夹:
bin linuxrc sbin usr
其中, linuxrc 为程序, bin 、sbin、usr 为文件夹,其实三个文件夹内绝大部分是程序,
并且是指向 bin/busybox 的链接,也就是所有的命令均由 bin/busybox 执行
我们看到, 内核初始化最后一次尝试的 bin/sh, 猜想上来 sh 并不会跟其它的程序产生关
联,所以干脆删除 sbin 和 usr 再说,同时 linuxrc 似乎也不是必须,最多内核报告错误,并