编译内核的步骤及遇到的问题及解决方法

:图与内容可能有出入,本人现在用的是2.6.32.2的内核,文档资料部分内容为前期整理工作。

一、如何编译linux内核

1.下载名为linux-2.6.15.tar.bz2的内核源码文件。//内核下载的源码好地址:http://www.kernel.org/pub/linux/kernel/v2.6/
2.将该文件拷贝到/usr/src/目录下(cp  linux-2.6.15.tar.bz2    /usr/src/),解压该文件:
tar jxvf  linux-2.6.15.tar.bz2,此时会在/usr/src/生成linux-2.6.15的源码文件夹

3.将/usr/include/asm、/usr/inlude/linux、/usr/include/scsi链接到/usr/src/kernels/linux-2.6.15/include目录下的对应目录中:
                       # cd /usr/include
                       #rm -rf asm linux scsi     //在删除之前我已经做过备份
                 # ln -s /usr/src/kernels/linux-2.6.15/arch/x86/include/asm asm //若编译的为在ARM下运行的内核,此处应为ln -s /usr/src/kernels/linux-2.6.15/arch/arm/include/asm asm
                 # ln -s /usr/src/kernels/linux-2.6.15/include/linux linux 
                 # ln -s /usr/src/kernels/linux-2.6.15/include/scsi scsi

注: /usr/include/asm应该正确链接到相应的位置,有可能asm-generic也要链接,或者运行make menuconfig出错时再弄,方法是找到出错的文件,copy至/usr/include/asm-generic下。

4.删除源代码目录中残留的.o文件和其它从属文件:
                       #cd /usr/src/kernels/linux-2.6.15
                       #make mrproper
5.增加配置:
                      #cd /usr/src/
                      #cp linux-2.6.16(当前系统内核/boot)/.config  linux-2.6.15(当前编译内核)/.config             //(注此地方是个关键,涉及内核的裁减问题,若为X86更新内核版本,可用当前系统内核配置,在/boot/下。若移植到ARM上要自己裁减内核。要学会配置)
                      # make oldconfig //(没有用过)  2.6内核之间后可不用。
                      #make menuconfig (默认保存即可)

 

6.编译内核

   6.1:     2.6内核编译方法,(下载的内核源码要学会看里面的README。)

#make    //2.6内核改为此方法,2.6的make 等于以前的make bzImage和make modules

#make modules_install

#make install

2.6

  1. make menuconfig
  2. make
  3. make modules_install
  4. make install

6.2             2.4内核编译方法:
                   
2.4

  1. make menuconfig
  2. make dep
  3. make bzimage
  4. make modules
  5. make modules_install
  6. make instal

7.若上面的所有操作都正确成功的话,直接reboot即可享受新的内核。

/*********************************************over ************************************************************/

注:如下为传统的方法,如令不用了。
7.启动该内核( X86上更新内核
将该内核和System.map文件拷贝到/boot目录下:
                       # cp /usr/src/kernels/linux-2.6.15/arch/i386/boot/bzImage       /boot/vmlinuz-2.6.15
                       # cp /usr/src/kernels/linux-2.6.15/System.map      /boot/System.map-2.6.15


8.生成.img文件(应先进入/lib/modules进行操作才行)
                       #mkinitrd /boot/initrd-2.6.15.img 2.6.15  (initrd-2.4.19.img文件是自己任意取的,但最好对应自己的内核版本号。 2.4.19是在/lib/modules中的目录名,对应内核的版本)
9. 修改/boot/grub/目录下的menu.lst文件,将该内核信息写入到该文件中。
注:
vmlinuz-2.6.15 
System.map-2.6.15
initrd-2.6.15.img
这三个文件*-2.6.15文件名必须一致才能正确引导


10.重新启动
                        #reboot

即可引导新内核的系统。

二、

1.遇到的问题如下,make menuconfig出现不了。

[root@localhost linux-2.6.32.2]# make menuconfig
  HOSTCC  scripts/basic/fixdep
在包含自 /usr/include/sys/socket.h:36 的文件中,
                 从 /usr/include/netinet/in.h:25,
                 从 /usr/include/arpa/inet.h:23,
                 从 scripts/basic/fixdep.c:116:
/usr/include/bits/socket.h:340:24: 错误:asm/socket.h:没有那个文件或目录
make[1]: *** [scripts/basic/fixdep] 错误 1
make: *** [scripts_basic] 错误 2

 

2.解决方法,原因是asm链接的地方不对,修改了之后如下,就可以正确:

查找了locate asm/socket.h后信息如下:

/usr/src/linux-2.6.32.2/arch/alpha/include/asm/socket.h
/usr/src/linux-2.6.32.2/arch/arm/include/asm/socket.h
/usr/src/linux-2.6.32.2/arch/avr32/include/asm/socket.h
/usr/src/linux-2.6.32.2/arch/blackfin/include/asm/socket.h
/usr/src/linux-2.6.32.2/arch/cris/include/asm/socket.h
/usr/src/linux-2.6.32.2/arch/frv/include/asm/socket.h
/usr/src/linux-2.6.32.2/arch/h8300/include/asm/socket.h
/usr/src/linux-2.6.32.2/arch/ia64/include/asm/socket.h
/usr/src/linux-2.6.32.2/arch/m32r/include/asm/socket.h
/usr/src/linux-2.6.32.2/arch/m68k/include/asm/socket.h
/usr/src/linux-2.6.32.2/arch/microblaze/include/asm/socket.h
/usr/src/linux-2.6.32.2/arch/mips/include/asm/socket.h
/usr/src/linux-2.6.32.2/arch/mn10300/include/asm/socket.h
/usr/src/linux-2.6.32.2/arch/parisc/include/asm/socket.h
/usr/src/linux-2.6.32.2/arch/powerpc/include/asm/socket.h
/usr/src/linux-2.6.32.2/arch/s390/include/asm/socket.h
/usr/src/linux-2.6.32.2/arch/score/include/asm/socket.h
/usr/src/linux-2.6.32.2/arch/sh/include/asm/socket.h
/usr/src/linux-2.6.32.2/arch/sparc/include/asm/socket.h
/usr/src/linux-2.6.32.2/arch/x86/include/asm/socket.h
/usr/src/linux-2.6.32.2/arch/xtensa/include/asm/socket.h
所以我修改了/usr/include/asm下的 链接:

[root@localhost include]# rm -rf asm
[root@localhost include]# ln -s /usr/src/linux-2.6.32.2/arch/arm/include/asm asm
[root@localhost include]# 
之后enjoy it !


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值