编译内核

     Linux相对Windows来说,最大的特点是它可以自由的定制内核。内核是一个操作系统的核心,负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。Linux内核源程序存放在/usr/src/linux目录下,在光盘或网络上找到并安装即可。如果没有,可能是安装系统时并没有选择安装内核代码。

     初次编译内核可能会遇到多种问题,此时可以搜索网络资源求助。编译内核主要有以下几步:

(1)解压并进入内核代码目录:

#tar zxvf linux*.tar.gz

#cd linux*

首先要确保代码目录下没有不正确的.o文件以及文件的相互依赖。

#make mrproper

还要确保/usr/include/目录下的asm、linux和scsi等连接是指向要升级的内核源代码。他们分别指向计算机体系结构所需要的源代码目录下真正的include子目录。如果没有这些连接就要手工创建:

#cd /usr/include/

#rm -r asm linux scsi

#ln -s /usr/src/linux/include/asm-i386 asm

#ln -s /usr/src/linux/include/linux linux

#ln -s /usr/src/linux/include/scsi scsi

这是配置中非常重要的一部分,删除掉/usr/include下的asm、linux和scsi连接后,再建立新的连接指向新内核源代码目录下同名的目录。这些头文件目录包含着保证内核在系统上正确编译时所需要的头文件。

(2)使用下面的命令配置内核:

#make menuconfig

在编译内核时,最繁琐的就是内核的配置工作。配置时,大部分都可以使用其默认值,只有小部分需要根据用户的不同需要选择。选择的原则是:将与内核其他部分关系比较远且不经常使用的部分功能代码编译成可加载模块,不需要的功能就不要选,与内核关系紧密且经常使用的部分功能代码直接编译到内核中。

(3)配置好内核后,接下来就是编译。与编译有关的命令有下面一些:

#make dep(在2.6内核,不用执行这一步)

#make clean

#make zImage

#make bzImage

#make modules

#make modules_install

#depmod -a

第1个命令make dep实际上读取配置过程生成的配置文件。来创建对应于配置的依赖关系树,从而决定哪些需要编译而哪些不需要;第2个命令make clean完成删除前面步骤留下的文件,以避免出现一些错误。第3个命令make zImage和第4个命令make bzIamge实现完全编译内核,二者生成的内核都是使用gzip压缩的,只要使用一个就够了,他们的区别在于使用make bzImage可以生成大一点的内核,建议使用make bzImage命令。后面3个命令是有在进行配置的过程中,在回答Enable loadable module support(CONFIG_MODULES)时选了Yes才是必要的,make modules和make modules_insatll分别生成相应的模块和把模块复制到需要的目录中。严格的说,第7个命令和编译过程并没有关系,他是生成模块间的依赖关系,这样启动内核之后,是用modprobe命令加载模块时就能正确定位模块。

(4)更新内核。现在已经得到了新版本的内核,为了使用新内核,还要作下面的改动:

#cp /usr/src/linux/System.map /boot/System.map-(版本号)

#cp /usr/src/linux/arch/i386/bzImage /boot/vmlinuz-(版本号)

以上这两个文件是刚才编译时新生成的。下面修改/boot下的两个连接System.map和vmlinuz,使其指向新内核的文件:

#cd /boot;rm -f System.map vmlinuz

#ln -s vmlinuz-(新内核版本号) vmlinuz

#ln -s System.map-(新内核版本号) System.map

现在应该可以使用新内核了。

下面是转自其他地方的方法:

Step 1:

下载最新的(或你想要的Linux内核源码)

下载地址:www.kernel.org

可以通过uname -a命令查看当前系统内核的版本好及编译时间

得到源码后,将其解压到某个目录下

Step 2:

打开终端,进入源代码目录下,比如:

cd ~/linux/linux-2.6.20.1/

进入后,安全起见,先 make mrproper 一下,

以清除目录下所有配置文件和先前生成内核时产生的中间文件

接下来将要进行内核配置,这是最难也是最关键的一步

有四种方法可完成这件事情:

#make config

#make menuconfig

#make xconfig

#make oldconfig

我用的是第二种,但这时问题来了,运行命令后发生错误,而且一堆

最关键的错误信息是少一个库

原来,Ubuntu安装时缺少很多东西,尤其是编程方面的,需要自己通过“源”来安装

所谓“源”,不清楚,大概就相当于Windows的在线升级程序吧

Ubuntu自己带的源不全,速度慢不说,有的还连不上,所以要自己添加一些源

具体方法参见:http://wiki.ubuntu.org.cn/%E5%BF%AB%E9%80%9F%E8%AE%BE%E7%BD%AE%E6%8C%87%E5%8D%97/DapperDrake

把源设置好之后,就可以在线安装所需要的东西了

在这提醒一下使用Ubuntu的朋友:

使用源第一次进行自动更新的时候,Ubuntu里带的输入法也会更新

但这次的更新与上个版本不兼容,因此会导致输入法无法使用

我为这个问题郁闷半天,上网查很久才找到解决方法:

sudo apt-get remove fcitx
rm -R ~/.fcitx
sudo apt-get install fcitx

就是把原来的fcitx输入法卸掉,移除它在根目录下的配置文件(?好像是),然后重装

ok,言归正传,编译内核需要下面一些东西:

apt-get install libncurses5-dev  (meke menuconfig要调用的)

apt-get install libqt3-headers   (make xconfig要调用的)

上面列的不全,但你安装的时候,源会提示你,哪些包是推荐安装的

都装上就是了
如果连基本的编程库(gcc, make等)也没有的话

apt-get install build-essential

如果上面的东西都装完了,恭喜你,终于可以make menuconfig了

但先别急,相信你现在的系统正用得很爽

上网,声音,显示···什么问题都没有

但等你重新编译内核后,可能你就少些东西了,比如上不了网,声音没了等等

严重的连系统都进不了

为此,你最好把现在内核用的.config文件拷贝过来,当作模版

当你make menuconfig后,选倒数第二项:load config(好像是这个名字,记不清了)

把.config加载进来,这样你就能在原来内核的基础之上修改了

这时相信你只要别随便减去什么东西

编好内核后一样用得很爽

至于menuconfig里面数不清的选项都是什么意思

相信你即使很懂英文也看不太明白

但有一个选项,一般很少提到,就是如果你发现编译完之后

重启时进度条没有了

多半是因为你在Device-drivers==>Graphic ···==>Console···(路径记不清了)下有个

CONFIG_FRAMEBUFFER_CONSOLE,不能是M(动态加载),而是要×(编译进内核)

就是顺便提一下,如果你有这个问题,去找一找,呵呵
配置好后,强烈建议你把生成的.config文件备份一下

这样将来一旦有什么问题

你可以马上copy过来,在原来的基础上继续


--------------------------------------------------------------------------------

Step 3:

接下来就简单了

如果你人品够好,下面四个命令之后就ok了:

make clean

make -j4  (-j4是让处理器分成四个线程来编译内核,速度快,推荐CPU好的使用)

make modules_install

make install

结束后重启,就可以在启动菜单上看到新内核了

我人品不够,或者说Ubuntu太另类

居然不给我生成initrd文件

上网查,原来要用下面的命令:

make-kpkg clean (kpkg具体什么作用不懂)

make-kpkg --initrd --append to version Wing1 kernel_image kernel_headers  //这里原文有错误

应该是:(用root权限)

make-kpkg --initrd --append_to_version fly1 kernel_image kernel_headers

其中--initrd必需要,不然生成不了initrd文件

--append生成多重镜像,也就是在启动菜单里看到的选项

Wing1是你自己取的镜像的名字,必须以数字结尾,比如在这里写Wing1 //错误

镜像名字不能大写,所以改成fly1。

编号内核后,就会显示linux-2.6.20.1Wing1最后两项是生成镜像包和头文件包

make完之后,会在上一层目录看到两个deb包

用dpkg -i命令安装这两个包就好了

这个时候,一切都弄好了

可以去/boot目录下看看Vmlinuz、initrd、System.map文件是否都在

然后看看/boot/Grub/menulist文件中的内容是否已经加上你新编译的内核

如果是,恭喜你,放心大胆的重启吧

重启后,就可以进入你自己编译的内核了



另外一篇文章

1.将内核源码包linux-2.6.20.1.tar.bz2 copy至/usr/src目录下:

   #cp linux-2.6.20.1.tar.bz2 /usr/src

     #cd /usr/src

2.用以下命令解开压缩包

     #tar -jxvf linux-2.6.20.1.tar.bz2

3.进入到以后编译时用的工作目录下:

     #cd /usr/src/linux-2.6.20.1

     #make mrproper  // 该命令保证源代码目录下没有不正确的.o文件(即object文件,编译c语言时生成的,目的是 下一步编译成可执行码时link之用)以及文件的相互 倚赖关系.第一次编译刚下载的源码包不用此命令,但如果多次使用这些源码编译内核,那么一定要先运行本命令.

 4. 开始编译内核

   4.1. 在X Window下编译内核: #make xconfig

        假如在在文本模式下编译: #make menuconfig

   4.2接下来就是根据自己的实际情况进行选择需要注意的事:

        1:如果你的linux的文件格式是ext3的那么文件系统中的ext3一定要选择上,不要作为可选择模块。不这样的话,你的系统就可能启不来。

        2:本机的一些必要的驱动程序最好也直接加在,不要编译在可加载模块中。因此在编译内核之前最后把准备工作做好,看清楚自己机子的硬件设备、驱动程序。

         3:下面给出一些编译内核的具体选项的内容和含义,不同版本的可能选项有所不同具体可以使用“?“来看某项功能是否对自己有用。

         1.Code maturity level options:代码成熟等级。

           1.1.prompt for development and/or incomplete code/drivers. 在Linux的世界里,每天都有许多人为它发展支持的driver和加强它的核心。但是有些driver还没进入稳定的阶段。但其作者很欢迎其他人去测试 这些driver并提出一些bugs。很多参考书上说这是那些开发人员认为还不是很稳定的功能。但是我个人认为,这个是应该选的一个选项,系统默认是N, 我建议还是选择Y,因为会使性能有所提高。 如果要减少内核的大小可以把所有后缀试验性质的代码全部不选。        

        2.Loadable module support:对模块的支持。

           2.1.Enable loadable module support. 启动动态载入额外模块的功能,系统默认为Y,建议选择该功能。

           2.2.Set version information on all module symbols. 通常,我们更新核心版本之后,模块要重新的编译。这个选项可以为某个版本的内核编译的模块在另一个内核下使用,但通常用不到,可以不选,系统默认为Y。

           2.3.Kernel module loader. 让内核在启动时有自己装入必需模块的能力,建议选上。注意:在开机就会 mount 上来的 partition 的 FS 、device driver 记得要 compiler 进 kernel,不能把它弄成 modules。请不要夸张到为了完全模组化而忘了把ext2fs和IDE dirver compiler 进 kernel 里。通常的建议是如果可能,将内核代码编译成可加载模块,因为这样可以使内核更小,而且更稳定。警告!千万不要将文件系统(File System)部分的代码编译为可加载模块,如果你犯了这个错误,将文件系统(File System)部分的代码编译为可加载模块,结果将是内核无法读取它自己的文件系统。 然后内核无法加载它自己的配置文件——一些很明显是在正常启动Linux时所必需的东西。

        3.Processor type and features:处理器类型和特色

           3.1.Processor family. 它会对每种CPU做最佳化,所以要选择正确的CPU否则会对该机的性能有一定的影响。不过,如果您的gCC编译器是2.7.0版以前的。那么只能选择 386或是486。通常“/dev/cpu”选项更高级,多数用户并不需要选择它。需要注意的是不能选择比你的CPU类型还高级的CPU,否则可能不能正 常工作。

           3.2.High Memory Support. 只有当你的计算机有超过1GB内存时才是必须的。因此“High Memory Support”通常并不使用。

           3.3.Math emulation. 这项询问是否需L1nux核心模拟数学浮点运算器。如果有486Dx、AMD以及Pentium机器的话,这个选项就不必选了,因为它们都有内建的浮点运算器。系统默认为N。

           3.4.MTTR (memory type range register)support. 这项允许在PCI或者AGP总线众进行更快速的通讯。 由于现在所有系统都将它们的显卡接在PCI或AGP总线上,你通常需要选择“MTRR”:无论如何,打开这个选项通常都是安全的——即使你的机器没有使用 PCI或AGP总线的显卡

           3.5.Symmetric multi-processing support. 同步处理器支持该选项保证内核能够以最佳方式加载多处理器。假如被编译的计算机上有多个CPU。一般用户选择N。

           3.6.Mutiquad NUMA system. 通常也需要多处理器,但它通常是关闭的。
4.General setup:常规内核选项。

           4.1. Networking support. Linux网络支持,建议选上,否则可能导致内核无法编译。       

           4.2. PCI support. 现在的所有系统都使用PCI总线,系统默认为Y。

           4.3. PCI access mode. PCI存取模式。可供选择的有BIOS、Direct和Any,选Any吧。  

           4.4. Support for hot-pluggabel devices. 热插拔设备支持。支持的不是太好,可不选。

           4.5. PCMCIA/CardBus support------>PCMCIA/CardBus support. 有PCMCIA就必选了。

           4.6. System V IPC. 如果将来想编译dosemu(DOS模拟器),它是一个让各个程序(process)同步且能彼此交换数据的函数库和一些系统的调用,建议选择Y。

           4.7. BSD Process Accounting.

           4.8. Sysctl support. 除非你的内存少的可怜,否则你应该启动这个功能,启用该选项后内核会大8K,但能让你直接改变内核的参数而不必重新开机。以上三项是有关进程处理/IPC 调用的,主要就是System V和BSD两种风格。如果你不是使用BSD,就按照缺省吧。

           4.9. Kernel core (/proc/kcore/) format. 现在的Linux发行版以ELF格式作为它们的“内核核心格式”。

           4.10. Kernel support for A.OUT binaries. a.out的执行文件是比较古老的可执行码,用在比较早期的UNIX系统上。Linux最初也是使用这种码来执行程序,一直到ELF格式的可执行码出来 后,有愈来俞多的程序码随着ELF格式的优点而变成了ELF的可执码。将来势必完全取代a.out格式的可执行码。但目前由于沿有许多的程序还没有取代过 来,所以只好选择Y,等将来有一天,全部的程序都变成了ELF的天下时,那时再disable掉。

           4.11. Power Management support. 电源管理支持。

           4.12. Advanced Power Management BIOS support. 高级电源管理BIOS支持。这通常是用在笔记本电脑上的东西,如果您有APM的BIOS,支持省电的设备的(有电池的那种),那么您可以选上这项,一般人 这一项是选n,以避免一些可能会发生的问题。后有8个选项。ATX主板需要这两个选项来自动关闭计算机(turn off the computer,包括关闭电源)。

        5.Memory Technology Devices (MTD):配置存储设备。

           5.1. Memory Technology Devices (MTD) support. 你需要这个选项来使Linux可以读取闪存卡(Flash Card)之类的存储器。 闪存卡通常用于数码相机。 通过这个选项,Linux可以读取闪存卡(从特殊的设备中,比如读卡机),并且将图片保存为.jpg格式。除非你确定你需要它,否则不必打开它:如果你发 现自己需要,你可以在以后加上。

        6.Parallel port support:配置并口。

           6.1. Parallel port support. 如果不打算使用,就别选了。

        7.Plug and Play configuration:即插即用支持。

           7.1. Plug and Playsupport. 几乎所有人都有即插即用设备,因此需要这个选项的支持。 打开这个选项使内核能够自动配置即插即用设备并且使它们在系统中能够使用。 有时需要在BIOS中打开“Plug & Play OS”,否则Linux(当然Windows也一样)无法配置即插即用设备。

           7.2. ISA Plug & Play support. 选项需要以即插即用模式运行的ISA卡(ISA Card)。 例如AWE64声卡。假如有这个设备的话可以选择Y。

        8.Block devices:块设备支持。

           8.1. Normal PC floppy disk support. 普通PC软盘支持。大部分人都要使用软盘(floppy),所以这个选项要选择Y

           8.2. XT hard disk support. 支持XT的古董硬盘,这是IBM电脑时代的东西,如果您还有这种很旧很旧的硬盘。那么,您可以把它编进核心或是编成一个模块。大部分的人这个选项都是选择N的。

           8.3. Loopback device support. 这个选项的意思是说,可以将一个文件挂成一个文件系统。如果要烧光盘片的,那么您很有可能在把一个文件烧进去之前,看看这个文件是否符合IS09660的 文件系统的内容,是否符合您的需求。而且,可以对这个文件系统加以保护。不过,如果您想做到这点的话,您必须有最新的mount程序,版本是在2.5X版 以上的。而且如果您希望对这个文件系统加上保护,则您必须有des.1.tar.gz这个程序。

       9.Multiple devices driver support:多设备驱动支持。

           9.1. Multiple devices driver support. 普通Linux用户通常不需要RAID(廉价冗余磁盘阵列)或者LVM支持。 普通用户选择N。

       10.Networking options:网络选项。

           10.1. Packet Socket. 选择“Y”,你需要这个选项来与网卡进行通信而不需要在内核中实现网络协议。 在这里我可以简捷一些:一般情况下,打开这个选项。 大多数选项是关闭的,除非你需要特殊的支持。

           10.2. TCP/IP networking. 选择“Y”,内核将支持TCP/IP协议。建议用户选择Y。   

           10.3. IP:multicasting. 所谓的multicasting是群组广播,它是用在视频会议上的协议,如果想送一个网络封包(网络的数据),同样的一份数据将送往十部机器上。您可以连 续送十次给十台机器(点对点的传送),也可以同时送一次,然后让十台机器同时接收到。当然后者比前者好,由于视频会议要求是最好每个人都能同时收到同一份 信息,所以如果您有类似的需要,这个选项就要打开。同时您还必须去找相关的软件。

        11.Telephony Support:电话支持。

           11.1.Linux Telephony Support. 这个选项只有当你在计算机中使用电话卡的时候才有用,比如在Internet上打电话。 大多数普通用户没有电话卡,因此不需要这个选项。

        12.ATA/IDE/MFM/RLL support:配置对ATA,IDE,MFM和RLL的支持。

           12.1. ATA/IDE/MFM/RLL support. 几乎每个人都需要这些协议,除非你的机器只有SCSI硬盘而没有其他任何类型的硬盘。 因此,大多数用户都应该把它打开。 点击它下面的那一栏将会出现一个有更详细配置选项的菜单。仔细填写它们:它们极为重要!

           12.2.Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support. 选项是每个使用IDE/ATAPI界面的人都需要的。 包括硬盘,磁带机,ZIP盘,光驱(CDROM)和刻录机(CD-R(W))。 基本上现在的所有计算机(译者注:这里指的是PC)都使用IDE/ATAPI界面,因此这个选项必须打开。

           12.3. Include IDE/ATA-2 DISK support. 选项在支持硬盘的时候需要。 因此这个选项也必须打开,除非你的机器是一个纯粹的SCSI系统。 其它的就使用缺省的选项吧,如果你使用了比较特殊的设备,比如PCMCIA等,就到里面找相应的选项吧。

        13.SCSI support:SCSI设备的支持。

           13.1. SCSI support. 如果你有一块SCSI卡,你当然需要打开相关选项。这张截图只显示了当你为你的CD-R(W)选择“SCSI emulation support”

           13.2. SCSI disk support. 指硬盘而言,如果有SCSI硬盘,那么就要选这个选项。

           13.3. SCSI tape support. 指磁带机而言,如果您有SCSI的磁带机,那么就要选这个选项。

           13.4. SCSI CDROM support. 指CDROM,如果您有SCSI光驱,这一项一定要选。

           13.5. SCSI generic support. 指其他有关SCSI的东西,也许您有一台SCSI的扫描器或是烧录机,或是其他有关SCSI的配备,您就要选这一项。而且,除此之外,您还必须准备关于这些配备的软件。

           13.6. Probe a11 LUNs on each SCSI device. 通常这个选项大部分的人都不会选。我们举个例子来说,如果您的SCSI光驱是那种多片装的,就是一台光驱,但可以一次放好几片光盘片的那种。这种我们叫做 Lun。

           13.7. Verbose SCSI error reporting(kernel size+=12K). 如果认为您的SCSI硬件配备有些问题,想了解一下它出现的错误信息。那么您可以把这个选项选y,Linux核心会告诉您有关于您的SCSI配备的问题 (如果有的话)。不过,它会增加核心约 12KB左右。

           13.8. SCSI low—level drivers. 下面总共有接近30张的SCSI卡,您可以依需求做选择SCSI卡牌子。

       14.I2O Device Support:I20设备支持。

           14.1. I2O Device Support. 如果你有I2O界面,你必须选择这个选项。大多数人没有,如果你也没有的话,可以直接将它关闭。

      15.Network Device Support:网络设备支持。

           15.1. Network Device Support. 网络设备支持。上面选好协议了,现在该选设备了,可想而知,内容肯定多得很。还好还好,里面大概分类了,有ARCnet设备、Ethernet(10 or 100 Mbit)、Ethernet(1000Mbit)、Wireless LAN(non-hamradio)、Token Ring device、Wan interfaces、PCMCIA network device support几大类。我用的是10/100M的以太网,看来只需要选则这个了。还是10/100M的以太网设备熟悉,内容虽然多,一眼就可以看到我所用 的RealTeck RTL-8139 PCI Fast Ethernet Adapter support,为了免得麻烦,编译到内核里面好了,不选M了,选Y。耐心点,一般说来你都能找到自己用的网卡。如果没有,你只好自己到厂商那里去要驱动 了。

           15.2. Dummy net driver support. 如果有SLIP或PPP的传输协议,那么要把这一项打开。

           15.3. PPP(point-to-point)support. 点对点协议。

           15.4. SLIP(serial line) support. 这是MODEM族常用的一种通讯协议,必须通过一台Server(叫ISP)获取一个IP地址,然后利用这个IP地址,可以模拟以太网络,使用有关TCP/IP的程序。

           15.5.1. Ethernet(10 or 100Mbit). 如果您使用网络卡,那么这个选项一定要选y,否则以下对网络卡的选择将不会出现。或是您有网络卡,这时您同样的也要选y。像我们平常用的都是NE2000相容卡。

           15.5.2. EISA, VLB, PCI and on board controllers. 选择网络卡,包括直接附在主机板上的那种。如果选择y,则底下会列出其他的网络卡让您做选择,这些卡对于一般人来说很少会去用到。所以大部分的人这项是选 N的。

           15.5.3. Pocket and portable adaptors. 通常用在可携式的电脑上,这类型的网络卡(口袋型的),由于体积很小在安装和取下方面很方便,因此笔记本相关电脑上便常常采用这种网络卡。

           15.5.4. Token Ring driver support. Token Ring是 IBM电脑上的网络。它叫令牌环网络,和以太网络是很类似的东西。如果您希望使用的Token Ring网络卡以便连接到这种网络,那么选Y,一般人都选N。

           15.5.5. ARCnet support. 这也是一种网络卡,通常一般人用不到,所以选n。
 16.Amateur Radio support:配置业余广播支持。

           16.1. Amateur Radio support. 如果你希望使用业余广播支持,应该打开这个选项,并且打开相应的驱动。 多数人不需要这个选项。

        17.IrDA(infrared)support:配置红外线(无线)通讯支持。

           17.1. IrDA(infrared)support. 如果你有无线设备,比如无线鼠标或无线键盘,你应该打开这个选项。 多数桌面机器不需要这个选项。

       18.ISDN subsystem:配置ISDN。

           18.1. ISDN support. 如果使用ISDN上网,这个就必不可少了。

        19.Old CD-ROM drivers(not SCSI、not IDE):配置老CDROM。 在486和386机器中,CDROM并不是通过硬盘IDE(ATAPI)控制器连接的,而是通过声卡或一块特殊的板卡。 使用这些老CDROM需要选择对应的驱动。这个选项在现在的系统中显得多余。

        20.Input Core Support: 这个选项提供了2.4.x内核中最重要的特性之一的USB支持。 Input core support是处于内核与一些USB设备之间的层(Layer)。如果你拥有其中一种USB设备,你必须打开“input core support”选项。 现在所有的主板都有USB接口,所以,原则上你应该打开它。

        21.Character devices:字符设备。

           21.1. Virtual terminal. 选择“y”,内核将支持虚拟终端。

           21.2. Support for console on virtual terminal. 选择“y”,内核可将一个虚拟终端用作系统控制台。

           21.3. Standard/generic (dumb) serial support. 选择“y”,内核将支持串行口。标准序列接口的选定。如果您是用serial的鼠标(大部分的人都是用这个),或是MODEM的话,则这一项一定要选。大 部分的人这一项都选y。

           21.4. Support for console on serial port. 选择“y”,内核可将一个串行口用作系统控制台。

           21.5. I2C support. I2C是Philips极力推动的微控制应用中使用的低速串行总线协议。如果你要选择下面的Video For Linux,该项必选。

           21.6. Mice. 鼠标。现在可以支持总线、串口、PS/2、C&T 82C710 mouse port、PC110 digitizer pad------根据需要选择。 21.6.1. PS/2 mouse (aka "auxiliary device") support. 如果用户使用的是PS/2鼠标,则该选项应该选择“y”。

           21.7. Joysticks. 手柄。即使在Linux下把手柄驱动起来意义也不是太大,游戏太少了。

           21.8. Watchdog Cards. 虽然称为Cards,这个可以用纯软件来实现,当然也有硬件的。如果你把这个选中,那么就会在你的/dev下创建一个名为watchdog的文件,它可以 记录你的系统的运行情况,一直到系统重新启动的1分钟左右。有了这个文件,你就可以恢复系统到重启前的状态了。

        22.Console drivers:配置控制台驱动。

           22.1. VGA text console. 选项在VGA模式下启动字符模式。 多数人都需要它,因此这个玄学爱你跟通常是开着的。 只有一些386计算机没有VGA兼容显卡,选择这个选项对于现在的多数计算机来说都没有问题。

           22.2. video mode selection support. 使启动的时候能够使用字符模式的分辨率。 如果你希望一行能够有更多的字的话,这通常会给你提供方便,不过通常你不必打开它们。 下面两个选项是试验性质的,我建议你关闭它们。

       25.Sound sound:声卡驱动。 在这部分,你可以配置声卡。如果你的发行版使用的是内核的标准声卡驱动,你必须正确选择你使用的声卡。

       26.USB support:配置USB支持。

       27.kernel hacking:如果需要自己对linux进行内核的一些编写,驱动的编写可以打开,普通用户不需要选择N.

上面步骤结束后:

#make dep

#make clean

#make bzImage        //(I要大写的)

如果你用了模块,你还需要生成和安装模块:

#make modules

#make modules_install     //在/lib/modules/下生成了一个以你的版本为名字的文件夹

#depmod –a         //检查内核中有没有未解析的symbol,它是生成模块间的依赖关系,这样你启动新内核之后,使用modprobe命令加载模块时就能 正确地定位模块。假如输入这个命令后你看不到没有任何返回信息的话,那说明你在编译过程是已经成功了。

把bzImage拷贝到boot:

察看你的 /etc/lilo.conf 看用的是那个目录的那个文件作为
image。例如:image = /boot/vmlinuz
将 /usr/src/linux/System.map 复制到 /boot 目录中,将 /usr/src/linux/arch/i386/boot/zImage 复制到 /boot 目录中并改名为 vmlinuz
安装新内核并重新起动。
lilo
shutdown -r now


经典编译:
Ubuntu内核编译

首先,介绍一下编译内核的经典模式,这个可能都看过了。

    #make mrproper
    [说明]该命令确保源代码目录下没有不正确的.o文件以及文件的互相依赖。

    #make dep
    [说明]读取配置过程生成的配置文件,创建对应于配置的依赖关系树,从而决定哪些需要编译,哪些不需要。

    #make clean
    [说明]删除前面步骤留下的文件,以避免出现一些错误。

    #make bzImage (或#make zImage)
    [说明]完全编译内核。二者生成的内核都是使用gzip格式压缩的,区别在于编译后的文件大小。

    #make modules
    [说明]生成相应的模块。

    #make modules_install
    [说明]把模块拷贝到需要的目录中。

    #depmod -a
    [说明]生成模块间的依赖关系,这样你启动新内核之后,使用modprobe命令加载模块时就能正确地定位模块。

    #cp /usr/src/linux/System.map /boot/System.map-2.4.x
    #cp /usr/src/linux/arch/i386/bzImage /boot/vmlinuz-2.4.x
    [说明]把内核文件复制到/boot。

    #rm -f /boot/System.map /boot/vmlinuz
    #ln -s /boot/vmlinuz-2.4.x /boot/vmlinuz
    #ln -s /boot/System.map-2.4.x /boot/System.map
    [说明]更新软链接vmlinuz和System.map。

    #shutdown -r now
    [说明]重启。
由于我的测试环境是Ubuntu5.10,它是基于Debain的。
它的内核的升级是通过网络来进行的,要进行手工升级内核,但是它没有mkinitrd这个命令。

这个命令是RedHat专有的。其它Linux发行版或许有相应的命令。
mkinitrd的有无与一些发行版有关。

在Ubuntu下进行编译内核需要一些包的支持(这可以参照Ubuntu的官方文档):

当然,首先得装上编译工具,默认是没有的,装上就是了
建议安装libncurese-dev和libqt3-dev包,第一个是menuconfig所需要的,第二个用于xconfig,安装他们中的一个是很小的

对于2.6.的内核安装步骤,
make menuconfig
make
make modules_install
make install
2.6.的内核安装,make install应该会自动的检查系统中的引导程序,将其加入到lilo或者是grub中。但是Ubuntu5.10没有自动的加入。所以需要手工加入menu.list。

initrd.img的解决方案:

1、安照Ubuntu官方网站的方法,进行,下载fakeroot和kernel-package
fakeroot make-kpkg --append-to-version=.181004 kernel_image --initrd binary
dpkg -i kernel-image-x.y.z.yy.mm.dd_10.00.Custom_i386.deb

2、下载initrd-tools,安装的mkinitrd的包,http://packages.debian.org/unstable/utils/initrd-tools
Ubuntu下还缺少一个库,cramfsprogs,下载安装这个库。

mkinitrd -o initrd.img-2.6.15 /lib/modules/2.6.15/
或者是:
mkinitrd -o initrd.img-2.6.15 2.6.15

接着,修改一下grub的menu.list文件就可以了

另外,还有一种方法,需要内核的支持。在编译内核的时候,选上
File system-->Pseudo filesystems-->Automatically munt at boot(2.4内核上有,但是2.6内核上没有这个选项)
这样就可以不用initrd.img文件了。

由于Ubuntu是基于Debain的,所以可以采用Debain的经典方式进行内核编译:

在 Debian 系统中用源码编译自定义内核要特别小心。用 make-kpkg 的 --append_to_version 选项来创建多重内核镜像比较安全。

     # apt-get install debhelper modutils kernel-package libncurses5-dev
     # apt-get install kernel-source-2.4.18   # 使用最新版本
     # apt-get install fakeroot
     # vi /etc/kernel-pkg.conf                # 输入我的名字和 email
     $ cd /usr/src                            # 创建目录
     $ tar --bzip2 -xvf kernel-source-2.4.18.tar.bz2
     $ cd kernel-source-2.4.18                # 如果这是你的内核源码
     $ cp /boot/config-2.4.18-386 .config     # 将当前配置设定为默认配置
     $ make menuconfig                        # 按自己的喜好来定制
     $ make-kpkg clean                        # 必须执行这步(per: man make-kpkg)
     $ fakeroot make-kpkg --append_to_version -486 --initrd \
             --revision=rev.01 kernel_image \
             modules_image # modules_image 可以是 pcmcia-cs* 等。
     $ cd ..
     # dpkg -i kernel-image*.deb pcmcia-cs*.deb # 安装

make-kpkg kernel_image 实际上执行了 make oldconfig 和 make dep。如果没使用 initrd 就不要使用 --initrd 选项。

原文地址:https://www.cnblogs.com/276815076/p/1838719.html