编译Linux内核2.6.35.6实践


1.      安装Ubuntu 8.04

2.      www.kernel.org下载Linux内核源码,我下的版本是2.6.35.6

linux-2.6.35.6.tar.bz2移到/usr/src目录下,在这里要用root权限,建议一开始就用root用户。

mv linux-2.6.35.6.tar.bz2 /usr/src

然后将其解压

tar –jxvf linux-2.6.35.6.tar.bz2

3.      编译源码

cd/usr/src/linux-2.6.35.6这个目录,键入命令:

make mrproper

据说这个是清除原先此目录下残留的.config.oobject文件),如果我们是刚下载的源码,那么这一步您就可以省了,但是如果您已经编译过多次内核的话,这一步可是一定要的。

我打了没啥情况。下一步:

make menuconfig


报错:

HOSTCC scripts/basic/fixdep
scripts/basic/fixdep.c:107:23: error: sys/types.h: No such file or directory
scripts/basic/fixdep.c:108:22: error: sys/stat.h: No such file or directory
......
scripts/basic/fixdep.c:378: warning: incompatible implicit declaration of built-in function ‘fprintf’
scripts/basic/fixdep.c:378: error: ‘stderr’ undeclared (first use in this function)
scripts/basic/fixdep.c:380: warning: incompatible implicit declaration of built-in function ‘exit’
make[1]: *** [scripts/basic/fixdep] Error 1
make: *** [scripts_basic] Error 2


原来在刚刚安装好的ubuntu中,建一个最简单的helloworldc代码,然后用gcc去编译是不能用的,因为ubuntu中并没有所需要的库。所以上面的错误说sys/types.h找不到也是缺少库的原因。

解决方法:安装lib6-dev

apt-get install lib6-dev

后来发现安装build-essential库也可以解决。


apt-get install build-essential

继续make menuconfig,又报错:


*** Unable to find the ncurses libraries or the
 *** required header files.
 *** 'make menuconfig' requires the ncurses libraries.
 ***
 *** Install ncurses (ncurses-devel) and try again.
 ***
make[1]: *** [scripts/kconfig/dochecklxdialog] Error 1
make: *** [menuconfig] Error 2

这次报错说的是缺少ncurses这个库,然后安装ncurses-dev这个库。原先安装了ncursesncurses-base这两个东西都没用,后来百度了才发现是要ncurses-dev这个库。


apt-get install ncurses-dev

make menuconfig,这次终于可以了,弹出一个框框,如下图:

不懂设置,直接exit

然后速度make,打入命令:


make

make时间差不多一个小时把。make完了看看boot目录下面新增了什么东西,见下图:

然后


make install


好像make了一会,然后告诉你说要重启,说grub已经install了云云。不管它,继续make

 

make modules_install install


貌似这个make的时间长一点,然后说的和上面的一样,这两个命令搞的还不是很清楚。

然后跟这百度的文档,用制作initrd,听说IDE硬盘的不需要这一步,SCSI硬盘并且采用的是ext3分区格式需要。(注意文件名字)

mkinitramfs –o /boot/initrd.img-2.6.35.6 2.6.35.6

然后在/boot目录下面新增了这个文件。

4.      修改menu.list

menu.list位于/boot/grub下面,这个就是开机系统选择菜单。修改就是添加进自己的kernel选项。具体添加可以仿照原来的。


title        Ubuntu 8.04.4 LTS, my ubuntu
root        (hd0,0)
kernel        /boot/vmlinuz-2.6.35.6 root=UUID=f165da3a-373e-4634-801a-c0de0904ce08
initrd        /boot/initrd.img-2.6.35.6

基本上

title 标题,这个可以随便写,只要你能识别

root 启动盘,跟着原来的写就OK

kernel 指定内核文件,照原来的写,不过把文件改为新生成的vmlinuz-2.6.35.6

initrd 初始化文件,照原来的写,不过把文件改成新生成的intrd.img-2.6.35.6文件

我把自己的新内核写在最上面了,然后开机重启,没有选择菜单,然后进入了系统,用


uname -r

输出系统内核版本是2.6.35.6,貌似默认的就是启动menu.list中定义的第一个内核。

相关内容