编译内核的步骤及遇到的问题及解决方法
注:图与内容可能有出入,本人现在用的是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.
注:图与内容可能有出入,本人现在用的是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
6.2 2.4内核编译方法:
2.4
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)