19 12
发新话题
打印

2.6.8内核编译全过程(原创)

2.6.8内核编译全过程(原创)

2.6.8内核编译全过程
--版权所有--ayiiq180,转载请注明作者
经历了整整两天的编译、编译、再编译,终于搞定了2.6.8的内核,用着2.6.8的内核,现在写下这篇文章,给大家一个借鉴。
首先,必须得承认:2.6.8的内核速度真的很快,呵呵!
我的系统:rh as 3 update2。
1.下载及解压:到kernel.org下载2.6.8的内核源码包,然后解压到/usr/src下,形成一个linux-2.6.8的文件夹。
2.升级系统必要工具:包括module_init_tools和mkinitrd
安装module-init-tools-3.0.tar.gz工具包
linux-2.6.x内核的module处理过程有所改变(很多原先在用户态下由modutils处理的工作都放到内核里去完成了), 因此2.4.x下的modutils工具包已经不在适合新的2.6.x内核, 必需将其升级到module-init-tools工具包. 该工具包的最新版本是3.0。
可以下载module-init-tools-3.0.tar.gz源码包的地方有两个:
Rusty's Linux Kernel Page: http://www.kernel.org/pub/linux/ker...ools-3.0.tar.gz
http://www.kernel.org/pub/linux/uti...ools-3.0.tar.gz
接下来, 按照下列步骤安装module-init-tools工具包:
# configure --prefix=/
# make moveold
# make all install
# ./generate-modprobe.conf /etc/modprobe.conf
命令"make moveold"将把系统原来的modutils工具程序改名为"*.old"(比如,lsmod.old等等). NOTE! 这是非常重要的一步, 千万不要省略. 这将使得你可以继续使用原有的linux-2.4.x系统, 因为在2.4.x系统下, 新的module-init-tools工具包实际上是倚赖原来"*.old"程序来加载内核模块. 如果忘记了这一步也不要紧张, 可以先下载并安装原来的modutils程序包, 然后按照上面的步骤重来一遍就可以了.
新的module-init-tools工具包不再使用原来的/etc/modules.conf配置文件了, 而是使用新的配置文件/etc/modprobe.conf. 因此必需用命令"./generate-modprobe.conf  etc/modprobe.conf"来生成新的配置文件/etc/modprobe.conf.
更新mkinitrd程序
由于依赖性的问题,升级这个软件包需要下载如下包:
mkinitrd-3.5.15.1-2.i386.rpm,device-mapper-1.00.07-1.i386.rpm
device-mapper-1.00.07-3.1.i386.rpm  lvm2-2.00.08-2.i386.rpm
直接rpm -ivh安装即可。
3.内核配置及编译:
内核配置可以选择自己喜欢的工具,如make config,make menuconfig,make xconfig,make gconfig等,最终得到的效果都是一样的―生成一个“.config”。由于我是只安装了Gnome,所以make xconfig自然没法用了,好在make gconfig和make menuconfig都不错
内核配置中有几点需要注意的地方:
o关于"Loadable Module support"选项, 一定要选上"Module unloading"和"Automatic kernel module loading"这两个选项.
o 关于"rocessor type and features"选项, 一定要选上"reemptible Kernel"选项, 这是2.6.x内核优于2.4.x内核的重要原因之一.
o 关于"Block Devices"的配置, 一定要选上对loopback和ramdisk的支持.
o 关于"Multi-device support(RAID and LVM)", 要选上"device mapper".
o 关于"Input device support", 记得要选上"Keyboards"和"Mice"的支持.
o 关于"Graphics support", 要选上对frame buffer的支持,要安装nvidia驱动的绝对不要选择RIVA Frame buffer支持,如果选择了,将无法安装nvidia驱动。
o 关于"Sound":2.6.8内核默认是用的ALSA的驱动,选择如下:
        Device Drivers --->
        Sound --->
        [*[ Sound card support
        Advanced Linux Sound Architecture --->
       
  • Advanced Linux Sound Architecture
           
  • Sequencer support
            [ ] Sequencer dummy client
           
  • OSS Mixer API
           
  • OSS PCM (digital audio) API
  • OSS Sequencer API
           
  • RTC Timer support
            PCI devices --->
            [M] Intel i8x0/MX440, SiS 7012; Ali 5455; NForce Audio; AMD768/8111
            Open Sound System --->
            [ ] Open Sound System (DEPRECATED)
    我的声卡是Nforce2 AC97,用的驱动也是snd-intel8x0,而这个模块我编译成了模块,其实编译进内核也是一个好注意:)。
    o 关于USB, 几个重点模块usbhid,ohci-hcd,ehci-hcd,usbmouse,usbcore等等我全部直接编译进内核了,开始的几次都编译为模块,但是在rc.sysinit运行到modprobe的时候总是提示read-only filesystem,无法加载到内核,但是进入系统后手动modprobe又可以,所以一气之下全部编译进内核,反正我是用的usb鼠标,必须得有usb支持。
    o 关于文件系统, 选上常用的那几种就可以了. 如果要体验sysfs的话, 要选上对sysfs的支持(到现在我也不知道这个sysfs到底有什么用处?)但是,一个重点问题是Ext3的文件系统一定要直接编译进内核,这个非常重要,在配置完后一定要检查一下.config文件有没有"CONFIG_EXT3_FS=y"这一项. 如果不是"CONFIG_EXT3_FS=y"而是"CONFIG_EXT3_FS=m",你在运行内核时就会遇上以下错误: pivotroot: pivot_root(/sysroot,/sysroot/initrd) failed 。选项如下:
    File systems--->
  • Ext3 journalling file system support
  • Ext3 Security Labels
  • JBD (ext3) debugging support
    o 关于显卡驱动的问题,我的主板是Nforce2芯片组,显卡为Nvidia Geforce 4 Ti 4200,as 3刚刚安装时,无论怎样装显卡驱动或者修改XFconig,都无法正常使用显卡驱动,只要安装,使用nvidia模块x就必死无疑。经过反复研究,终于发现是内核中的Agpgart模块的问题,所以,内核配置中重点要选择如下:
    Device Drivers --->
    character Device--->
    <*> /dev/agpgart (AGP Support)
    <*>   NVIDIA nForce/nForce2 chipset support        
    其他就根据具体情况配置一下,懒得话默认也可以了。
    然后就:make
    make modules_install
    make install
    这时,你的grub.conf文件中已经多了一项新内核的启动项了。但是,2.6的内核不认识默认给出的root=LABEL=/,必须改成root=/dev/hda9,我的是hda9,你的根据实际情况而定。
    4.其他配置文件改动:
    /etc/modprobe.conf的修改:由于usb的所有模块都已经直接编译进了内核,所以/etc/modprobe.conf文件中所于关于usb的行都可以删除了,当然,如果你不想全部编译进内核的话,或者你能成功自动modprobe上的话(当然不是自己在rc.local中写modprobe),你就需要修改一些地方了:
    alias usb-controller usb-ohci要把它改为:alias usb-controller ohci-hcd
    alias char-major-13-32 mousedev改成alias char-major-13-32 usbmouse
    如果你有usb键盘的话还需要把:keybdev改成usbkbd
    下面部分的mousedev和keybdev都需要改成usbmouse和usbkbd
    另外,声音部分的模块名也改变了。我的原来的声卡驱动是i810_audio,现在已改为snd-intel8x0。因此需要删除原来的所有关于sound的行并把下面的内容添加到/etc/modprobe.conf中:
    alias char-major-14 soundcore
    alias sound snd-intel8x0
    alias sound-slot-0 snd-intel8x0
    alias snd-card-0 snd-intel8x0
    alias sound-service-0-0 snd-mixer-oss
    alias sound-service-0-1 snd-seq-oss
    alias sound-service-0-3 snd-pcm-oss
    alias sound-service-0-8 snd-seq-oss
    alias sound-service-0-12 snd-pcm-oss
    install snd-intel8x0 /sbin/modprobe --ignore-install sound-slot-0 && { /bin/aumix-minimal -f /etc/.aumixrc -L >/dev/null 2>&1; /bin/true; }
    remove snd-intel8x0 { /bin/aumix-minimal -f /etc/.aumixrc -S >/dev/null 2>&1; /bin/true; }; /sbin/modprobe -r --ignore-remove sound-slot-0
    /etc/rc.d/rc.local文件中我增加了一行:modprobe sound,用来自动加载声卡模块。
    /etc/rc.sysinit文件的修改:由于usb模块名称的改变和Hotplug需要的/proc/ksyms改名为/proc/kallsyms以及/proc/bus/usb改为/sys/bus/usb,这个文件也需要一定的修改:在文件头加入如下定义:
    #兼容2.4内核的变量定义部分
    #
    # ----- KERNEL 2.6.x support ------
    # This is for compatibility between kernel-2.4.x and kernel-2.6.x
    #
    UNAME=`uname -r`
    KERNELVER=${UNAME:0:3}
    if [ "$KERNELVER" = "2.6" ]; then
    #
    # This is kernel-2.6.x
    #
    KSYMS=/proc/kallsyms
    KEYBDEV_NAME=usbkbd
    MOUSEDEV_NAME=usbmouse
    USBPATH_NAME=/sys/bus/usb
    else
    #
    # This is kernel-2.4.x
    #
    KSYMS=/proc/ksyms
    KEYBDEV_NAME=keybdev
    MOUSEDEV_NAME=mousedev
    USBPATH_NAME=/proc/bus/usb
    fi
    #兼容2.4内核的变量定义部分
    然后, 把/etc/rc.sysinit脚本文件中出现keybdev和mousedev的地方都改为$KEYBDEV_NAME和$MOUSEDEV_NAME. 把所有/proc/ksyms改为$KSYMS,所有/proc/bus/usb改为$USBPATH_NAME。
    具体sys这个文件系统到底有没有用仍然不得而知。
    另外,由于我所有usb模块都编译进了内核,所以初始化usb设备的部分需要屏蔽,否则会在启动的时候出现找不到模块的失败错误。屏蔽如下,为了兼容2.4.21内核启动:
    #兼容2.4内核的部分,其实这里本来需要,但是usb模块编译进内核后就不需要了。
    if [ "$KERNELVER" = "2.4" ]; then
    needusstorage=
    if [ $usb = "1" ]; then
        needusbstorage=`LC_ALL=C grep -e "^I.*Cls=08" $USBPATH_NAME/devices 2>/dev/null`
        LC_ALL=C grep 'hid' $USBPATH_NAME/drivers || action $"Initializing USB HID interface: " modprobe hid 2> /dev/null
    #    action $"Initializing USB keyboard: " modprobe $KEYBDEV_NAME 2> /dev/null
         action $"Initializing USB mouse: " modprobe $MOUSEDEV_NAME 2> /dev/null
    fi
    fi
    #兼容2.4内核的部分,其实这里本来需要,但是usb模块编译进内核后就不需要了。
    Sysfs文件系统支持:
    首先, 创建目录/sys:
    # mkdir /sys
    然后, 按照下列步骤修改启动脚本/etc/rc.sysinit文件:

    o 找到行: mount -f /proc", 在下面增加:
    if [ "$KERNELVER" = "2.6" ]; then
    mount -f /sys
    fi
    o 找到行: action $"Mounting proc filesystem: " mount -n -t proc /proc /proc, 在其下面增加这样一行:
    #
    # Mount /sys for kernel-2.6.x
    #
    if [ "$KERNELVER" = "2.6" ]; then
    action $"Mounting sysfs filesystem: " mount -n -t sysfs /sys /sys
    fi
    接下来, 在/etc/fstab文件中, 加入这样一行:
    none /sys sysfs defaults 0 0
    最后, 修改/etc/init.d/halt脚本中的halt_get_remaining函数:
    将:
    awk '$2 ~ /^\/$|^\/proc|^\/dev/{next}
    改为:
    awk '$2 ~ /^\/$|^\/proc|^\/sys|^\/dev/{next}
    以上部分是借鉴别人的说法,具体有什么用不知道,事实上我只增加了一行mount -f /sys。
    到了这里,OK,可以重启了体验新内核了。GOOD LUCK!04年9月8日 ayiiq180      
  • 我是笨鸟,所以我先飞了^_^ I like basketball!It's a great game! I like Linux!It's a great OS! http://www.glgis.com http://www.catchbug.net

    TOP

    不错,很详细。不过不推荐在AS3上面使用2.6.x的内核,AS3的内核性能不会比2.6.x有明显差别。

    另:AS3UPDATE3已经出来了,ayiiq180有没有下载地址?昨天找到一个结果被骗,就是原始的AS3。      

    TOP

    我用的是kernel-2.6.8.1-nitro6
    速度确实不错
    我在编译的时候出现了一个什么offset的错误,继续也没有什么影响      

    TOP

    其实我是为了装nvidia的显卡驱动,如果不是我也懒得编译,现在用着不错,嘻嘻      


    我是笨鸟,所以我先飞了^_^ I like basketball!It's a great game! I like Linux!It's a great OS! http://www.glgis.com http://www.catchbug.net

    TOP

    AS3安装nvidia驱动没问题啊,除非你的显卡顶级新,一般不需要最新版本的驱动,当然理论上说能装还是装新的好。      

    TOP

    你弄一块ti4200+nforce2的主板就知道了,呵呵
    保证你装完后启动x必死无疑。
    ati的是可以直接安装,intel芯片组的也可以。      
    我是笨鸟,所以我先飞了^_^ I like basketball!It's a great game! I like Linux!It's a great OS! http://www.glgis.com http://www.catchbug.net

    TOP

    郁闷,嘿嘿。不过google没见到别人这么背啊,和nvidia有关的就是网卡和声卡的驱动有问题。      

    TOP

    呵呵      
    我是笨鸟,所以我先飞了^_^ I like basketball!It's a great game! I like Linux!It's a great OS! http://www.glgis.com http://www.catchbug.net

    TOP

    mkinitrd-3.5.15.1-2.i386.rpm,device-mapper-1.00.07-1.i386.rpm
    device-mapper-1.00.07-3.1.i386.rpm lvm2-2.00.08-2.i386.rpm
    以上软件包一定要安装吗?我用的是rh9。make的时候出了一个:no rule to make target arch/i386/kenerl/entry.o      

    TOP

    还有,你说的那个mkinitrd等4个包在哪里有下载啊?      

    TOP

     19 12
    发新话题