LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 23972|回复: 41

内核管理概述

[复制链接]
发表于 2005-9-15 12:49:17 | 显示全部楼层 |阅读模式
作者:北南南北
来自:LinuxSir.Org
摘要:本文讲述与内核操作有关的基础知识;比如编译内核,装载、移除内核模块,查看模块信息等;本文涉及相关的命令有modprobe、insmod、depmod、rmmod、modinfo等;



++++++++++++++++++++++++++++++++++++++++++++++++++++++
正文
++++++++++++++++++++++++++++++++++++++++++++++++++++++



一、什么是内核;


内核官方:http://www.kernel.org  
内核洋文用 kernel,我刚才翻了一下词典,kernel 中文意思是内核、核心、中心、精髓的意思;也是果仁、果核的意思。从字面理解,kernel 是一事物的中心,植物的果实最重要的也是果仁和果核; 由此我们可以推断内核是操作系统的中心。

我们知道Linus Torvalds 开发了Linux ,其实他开发的就是内核,按内核官方主页的理解,这个内核就是Linux ;其它的扩展和应用都是围绕内核而展开的。所有Linux应用程序都会和内核发生直接或者间接的接触;比如硬件需要内核支持,网络的通信也需要内核支持;文件系统更需要内核支持... ...


直言我的能力的不行,如果您想了解和学习解操作系统,我写的教程只是初级应用,理论性的东西不是一言两语能说的清楚的,更不是应用者能说的清楚的。


二、为什么需要编译内核和管理内核


硬件是需要内核支持才行,有些硬件的支持没有被编入内核,这也需要我们重编内核;内核的包含的不仅仅是设备的驱动,还有其它的内容,比如网络协议的支持,防火墙的支持... ...  比如iptables的实现,有些功能是需要内核支持的,如果内核与iptables相关的内容没有被编入,iptables 相关的功能就无法实现;


三、内核编译方法


请参考: 请参考第二帖;谢谢;



四、管理内核模块的相关命令




1、lsmod  列加以挂载的内核模块;


lsmod 是列出目前系统中已加载的模块的名称及大小等;另外我们还可以查看 /proc/modules ,我们一样可以知道系统已经加载的模块;

  1. [root@localhost beinan]# lsmod
复制代码


2、modinfo  查看模块信息;


modinfo 可以查看模块的信息,通过查看模块信息来判定这个模块的用途;


  1. [root@localhost beinan]# moinfo  模块名   
复制代码


举例:


  1. [root@localhost beinan]# modinfo ne2k-pci

  2. filename:       /lib/modules/2.6.11-1.1369_FC4/kernel/drivers/net/ne2k-pci.ko
  3. author:         Donald Becker / Paul Gortmaker
  4. description:    PCI NE2000 clone driver
  5. license:        GPL
  6. parmtype:       debug:int
  7. parmtype:       options:array of int
  8. parmtype:       full_duplex:array of int
  9. parm:           debug:debug level (1-2)
  10. parm:           options:Bit 5: full duplex
  11. parm:           full_duplex:full duplex setting(s) (1)
  12. vermagic:       2.6.11-1.1369_FC4 686 REGPARM 4KSTACKS gcc-4.0
  13. depends:        8390
  14. alias:          pci:v000010ECd00008029sv*sd*bc*sc*i*
  15. alias:          pci:v00001050d00000940sv*sd*bc*sc*i*
  16. alias:          pci:v000011F6d00001401sv*sd*bc*sc*i*
  17. alias:          pci:v00008E2Ed00003000sv*sd*bc*sc*i*
  18. alias:          pci:v00004A14d00005000sv*sd*bc*sc*i*
  19. alias:          pci:v00001106d00000926sv*sd*bc*sc*i*
  20. alias:          pci:v000010BDd00000E34sv*sd*bc*sc*i*
  21. alias:          pci:v00001050d00005A5Asv*sd*bc*sc*i*
  22. alias:          pci:v000012C3d00000058sv*sd*bc*sc*i*
  23. alias:          pci:v000012C3d00005598sv*sd*bc*sc*i*
  24. alias:          pci:v00008C4Ad00001980sv*sd*bc*sc*i*
  25. srcversion:     6ACE95F441CD26DF9DC31C2
复制代码

上面的例子是我们查看 ne2k-pci 这个模块的信息,通过查看,我们知道ne2k-pci 模块是8029网卡(PCI NE2000 clone driver)的驱动;模块是位于 /lib/modules/2.6.11-1.1369_FC4/kernel/drivers/net/ 中ne2k-pci.ko


我们现在常用的网卡也有8139的,8139网卡所用的驱动是 8139too ;查查看?


  1. [root@localhost beinan]# modinfo 8139too
复制代码


我们再查查vfat 和ntfs 的模块信息;


  1. [root@localhost beinan]# modinfo vfat
  2. [root@localhost beinan]# modinfo ntfs
复制代码


自己尝试一下;

注意: 模块名是不能带有后缀的,我们通过modprobe -l 所看到的模块,都是带有.ko 或.o后缀;


3、modprobe 挂载新模块以及新模块相依赖的模块


modprobe 我们常用的功能就是挂载模块,在挂载某个内核模块的同时,这个模块所依赖的模块也被同时挂载;当然modprobe 也有列出内核所有模块,还有移除模块的功能;下在我们举个例子说一说咱们常用的功能和参数;


  1. modprobe [-v] [-V] [-C config-file] [-n] [-i] [-q] [-o <modname>] <modname> [parameters...]
  2. modprobe -r [-n] [-i] [-v] <modulename> ...
  3. modprobe -l -t <dirname> [ -a <modulename> ...]
复制代码


上面是modprobe 的用法,具体更为详细的帮助,我们可以查看 man modprobe ;


  1. [root@localhost beinan]# modprobe -c
复制代码


modprobe -c 可以查看modules 的配置文件,比如模块的别名是什么等;


  1. [root@localhost beinan]# modprobe -l
复制代码


modprobe -l 是列出内核中所有的模块,包括已挂载和未挂载的;通过modprobe -l ,我们能查看到我们所需要的模块,然后根据我们的需要来挂载;其实modprobe -l 读取的模块列表就位于 /lib/modules/'uname -r'  目录中;其中uname -r 是内核的版本;

  1. [root@localhost beinan]# uname -r
  2. 2.6.11-1.1369_FC4
  3. [root@localhost beinan]# ls /lib/modules/2.6.11-1.1369_FC4/
复制代码


通过上面的命令,自己试试看?


  1. [root@localhost beinan]# modprobe   模块名   注:挂载一个模块;
复制代码


举例:

  1. [root@localhost beinan]# modprobe ne2k-pci  注:挂载 ne2k-pci 模块;
  2. [root@localhost beinan]# modprobe vfat  注:挂载vfat 模块
  3. [root@localhost beinan]# modprobe ntfs   注:挂载ntfs 模块
  4. [root@localhost beinan]# lsmod    注:列出已挂载模块, 我们会看到ne2k-pci ,vfat ,ntfs的模块 ;
复制代码


注意: 模块名是不能带有后缀的,我们通过modprobe -l 所看到的模块,都是带有.ko 或.o后缀;



  1. [root@localhost beinan]# modprobe -r  模块名   注:移除已加载的模块,和rmmod 功能相同;
复制代码


注意:模块名是不能带有后缀的,我们通过modprobe -l 所看到的模块,都是带有.ko 或.o后缀;


  1. [root@localhost beinan]# modprobe -r  模块名
复制代码


举例:

  1. [root@localhost beinan]# modprobe  -r ne2k-pci
复制代码


就说这么多吧,更为详细的还是用 man modprobe 来查看和尝试;


4、rmmod  移除已挂载模块;


命令格式:

  1. rmmod  模块名
复制代码


注意: 模块名是不能带有后缀的,我们通过modprobe -l 所看到的模块,都是带有.ko 或.o后缀;

举例:


  1. [root@localhost beinan]# rmmod  vfat  注:移除已挂载的模块vfat
复制代码




5、depmod 创建模块依赖关系的列表


这个模块管理工具是创建模块依赖关系的列表,有几个参数我们注意一下就行了,目前的的Linux 发行版所用的内核是2.6x版本,是自动解决依赖关系,所以这个命令知道就行了;模块之前也有依赖关系,比如我们想驱动USB 移动硬盘,目前有两种驱动,一种是udev ,在内核中有,但目前不太稳定;另一种办法是用usb-storage驱动,而usb-storage 依赖的模块是scsi 模块,所以我们要用usb-storage 的模块,也得把scsi 编译安装;

再举个例子:sata的硬盘,在Linux中的设备表示的是/dev/sd* ,比如 /dev/sda,/dev/sdb 等...  系统要驱动 sata硬盘,则需要把sata在内核中选中,或编译成模块,或内置于内核之中,在此同时,还需要在内核中选中ide ,scsi 的支持等;
depmod 工具的洋文原意:depmod — program to generate modules.dep and map files.(我译的:为modules.dep 文件或映射文件创建依赖关系)


  1. [root@localhost beinan]# depmod  -a    注:为所有列在/etc/modprobe.conf 或/etc/modules.conf  中的所有模块创建依赖关系,并且写入到modules.dep文件;
  2. [root@localhost beinan]# depmod -e     注:列出已挂载但不可用的模块;
  3. [root@localhost beinan]# depmod  -n    注:列出所有模块的依赖关系,但仅仅是输出出来 (Write the dependency file on stdout only)
复制代码


注:modules.dep 位于 /lib/modules/内核版本 目录

比如 Fedora Core 4.0 中,系统默认的内核:

  1. [root@localhost beinan]# ls /lib/modules/2.6.11-1.1369_FC4/modules.dep
  2. /lib/modules/2.6.11-1.1369_FC4/modules.dep
复制代码



6、insmod 挂载模块;


insmod 这个工具,和modprobe 有点类似,但功能上没有modprobe 强,modprobe 在挂载模块是不用指定模块文件的路径,也不用带文件的后缀.o 或.ko ;而insmod 需要的是模块的所在目录的绝对路径,并且一定要带有模块文件名后缀的(modulefile.o 或modulesfile.ko );

对于这个工具,我们只是介绍一下, 并不推荐使用。因为模块有依赖关系,对于新手来说,可能不知道这个模块依赖和哪个模块依赖;

举例:


  1. [root@localhost beinan]# insmod /lib/modules/2.6.11-1.1369_FC4/kernel/drivers/net/tg3.ko
复制代码


我们要到 /lib/modules/内核版本 uname -r 的命令输出/kernel/drivers 中找相对应的模块才行,要有绝对路径,而且必须要用到文件名的全称,不能把文件名的后缀省略;



五、与内核模块加载相关的配置文件;



1、模块的配置文件 modules.conf 或 modprobe.conf  


内核模块的开机自动挂载模块一般是位于一个配置文件,一般的Linux发行版本都有 /etc/modules.conf 或 /etc/modprobe.conf 。比如Fedora Core 4.0 内核模块开机自动加载文件是 /etc/modprobe.conf ;在这个文件中,一般是写入模块的加载命令或模块的别名的定义等;比如我们在modules.conf 中可能会发行类似的一行 ;

  1. alias eth0 8139too
复制代码

而8029的网卡应该是

  1. alias eth0 ne2k-pci
复制代码


这样系统启动的时候,首先会modprobe 8139too ,然后再为8139too 指定别名为 eth0,然后我们在登录的时候,用 ifconfig 就会查看到网卡的IP 等情况,当然您得为网卡设置IP 才行;

一般的情况下,modproe.conf  或modules.conf的内容 是我们用相应的硬件配置工具而生成的;如果您的硬件驱动是没有被内核支持,您自己到硬件的厂商下载而来的驱动。一般的情况下都有安装和帮助文件。他们的驱动在配置时,他会写入硬件的支持到modules.conf 或modprobe.conf 文件中。

再比如我们的声卡在modules.conf 或modprobe.conf 中也有相应的内容,这是由alsaconf 配置工具生成的,明白了吧;同理网卡在modprobe.conf 或modules.conf中的内容也是由网卡的配置工具而来的。

有些硬件是以内核模块的方式驱动的,模块一旦加载上就能用,也没有什么配置工具,比如vfat 和ntfs 的支持;如果是硬件驱动不以模块的方式支持,而是直接编入内核,也不会用在modprobe.conf 或 modules.conf 中加入什么内容;

如果您有些模块不能开机加载,您想让一些模块加机自动加载,就可以把modprobe 模块 直接写入配置文件;


2、内核模块其它配置文件


内核模块的其它配置文件还是需要了解的,比如 /lib/modules/内核版本目录下的几个文件;了解一下就行;比如:


  1. [root@localhost beinan]# uname -r
  2. 2.6.11-1.1369_FC4
  3. [root@localhost beinan]# ls /lib/modules/2.6.11-1.1369_FC4/
  4. build   misc           modules.ccwmap  modules.ieee1394map  modules.isapnpmap  modules.symbols  source
  5. kernel  modules.alias  modules.dep     modules.inputmap     modules.pcimap     modules.usbmap
复制代码





六、硬件驱动在系统中的目录;



硬件驱动在内核中以模块支持的目录;


硬件驱动是必须由内核支持的,无论是我们自己安装驱动,还是内核自带的驱动都是如此。硬件驱动如果是以内核模块支持的,驱动目录位于: /lib/modules/内核版本/kernel/目录 或 /lib/modules/内核版本/kernel/drivers 目录中;


  1. [root@localhost beinan]# uname -r
  2. 2.6.11-1.1369_FC4
  3. [root@localhost beinan]# ls /lib/modules/2.6.11-1.1369_FC4/kernel
  4. arch  crypto  drivers  fs  lib  net  sound
复制代码


注:只有驱动在内核中以模块的方法支持,驱动才位于 /lib/modules/相应的目录;如果是直接置入内核的,不会出现在/lib/modules驱动相关的目录;



七、自己编译驱动的办法;


通过源码编译驱动一般是./configure ;make;make install ,有时程序不提供./configure  ,我们可以make或make install ,或者执行make;make install ;如果不能make install ,则需要我们自己复制.o或者.ko文件到   /lib/modules/内核版本/kernel/目录 或 /lib/modules/内核版本/kernel/drivers 目录中相应的驱动目录;

这个还是自己尝试吧,说也说不清楚,遇到问题后就知道怎么弄了;具体的还是驱动的REAME和INSTALL为准;


现在大多驱动都是在编译安装时,都自动复制.o或.ko 文件到内核模块目录,大多不用我们自己动手复制过去。如果您尝试编译安装声卡驱动 alsa-drivers 就会明白我所说的意思;



后记:


内核编译对新手来说是有点困难,我写过类似的文档也有好多篇,但是不是新手弟兄从中能学到点什么,我不太知道;毕竟我写的文档在内核文件告诉一些基本的流程和注意的事项;内核的配置只有多实践才能学会,在配置内核时,要多看看帮助;

内核模块管理方面我在本文中已经写了一些,大体上就这些,如果想要知道更为详细的,只能是自己看man 和--help了,我写文档也无非是查看这些东西,然后实践再写给大家;我能写出来,我想您的能力并不一定比我差,应该超出我才对;
 楼主| 发表于 2005-9-15 13:01:40 | 显示全部楼层
作者:北南南北
来自:LinuxSir.Org
提要: 编译内核主要是通过内核实现某些功能,比如iptables 需要内支持;所有的硬件的支持也是通过内核实现的;本文只是简单的给初学者讲一下编译内核的流程;


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
正文
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



一、为什么要编译内核;


有时我们为了实现某些功能,比如对iptables的防火墙有些需要内核支持;还有实现一些硬件的支持等,这时我们需要重编内核;



二、内核源码版本的选择;


如果发行版本提供内核源码,最好还是用发行版本提供的;比如Fedora 4.0 提供了很多版本的内核源码;我们安装好后,他自带的配置文件大多能满足我们的需要,对于新手来说,根据自带的内核的配置文件.config ,我们也能学到一点如何配置内核。也没有什么难的,熟能生巧罢了;

如果从 kernel.org 下载最新稳定版本的内核也是可以的;



三、内核源码安装或解压;


对于Fedora Core 4.0 来说,内核源码是放在 /usr/src/kernels 目录中;如果通过在线升级内核,也是放在这个目录中;如果您的系统中的 /usr/src/kernels/ 中没有内容,说明您没有安装内核的源码包 kernel-devel 软件包;

您可以通过软件包管理器来补装 ,请参考 《Fedora / Redhat 软件包管理指南》

如果您用Fedora Core 4.0 ,我建议您在保留老内核的基础上,在线下载最新版本的内核 kerenl-devel 和对应版本的 kernel 或者从 kernel.org 下载,有时可能新的kerenl 已经解决了您所面对的问题,这时就没有必要编译内核了;

如果您是通过在线安装的内核源码包 ,比如通过 apt+synaptic 或者yum 安装的,内核源码会被放到/usr/src/kernel 下的目录中,您要进入相对应的目录进行编译;

在线更新软件包,请参考 《Fedora / Redhat 软件包管理指南》,推荐 apt+synaptic 工具;

如果您是是下载kernel 和kernel-devel 的rpm 包,可以通过来安装;

  1. [root@localhost beinan]# rpm -ivh kernel*.rpm
复制代码


如果您是从kernel.org 下载的类似 linux-2.6.13.tar.bz2 或者 linux-2.6.13.tar.gz的,您要把下载下来的文件移到 /usr/src 目录中解压; 然后进入解压的目录中进行配置和编译;

  1. [root@localhost beinan]# mv linux-2.6.13.tar.bz2
  2. [root@localhost beinan]# cd /usr/src/
  3. [root@localhost src]# tar jxvf linux-2.6.12.3.tar.bz2
复制代码


提示:本文以linux-2.6.12.3为例,其实通过发行版的升级版的kernel-devel 和从kernel.org 下载下来的差不多,大同小异;不同的是通过在线升级的rpm格式的内核源码包,有配置文件.config 可以参考;安装到的目的地是/usr/src/kernel 对FC 4.0来说;如果您要高编译和配置内核,


四、内核的配置;



1、进入目录执行 make mrproper ,对于从 kernel.org 下载而来的tar.bz格式的源码包;


  1. [root@localhost src]# cd linux-2.6.12.3/
  2. [root@localhost linux-2.6.12.3]#
  3. [root@localhost src]# cd linux-2.6.12.3/
  4. [root@localhost linux-2.6.12.3]# make mrproper
  5. [root@localhost linux-2.6.12.3]# make menuconfig
复制代码


对于Fedora Core 4.0 ,如果您是通过在线安装的 kernel和kernel-devel 新版本的包,比如是2.6.12-1.1398_FC4-i686,你可以直进入 /usr/src/kernel/相应的目录中直接执行 make menuconfig ;利用发行版本提供的 .config 来配置,这样方便点。不要make mrproper ,否则.config 就没有了;这也是为什么要用发行版本提供的内核源码升级包的原因;


其它配置和安装大同小异;模仿总可以吧;


2.简要的配置内核;


进入配置内核的配置模式后,我们可能一无所知,看下面;

内核配置有两种方法,一种是直接置入内核 * ;另一种是编成模块 M ;两种方法各有优点;直接编入内核的,比如设备的启动,不再需要加载模块的这一过程了;而编译成模块,则需要加载设备的内核支持的模块;但直接把所有的东西都编入内核也不是可行的,内核体积会变大,系统负载也会过重。我们编内核时最好把极为重要的编入内核;其它的如果您不明白的,最好用默认。


1)移动键盘上下左右键,按Enter 进入一个目录。把指针移动到Exit就退出当前目录到上级目录;

2)针对自己机器存在的问题进行修改,比如大内存的支持;

选择自己机器的CPU;

移动键盘到 Processor type and features ---> ,然后按ENTER进入;
找到   Processor family (Pentium-Pro)  ---> 按ENTER进入;

进入后我们发现有好多CPU的型号可选;一般的情况下要根据
bash-3.00# cat /proc/cpuinfo 输出的信息来选,比如我们的是Celeron (P4)一代的,应该选如下的,当然默认的 486也是可以正常运行的,既然我们重编一次内核,就得选中对应型号的,也许性能有所提高呢;

  1. Processor family (Pentium-4/Celeron(P4-based)/Pentium-4 M/Xeon)
复制代码

对大内存支持;如果内存是1G或者1G以上,但小于4G的,就要选4G支持;如果超过4G的,要选64G的支持;


  1. High Memory Support (4GB) --->

  2. (X) 4GB
  3. ( ) 64GB
复制代码


还有比如声卡等硬件,需要我们一步一步的查看;如果有不明之处,就要按 [shift]+?的组合键来查看说明。一般的情况下,2.6.x的内核会根据机器的情况自动配出一个文件,只需要我们来查看一下,把重要的地方改改就行了;

再举个例子:比如我现在所用的声卡是intel ac97的,我应该怎么配置呢?

首先要知道自己的声卡的芯片组,我们要通过lspci -v 来查看;

  1. [root@localhost beinan]#lspci -v
复制代码

只查看声卡的,应该用如下的方法:

  1. [root@localhost beinan]# lspci -v |grep audio
  2. 00:1f.5 Multimedia audio controller: Intel Corp. 82801DB (ICH4) AC'97 Audio Controller (rev 03)
复制代码


通过上面的输出,我们知道这台机器用的是intel AC97声卡;所以我们要特别注意AC97的配置;


  1. 找到 Device Drivers ---> Sound --->
  2. <M> Sound card support 声卡的支持,这个是一定要选中的吧;
  3. <M> Advanced Linux Sound Architecture 对声卡支持的ALSA驱动的支持;
  4. 下面有OSS驱动,只是一部份。如果想用OSS的驱动更全的,可以去买;其它的就看如下的选吧;
  5. <M> Sequencer support
  6. <M> Sequencer dummy client
  7. <M> OSS Mixer API
  8. <M> OSS PCM (digital audio) API[*] OSS Sequencer API
  9. <M> RTC Timer support[*] Verbose printk
  10. [ ] Debug
复制代码


大多是默认的就好,如果您不知道是做什么用的,或者怎么用;

然后我们再向下看有

  1. Generic devices ---> 进入里面
  2. <M> Dummy (/dev/null) soundcard
  3. <M> Virtual MIDI soundcard
  4. <M> MOTU MidiTimePiece AV multiport MIDI
  5. <M> UART16550 serial MIDI driver
  6. <M> Generic MPU-401 UART driver
  7. ISA devices ---> 如果您用ISA声卡就在这里面选;
  8. PCI devices ---> 如果您用PCI声卡,就在这里面选,集成声卡也在这里;
  9. USB devices ---> 这是USB声卡内核支持选项;我有一个这样的声卡,但没有试过;
  10. PCMCIA devices ---> 这是PCMCIA声卡的选项,我还没有看过这样的声卡呢;如果您有,就在这里面动动手吧。
复制代码

因为我用的是Intel 集成的声卡,所以要在PCI中选择,我们在 中可以看到有两个与INTEL有关的;

  1. <M> Intel/SiS/nVidia/AMD/ALi AC97 Controller 这个才是Intel AC97声卡的;
  2. < > Intel/SiS/nVidia/AMD MC97 Modem (EXPERIMENTAL) 这个是机器集成的INTEL猫的蜂鸣器的;
复制代码

因为我发现如果把猫的蜂鸣器的驱动也选上,可能造成两个冲突。所以只能选上面的那个;


我们再回到 Open Sound System ---> 中看看,与我用的声卡是不是有关的?

  1. <M> Open Sound System (DEPRECATED)
  2. <M> Intel ICH (i8xx) audio support
  3. <M> OSS sound modules
  4. <M> Loopback MIDI device support
  5. <M> Microsoft Sound System support
复制代码

我们也可以看到Open Sound System中也有好多的声卡驱动,大家根据前面的lspci -v 来选择吧。


3)对于操作系统所采用的文件系统的支持要编入内核,最好不要编成模块;(重要)



比如我的Fedora core 4.0 所采用的文件系统用的是ext3 ,所以我要把它直接编入内核;好处是不受模块丢失或者损坏而不能启动系统;而有时您把系统所采用的文件系统编译成模块,出现VFS错误,也有这方面的事,可能是您没有把ext3加入到相应的加载模块的配置文件中,所以我们为了减少麻烦,把风险降到最低,还是要直接置入内模的好;

  1. File systems --->
  2. <*> Ext3 journalling file system support
  3. [*] Ext3 extended attributes
  4. [*] Ext3 POSIX Access Control Lists
  5. [*] Ext3 Security Labels
复制代码

如果您还有其它的硬盘分区要读取,比如是reiserfs、ext2、fat、fat32、ntfs等,这样的可以编成模块来支持;


再举一例:如果您的的操作系统用的是reiserfs的文件系统,当然就要把reiserfs的直接编入内核,其它的可以编成模块来支持了;


4)对于硬盘及RAID的支持,要直接编入内核;

比如ATA、SATA、SCSI及RAID的支持直接内核支持;有时编完内核后,启动时不能识别硬盘和RAID,大多事情出在这里;Slackware中在这方面有的是模块支持,我们可以把它由模块M改成内核*来支持; 如果您不明白,就按默认进行;SATA的硬盘的支持除了选中SATA的支持、IDE设备的支持以外,还要选中SCSI的支持;

5)对于咱们所没有的设备,可以在内核中不选,熟能生巧罢了;

比如我没有ISDN设备 ,所以就把ISDN去掉;

  1. ISDN subsystem --->
  2. < > Linux telephony support
复制代码



如果您没有1394的设备 ,当然可以把1394的支持也去掉;等等。。。。。。。

如果您有USB的设备,要把USB方面好好看看;比如大家常用的移动硬盘;USB猫等,还有扫描仪等;

内核配置就说这么多吧,太多了,我也说不清楚,水平有限啊;

配置好后先要保存

Save Configuration to an Alternate File

出来一个

Enter a filename to which this configuration ,should be saved as an alternate. Leave blank to abort.
.config

按回车就行了,这样就保存住了;


然后退出 Exit  ,这时也会出现保存 ;


如果你想把.config保存起来,可以再复制一份到安全一点的目录,以备后用;

五、编译内核;



  1. [root@localhost linux-2.6.12.3]# make
  2. [root@localhost linux-2.6.12.3]# make modules_install
复制代码


这样就编译好了,并把模块也安装在了 /lib/modules目录中了,请看:

  1. [root@localhost linux-2.6.12.3]# ls /lib/modules/

  2. 2.6.11-1.1369_FC4   2.6.12.3
复制代码



六、安装内核及配置grub或lilo ;


1、复制bzImage等相关文件,并创建initrd文件;


  1. [root@localhost linux-2.6.12.3]# cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.12.3
  2. [root@localhost linux-2.6.12.3]# cp System.map /boot/System.map-2.6.12.3
  3. [root@localhost linux-2.6.12.3]# cd /boot
  4. [root@localhost linux-2.6.12.3]# /sbin/mkinitrd initrd-2.6.12.3.img   2.6.12.3
复制代码


我们把 编译出来的bzImage,拷入到/boot目录,拷贝成 vmlinuz-2.6.12.3;
并且用 mkinitrd 来创建imitrd-xxx.img 文件,其中xxx为内核的版本号,是通过 查看 /lib/modules来版本来对应的,我们是编译出来的是 2.6.12.3,所以就运行上面的命令创建,创建的出来的是initrd-2.6.12.3.img ;不创建这个文件,有时是启动不起来的,比如提示VFS错误等;


2、查看系统引导管理器grub或者lilo的配置文件。


如果想要让新内核能让系统引导管理器grub和lilo的菜单上能看得到,必须改 grub.conf或者lilo.conf,但我们必须保留老内核的在grub和lilo的启动菜单,毕竟我们编内核不能百分百的成功,对不对??安全第一吧;

我只说grub的,我没有lilo,也不会用。所以咱们还是GRUB吧,FC 4 系统引导管理器是 GRUB,所以我们谈谈GRUB的设置;


查看 /etc/grub.conf;

比如我的grub.conf的内容是这样的;


  1. # grub.conf generated by anaconda
  2. #
  3. # Note that you do not have to rerun grub after making changes to this file
  4. # NOTICE:  You do not have a /boot partition.  This means that
  5. #          all kernel and initrd paths are relative to /, eg.
  6. #          root (hd0,7)
  7. #          kernel /boot/vmlinuz-version ro root=/dev/hda8
  8. #          initrd /boot/initrd-version.img
  9. #boot=/dev/hda
  10. default=0
  11. timeout=5
  12. #splashimage=(hd0,7)/boot/grub/splash.xpm.gz
  13. #hiddenmenu
  14. title Fedora Core (2.6.11-1.1369_FC4)
  15.         root (hd0,7)
  16.         kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/ rhgb quiet
  17.         initrd /boot/initrd-2.6.11-1.1369_FC4.img
  18. title WinXP
  19.         rootnoverify (hd0,0)
  20.         chainloader +1

复制代码



我们要把老内核的启动保留下来,以防不测,我们只加入新的内核的启动;所以我加上这样一段;


  1. title Fedora Core (2.6.12.3)
  2. root (hd0,7)
  3. kernel /boot/vmlinuz-2.6.12.3 ro root=LABEL=/ rhgb quiet
  4. initrd /boot/initrd-2.6.12.3.img

复制代码


咱们再来看一下改过后的配置文件;



  1. # grub.conf generated by anaconda
  2. #
  3. # Note that you do not have to rerun grub after making changes to this file
  4. # NOTICE:  You do not have a /boot partition.  This means that
  5. #          all kernel and initrd paths are relative to /, eg.
  6. #          root (hd0,7)
  7. #          kernel /boot/vmlinuz-version ro root=/dev/hda8
  8. #          initrd /boot/initrd-version.img
  9. #boot=/dev/hda
  10. default=0
  11. timeout=5
  12. #splashimage=(hd0,7)/boot/grub/splash.xpm.gz
  13. #hiddenmenu

  14. title Fedora Core (2.6.12.3)
  15.         root (hd0,7)
  16.         kernel /boot/vmlinuz-2.6.12.3 ro root=LABEL=/ rhgb quiet
  17.         initrd /boot/initrd-2.6.12.3.img


  18. title Fedora Core (2.6.11-1.1369_FC4)
  19.         root (hd0,7)
  20.         kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/ rhgb quiet
  21.         initrd /boot/initrd-2.6.11-1.1369_FC4.img
  22. title WinXP
  23.         rootnoverify (hd0,0)
  24.         chainloader +1
复制代码





然后重新启动机器,如果出现VFS错误,可能就是我写重要的那个地方出了错误;

注意:如果重新启用内核后,原来安装的显示卡驱动,比如 NVIDIA和ATI的驱动还要重新安装;

后记:

为写声卡及其其它硬件设备的安装教程做准备,重写此文档;并更正一些错误;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-9-15 13:51:03 | 显示全部楼层
要明白 知其然和所以然,还得看内核文档;
回复 支持 反对

使用道具 举报

发表于 2005-9-15 14:20:21 | 显示全部楼层
老大辛苦了:)
回复 支持 反对

使用道具 举报

发表于 2005-9-15 14:53:52 | 显示全部楼层
提个小建议。。。现在的精华文章那么多,找起来也不方便,为什么不搞个wiki呢?大家修改起来也方便啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-9-15 15:07:05 | 显示全部楼层
Post by fallen
提个小建议。。。现在的精华文章那么多,找起来也不方便,为什么不搞个wiki呢?大家修改起来也方便啊

谢谢兄弟的建议。。。因为SIR的的容量还算可以,所以咱们是的需要一个好的内容管理程序来管理SIR的精华文档了。。


我现在正在通过写fedora 教程来探索 sir主页建站模式的办法。我只是在fedora.linuxsir.cn  上实践。比如站点程序的选择,文档发布格式的约定; sir主页程序的选择是一个比较慎重的事情。因为以前有过一次失败的教训。所以目前咱们只能先实践和测试。

请访问  http://fedora.linuxsir.cn
回复 支持 反对

使用道具 举报

发表于 2005-9-17 20:01:07 | 显示全部楼层

编译安装中出现的问题,求救!

我是从2.6.9开始往最新的2.6.13升的,在编译顺利完成了,但在安装的时候出现错误,下午是系统发出的信,不知如何解决。。。。
From root@localhost.localdomain  Thu Sep 15 21:34:51 2005
Return-Path: <root@localhost.localdomain>
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
        by localhost.localdomain (8.13.1/8.13.1) with ESMTP id j8FDYoqj003855
        for <root@localhost.localdomain>; Thu, 15 Sep 2005 21:34:50 +0800
Received: (from root@localhost)
        by localhost.localdomain (8.13.1/8.13.1/Submit) id j8FDYn6b003853
        for root; Thu, 15 Sep 2005 21:34:49 +0800
Date: Thu, 15 Sep 2005 21:34:49 +0800
From: root <root@localhost.localdomain>
Message-Id: <200509151334.j8FDYn6b003853@localhost.localdomain>
To: root@localhost.localdomain
Subject: LogWatch for localhost.localdomain


################### LogWatch 5.2.2 (06/23/04) ####################
       Processing Initiated: Thu Sep 15 21:34:45 2005
       Date Range Processed: yesterday
     Detail Level of Output: 0
          Logfiles for Host: localhost.localdomain
################################################################

--------------------- Cron Begin ------------------------

**Unmatched Entries**
STARTUP (V5.0)
STARTUP (V5.0)

---------------------- Cron End -------------------------


--------------------- Kernel Begin ------------------------


WARNING:  Kernel Errors Present
   vesafb: probe of vesafb0 failed with error -6...:  2 Time(s)

---------------------- Kernel End -------------------------


--------------------- pam_unix Begin ------------------------

crond:
   Unknown Entries:
      session closed for user root: 10 Time(s)
      session opened for user root by (uid=0): 10 Time(s)


---------------------- pam_unix End -------------------------


--------------------- Connections (secure-log) Begin ------------------------


**Unmatched Entries**
userhelper[4562]: running '/sbin/poweroff' with root privileges on behalf of 'root'

---------------------- Connections (secure-log) End -------------------------


--------------------- sendmail Begin ------------------------



Bytes Transferred: 4804
Messages Sent:     2
Total recipients:  2
---------------------- sendmail End -------------------------


--------------------- SSHD Begin ------------------------


SSHD Killed: 2 Time(s)

SSHD Started: 2 Time(s)

Failed to bind:
   0.0.0.0 port 22 (Address already in use) : 2 Time(s)

---------------------- SSHD End -------------------------



------------------ Disk Space --------------------

/dev/mapper/VolGroup00-LogVol00
/dev/hda2              99M  8.9M   85M  10% /boot


###################### LogWatch End #########################
回复 支持 反对

使用道具 举报

发表于 2005-9-17 22:07:09 | 显示全部楼层
Thank you, 做个记号先
回复 支持 反对

使用道具 举报

发表于 2005-10-9 20:42:53 | 显示全部楼层
很有用
十分感谢
回复 支持 反对

使用道具 举报

发表于 2005-10-11 11:16:46 | 显示全部楼层
不错,老大的东西很经典
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表