LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: 北南南北

学习编译内核── 为新手指南

[复制链接]
发表于 2005-11-18 12:57:01 | 显示全部楼层
多谢南北兄。安装南北兄的帖子,自己编译2.6.14.2的内核。
make modules_install 后显示
     ……
   INSTALL sound/pci/trident/snd-trident-synth.ko
  INSTALL sound/pci/trident/snd-trident.ko
  INSTALL sound/pci/vx222/snd-vx222.ko
  INSTALL sound/pci/ymfpci/snd-ymfpci.ko
  INSTALL sound/pcmcia/pdaudiocf/snd-pdaudiocf.ko
  INSTALL sound/synth/emux/snd-emux-synth.ko
  INSTALL sound/synth/snd-util-mem.ko
if [ -r System.map -a -x /sbin/depmod ]; then /sbin/depmod -ae -F System.map  2.6.14.2; fi
[root@nkwz linux-2.6.14.2]# ls /lib/modules/
在/boot 目录下没有发现2.6.14.2的img文件。

那出问题了?/thx
回复 支持 反对

使用道具 举报

发表于 2005-12-6 15:23:57 | 显示全部楼层
感谢了

我的出现了VFS的错误
还不知道怎么办
刚好看到了
回复 支持 反对

使用道具 举报

发表于 2005-12-6 15:27:19 | 显示全部楼层
vfs错误

刚好看见
去试试
回复 支持 反对

使用道具 举报

发表于 2005-12-6 22:43:18 | 显示全部楼层
按照上面的弄了

还是VFS错误
kernel panic-not syncing:VFS:Unable to mount root fs on unknown-block(0,0
回复 支持 反对

使用道具 举报

发表于 2006-1-7 09:33:17 | 显示全部楼层
请问那个.config文件是干吗的呢?没有要不要紧啊
第一次编译,在ftp.kernel.org下载了一个linux-2.6.15-rc7.tar.gz
可我不知道哪里找那个config文件
这个文件一定要吗?没有可不可以啊
回复 支持 反对

使用道具 举报

发表于 2006-2-23 14:41:25 | 显示全部楼层
按照楼主的方法编译、配置后,新的内核却总是重新启动,不知是什么原因?
回复 支持 反对

使用道具 举报

发表于 2006-4-11 09:27:23 | 显示全部楼层
好的,收下了……
回复 支持 反对

使用道具 举报

发表于 2006-5-19 20:15:36 | 显示全部楼层
Post by 北南南北

写在前面的话:

一般的情况下,编译内核对初学者来说的确是有点难度,对于象我这样刚入门的来说,也是一个考验。毕竟时间和精力有限,我没有时间把内核的所有文档看完,也没有办法完全弄懂。如果您的现实情况和我差不多,并且对内核编译不是太懂,或者说没有编译过。那不妨您看一下我写的这篇;


其实编译内核最花时间不是编译过程,而是配置和排错的过程;所以咱们用slackware的内核配置文件能把这个过程的时间省下来。省下来的时间做点什么呢??做点想做的吧;哈哈。

用Slackware内核的配置文件来编译自己的内核,无论你用的发行版本是什么的,都可以用这个方法来实践;


为什么要用slackware的内核配置文件来编译适合自己机器的内核呢??

Slackware的内核配置文件,都是现成的,早已配置好的,而且在Slackware中运行也是极为稳定。对于不会配置内核的新手弟兄,是一本最好的教材。另外Slackware的配置文件编译出来的内核不算太大。

其实我写本文的目的就是让新手用最短的时间内学会内核配置,别无它意;

本文适合:初初级新手;

注意事项:内核版本必须与Slackware提供的配置内核配置文件相对应;如果不太明白,或者我的表达不太准确,就直接安我说的做就行;



实践环境:Fedora core 4.0


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
正文:
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


一、下载官方current 的testing内核的源码;
地址:http://www.slackware.com/getslack/
从上面的地址找镜像,一般的情况下美国和日本的要快一点;

比如我们通过下面的地址得到 testing的内核 linux-2.6.12.3的源码目录;

ftp://slackware.mirrors.tds.net/pub/slackware/slackware-current/testing/source/linux-2.6.12.3/


我们要下载linux-2.6.12.3目录下的 linux-2.6.12.3.tar.bz2 ,接着下载 config-2.6.12.3


下载好了,我们进入下一步;

二、利用Slackware官方提供的 config-2.6.12.3文件来简单配置自己的内核配置文件 .config ;

1.解压内核及一些基础工作;

bash-3.00#tar jxvf linux-2.6.12.3.tar.bz2
bash-3.00# mv linux-2.6.12.3 /usr/src 把解压的内核移到/usr/src目录中
bash-3.00# cd /usr/src

bash-3.00# ls -lh

drwxr-xr-x 3 root root 4.0K 8月 3 12:49 kernels
drwxr-xr-x 19 root root 4.0K 8月 7 16:33 linux-2.6.12.3
drwxr-xr-x 7 root root 4.0K 8月 3 12:27 redhat


bash-3.00#cd linux-2.6.12.3
bash-3.00# pwd
/usr/src/linux-2.6.12.3

下一步是把下载下来的config-2.6.12.3这个文件复制到 /usr/src/linux-2.6.12.3中,然后接着复制成.config文件。
bash-3.00#cp config-2.6.12.3 .config 把config-2.6.12.3复制为.config

2.简要的配置内核;

bash-3.00#make menuconfig 进入配置内核的配置模式 ;

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

    1]移动键盘,选中 Load an Alternate Configuration File 项,把.config 调进来方便我们配置;因为这个配置文件是Slackware已经配置好的,我们只是稍加修改就行。

    2]针对自己机器存在的问题进行修改;比如我们在前文所提到的大内存支持的问题;

    选择自己机器的CPU;

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

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

    Processor family (Pentium-4/Celeron(P4-based)/Pentium-4 M/Xeon)

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


    High Memory Support (4GB) --->

    (X) 4GB
    ( ) 64GB


    还有比如声卡等硬件,需要我们一步一步的查看;如果有不明之处,就要按 [shift]+?的组合键来查看说明。一般的情况下,slackware的config文件早都配置好了,只需要我们来查看一下就可以了。

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

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

    只查看声卡的,应该用如下的方法:
    bash-3.00# lspci -v |grep audio
    00:1f.5 Multimedia audio controller: Intel Corp. 82801DB (ICH4) AC'97 Audio Controller (rev 03)

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


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


    然后我们再向下看有
    Generic devices ---> 进入里面
    <M> Dummy (/dev/null) soundcard
    <M> Virtual MIDI soundcard
    <M> MOTU MidiTimePiece AV multiport MIDI
    <M> UART16550 serial MIDI driver
    <M> Generic MPU-401 UART driver
    ISA devices ---> 如果您用ISA声卡就在这里面选;
    PCI devices ---> 如果您用PCI声卡,就在这里面选,集成声卡也在这里;
    USB devices ---> 这是USB声卡内核支持选项;我有一个这样的声卡,但没有试过;
    PCMCIA devices ---> 这是PCMCIA声卡的选项,我还没有看过这样的声卡呢;如果您有,就在这里面动动手吧。

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

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

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


    我们再回到 Open Sound System ---> 中看看,与我用的声卡是不是有关的?
    <M> Open Sound System (DEPRECATED)
    <M> Intel ICH (i8xx) audio support
    <M> OSS sound modules
    <M> Loopback MIDI device support
    <M> Microsoft Sound System support

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


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



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

    File systems --->
    <*> Ext3 journalling file system support
  • Ext3 extended attributes
  • Ext3 POSIX Access Control Lists
  • Ext3 Security Labels

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


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


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

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

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

    比如我没有ISDN设备 ,所以就把ISDN去掉;
    ISDN subsystem --->
    < > Linux telephony support


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


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

    配置好后先要保存

    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保存起来,可以再复制一份到安全一点的目录,以备后用;

    3]编译内核

    bash-3.00# make
    bash-3.00# make modules_install

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

    bash-3.00# ls /lib/modules/

    2.6.11-1.1369_FC4 2.6.12.3


    4]为Fedora core 4.0 安装内核;

    bash-3.00# cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.12.3
    bash-3.00# cp System.map /boot/System.map-2.6.12.3
    bash-3.00# cd /boot
    bash-3.00# /sbin/mkinitrd initrd-2.6.12.3.img 2.6.12.3 这个是用来创新initrd映像的,不创建这个文件,有时是启动不起来的,比如提示VFS错误等;


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

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

    我只说grub的,我没有lilo,也不会用。所以咱们还是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
    复制代码


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

    title Fedora Core (2.6.12.3)
    root (hd0,7)
    kernel /boot/vmlinuz-2.6.12.3 ro root=LABEL=/ rhgb quiet
    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错误,可能就是我写重要的那个地方出了错误;


    后记:请大家指教,谢谢。如果能对您有所帮助,这是我最想看到的;这个文档算是抛砖引玉;




  • 为什么没有用make install
    回复 支持 反对

    使用道具 举报

    发表于 2006-5-19 20:15:43 | 显示全部楼层
    Post by 北南南北

    写在前面的话:

    一般的情况下,编译内核对初学者来说的确是有点难度,对于象我这样刚入门的来说,也是一个考验。毕竟时间和精力有限,我没有时间把内核的所有文档看完,也没有办法完全弄懂。如果您的现实情况和我差不多,并且对内核编译不是太懂,或者说没有编译过。那不妨您看一下我写的这篇;


    其实编译内核最花时间不是编译过程,而是配置和排错的过程;所以咱们用slackware的内核配置文件能把这个过程的时间省下来。省下来的时间做点什么呢??做点想做的吧;哈哈。

    用Slackware内核的配置文件来编译自己的内核,无论你用的发行版本是什么的,都可以用这个方法来实践;


    为什么要用slackware的内核配置文件来编译适合自己机器的内核呢??

    Slackware的内核配置文件,都是现成的,早已配置好的,而且在Slackware中运行也是极为稳定。对于不会配置内核的新手弟兄,是一本最好的教材。另外Slackware的配置文件编译出来的内核不算太大。

    其实我写本文的目的就是让新手用最短的时间内学会内核配置,别无它意;

    本文适合:初初级新手;

    注意事项:内核版本必须与Slackware提供的配置内核配置文件相对应;如果不太明白,或者我的表达不太准确,就直接安我说的做就行;



    实践环境:Fedora core 4.0


    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    正文:
    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


    一、下载官方current 的testing内核的源码;
    地址:http://www.slackware.com/getslack/
    从上面的地址找镜像,一般的情况下美国和日本的要快一点;

    比如我们通过下面的地址得到 testing的内核 linux-2.6.12.3的源码目录;

    ftp://slackware.mirrors.tds.net/pub/slackware/slackware-current/testing/source/linux-2.6.12.3/


    我们要下载linux-2.6.12.3目录下的 linux-2.6.12.3.tar.bz2 ,接着下载 config-2.6.12.3


    下载好了,我们进入下一步;

    二、利用Slackware官方提供的 config-2.6.12.3文件来简单配置自己的内核配置文件 .config ;

    1.解压内核及一些基础工作;

    bash-3.00#tar jxvf linux-2.6.12.3.tar.bz2
    bash-3.00# mv linux-2.6.12.3 /usr/src 把解压的内核移到/usr/src目录中
    bash-3.00# cd /usr/src

    bash-3.00# ls -lh

    drwxr-xr-x 3 root root 4.0K 8月 3 12:49 kernels
    drwxr-xr-x 19 root root 4.0K 8月 7 16:33 linux-2.6.12.3
    drwxr-xr-x 7 root root 4.0K 8月 3 12:27 redhat


    bash-3.00#cd linux-2.6.12.3
    bash-3.00# pwd
    /usr/src/linux-2.6.12.3

    下一步是把下载下来的config-2.6.12.3这个文件复制到 /usr/src/linux-2.6.12.3中,然后接着复制成.config文件。
    bash-3.00#cp config-2.6.12.3 .config 把config-2.6.12.3复制为.config

    2.简要的配置内核;

    bash-3.00#make menuconfig 进入配置内核的配置模式 ;

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

    1]移动键盘,选中 Load an Alternate Configuration File 项,把.config 调进来方便我们配置;因为这个配置文件是Slackware已经配置好的,我们只是稍加修改就行。

    2]针对自己机器存在的问题进行修改;比如我们在前文所提到的大内存支持的问题;

    选择自己机器的CPU;

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

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

    Processor family (Pentium-4/Celeron(P4-based)/Pentium-4 M/Xeon)

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


    High Memory Support (4GB) --->

    (X) 4GB
    ( ) 64GB


    还有比如声卡等硬件,需要我们一步一步的查看;如果有不明之处,就要按 [shift]+?的组合键来查看说明。一般的情况下,slackware的config文件早都配置好了,只需要我们来查看一下就可以了。

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

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

    只查看声卡的,应该用如下的方法:
    bash-3.00# lspci -v |grep audio
    00:1f.5 Multimedia audio controller: Intel Corp. 82801DB (ICH4) AC'97 Audio Controller (rev 03)

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


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


    然后我们再向下看有
    Generic devices ---> 进入里面
    <M> Dummy (/dev/null) soundcard
    <M> Virtual MIDI soundcard
    <M> MOTU MidiTimePiece AV multiport MIDI
    <M> UART16550 serial MIDI driver
    <M> Generic MPU-401 UART driver
    ISA devices ---> 如果您用ISA声卡就在这里面选;
    PCI devices ---> 如果您用PCI声卡,就在这里面选,集成声卡也在这里;
    USB devices ---> 这是USB声卡内核支持选项;我有一个这样的声卡,但没有试过;
    PCMCIA devices ---> 这是PCMCIA声卡的选项,我还没有看过这样的声卡呢;如果您有,就在这里面动动手吧。

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

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

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


    我们再回到 Open Sound System ---> 中看看,与我用的声卡是不是有关的?
    <M> Open Sound System (DEPRECATED)
    <M> Intel ICH (i8xx) audio support
    <M> OSS sound modules
    <M> Loopback MIDI device support
    <M> Microsoft Sound System support

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


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



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

    File systems --->
    <*> Ext3 journalling file system support
  • Ext3 extended attributes
  • Ext3 POSIX Access Control Lists
  • Ext3 Security Labels

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


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


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

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

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

    比如我没有ISDN设备 ,所以就把ISDN去掉;
    ISDN subsystem --->
    < > Linux telephony support


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


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

    配置好后先要保存

    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保存起来,可以再复制一份到安全一点的目录,以备后用;

    3]编译内核

    bash-3.00# make
    bash-3.00# make modules_install

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

    bash-3.00# ls /lib/modules/

    2.6.11-1.1369_FC4 2.6.12.3


    4]为Fedora core 4.0 安装内核;

    bash-3.00# cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.12.3
    bash-3.00# cp System.map /boot/System.map-2.6.12.3
    bash-3.00# cd /boot
    bash-3.00# /sbin/mkinitrd initrd-2.6.12.3.img 2.6.12.3 这个是用来创新initrd映像的,不创建这个文件,有时是启动不起来的,比如提示VFS错误等;


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

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

    我只说grub的,我没有lilo,也不会用。所以咱们还是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
    复制代码


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

    title Fedora Core (2.6.12.3)
    root (hd0,7)
    kernel /boot/vmlinuz-2.6.12.3 ro root=LABEL=/ rhgb quiet
    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错误,可能就是我写重要的那个地方出了错误;


    后记:请大家指教,谢谢。如果能对您有所帮助,这是我最想看到的;这个文档算是抛砖引玉;




  • 为什么没有用make install
    回复 支持 反对

    使用道具 举报

    发表于 2006-5-19 20:15:49 | 显示全部楼层
    Post by 北南南北

    写在前面的话:

    一般的情况下,编译内核对初学者来说的确是有点难度,对于象我这样刚入门的来说,也是一个考验。毕竟时间和精力有限,我没有时间把内核的所有文档看完,也没有办法完全弄懂。如果您的现实情况和我差不多,并且对内核编译不是太懂,或者说没有编译过。那不妨您看一下我写的这篇;


    其实编译内核最花时间不是编译过程,而是配置和排错的过程;所以咱们用slackware的内核配置文件能把这个过程的时间省下来。省下来的时间做点什么呢??做点想做的吧;哈哈。

    用Slackware内核的配置文件来编译自己的内核,无论你用的发行版本是什么的,都可以用这个方法来实践;


    为什么要用slackware的内核配置文件来编译适合自己机器的内核呢??

    Slackware的内核配置文件,都是现成的,早已配置好的,而且在Slackware中运行也是极为稳定。对于不会配置内核的新手弟兄,是一本最好的教材。另外Slackware的配置文件编译出来的内核不算太大。

    其实我写本文的目的就是让新手用最短的时间内学会内核配置,别无它意;

    本文适合:初初级新手;

    注意事项:内核版本必须与Slackware提供的配置内核配置文件相对应;如果不太明白,或者我的表达不太准确,就直接安我说的做就行;



    实践环境:Fedora core 4.0


    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    正文:
    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


    一、下载官方current 的testing内核的源码;
    地址:http://www.slackware.com/getslack/
    从上面的地址找镜像,一般的情况下美国和日本的要快一点;

    比如我们通过下面的地址得到 testing的内核 linux-2.6.12.3的源码目录;

    ftp://slackware.mirrors.tds.net/pub/slackware/slackware-current/testing/source/linux-2.6.12.3/


    我们要下载linux-2.6.12.3目录下的 linux-2.6.12.3.tar.bz2 ,接着下载 config-2.6.12.3


    下载好了,我们进入下一步;

    二、利用Slackware官方提供的 config-2.6.12.3文件来简单配置自己的内核配置文件 .config ;

    1.解压内核及一些基础工作;

    bash-3.00#tar jxvf linux-2.6.12.3.tar.bz2
    bash-3.00# mv linux-2.6.12.3 /usr/src 把解压的内核移到/usr/src目录中
    bash-3.00# cd /usr/src

    bash-3.00# ls -lh

    drwxr-xr-x 3 root root 4.0K 8月 3 12:49 kernels
    drwxr-xr-x 19 root root 4.0K 8月 7 16:33 linux-2.6.12.3
    drwxr-xr-x 7 root root 4.0K 8月 3 12:27 redhat


    bash-3.00#cd linux-2.6.12.3
    bash-3.00# pwd
    /usr/src/linux-2.6.12.3

    下一步是把下载下来的config-2.6.12.3这个文件复制到 /usr/src/linux-2.6.12.3中,然后接着复制成.config文件。
    bash-3.00#cp config-2.6.12.3 .config 把config-2.6.12.3复制为.config

    2.简要的配置内核;

    bash-3.00#make menuconfig 进入配置内核的配置模式 ;

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

    1]移动键盘,选中 Load an Alternate Configuration File 项,把.config 调进来方便我们配置;因为这个配置文件是Slackware已经配置好的,我们只是稍加修改就行。

    2]针对自己机器存在的问题进行修改;比如我们在前文所提到的大内存支持的问题;

    选择自己机器的CPU;

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

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

    Processor family (Pentium-4/Celeron(P4-based)/Pentium-4 M/Xeon)

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


    High Memory Support (4GB) --->

    (X) 4GB
    ( ) 64GB


    还有比如声卡等硬件,需要我们一步一步的查看;如果有不明之处,就要按 [shift]+?的组合键来查看说明。一般的情况下,slackware的config文件早都配置好了,只需要我们来查看一下就可以了。

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

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

    只查看声卡的,应该用如下的方法:
    bash-3.00# lspci -v |grep audio
    00:1f.5 Multimedia audio controller: Intel Corp. 82801DB (ICH4) AC'97 Audio Controller (rev 03)

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


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


    然后我们再向下看有
    Generic devices ---> 进入里面
    <M> Dummy (/dev/null) soundcard
    <M> Virtual MIDI soundcard
    <M> MOTU MidiTimePiece AV multiport MIDI
    <M> UART16550 serial MIDI driver
    <M> Generic MPU-401 UART driver
    ISA devices ---> 如果您用ISA声卡就在这里面选;
    PCI devices ---> 如果您用PCI声卡,就在这里面选,集成声卡也在这里;
    USB devices ---> 这是USB声卡内核支持选项;我有一个这样的声卡,但没有试过;
    PCMCIA devices ---> 这是PCMCIA声卡的选项,我还没有看过这样的声卡呢;如果您有,就在这里面动动手吧。

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

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

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


    我们再回到 Open Sound System ---> 中看看,与我用的声卡是不是有关的?
    <M> Open Sound System (DEPRECATED)
    <M> Intel ICH (i8xx) audio support
    <M> OSS sound modules
    <M> Loopback MIDI device support
    <M> Microsoft Sound System support

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


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



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

    File systems --->
    <*> Ext3 journalling file system support
  • Ext3 extended attributes
  • Ext3 POSIX Access Control Lists
  • Ext3 Security Labels

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


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


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

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

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

    比如我没有ISDN设备 ,所以就把ISDN去掉;
    ISDN subsystem --->
    < > Linux telephony support


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


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

    配置好后先要保存

    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保存起来,可以再复制一份到安全一点的目录,以备后用;

    3]编译内核

    bash-3.00# make
    bash-3.00# make modules_install

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

    bash-3.00# ls /lib/modules/

    2.6.11-1.1369_FC4 2.6.12.3


    4]为Fedora core 4.0 安装内核;

    bash-3.00# cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.12.3
    bash-3.00# cp System.map /boot/System.map-2.6.12.3
    bash-3.00# cd /boot
    bash-3.00# /sbin/mkinitrd initrd-2.6.12.3.img 2.6.12.3 这个是用来创新initrd映像的,不创建这个文件,有时是启动不起来的,比如提示VFS错误等;


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

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

    我只说grub的,我没有lilo,也不会用。所以咱们还是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
    复制代码


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

    title Fedora Core (2.6.12.3)
    root (hd0,7)
    kernel /boot/vmlinuz-2.6.12.3 ro root=LABEL=/ rhgb quiet
    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错误,可能就是我写重要的那个地方出了错误;


    后记:请大家指教,谢谢。如果能对您有所帮助,这是我最想看到的;这个文档算是抛砖引玉;




  • 为什么没有用make install
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

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