第5次重装linux,第一次编译成功Redhat linux9.0的内核

  我的环境:kernel2.4.20-8 Redhat linux9.0 lilo ,再加windows2000. AMD毒龙700,256M,20G

  我的windows2000前几天只有我的管理员帐号在用,家里人都在用。由于不知道怎么一回事,linux的5个分区中有两个分区(/,还有好像是/usr)显示在windows2000的我的电脑中,也许是谁无意中执行了对linux的/分区进行了格式化。这样,我的linux系统又完了。最后只得重装,这次把/home目录直接挂载上就行了。因为本地安装的程序一般在/usr/local中,所以把/usr/local分在一个区上。然后,就是在windows2000中启用一个非管理员的user帐号,这样,一般的时候就用这个帐号了。这样一些带有危险性的操作就不能进行了。

  这两天看那本<<linux编程与网络应用>>的定制内核这一节.今天实验了一下:

整个过程如下:

准备工作:

1)su 切换成root(实际上下面的一些步骤必须root权限的除了对一些目录的操作外,只有安装和make modules_install才需要root权限,我一直用root权限是因为源码放在/lib下,而且,我想对编译核心这样的事,用root权限不算问题吧)

2)装上内核工具包和程序开发包;

3)把/usr/src/linux2.4.20-8这个文件夹拷贝到/lib/linuxsrc下;(因为我发觉如果系统启动失败用软盘引导的系统不能装载/home分区,所以我就把备份的东西放在/lib下了,下同)

4)cp /boot /lib/bootback -fr 备份引导目录

5)cp /boot/vmlinuz-2.4.20-8 /boot/vmlinuz-2.4.20-8.old  备份核心

6)cp /lib/modules/2.4.20-8 /lib/modules/2.4.20-8.old -fr  备份模块

7)cp /etc/lilo.conf /etc/lilo.conf.old

正式工作:

1)su 切换到root帐户

2)cd /lib/linuxsrc/linux2.4.20-8 进入源码目录

3)make mrproper 清理源码

4)make menuconfig 把一些明显用不到的项从核心或模块中去掉,加上ntfs分区的读的模块支持

5)make dep

6)make clean 为最后编译进行文件树的配置

7)make bzImage 建立核心

8)cp ./arch/i386/boot/bzImage /boot/bzImage 把核心拷贝到/boot下(第8~10好像放在步骤12后面更加合理,但我没有这样做,以后可以试试看有没有区别)

9)vi /etc/lilo.conf 编辑lilo.conf文件如下:

prompt

timeout=50

default=DOS

boot=/dev/hda

map=/boot/map

install=/boot/boot.b

message=/boot/message

lba32

image=/boot/bzImage

        label=linux

        root=/dev/hda5

        read-only

image=/boot/vmlinuz-2.4.20-8.old

        label=old

        initrd=/boot/initrd-2.4.20-8.img

        root=/dev/hda5

        read-only

 

other=/dev/hda1

optional

label=DOS

10)/sbin/lilo 更新map,这样在lilo启动的选择项中才有新内核的选项

11)make modules 编译模块 (可以不要root权限)

12)make modules_install 安装模块

13)/sbin/shutdown -r now

完成.

我在编译的时候遇到几个问题:

1)不知道initrd-2.4.20-8.img什么用,把它加在lilo.conf的新内核那几行不能启动,报错:.../lib/jbd.o was compiled for kernel version 2.4.20-8 while this kernel version 2.4.20-8custom.ERROR;/bin/insmod exited abnormally.

2)root=/dev/hda5 这行原来是:append="root=LABEL=/" 不知为什么重编译内核后不能找到root的值了

3)make modules_install 安装新模块自动在/lib下生成2.4.29-8custom文件夹,这是与新核心配套的,不会复盖原来的模块目录2.4.20-8;

4)一定在安装linux时制作一张软盘的引导盘,这样,在内核或模块配置不正确时才可以用来引导系统进行相应的修正,据我的经历,如果不是制作了这张引导盘,我可能又要第6次重新系统了。

5)重新编译的压缩核心比原来的压缩核心少了100多k字节,启动x查看内存占用少了3M。但是仍然不能认识我的sedY890手机的usb存储,难道真要升级内核吗?有了这个原内核编译的经验,我想升级内核到2.6.*可能要容易一些了。为防万一,可以先把整个/boot目录备份。