阅读:1645回复:8
如何编译没有文件系统的内核?
我想编译一个没有文件系统的内核,系统初始化之后,直接运行一个应用程序,即将该应用程序编译到内核中,整个生命周期中,只有该程序在运行。
十万火急,求大虾指点 |
|
沙发#
发布于:2003-11-08 13:45
看看linux 的启动过程,init在什么位置啊,这样说你的程序只能做成虚拟硬件的驱动了.^_^ 我也不懂
|
|
板凳#
发布于:2003-11-07 09:41
对,我是打算写成内核的一部分,但不知道该从哪儿加进去,该把那些去掉。
是不是应该在起init进程的位置加上我的程序,也就是说不启动init进程了,而直接启我的程序。 不知道这样子好不好改,有哪些要注意的地方? 请大家帮忙!谢谢先 |
|
地板#
发布于:2003-11-06 23:04
那你的程序必须是,kernel mode 的程序了,相当于内核的一部分
|
|
地下室#
发布于:2003-11-06 14:24
我明白你的意思。
但是在我的程序起来后,需要能够直接操作flash的block,我不想介入文件系统,用了ramdisk后,block定位及完整性就更难控制了。 |
|
5楼#
发布于:2003-11-06 14:23
如果你一定要加在内核里,那么你的程序只能做成内核可加载模块,也就是一般驱动的做法。可以参考驱动程序编写的参考书,那里已经说的很详细了。
init是系统的第一个进程,这个时候一定有个根文件系统,如果一定要拿掉,可能改动量比较大。小弟对内核研究还不是很深厚,不知道如何修改。 |
|
6楼#
发布于:2003-11-06 14:18
讲的再详细一点,就是先用dd生成一个8M空文件,然后把这个文件连接到loopback上,格式化为ext2,然后再将这个文件mount到一个目录,将启动用的文件都放进去,包括init脚本和你的执行程序。这个文件就是将来的ramdisk。然后umount这个文件,用gzip压一下,改名为initrd.img即可。内核中只要加入ext2支持选项,一般缺省就有,编译生成内核镜像,把这个镜像和initrd.img合并,下载到板上的flash中。
启动的时候首先内核自动加载,然后解压initrd.img生成ramdisk,并将这个ramdisk作为根文件系统。内核引导结束后会调用init脚本,脚本中放一条命令执行你的程序,那么你的程序就起来了。还可以把你的程序作为respawn的,万一死了会重启,连看门狗都不要了。 |
|
7楼#
发布于:2003-11-06 14:17
谢谢justchc
但是我觉得这样已经模拟了一个文件系统。 我想修改kernel之后,在启动init之前,直接运行一段程序,这个程序结束后,系统就结束了。 问题是:我应该在哪里加入我的程序?如何编译? 先假设不需要任何外设驱动。 |
|
8楼#
发布于:2003-11-06 13:52
可以把initrd.img做成8M大小ramdisk,然后把你的程序放进去,在init脚本中启动这个程序。而且这个ramdisk可以作为工作目录。
|
|