<p>
  二、解压源代码<br /> 注意,网上很多教程上说应该解压到 /usr/src,纯属以讹传讹,linux掌门人linus说解压到任何目录上都可以。当然,linus的说法是正确的。我放在自己的主目录下的src目录。<br /> 如果你下载源代码是放到自己的主目录下或者运行上面的wget下载的,那么运行下列命令:<br /></span>
</p>

<div>
  <span><strong>代码:</strong></span>
</div>

<div>
  <span>$ cd ~<br /> $ mkdir src && tar jfx linux-2.6.25.10.tar.bz2 -C src/<br /></span>
</div>

<p>
  <span></p> 
  
  <p>
    现在,源代码就在 ~/src/linux-2.6.25.10<br /> 进入源代码的目录,准备下一步的工作。后面都在这个目录里面进行。<br /></span>
  </p>
  
  <div>
    <span><strong>代码:</strong></span>
  </div>
  
  <div>
    <span>$ cd ~/src/linux-2.6.25.10<br /></span>
  </div>
  
  <p>
    <span></p> 
    
    <p>
      三、开始编译前的准备工作。<br /> 首先,清理以前编译时留下的临时文件。如果是刚刚解开的包,不需要执行这步。如果是第二次或者是第n次编译,那么一定要执行。<br /> 相关命令如下:<br /></span>
    </p>
    
    <div>
      <span><strong>代码:</strong></span>
    </div>
    
    <div>
      <span>$ sudo make mrproper<br /></span>
    </div>
    
    <p>
      <span><br /> 网上很多教程上说把现在使用的内核的config拷贝过来参考,据实验,是不需要的,ubuntu还有<br /> debian会自动做这步。不过这条命令倒是可以学习一下。当然你可以将以前的配置拷贝过来。<br /> 命令:<br /></span>
    </p>
    
    <div>
      <span><strong>代码:</strong></span>
    </div>
    
    <div>
      <span>cp /boot/config-`uname -r` ./.config<br /></span>
    </div>
    
    <p>
      <span></p> 
      
      <p>
        四、开始配置内核选项。<br /> 相关命令:<br /></span>
      </p>
      
      <div>
        <span><strong>代码:</strong></span>
      </div>
      
      <div>
        <span>$sudo make menuconfig<br /></span>
      </div>
      
      <p>
        <span></p> 
        
        <p>
          配置用到的键只有几个,esc退出菜单;空格改变选项状态;光标键上下左右移动,回车选定。<br /> 选项意义:M是编译成可以随时加入的模块,*是编译进入内核,空就是不要。<br /> 配置选项非常多,具体配置可以参考金步国先生翻译的资料:Linux 2.6.19.x 内核编译配置选项。<br /> 参考网址:http://lamp.linux.gov.cn/Linux/kernel_options.html<br /> 为了一次成功,请大家遵循一个原则,如果你自己使用的内核已经选用了某个选项,如果你没用充分的理由,不要随便改动。这样虽然内核不那么精简,但是不容易出现问题。<br /> 我们可以精简的部分是硬件模块部分,对于自己没有的硬件要毫不犹豫的清除。<br /> 如果你很执着,或者你有洁癖,你也可以一项项对过去,按照金步国先生的资料描述去选择基本上没有问题。
        </p>
        
        <p>
          五、必须强调的几个选项:<br /> 1、在“General setup”里面的“Prompt for development and/or incomplete code/drivers”金步国认为是不需要。但是如果你的硬件比较新,那几乎是必须选的,这样,我们才可以找到4965无线网卡,alsa声音驱动等等。<br /> Kernel log buffer size 我选15,双核。如果你用ia64,要选16。<br /> Control Group support 集群支持?可以不要<br /> Choose SLAB allocator (SLUB (Unqueued Allocator)) 内存管理模式slab和slub选择slub。
        </p>
        
        <p>
          2、在“Block layer”里,假如没有2TB的硬盘,就去掉:Support for Large Block Devices 。Support for Large Single Files 也不需要,谁有2TB的文件?
        </p>
        
        <p>
          3、Processor type and features中是关于cpu的,要认真选。<br /> Symmetric multi-processing support是打开多核的开关,我的cpu是双核的,选中。<br /> Processor family (Core 2/newer Xeon) 我的是Core 2/newer Xeon。找到自己的cpu后,把Generic x86 support选项取消。<br /> Subarchitecture Type 选(PC-compatible)<br /> Maximum number of CPUs 输入自己的核心数目,我输入2。<br /> SMT (Hyperthreading) scheduler support说的是超线程技术,P4有支持的,我的t8100不支持,目前大部分市场上的家用cpu都不支持。<br /> High Memory Support (4GB) 1G以下选1G;我是3G,选4G;4G以上的选16G<br /> 在“ Timer frequency ”里,默认是250Hz,较新的cpu都可以选择了1000Hz,性能更好。
        </p>
        
        <p>
          4、Power management options中把APM (Advanced Power Management) BIOS support关闭。现在的电脑都用acpi了。<br /> CPU Frequency scaling 是笔记本cpu节电技术<br /> Default CPUFreq governor (conservative) cpu节电模式有四个,笔记本默认选conservative比较好。<br /> ACPI Processor P-States driver 必须选,不然CPU Frequency就不能用。<br /> 后面的可选自己硬件相关的,我选的是Intel Enhanced SpeedStep和 Intel Speedstep on ICH-M chipsets,其他的统统消灭。
        </p>
        
        <p>
          5、Bus options的选择:<br /> Bus options (PCI, PCMCIA, EISA, MCA, ISA)<br /> PCI support<br /> PCI Express support 现在新买的机器基本上都是PCI Express了<br /> ISA support 较新的新机器没有ISA设备,可以去掉<br /> MCA support 去掉<br /> NatSemi SCx200 support 去掉<br /> PCI Hotplug Support<br /> Support for PCI Hotplug (EXPERIMENTAL) 如果没有PCI热插拔设备,去掉<br /> 这里的选项可以考虑全部编译进内核,而不是以模块形式存在。
        </p>
        
        <p>
          6、Device Drivers是重点,由于linux不但面向个人工作站,更多的是面向服务器的应用,所以可以把自己机器上没有的硬件全部去掉,而不用面面俱到。但是通用型的选项要慎重。
        </p>
        
        <p>
          比如在网卡的部分,除了我的千兆网卡 Broadcom Tigon3 support和4965无线网卡Intel Wireless WiFi 4965AGN,其余的硬件支持统统去掉。
        </p>
        
        <p>
          再比如声卡部分,我的是hd声卡,我只是在PCI devices中,选intel hd 声卡,再选Build IDT/Sigmatel HD-audio codec support,除此之外的硬件支持全部去掉。<br /> 声卡还有一个细节,在ubuntu7.10里面, 需要在/etc/modprobe.d/alsa-base后面添加options snd-hda-intel probe_mask=1 model=3stack,这样我的笔记本喇叭才可以发声,不然只有外接耳机或者音箱。这次编译以后,这个动作就不必了,但是两个耳机插口只有一个可以用了。
        </p>
        
        <p>
          再比如我的电脑中没有agp,就可以直接把agp相关的选项全部取消。
        </p>
        
        <p>
          要注意的:<br /> ATA/ATAPI/MFM/RLL support<br /> Include IDE/ATA-2 DISK support 如果你的/boot是放在IDE硬盘上,那么这里一定要选*,选M都不行。否则启动时会出现“waiting for root file system”的提示而停滞不前。<br /> SCSI emulation support 要用刻录机,必须选。
        </p>
        
        <p>
          SCSI device support 现在都是SATA硬盘,一定要选*<br /> SCSI disk support 如果你的/boot放在SATA硬盘上,一定要选*。<br /> SCSI CDROM support 虽然康宝刻录机是ide接口的,但是必须把它当成scsi接口的,这是老问题了。用刻录机,必须选。
        </p>
        
        <p>
          Graphics support<br /> Support for frame buffer devices 选中,进入选择&nbsp;<br /> VESA VGA graphics support 选上,不然字符界面启动会有问题,<br /> 后面的显卡选择:由于我的显卡是nvidia 8400gs,要自己安装nvidia公司的驱动,所以一个都没有选。这样导致ubuntu开机动画会出问题,我索性在grub中的splash字符全部删除,把开机动画关闭。字符界面很正常。
        </p>
        
        <p>
          Console display driver support 有人开机后字符控制台错误,就是这部分选项没有选,出问题了。<br /> Framebuffer Console support 需要打开。<br /> Bootup logo 开机图标,会在自检的画面上加上个性图标。需要在grub上添加“vga=”的选项,可以参考http://dotimes.com/articles /t23-slackware-framebuffer.html
        </p>
        
        <p>
          7、File systems<br /> Filesystem in Userspace support 简称fuse。是必选的,如果你要用windows分区。
        </p>
        
        <p>
          CD-ROM/DVD Filesystems<br /> ISO 9660 CDROM file system support 一般选*<br /> DOS/FAT/NT Filesystems<br /> VFAT (Windows-95) fs support 有FAT32分区就选*吧<br /> NTFS file system support 有NTFS分区就选*吧<br /> NTFS write support 如果想对 NTFS分区进行写操作,选*
        </p>
        
        <p>
          必须将启动盘的文件系统编译进内核,默认是编译成模块,这样无法启动系统。ubuntu采用的文件系统是ext3,请把ext2,ext3相关的必要选项都编译进入内核。
        </p>
        
        <p>
          8、Virtualization这个大类是我多花几百元买t8100的主要原因,因为t8100支持intel vt技术<br /> 使linux上的虚拟机的性能大幅度提高。这里的选项我除了amd的,其他都编译成模块。
        </p>
        
        <p>
          9、全部设置完成,最后一项是保存设置。<br /> 按照我的习惯,先在上一层目录保存一个备份,文件名类似 ../config20080630<br /> 然后再保存到当起目录,文件名 .config<br /> 退出设置程序。
        </p>
        
        <p>
          六、开始编译内核。<br /> ubuntu的工具是make-kpkg,和其他的发行版相比,步骤相对简单。<br /> 相关命令:<br /></span>
        </p>
        
        <div>
          <span><strong>代码:</strong></span>
        </div>
        
        <div>
          <span>$sudo make-kpkg clean&nbsp; &nbsp;这条命令好像不要超级权限,很多资料上说要,不过这不是原则问题。<br /> $ sudo make-kpkg -initrd &#8211;initrd &#8211;append-to-version=dell1400 kernel_image kernel-headers<br /></span>
        </div>
        
        <p>
          <span></p> 
          
          <p>
            上述命令中的dell1400可以用自己喜欢的字符代替,最后的字符一定是数字.<br /> 输完上述命令回车之前,建议大家把浏览器还有别的运用程序都关掉,机器开始的工作比较艰苦。我的机器大概十几分钟。
          </p>
          
          <p>
            七、安装内核<br /> 编译完成就是安装工作。编译好的内核在上一层目录。包括linux-headers-&#8230;-_i386.deb和linux-image-&#8230;-i386.deb两个文件,如果你不搞开发的话,只要安装内核就可以,头文件以后要用的时候再说。<br /> 安装相关命令:<br /></span>
          </p>
          
          <div>
            <span><strong>代码:</strong></span>
          </div>
          
          <div>
            <span>$ cd ..<br /> $ sudo dpkg -i&nbsp; &nbsp;linux-image-(按tab键)<br /></span>
          </div>
          
          <p>
            <span></p> 
            
            <p>
              文件名很长,如果不用tab自动补足是不可能的,tab键万岁。<br /> 安装完成后和老内核比较一下大小<br /></span>
            </p>
            
            <div>
              <span><strong>代码:</strong></span>
            </div>
            
            <div>
              <span>$ ls -l /boot/<br /></span>
            </div>
            
            <p>
              <span></p> 
              
              <p>
                八、重新启动验证新内核。<br /></span>
              </p>
              
              <div>
                <span><strong>代码:</strong></span>
              </div>
              
              <div>
                <span>$ sudo reboot<br /></span>
              </div>
              
              <p>
                <span></p> 
                
                <p>
                  九、显卡驱动<br /> 如果你的显卡和我一样是nvidia显卡,启动之后往往无法正常进入x-window。即使能看到gdm登录界面,效果也是很差的。<br /> 那么就要安装nvidia驱动。<br /> 用ctrl+alt+f1 进入字符命令行,输入用户名,密码登录。<br /> 命令:<br /></span>
                </p>
                
                <div>
                  <span><strong>代码:</strong></span>
                </div>
                
                <div>
                  <span>下载驱动<br /> $ wget http://us.download.nvidia.com/XFree86/Linux-x86/173.14.12/NVIDIA-Linux-x86-173.14.12-pkg1.run</p> 
                  
                  <p>
                    $sudo -s<br /> 输入密码取得超级权限。<br /> #ps ax<br /> 看看和gdm相关的进程,把这些进程全部关闭;用sudo /etc/init.d/gdm stop有可能有一个进程没有关闭:<br /> #kill 进程号<br /> 然后安装nvidia显卡驱动,当然驱动要先下好,到nvidia驱动所在的目录里,运行:<br /> # sh ./NVIDIA-Linux-x86-173.14.12-pkg1.run<br /></span></div> 
                    
                    <p>
                      <span><br /> 重新启动以后就ok。要用nvidia的驱动,每次升级内核都要这么做。</p> 
                      
                      <p>
                        十、无线网卡<br /> 相关的内核选项是<br /> Networking &#8212;><br /> Wireless &#8212;><br /> Generic IEEE 802.11 Networking Stack (mac80211)<br /> 还有4965的驱动。
                      </p>
                      
                      <p>
                        4965无线网卡驱动虽然已经编入内核,但没有firmware无法使用。需要把原来内核的firmware拷贝到新内核对应的目录,名字和内核一致,我的内核是linux-image-2.6.25.10dell1400,那建的目录名就是2.6.25.10dell1400。
                      </p>
                      
                      <p>
                        </span>
                      </p>
                      
                      <div>
                        <span><strong>代码:</strong></span>
                      </div>
                      
                      <div>
                        <span>具体命令:<br /> $ cd /lib/firmware/<br /> $ sudo mkdir 2.6.25.10dell1400<br /> 把你的老内核中的4965的firmware拷贝过来。<br /> $ sudo cp 2.6.24-16-generic/* 2.6.25.10dell1400/</p> 
                        
                        <p>
                          上面的命令和下面的命令是等价的:<br /> $ cd /lib/firmware/<br /> $ sudo cp -R 2.6.24-16-generic/&nbsp; 2.6.25.10dell1400/<br /></span></div> 
                          
                          <p>
                            <span></p> 
                            
                            <p>
                              重新启动系统,无线网卡就正常了。&nbsp;
                            </p>
                            
                            <p>
                              附编译使用的机器配置:dell vostro 1400,t8100,nvidia 8400cs显卡,内置SigmaTel STAC9228芯片的声卡,4965无线网卡,BCM5906M千兆网卡,3G内存,160G硬盘,combo刻录。&nbsp;<br /> 编译系统版本:ubuntu 8.04桌面版.</span>
                            </p>
                            
                            <div class="PoweredByWebStory" style="margin-top:15px;margin-bottom:10px;">
                              <a target="_blank" href="http://sns.juziyue.com/webinvite.php?u=337" rel="noopener noreferrer"><img src="http://image.juziyue.com/WebStoryLogo24.png" alt="菊子曰" style="border:0;" /></a>&nbsp;我用<a target="_blank" href="http://sns.juziyue.com/webinvite.php?u=337" rel="noopener noreferrer">菊子曰</a>写博客,你呢?
                            </div></div>