linux内核编译

来源:互联网 发布:mac jenkins 启动 编辑:程序博客网 时间:2024/06/17 20:04

    为了学习内核代码,打算在虚拟机上学习代码,所以先把内核进行重新编译一次。对比了virtualbox和vmware,发现virtualbox虽然比较简单方便,但是还是商业化的vmware功能比较强大。记录一下遇到的问题:

    安装vmware8.0.1,但是为了安装redhat9,所以设置了6.0的硬件,并且硬盘需要使用ide接口的,否则为了让redhat9这老古董去支持scsi太麻烦了,所以还是少折腾了。

    网卡还是出问题了,解决方法:

   以root权限,编辑 /etc/sysconfig/network-scripts/ifcfg-eth<n> 和 
/etc/sysconfig/networking/devices/ifcfg-eth<n> 
其中<n>是数字,比如eth0, 


在每个文件中添加: 
check_link_down () 

return 1; 

    从官方下载了2.4.0的内核版本,因为能够和正在看的linux内核源代码情景分析同步,放的虚拟机编译,失败。。。。。。预料之中。

    出现4点报错:

    1.xtime报重复包含,/usr/src/linux-2.4/include/linux/sched.h 和/usr/src/linux-2.4/include/asm/system.h,从网上找到解决办法

        vim include/linux/sched.h 
       找到extern struct timeval xtime;
       修改为extern volatile struct timeval xtime;

    2.boot makefile  -oformat不对 改成--oformat

    3.driver/pci 还是makefile不对 对比2.4.20版本修改

    4.所有的工作重新开始,在内核配置时要选中SCSI support——>SCSI low-level drivers——>BusLogic SCSI support,将其选为模块加载的方式,然后保存退出,然后接着往后进行内核的编译和模块的编译。


     解决完这些问题,终于可以编译了,步骤如下:

make mrproper 把原来编译产生的垃圾删除


配置内核可以根据需要与爱好使用下面命令中的一个:
#make config (基于文本的最为传统的配置界面)
#make menuconfig (基于文本选单的配置界面)
#make xconfig (基于图形窗口模式的配置界面)
#make oldconfig (如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦)

#make dep (确保关键文件在正确的位置) 2.5.*-2.6.0都不需要了。其实2.4.*某些内核也不需要了。
                          
#make clean (确保所有有关文件都处于最新版本状态)


#make zImage (编译压缩形式的内核)
                          
在需要内核支持较多的外设和功能时,内核可能变得很大,此时可以编译大内核:
                          
#make bzImage
                          
编译的时间与机器的硬件条件及内核的配置等因素有关,所获得的内核的位置在/usr/src/linux/arch/i386/boot目录下,当然这里假设用户的CPU是x86型的。

#make modules (编译选择的模块)
                          
#make modules_install (将编译后的模块转移到系统标准位置)
 
# make install

    编译完后查看grub的menu.lst,多出了一个选项,reboot选到新的内核,好吧,又失望了,这次是内核初始化里面的一个函数报不能为空,估计是旧版本内核没有这个指针导致执行初始化程序时取不到指针,哎,内核定位以后再慢慢搞,看来还是的先用redhat9自带的内核版本来用,版本差距不大,后面再去分析吧。


0 0
原创粉丝点击