我在虚拟机中运行Fedora 17。我正在尝试做一些内核开发。所以,我从 kernel.org 获得了源代码,然后执行了以下步骤:
make oldconfig
make
sudo make modules_install
这使我获得了bzImage
文件,我将其复制到/boot
。然后我运行grub2-mkconfig
更新我的grub条目。
现在我可以在grub菜单中看到我的自定义内核。但是,当我尝试运行它时,我会看到以下屏幕:
我搜索了intel_agp
错误,发现人们在系统上同时拥有GPU
和intel graphics
时会出现此错误。但是我的机器上没有GPU
。另外,我不确定该模块是否已安装?
我在这里做错了吗?如何解决此错误?
答案 0 :(得分:0)
您的问题不是缺少的intel_agp模块。您的问题是下一行,它表示您无法挂载根文件系统。最可能的原因是您缺少initramfs,其中包含根块设备或文件系统的驱动程序。
我不是Fedora的专家,但你可能需要像mkinitrd
这样的东西来生成一个initramfs,它也需要进入/ boot并包含在你的新模块的grub配置中。重建。
或者您可以将内核配置更新为内置(即将配置选项设置为'y'而不是'm')您需要构建的所有内容。但这需要了解您的系统及其所需的Linux驱动程序。
答案 1 :(得分:0)
您的发行版看起来像Ubuntu,对吗?如果是这样,那么生成initrd的命令是:
(假设您当前的目录与包含内核源代码的目录相同)
update-initramfs -c -k `cat include/config/kernel.release`
然后是:
update-grub
initrd和rootfs(粗略地)的逻辑是这样的:
首先做一个blkid和df:
blkid
/dev/sda5: UUID="251ce906-e4db-4eac-a2c7-58d5e1ed86a3" TYPE="reiserfs"
df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda5 24412432 22360832 2051600 92% /
none 2959228 2352 2956876 1% /dev
你会看到rootfs在reiserfs上,其中/ boot所在。所以这意味着当内核加载时,reiserfs内核模块必须存在,否则它无法读取/启动,vmlinuz内核映像喜欢。所以initrd就是为了这个目的。
使用initrd(你总是可以使用gunzip -c existing_initrd_file | cpio -idmv)解压缩内容并查看所有fs。* ko文件。我的是:
./lib/modules/2.6.32-33-generic/kernel/fs/reiserfs/reiserfs.ko
./lib/modules/2.6.32-33-generic/kernel/fs/nfs_common/nfs_acl.ko
然后你尝试将其与配置文件匹配:
CONFIG_REISERFS_FS=m
但是如果你已经完成了CONFIG_REISERFS_FS = y,那么你将不需要在initrd中使用reiserfs.ko。
总之,您现在的问题是缺少initrd文件,或者如果在命令行中指定了initrd文件,那么initrd中缺少必要的fs内核模块,这将使您能够读取/ boot目录。
是的,这也不完全正确,当涉及到grub2时 - / boot / grub将包含自己的fs内核模块来加载/启动目录,而grub.cfg将具有必要的insert reiserfs语句来加载模块。对不起,描述的细节太多了。