SATA 驱动Linux编译内核应如何配置

1、本次实验共Linux编译内核了两次內核,在第一次Linux编译内核时对内核的配置这块没有把ext2ext3文件系统Linux编译内核进内核,导致了Linux编译内核完的内核无法成功启动在第二次Linux编譯内核中,经过仔细的对内核的配置把ext2ext3已经SCSILinux编译内核进内核,终于成功了这让我觉得内核Linux编译内核后能否成功启动的关键是内核的配置。

参考了linuxsir和水母的linux版的精华区本人不保留任何版权。

经过归纳整理看看上面的就可以了,包括补丁如何打具体的一些选项可以往下看,一些一看就懂的白痴选项并没有选进来,因此适合对电脑软硬件都有所了解的人参考

基本以2.6.5内核为例,虽然2.6的内核Linux编译内核囿更为方便的过程但这里还是按照最经典的方式,这样最保险一些过程说明经过了本人的精简,相关的疑问请自行用网络搜索答案呮保证本人看的懂;)一些设置按照自己的情况调整,不要完全照搬对于Linux编译内核内核造成的损失(比如LP跑了,再也不回来)本人不負任何责任:)仅供参考。

make mrproper (检查有无不正确的.o文件和依赖关系使用刚下载的完整的源程序包进行Linux编译内核,所以本步可以省略而如果你多次使用了这些源程序Linux编译内核内核,那么最好要先运行一下这个命令 )

选择完返回MainMenu,选择save and exit退出配置窗口并关闭超级用户终端。現在可以退出xwindows了回到文本环境(这样做可以加快内核Linux编译内核速度)执行最后操作

lilo -v 使改动生效。建议保留旧内核的项目避免Linux编译内核夨败。通常 grub 配置文件在下面三个地方(根据发行版的不同):

如果你的 kernel 支持内存镜像就用 mkinitrd 命令制作一个镜像文件,然后拷贝到 /boot 路径下偠这么做,也要记得在 make menu 的时候记得选择内核镜像 ram image并且不能安装为模块,否则 initrd 就不会运作生成映像文件,否则有时系统启动时会找不到/根分区

把旧内核源文件下的.config文件拷贝到新内核源文件下,

然后在新内核目录下运行make oldconfig如果想改动什么,可以

没有 make clean 之前如果增加了新的模块,可以直接 make menuconfig && make moduels && make modules_install不需要全部重新来过。如果你以后还要利用这次Linux编译内核的成果也可以省略这一步,如果你想直接删除源代码目录吔可以省略这一步。

一些升级内核前的备份过程:

建立指向新内核的位置到第三步中被改名的原目录 

(上面的两步的作用是保护真正的内核镜像不受损坏)

vmlinuz是压缩的内核二进制可执行文件

如果你的Kernel 配置支持Modules的话,解决那些问题是比较简单的

只要Linux编译内核那些.o文件就可以啦.

可以使用这种方式来安装任何补丁而不用管它的文件名了

自己定制Linux编译内核的内核运行更快(具有更少的代码) 

系统将拥有更多的内存(内核部分将不会被交换到虚拟内存中) 

不需要的功能Linux编译内核进入内核可能会增加被系统攻击者利用的漏洞 

将某种功能Linux编译内核为模块方式會比Linux编译内核到内核内的方式速度要慢一些 

查看swap有没有打开(用free指令)。此外最好不要超频,不然很有可能会发生signal 11的错误使得编到一半的核心停了下来

Math emulation:协处理器仿真。协处理器是在386时代的宠儿现在早已不用了。 

一般使用缺省设置就可以了

Sysctl support:以上三项是有关进程处悝/IPC调用的,主要就是System V和BSD两种风格如果你不是使用BSD,就按照缺省吧 

并口支持。如果不打算使用串口就别选了。 

还是选上吧可以拔下鼠标之类的体验一下Linux下即插即用的感觉。 

Linux下可以支持电话卡这样你就可以在IP上使用普通的电话提供语音服务了。记住电话卡可和modem没有任何关系哦。 

这个是有关各种接口的硬盘/光驱/磁带/软盘支持的内容太多了,使用缺省的选项吧如果你使用了比较特殊的设备,比如PCMCIA等就到里面自己找相应的选项吧。 

网络设备支持Linux编译内核到内核里面好了,不选M了选Y。

配置业余无线广播 

如果你使用ISDN上网,这个就必不可少了 

做的可真周到,原来那些非SCSI/IDE口的光驱谁还在用啊自己选吧,用IDE的CD-ROM不用选 

字符设备。这个内容又太多了先使用缺省设置,需要的话自己就修改把大类介绍一下吧: 

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

声卡驱动如果你能在列表中找到声卡驱动那自然最好,否则就试试OSS了 

配置了这个,即使在系统崩溃时你也可以进行┅定的工作了。普通用户是用不着这个功能的 配置完后,存盘退出当然你也可以把现在的配置文件保存起来,这样下次再配置的时候僦省力气了 接下来是Linux编译内核。 

make dep实际上读取配置过程生成的配置文件来创建对应于配置的依赖关系树,从而决定哪些需要Linux编译内核而那些不需要;第二命令make clean完成删除前面步骤留下的文件以避免出现一些错误;在回答Enable loadable module support (CONFIG_MODULES)时选了"Yes"才是必要的,make modules和make modules_install分别生成相应的模块和把模块拷贝到需要的目录中严格说来,depmod -a命令和Linux编译内核过程并没有关系它是生成模块间的依赖关系,这样你启动新内核之后使用modprobe命令加载模块时就能正确地定位模块。 

用Grub启动管理器则添加如下几项即可。 

装过显卡驱动比如Nvidia的话,你可以这样办

把以前安装的驱动删去

将與内核其它部分关系较远且不经常使用的部分功能代码Linux编译内核成为可加载模块,有利于减小内核的长度减小内核消耗的内存,简化该功能相应的环境改变时对内核的影响;不需要的功能就不要选;与内核关心紧密而且经常使用的部分功能代码直接Linux编译内核到内核中

核惢在保护空间运行,但模块并不是这么说,并不经常使用我的设备把它Linux编译内核成只支持ext2,ide和elf。而一直使用的网卡把其它的Linux编译内核荿模块:如a.out, java, floppy, iso9960, msdos, minix,

#Set version information on all module symbols------通常,我们更新核心版本之后模块耍重新的Linux编译内核。这个选项使您不必更新Linux编译内核模块而能使用以前的模块可以不选咜。但如果您选y则按照它的说明,您必须有genksyms这个程序(可用whereis指令查看有无此程序)

#System V IPC 如果将来想Linux编译内核dosemu(DOS模拟器),则这个选项一定偠选它是一个让各个程序(process)同步且能彼此交换数据的函数库和一些系统的调用,没它很多的程序将会无法执行。

#Sysctl support------除非你的内存少的鈳怜否则你应该启动这个功能,启用该选项后内核会大8K但能让你直接改变内核的参数而不必重新开机。

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

#Kernel support for Linux/Intel ELF binaries ------由上所述,这个当然y哩因为目前gcc-2.7.0以上的都有支持ELF了,如果没有选择这一项可能会使用相當多的程序因此无法执行。为大多机器制作一张紧急启动盘最好在386下Linux编译内核,而386并不能运行在Pentium下Linux编译内核的核心不能同时把 a.out 和 ELF 支援Linux編译内核成

##Advanced Power Management BIOS support------高级电源管理BIOS支持。这通常是用在笔记本电脑上的东西如果您有APM的BIOS,支持省电的设备的(有电池的那种)那么您可以选上這项,一般人这一项是选n以避免一些可能会发生的问题。后有8个选项

#CMD640 chipset bugfix/support------ 很多 486和 586的主机板都是用 CMD640的芯片,它是Neptune芯片和 SIS芯片的结合不过,这种芯片有它的缺点在许多的情形下,它会造成数据的流失和错误如果您选了这一项,则Linux核心会为您小心的寻找这些 错误并修正它而且,它会打开对二个IDE界面的支持不过,在它的说明文件中提到如果您的主机板没有PCI界面只有VESA总线界面却希望有这项功能的话,则您必须传一些 参数给核心(ideo=cmd640_vlb)如果不确定上面所说的,选择Y

#CMD640 enhanced support------一般来说,对于硬盘的存取速度来说有所谓的 PIO MODES值设定,现今的 IDE界面忣 BIOS应该都能侦测到正确的硬盘PIO MODE值了此值愈高表示硬盘的存取的速度愈快。可是有些主机板的B10S还是旧式的,不能抓到比较高的 PIO MODE值如此┅来,便不能发挥整台硬盘的效率这个设定告诉读者说:如果您的IDE界面是CMD640为基础*1*7和586的主机板都在使用它。可以查查主机板的说明书或是 IDE接口卡的说明书做确定文件上提到,选择这个将会降低一些速度但是数据能百分之百的正确。

#Intel 82371 PIIX(Triton I/II) DMA support------对于586的Pentium电脑来说有相当多的主機板都是用Intel的Triton芯片,使用这种芯片的最大好处是支持直接内存存取DMA而节省您的CPU时间。必须您的硬盘和主机板有同时支持 DMA的 IDE界面的芯片矗接与它们做沟通而节省了大量的 CPU时间。

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

#Multlnle devices driver support------这个选项可以让把整个硬盘分区变成一个单独的区块设备,您必须有md035.tgz这个程序而且在做這件事之前请将您的硬盘备份,因为它尚在测试阶段一般人对这个选项是选N。

#Packet socket ------ 选择“Y”一些应用程序将使用Packet协议直接同网络设备通讯,而不通过内核中的其它中介协议

#Kernel/User Network link driver------这个是在测试中的程序码,一般人不需要用依它的说明,它允许在核心、模块或程序间的某些部汾间彼此做双向的沟通。如果想使用arpd则这个程序码就要加进核心里。

#TCP/IP networking------选择“Y”内核将支持TCP/IP协议。这个选项无论如何请您选择Y即使沒有网络卡,或是没有连到网络上的设备在linux上仍有所谓的lookback设备而且有些程序需要这个选项。在说明文件中提到如果您没有打开这个设萣,则X-window system可能会有问题(回为它也需要 TCP/IP)

Firewall相反,这个选项是用来疏导网络的一个gateway(也就是router),要帮忙疏导两个网络间的数据传送這台机器必须要有两张网络卡,连接两个个同的网络做疏导网络的工作。如果选择了这个选项则表示想让这台负责做router。那么就必须囿两张网络卡了。另外有一种情形是如果您有MODEM(通过串列界面以 SLIP和 PPP协议)和网络卡,并用它们来连上Internet这时您也一样可以执行IP-routing服务,吔需把这个选项打开

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

#IP: accounting------如果您打开这个选项,您就可以在/proc/net下看到系统对于整个网络状况的纪录所以一般的人这个选项都是选y。而且如果您设计把这囼Linux机器当router用,那么读者可以因为这个选项而获得许多有关于网络lP控制的信息和它的输送情形

#IP:aliasing support------经由这个设定,您可以拥有数个IP地址假設您已经有一个lP地址了,您还想再加入其他的IP地址这时,您可以依下面的程序来做

#ifconfig eth0:0其他的IP地址(这个IP地址不能与其他机器重复)

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

#Dummy net driver support------如果有SLIP或PPP的传输协议,那么要把这一项打开因为一来它不会让您的Linux核心增大。二来对某些应用程序来说,它可以让峩们模拟出来的TCP/IP环境更像TCP/IP环境如果您没有SLIP或PPP协议,就不用打开了

#PLIP(parallel port) support------依字面上看,它是一种利用打印机的接口(平行接口)然後利用点对点来模拟TCP/IP的环境。它和 SLIP/PPP全都属于点对点通讯您可以把两台电脑利用打印机的连接接口串联起来,然后加入此通讯协议。如此一来这两部电脑就等于一个小小的网络了。不过如果电脑有提供打印服务的话,这个选项最好不要打开不然可能会有问题(洇为都是用平行接口)。

#PPP(point-to-point)support------点对点协议近年来,PPP协议已经慢慢的取代SLIP的规定了原因是PPP协议可以获取相同的IP地址,而SLIP则一直在改變IP地址在许多的方面,PPP都胜过SLIP协议

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

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

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

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

可以用来启动无线网络的基本支持目前的无线网络可以通过公众频率传输数据,如果你有此类设备就可以启用具体请参考AX25和HAM HOWTO 文档。

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

#Parallel printer support------有打印机的或是使用到并行接口的人這一项一定要选。除非是用serial的打印机还有如果您有使用PLIP,那么这项也请选上

#Mouse support------大部分的人这一项并不用选y。因为大部分的人是用serial的鼠标除非有些人是用一种附有接口卡的鼠标,这时这个选项才要选上如果您选y,则底下会列出您的BUS鼠标所用的接口卡

#Standard( minix )------新的套件不再建立 minix 文件系统,而且很多人不使用它但是把它配置在核心里仍然是个好主意。某些″rescue-disk ″ 程序会用到它而且仍然有许多磁片可能用 minix 文件系统,因为 minix 文件系统对于处理磁片方面是最好的Minix文件系统通常用在磁盘上,有时会用到它

#Extended fs ------ 这是扩充文件系统的第一版,现在已经不再使用

#Second extented fs------这是现在新发行的套件所广泛采用的文件系统,你可能会有其中一种这个是linux文件系统,请务必选y

#xiafs filesystem-----这个文件系统曾经一度很普遍,但是在写这份文件时我已经不知道有任何人在使用它了。

#ums-dos------相当 slick 的文件系统它能使 MS-DOS 文件系统拥有更多的特性,像是长档名等等这对那些不使用 MS-DOS 的人(像我)并不是很有用。

#Mandatory lock support------有些很特殊的database应用软件会用到它一般人这个选项是选n。而且如果选y的话,必须有最新版的NFS软件最新版的samba软件等。

#NCP filesystem support------NCP是一种网络的通讯协议用在跑IPX协议上,它可以利用IPX协议让两台电脑之间的文件共享并做沟通。如果您想挂上有關Novell的Netware文件系统那么这个选项就选上去吧。

#/dev/dsp and/dev/audio support------ 这个选项通常是必要的因此大部分的人选y,如果没有这选项则很多的游戏将没有聲音效果。

这个选项可以开启内核做效率统计的功能并且会提供其他在为

系统侦错时有用的信息。这些功能会需要付出一些代价并造成系

统执行得较为缓慢除非你正在研究内核的某个问题,否则你应

通俗的说这是windows安全模式,找不到明确解释,就引用这个说法>这是从 Linus嘚README里摘录的:″kernel hacking ″配置的细节通常会产生一个更大或是更慢的核心(或者是又大又慢),而且可能因为将一些常式配置成很活跃地去尝试Φ断一些不良的程序码以便找出核心里的问题而使得核心变得比较不稳定。所以要产生一个核心″产品 ″的话你在这

不建议使用热启動或ctrl+Alt+del键。在一些情况下文件系统不完全卸栽会损坏打开的文件。如果你没看见启动提示你可以试用shift或ctrl键,这样启动提示就出现了一旦出现,按tab看核心标签输入标签和可选参数启动。在机器重启后出现LILO时按TAB键输入linux2.6.5,新内核发挥作用了

以太网的默认值是PCI的以太网卡,对ne2000的默认支持方式是build-in即没有设成模块,所以如果你的网卡是ISA的那么务必要选择其中的other ISA card,最好把PCI intel pro选项去掉另外把ne2000 support选项改成module。

年纪大了记性不好,这篇文档莋为自学笔记也算是积累,给自己一个交待

Linux内核Linux编译内核的大致流程如下:

查询当前系统的版本号的命令:uname

二、配置内核:内核代码包括有很多功能,通过配置文件选择Linux编译内核选项,实现定制内核的目的

oldconfig,旧的配置文件.config会被备份同时用户只需要回答那些针对新增特性的问题。

Linux编译内核选项数量众多详细请参考《Linux内核配置参考》,反正我是直接使用默认生成的.config就可以了不过以下建议将避免您朂终得出一个不能工作的内核:

  1. 除非您使用初始化 ramdisk (initrd),否则绝不要把挂载根文件系统必需的驱动程序(硬件驱动以及文件系统驱动)Linux编译内核成模块!而如果您确实使用初始化 ramdisk请为 ext2FS 支持选项选择 Y,因为

  2. 如果您系统中有网卡将它们的驱动Linux编译内核成模块。这样您就能够在 /etc/modules.conf 中用別名定义哪一块网卡第一,哪一块第二等等。如果您将驱动程序Linux编译内核进了内核它们加载的顺序将取决于当初它们链接进内核的顺序,而这不一定是您想要的

  3. 最后,如果您不清楚某个选项的含义请阅读其帮助!而如果该帮助信息依然不能解决您的困惑,请保留该選项原来的样子(在 configoldconfig 中可以按 ? 键访问帮助。)

配置最终结束后请保存您的配置并退出。

所谓安装就是将Linux编译内核好的内核模块从内核源代码目录copy到lib/modules/目录下,并根据被Linux编译内核内核的版本号生成一个新的子目录我们在做实验的时候,为了安全起见最好备份好modules目录。

首先要了解内核与ramdisk的关系:

Linux系统在启动的过程中需要mount根文件系统,此时除非将根文件系统涉及的所有模块全部(各种文件系统、各种块设備驱动、IDE、SATA)Linux编译内核到内核文件否则内核无法完成根文件系统的mount操作,但是如果都Linux编译内核的话内核就太大了,所以一般来说驱动/模块都驻留在根文件系统本身上/lib/modules/xxx那么问题就来了,现在要mount根文件系统却需要根文件系统上的模块文件怎么办?于是就想出ramdisk,内核总昰能安装ramdisk的(注:这是因为ramdisk和内核一样都是一个内存文件也是由bootloader通过低级读写命令(如uboot用nand read,而不用通过文件系统层提供的高级读写接口)加载进内存因此内核可以挂载内存里ramdisk文件系统),然后把所有可能需要的驱动/模块都放在ramdisk上首先,让内核将ramdisk当作根文件系统来安装然后再用这个根文件系统上的驱动来安装真正的根文件系统,就将这个矛盾问题解决了

【相关知识】makefile文件:

内核版本号由 Makefile 的第一行决萣:

Makefile 后面,您会发现内核版本号的组成是:

所以我们可以自定义内核的版本号做的就是更改这些域之一以定义您自己的版本号。一般呮改变 EXTRAVERSION例如您将其改为


重新启动以后就ok要用nvidia的驱动,烸次升级内核都要这么做


重新启动系统,无线网卡就正常了

我要回帖

更多关于 Linux编译内核 的文章

 

随机推荐