天天看点

Ubuntu下生成linux内核

写在前面:由于老师所给的指导文档经过测试之后发现已经不太适用于现在ubuntu下面的实际操作情况(貌似这个是按照RED HAT下面的情况来写的),具体体现在一些指令不适用(mkinitrd),还有引导配置文件(现在的ubuntu下面用的都是grub2)的编写等等。因此打算更新一下这一份文档。

1、在动手之前我们先要明白:为什么要生成自己的内核?

    当我们想要对自己的系统做一些改动,比如增加一些系统调用啊或者改动一些内核代码。在修改完之后要将内核编译之后才能生效(就像你改动了你的c语言程序,要编译之后才能运行新的程序)

2、准备工作

      下载一个linux内核文件。推荐去官方网站下载:www.kernel.org

不要嫌弃别人的服务器慢,但是人家的源有保证。我就因为随意下载内核结果下了两个连make config都通不过的废包。。。

      安装一下ncurces包,这个包是用来显示配置图形界面的,一般都已经有了,也可以get一下以防万一。安装方法:sudo apt-get installlibncurses5-dev

3、

     #bzip2 –dlinux-2.6.6.tar.bz2(这里以版本2.6.6为例)

     #tar   xvf linux-2.6.6.tar

     #cd  /linux-2.6.6

     #make menuconfig

     接下来会进入一个配置界面,在里面会有一些选项需要我们勾选,除了默认的选项之外我查了一些资料还需要手动勾选一些选项(不勾选据说会出错。。实际上你可以试试)

以下部分是参照网上的,具体内容请参见这位同学的文章http://blog.sina.com.cn/s/blog_4bb397fa0100dsdc.html。

(1)Loadable Modulesupport选项中,选上“Module unloading”和“Automatic kernel module loading”这两项;

(2)DeviceDrivers--->Block Devices中选上“Loopback device support”;

DeviceDrivers--->Multi-device support(RAID and LVM)处要选上“device mapper support”;

DeviceDrivers--->Graphics support,一定要选上“Support for framebuffer devices”;

Device Drivers --->USBsupport --->选上“USB Mass Storage support”(如果是在实环境中,想要更多USB支持,就全选吧。我的是在虚拟机中,用不着了)

Device Drivers--->;Network device support --->Ethernet (10 or 100Mbit) ---><*>AMD PCnet32 PCI support

(3)File system--->(以下9个选项是关于ext2和ext3文件系统配置,全部选上)

Second extended fs support

Ext2 extended attributes

Ext2 POSIX Access ControlLists

Ext2 Security Labels

Ext3 journalling file systemsupport

Ext3 extended attributes

Ext3 POSIX Access ControlLists

Ext3 Security Labels

JBB (ext3) debugging support

File system--->DOS/FAT/NTFilesystems --->选上“NTFS file system support”;

注意:

ext2和ext3文件系统配置很重要,也是必需的,如果对Ext3、Ext2文件的支持没有直接编译进内核,在你reboot时机器就会当掉,出现如下错误信息:

kernel panic : no init found,try passing init = option to kernel.....

或者是:

VFS:Cannot open root device"hdxy" or unknow-block(0,0)

Please append a correct"root=" boot option

kernel panic:VFS:Unable tomount root fs on unknown-block(0,0)

或者是:

mount: error 19 mountingext3

pivotroot: pivot_root(/sysroot,/sysroot/initrd)failed: 2

umount /initrd/proc fail: 2

Freeing unused kernelmemory: 244k freed

Kernel panic – not syncing:No init found. Try passing init = option to kernel

4、

     make bzImage //编译内核

     make modules

     make modules_install  //将之前编译内核的时候没有编译进去的模块文件添加

     make install  //安装内核,这个指令会在/boot下面生成名为vmlinuz-版本号的文件(相当于执行了cp/linux-2.6.6/arch/i386/boot/bzImage /boot/vmlinuz-2.6.6)以及名为 initrd-2.6.6.img2.6.6的文件(相当于执行了mkinitramfs/boot/initrd-2.6.6.img 2.6.6)

     如果没有自动生成的话请用括号中的命令来生成

5、关于grub引导文件(应该没有用loli的吧。。。)

     在现在普遍使用的grub2中没有了/boot/grub/grub.conf文件,取而代之的是/boot/grub/grub.cfg以及在其他目录下的一些相关文件。我们不需要手动编辑它添加启动项指令了(当然,前提是源文件中有set default=”0”以及set timeout = 非零值。其实如果你装了双系统这俩肯定都是没问题的,不然你怎么选择进入的系统)

我们只需要执行sudo update-grub就能更新这个文件啦,你打开后就能找到新添加的部分。

     好了,接下来只需要重启然后选择你新编译的内核来启动就行了,如果成功启动就恭喜你啦!