|
|
这几天编译2.6内核,因为想学一下模块编程,如果在当前内核的源文件下面做模块开发的话会相对顺利一些(针对2.6,不知道是不是这样?)。可是老出问题
环境是vm+gentoo (2.6),待编译的是2.6.17-14,虚拟机的硬盘是scsi形式的
开始把scsi等设别驱动和文件系统都编成模块,选择initrd ram支持,make并安装模块后,更改grub的配置文件。仿照的是gentoo的格式:
root (hd0,0)
kernel /* root=/dev/ram0 init=/linuxrc ramdisk=8192 real_root=/dev/sda3 doscsi
initrd /initramfs
我只是把kernel后面的内核文件更换成我的文件,启动后报告说找不到root。提示输入root或者shell。我试了好几个都不行,只好输入shell,启动一个shell,好像是什么busybox(是不是ramdisk里面的shell?),进去一看里面有个基本的文件系统,虽然命令比较少,在/dev下面确实没有sda,只有一些tty等什么一大堆。
后来我又更改了gentoo原来的启动项,把里面sda3换成了hda5,提示找不到root后我输入shell,也进入了busybox,在里面的/dev下面发现了sda3等好多常见的设备(在我的内核启动时,这些都没有的)
问题是:1)为什么同一个initramfs,dev下面的东西却不同?是内核根据检测到的情况(内核配置,硬件等)自动生成的吗?为什么我的里面没有sda3呢?
2)kernel后面一串参数都是什么意思?
3)gentoo的init fs 是什么格式的,不能解压:gunzip init ,提示说suffix不对。如何在gentoo下面制作initrd呢?
最后我把所有的东西都直接编译进内核,没有模块,按照下面的方式:
root (hd0,0)
kernel /vmliuz root=/dev/sda3
也照样报错:找不到root in block(0,0)
可能的原因是什么?
盼高手指点一下,困扰好久了 |
|