linux 内核编译

     编译新内核的原因:在做无线自组网实验时,发现pc机(作为asterisk服务器)先启动,其他终端后启动时(pc机与所有的终端的网卡都配置为adhoc模式)。所有的终端不能相互ping通,都是都可以与pc机ping通;如果是终端先启动,再启动pc机,终端之间以及终端与pc机之间都可以相互ping通。

     分析原因:

     尝试1 :有可能是pc机linux发行版商的网络管理软件导致。所以,更改网络设置,设置为手动配置网络。重新启动后,测试,问题还是一样。

     尝试2 :pc机 与 终端还有一点是不相同的 --- 驱动程序。所以重新编译内核,去掉原先的驱动程序,编译rt3070sta驱动程序。 测试,问题解决。

    为什么原先的驱动程序不行,这里没有去研究!

   下面记录了新内核编译的过程:

    第一步:去官方下载最新的内核源码包
  官方网址:www.kernel.org
  当前最新版本:2.6.39,下载网址:http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.39.tar.bz2
 
  您可以使用 wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.39.tar.bz2 下载
 
  第二步:解压源码包(这里有些人说要将源码解压到/usr/src目录下,其实是不正确的,你可以解压到任何目录)
  cd ~wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.39.tar.bz2
  tar -jxvf linux-2.6.39.tar.bz2

  第三步:配置选项

     cd linux-2.6.39
     cp /boot/config-`uname -r` .config    //这里是复制pc机上linux的.config文件,没必要自己一个个去选。
     make mrproper (删除上次编译产生的垃圾,初次编译不需要)
     make menuconfig (启动内核选项配置界面)
  说明一下,make menuconfig会寻找linux-2.6.39目录下的.config配置文件,如果找不到,则使用与CPU相关的config文件作为默认的配置。当然,我们也可以拷贝当前系统的配置作为对照,如    

      cp /boot/config-`uname -r` .config (.config是隐藏文件 ls -a查看)
 
  注意:如果是同版本的内核编译,还需要备份下当前模块
  cd /lib/modules
  mv 2.6.39 2.6.39_old
  指定内核识别码
  vim Makefile
  EXTRAVERSION = .custom-1 (第4行)
  第四步(1):传统方式编译
  make all (2.6以前版本需要手工运行如下命令)

    ( 

     # make dep       <==建立相依的属性关系!
     # make clean        <==将旧的资料去除掉!
     # make bzImage       <==开始编译核心!这个核心是经过压缩的 (30分钟左右)
     # make modules       <==开始编译模块!这个动作视您刚刚编译的模块数量!(1小时左右)

    )
  make modules_install (安装模块到/lib/modules/2.6.39),make install (系统将会把vmlinuz和System.map复制到/boot目录下同时修改grub/boot/grub/menu.lst,2.6以前版本需要手动拷贝vmlinuz和System.map)
     ×××××××××××××  此时 可以重新启动测试新编译出来的内核   ××××××××××××××××××××××
  第四步(2):RPM方式编译,会产生RPM包,方便提供给别人使用make rpm,编译完成之后,在~/rpmbuild /SRPMS/目录发现一个新的src.rpm包, 比如.SRPMS/kernel-2.6.39.src.rpm, 内核rpm包位于~/rpmbuild/RPMS/i386/ (或RPMS/i586/, RPMS/i686/, 等. 看你的平台类型). 比如.RPMS/i386/kernel-2.6.39.i386.rpm. 可以看到内核识别码已添加到软件包的名字中.
 
  安装新内核
 
  现在去新的rpm内核包存在的目录(基于你的平台类型, 比如. ~/rpmbuild/RPMS/i386/)安装rpm包,cd ~/rpmbuild/RPMS/i386
 
  rpm -ivh kernel-2.6.39.i386.rpm(现在你甚至能够拷贝到其它的Fedora系统, 通过上面的方式安装. 你将不再需要编译内核.)
 
  接下来我们为新内核创建一个ramdisk, 否则系统将不能引导新内核:
 
  mkinitrd /boot/initrd-2.6.39.custom-1.img 2.6.39
 
  然后编辑/boot/grub/menu.lst文件, 看一下你系统上已经存在(正在工作的)引导内核信息, 拷贝其中的一个实例, 替换为你新的内核和ramdisk:vim /boot/grub/menu.lst
 
  比如, 我的menu.lst, 在我添加新的内核信息前的情况:


 

  第五步:重启系统,在Grub引导菜单中,选择linux-2.6.39
 
  Reboot,重启之后,大功告成,你的新内核已经安装好了。

posted @ 2012-12-27 20:03  lsx_007  阅读(194)  评论(0编辑  收藏  举报