Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5286782
  • 博文数量: 1144
  • 博客积分: 11974
  • 博客等级: 上将
  • 技术积分: 12312
  • 用 户 组: 普通用户
  • 注册时间: 2005-04-13 20:06
文章存档

2017年(2)

2016年(14)

2015年(10)

2014年(28)

2013年(23)

2012年(29)

2011年(53)

2010年(86)

2009年(83)

2008年(43)

2007年(153)

2006年(575)

2005年(45)

分类: LINUX

2006-05-09 08:14:02

Kernel-2.6.x Rebuild document
爱喝清茶的猪 发表于 2004-12-14 13:56:00
  The Kernel Rebuild document. v0.27
                                                                                                                       
                                                                                                                       
首先你要知道2.6需要注意的几件事情:
多了一个sysfs虚拟文件系统
老版本的modutils不能用了,module-init-tools要安装。
modules.conf和modprobe.conf是怎么回事儿?
USB模块名都变了
声卡配置怎么办?kernel-2.6采用alsa, alsa的配置工具是什么?
升级kernel会导致一些软件不能使用吗?
什么版本的gcc都行吗?
。。。。。。
                                                                                                                       
                                                                                                                       
准备工作
                                                                                                                       
先看看这两个东西的结果,保存一下
/sbin/lspci                                                                                                            
cat /proc/cpuinfo                                                                                                      
这样呆会儿config的时候可以知道自己该选哪些设备
如果要打patch,现在据说是解压之后这样作:
patch -p1 <../patch-2.6.x....                                                                                          
                                                                                                                       
看看文档:源码解开以后的README
还有看/usr/src/linux-2.6.5/Documentation/Changes
    linux 2.6.5需要一些软件更新到一定版本才可以:
o  Gnu C                  2.95.3                  # gcc --version
o  Gnu make               3.79.1                  # make --version
o  binutils               2.12                    # ld -v
o  util-linux             2.10o                   # fdformat --version
o  module-init-tools      0.9.10                  # depmod -V                                                          
o  e2fsprogs              1.29                    # tune2fs                                                            
o  jfsutils               1.1.3                   # fsck.jfs -V
o  reiserfsprogs          3.6.3                   # reiserfsck -V 2>&1|grep reis                                       
erfsprogs
o  xfsprogs               2.6.0                   # xfs_db -V                                                          
o  pcmcia-cs              3.1.21                  # cardmgr -V                                                         
o  quota-tools            3.09                    # quota -V
o  PPP                    2.4.0                   # pppd --version
o  isdn4k-utils           3.1pre1                 # isdnctrl 2>&1|grep version
o  nfs-utils              1.0.5                   # showmount --version
o  procps                 3.2.0                   # ps --version                                                       
o  oprofile               0.5.3                   # oprofiled --version                                                
把该升的都升了。。。有些如果本来就不需要的就算了.
其中最重要的一个module-init-tool
☆──────────────────────────────────────☆
                        关于module-init-tool
    在编译安装modules,即make modules_install时,如果module-init-tools
没有到最新版本的话,(比如0.9.14或者3.0).在最开始有一行提示,让升级
module-init-tools的,并且会出错,symbol......
        并且。。就算通过了,也没法加载模块。。总之这个必须升级.
        2004年2月的版本是3.0
    还有一个问题是,module-init-tools 的默认安装路径是/usr/local/
会把lsmod装到/usr/local/bin/
其他几个文件装到/usr/local/sbin/
而系统原有的是在/sbin/
并且原有的lsmod是个link,  /sbin/lsmod -> insmod
所以这里即使你装了module-init-tools,也会在make modules_install的时候遇难。
所以看README
正确的安装module-init-tools的方法是
        tar -zxvf modules-init-tools-3.0.tar.gz
        cd modules-init-tools-3.0
        ./configure --prefix=/
        make
        make moveold
        make install
        ./generate-modprobe.conf /etc/modprobe.conf
        mv /etc/modules.conf /etc/modules.conf.bak
剩下几步不知道是否必须:
        4) If you are using devfs, copy modprobe.devfs to /etc
        5) You will need to run "depmod" for your new kernel, eg:
        depmod 2.5.50
        6) If you want to hack on the source:
        aclocal && automake --add-missing --copy && autoconf
还有mkinitrd需要用高版本的
☆──────────────────────────────────────☆
                        编译
据说不要在/usr/src/下面编译内核,所以我方在了别处
/home/xxxss/linux-2.6.5
编译之前,可以先改个名字,编辑Makefile
EXTRAVERSION =
这个后面来个名字啥的,比如-1xxxss
linux 2.6.5的编译步骤是:
    cd linux-2.6.5
    make mrproper
    make menuconfig             (或者xconfig config oldconfig .等等。。)
    make
    cp -af /lib/modules /lib/modules.bak        (备份老版的模块)
    make modules_install
切换到root
    make install
   (如果是制定输出目录,那么以上几步换成:)
    mkdir /home/xxxss/build;mkdir /home/xxxss/build/kernel;
    make O=/home/xxxss/build/kernel menuconfig;       (注意这里是大写O,不是0)
    make O=/home/xxxss/build/kernel;
    cp -af /lib/modules /lib/modules.bak;
    make O=/home/xxxss/build/kernel modules_install;
切换到root
    make O=/home/xxxss/build/kernel install;
☆──────────────────────────────────────☆
                        config的大概(我自己的一些改动,后面有个x都是我N掉的)
Code maturity level options  --->
        [*] Prompt for development and/or incomplete code/drivers
        这条本来是建议"除非要帮助测试或者尝试新功能才选",不过据说
        用了也没有什么问题,所以干脆保持默认编进内核吧。如果确实觉得
        对稳定有影响,就可以N掉
General setup ->
        全保持默认
        Support for hot-pluggable devices   如果有usb设备就加上这条吧
Processor type and features  --->
        Processor family --->
                (X) Pentium-III/Celeron(Coppermine)
        [ ] Local APIC support on uniprocessors
                这条在某些机子上有,如果不选会出条interupt信息
        < >Toshiba laptop support       去掉,
        < > Dell laptop support         去掉,
        High Memory Support (off)  --->
                (X) off                 这里改成off,因为内存不到4G
Power Management options
        -> Power Mangement support x
Bus options
 #        -> ISA Support x
Device Drivers
        -> Parallel port support
            ->Suport for pcmicia management for pc-style ports x
        -> SCSI Device support
                SCSI 支持不止是scsi设备需要,IDE的刻录机驱动也需要模拟
                成scsi模式,所以如果有这个,就得选上。
                另外如果你的root分区在scsi硬盘上,就必须把scsi支持编进
                内核,而不是编成模块。
            -> PCMICIA SCSI adapter support x
        -> Networking Support
            -> Networking options
                -> [*] Network packet filtering (replaces ipchains)
            -> Ethernet 1000 MBit x
            -> FDDI driver support x
            -> PPP Filtering x
            -> Token ring devices x
            -> Wan interfaces x
            -> Pcmcia network device support x
            -> ISDN??subsystem x
            -> Talephone Support x
        -> USB Support
            -> OHCI HCD Support M
            -> UHCI HCD Support M
        -> Input device support
            -> Mice
                -> PS2 mouse       这个编到内核里
file system ->
            ext3   编译进内核
            反正是把root分区的文件系统编进内核,否则initrd没法启动
Kernel Hacking x

☆──────────────────────────────────────☆
                        loopback devices
    接着遇到的问题是,make install内核的时候,有很大几率碰到
All of your loopback devices are in use.
mkinitrd failed
    这个问题很复杂...可能是当时系统内确实有东西使用光了loopback devices.
也可能是新换的modprobe和lsmod等无法正常工作导致.
    这个问题也不晓得怎么解决...
    大概modprobe loop;insmod loop 能解决?不知道了
☆──────────────────────────────────────☆
                        文件系统
    如果没遇到这个问题,那么内核编译安装完成后,重启后第一个问题是
    - mount: error 2 mounting ext3
    - pivotroot: pivot_root (/sysroot, /sysroot/initrd) failed : 2
    - umount /initrd/proc failed : 2
    - Freeing unused kernel memory: 212k freed
    - Kernel panic: No init found. Try passing init= option to kernel
    这个问题是由于redhat 7.3以后大家基本都用的是ext3文件系统,但是内核选项里面
ext3文件系统是默认作为模块编译的.并没有编译在内核里面,所以启动时没加载上模块
就会导致无法mount 到/文件系统.
    所以解决的一个简单方法是,把ext3编进内核.
    或者还有别的方法,比如利用mkinitrd创建 Initial RAMDisk
    这个initrd是解决那个启动时"鸡生蛋,蛋生鸡"问题的--驱动需要加载/分区
    文件系统,但是驱动自己又在/分区文件系统里,所以没法被加载.
    mkinitrd就是创建一个文件系统镜像,这个ramdisk镜像可以用来预加载
    块设备的模块(比如IDE,SCSI,或者RAID)以访问root文件系统,mkinitrd
    会自动加载/etc/modules.conf里面关于文件系统的模块(比如ext3或者jbd),
    IDE模块.scsi卡等的条目.
    不过这个需要编译内核时把ramdisk那两条编译到内核里.
    使用方法:
    mkinitrd /boot/initrd-2.6.5.img 2.6.5
        这里请注意,只有当你把根分区文件系统的支持编译成模块时,才需要initrd
        否则grub.conf里面不要带这条:
        initrd /boot/initrd-2.6.x.img
☆──────────────────────────────────────☆
    这个问题解决以后,下一个问题是
 'spurious 8259A interrupt: IRQ7'
还未解决..
    这个不知道到底有没有影响,似乎是说这个APIC不enable那么系统也照样走。
    所以不管了。。
☆──────────────────────────────────────☆
                        关于module和设备问题
    下一个问题是在开机自检是竟然检测到了ps/2鼠标,而这台机子上根本没有鼠标.
    还有就是usb-uhci 显示没有正常加载,虽然编译内核时选了usb
但是这两个模块默认没有被选上
        所以在内核里注意把usb uhci和ohci都选上,就可以了
    然后还要改几个地方:
    1, mkdir /sys
    2, 在/etc/rc.sysinit中,只要有mount -f /proc就在下面加上mount -f /sys
    3, 在/etc/rc.sysinit中,找到:
   将其中所有的/proc/ksyms替换为/proc/kallsyms。
   将其中所有的/proc/sys/kernel/modprobe 替换为/sbin/modprobe
在文件中的action $"Mounting proc filesystem: " mount -n -t proc /proc /proc 这一
句的下面添加 action $"Mounting sysfs filesystem: " mount -n -t sysfs /sys /sys
    4,在/etc/fstab中加上:
   none    /sys  sysfs   defaults  0 0
    5,把/etc/rc.d/init.d/halt中的:
   awk '$2 ~ /^/$|^/proc|^/dev/{next}
   修改成:
   awk '$2 ~ /^/$|^/proc|^/sys|^/dev/{next}
   如果不是上面那个样子,而是这样:
   awk '!/(^#|proc|loopfs|autofs|^none|^\/dev\/root| \/ )/ {print $2}' /proc/mou
nts
就改成:
   awk '!/(^#|proc|loopfs|sys|autofs|^none|^\/dev\/root| \/ )/ {print $2}' /proc
/mounts

        修改/etc/rc.sysinit
        找到下面这段:
*******************************************************************
usb=0
if ! LC_ALL=C grep -iq "nousb" /proc/cmdline 2>/dev/null && ! LC_ALL=C grep -q "
usb" /proc/devices 2>/dev/null ; then
    aliases=`/sbin/modprobe -c | awk '/^alias usb-controller/ { print $3 }'`
    if [ -n "$aliases" -a "$aliases" != "off" ]; then
      modprobe usbcore
      for alias in $aliases ; do
        [ "$alias" != "off" ] && action $"Initializing USB controller ($alias):
" modprobe $alias
      done
      [ $? -eq 0 -a -n "$aliases" ] && usb=1
    fi
fi
if ! LC_ALL=C grep -iq "nousb" /proc/cmdline 2>/dev/null && LC_ALL=C grep -q "us
b" /proc/devices 2>/dev/null ; then
  usb=1
fi
if [ $usb = 1 -a ! -f /proc/bus/usb/devices ]; then
    action $"Mounting USB filesystem: "  mount -t usbdevfs usbdevfs /proc/bus/us
b
fi
needusbstorage=
if [ $usb = "1" ]; then
    needusbstorage=`LC_ALL=C grep -e "^I.*Cls=08" /proc/bus/usb/devices 2>/dev/n
ull`
    LC_ALL=C grep 'hid' /proc/bus/usb/drivers || action $"Initializing USB HID i
nterface: " modprobe hid 2> /dev/null
    action $"Initializing USB keyboard: " modprobe keybdev 2> /dev/null
    action $"Initializing USB mouse: " modprobe mousedev 2> /dev/null
fi
***********************************************************************
改成:
*********************************************************************
modprobe usbcore
action $"Initializing USB controller (uhci-hcd): " modprobe uhci-hcd
usb=1
if [ $usb = 1 -a ! -f /sys/bus/usb/devices ]; then
    action $"Mounting USB filesystem: "  mount -t usbdevfs usbdevfs /sys/bus/usb
fi
needusbstorage=
if [ $usb = "1" ]; then
    needusbstorage=`LC_ALL=C grep -e "^I.*Cls=08" /sys/bus/usb/devices 2>/dev/nu
ll`
    action $"Initializing USB HID interface: " modprobe hid 2> /dev/null
    action $"Initializing USB keyboard: " modprobe usbkbd 2> /dev/null
    action $"Initializing USB mouse: " modprobe usbmouse 2> /dev/null
fi
**********************************************************************
然后检查一下rc.sysinit和/etc/rc.d/init.d/halt脚本,看看还有没有/proc/bus/usb的定
义,通通搞成/sys/bus/usb.
在/etc/modprobe.conf里面手动改动一条,把
alias usb-controller usb-uhci
换成
alias usb-controller uhci-hcd
这样修改的原因是
1,/proc/sys/usb定义是错的,应该是/sys
2,modprobe -c 能不能找到alias usb-controller,从而定义变量aliases为usb-uhci, 运
行一下是不能的。
3,模块名不对,usbcore, uhci-hcd(也就是usb-uhci的新版本) ,usbmouse和usbkbd才对。
上面贴的几段大概是rh9.0左右版本的,其他发行版本的如果不配套,那么根据
需要自己修改吧。。
一个处理2.4和2.6内核共存的简单办法:
对于kernel 2.4/2.6需要有不同处理的引导过程(包括有些模块加载过程),
可以在引导shell中判断uname -r值分别处理.
 将/etc/rc.d/rc.sysinit复制为rc.sysinit-2.4和rc.sysinit-2.6然后把rc.sysinit-2.6
根据需要修改,
 最后建立新的/etc/rc.d/rc.sysinit:
#!/bin/sh
if [ `uname -r` = "2.6.5" ]; then
exec /etc/rc.d/rc.sysinit-2.6
else
exec /etc/rc.d/rc.sysinit-2.4
fi
注意,那个uname -r 出来的别写错。。
还有别直接改/etc/rc.sysinit,因为这个是个链接,指向/etc/rc.d/rc.sysinit
☆──────────────────────────────────────☆
                                关于声卡
以前一直用oss,现在内核提供的是alsa.
找出一个配置工具alsaconf,这个是alsa-drivers的utils
配置,不行,找不到声卡,问题在于kernel-2.6的模块不再是.o而是.ko
修改alsaconf中所有的.o为.ko.
配置,OK,找到声卡为i810内嵌的,也就是ac97音效,正确的写入了
/etc/modules.conf,
lsmod一看,内核模块没有马上载入,说明alsaconf还是有点问题,
modprobe一下:
modprobe snd-intel8x0,OK了,内核驱动载入。
用alsa play播放:
aplay sample.wav
有声音了。

重启,lsmod看看,snd-intel8x0没有载入,/etc/modules.conf里不是有了吗?
以我的判断,肯定是正确的,试试generate-modprobe.conf,刚才那个
char-major-188的错误就是这么解决的。
做完之后,再重启,再lsmod看看,还是没有载入声卡驱动。
modprobe snd-intel8x0,出错,看来是modprobe.conf导致的,
把里面的sound相关配置通通删掉,重启后modprobe又可以出声了。
没有办法,好好读读alsaconf代码,发现了以前单独安装alsa的时候一个经典的东西:
alsasound启动进程。
这个东西也在alsadrivers的utils目录,找出来。
./alsasound start自动载入所有模块
./alsasound stop 自动卸载所有模块
OK,目的达到。
cp alsasound /etc/rc.d/init.d
chkconfig --add alsasound
再看看alsaconf原来可以进行测试声音的播放,只是以前从来没有把wav文件装上过,
拷贝一个wav文件,再次运行:
alsaconf
配置成功,然后自动载入模块成功,然后就是aplay这个wav.
还有两个东西可以参考:
        运行cat /proc/asound/cards看看声卡是否正常加载,
        运行alsamixer看看设备是否打开
还不行去
OK,至此为止,基本的kernel-2.6升级工作完成了。
不对的程序:
 usbmodules
lsusb, usbview, kde 信息中心中usb目录定义仍然不对,所以通过这些命令你看不到系统
任何usb信息
自己修正吧,其他的软件问题也不少,所以以上的工作是最基础的,所以建议大家没事不要
赶什么潮流。
对了,忘了说了,kernel-2.6安装后,我测试重新编译kernel-2.6,gcc出现异常,连续测试
7次,每次
都在随机的位置退出编译,说明gcc已经不能正常工作,可能又要LD_ASSUME_KERNEL,始终
不是一件好事。
继续升级glibc, gcc再所难免'
☆──────────────────────────────────────☆
                        关于rpm
        rh9.0升级了内核之后,有没有发现没法装rpm包了?
一运行rpm 就出现下面错误信息:
*********************************************************************
rpmdb: unable to join the environment
error: db4 error(11) from dbenv->open: Resource temporarily unavailable
error: cannot open Packages index using db3 - Resource temporarily unavailable (
11)
error: cannot open Packages database in /var/lib/rpm
warning: xxxxx.x.x.x.x.x.rpm: V3 DSA signature: NOKEY, key ID db42a60e
rpmdb: unable to join the environment
error: db4 error(11) from dbenv->open: Resource temporarily unavailable
error: cannot open Packages database in /var/lib/rpm
**********************************************************************
这个问题的解决办法是:
run "export LD_ASSUME_KERNEL=2.2.5", before running rpm.
This is thought to be a bug related to db4 and O_DIRECT interaction
如果你的realplay 不能用了,可能也是同样的问题,同样处理方法.
参考以下:
**********************************************************************
Here's what Penelope Fudd had to say about this problem:
The original RH9 glibc has the problem, the updated RH9 glibc is fine:

m
And when you update that, you need to update these:
I tried rpm -Uvh glibc*, but it was not a pain-free process, as rpm
choked halfway through.  I had to rpm -e the old one and rpm -Uvh --force
the new one.  That got it working.
***********************************************************************
☆──────────────────────────────────────☆
                                电源管理
        有没有发现关机shutdown以后电源不断了?
        内核里面记得选上:
            <*>   Advanced Power Management BIOS support
            [*]     Ignore USER SUSPEND
            [*]     Enable PM at boot time
            [*]     Make CPU Idle calls when idle
            [ ]     Enable console blanking using APM
            [ ]     RTC stores time in GMT
            [ ]     Allow interrupts during APM BIOS calls
            [ ]     Use real mode APM BIOS call to power off
        [ ] Symmetric multi-processing support绝对不要选
解释如下:
[*] Power Management support │ │//这一项必选,它就管你的关机
[ ] ACPI support │ │ //如果你的机器较新可以使用它,关于它的设置一会再说
<×> Advanced Power Management BIOS support │ │//如果你使用APM选这一项,适合老
机器
[ ] Ignore USER SUSPEND │ │
[ ] Enable PM at boot time │ │//这一项一般不用选,原因看我以前的贴子
[X ] Make CPU Idle calls when idle │ │//这一项请选它让你的机器在空闲时省电,不
过作用嘛不大,至于如何更好的省电,以后我再讲
[ ] Enable console blanking using APM │ │//这一项基本用不到,主要用来关闭LCD的
背光,还经常不起作用
[X ] RTC stores time in GMT │ │这一项如果想让时间正确请选
[ ] Allow interrupts during APM BIOS calls │ │这一项,如果你的机器在休眠后醒不
了请选
[ ] Use real mode APM BIOS call to power off //这一项如果你的机器老的只用上面的
选项不能关机请选,不过一般不要用它。
这样基本上你的机器就能够正常的进行关机休眠等操作了,当然你要有apmd这个守护程序,
不过一般的发行版都有了,不用你操心
再来看ACPI
[*] Power Management support //同上面一样这一项必选
[*] ACPI support //这个不用说了吧
[ ] ACPI Debug Statements //这个你愿意研究的话就选,大数人用不着
<*> ACPI Bus Manager //想省电必选
<*> System //同上
<×> Processor //建议为Y,原因同上
Button //建议为Y,默认情况下它的动作为按下电源钮就自动关机,当然你可以自定义
,以后再讲。
< > AC Adapter //桌面电脑永远都使用交流电不用这一项,如果你用笔记本那么选吧,其
实没用。
< > Embedded Controller //这一项,2.6中没有我就不知是作什么的了
如上你就可以使用ACPI了,不过请注意RH没有装ACPID这个守护程序,所以不管你怎么设置A
CPI都不起作用(别人的不知,我的就没装害的我纳闷了很久)  。所以请下载个最新的RPM包
装上重启就OK了。
☆──────────────────────────────────────☆
还有,如果你有刻录机,看到"ide-scsi"这种东西就不要留了,比如装rh9.0时可能
遇到的,2.6内核已经broken这个东西了
☆──────────────────────────────────────☆
                                VMware
    首先, 把/usr/bin/vmware-config.pl文件里所有``/proc/ksyms'' 替换成
     ``/proc/kallsyms''.运行 vmware-config.pl,会有错误信息. 解压
     vmnet.tar到/usr/lib/vmware/modules/source目录.
这会在那里创建一个vmnet-only目录.在那个目录里编辑bridge.c文件.
在368行附近, 找到下面这行:
atomic_add(skb->truesize, &sk->wmem_alloc);
替换成:
atomic_add(skb->truesize, &sk->sk_wmem_alloc);
同样的, 在618行和817行,把 protinfo 替换成 sk_protinfo.
然后把vmnet-only目录打包,替换掉老版本的vmnet.tar,然后重新运行
vmware-config.pl. 请确认vmware-config.pl使用了和你编译内核时相同的编译器.
下面是关于使用gcc 3.x的
*********************************************************************
[...]
And second, a recent change in struct task_struct makes the compilation of
vmware net modules fail. The workaround is simple: untar vmmon.tar, edit file
vmmon-only/linux/driver.c and substitue any occurrence of: current->uid,
current->euid, current->fsuid, current->egid, current->gid and
current->fsgid
for
current->__uid, current->__euid, current->__fsuid,
current->__egid, current->__gid and current->__fsgid, respectively.
PS1: the change in struct tast_struct took place in 2.6.0-test6-mm1, but
is not present in 2.6.0-test6.
PS2: kernel and VMware modules compiled with gcc 3.2.3 from Debian Sid
there's someting out there to get vmware-config.pl to run against the kernel usi
ng GCC 3.x. It's available at . He says the latest tar
ball (named vmware-any-any-updateXX.tar.gz) needs to be untarred and run instead
 of the usual vmware-config.pl. I didn't try this myself, though.
***********************************************************************
☆──────────────────────────────────────☆
                                防火墙
        netfilter ipt_unclean 的规则没有用了,所以remove the chain[s]
否则开机防火墙启动时会失败.
☆──────────────────────────────────────☆
                        mii-tool配置网卡
        你如果是使用 mii-tool 来配置网卡 ,现在可能就不行了,(as in my case).
安装使用 [ethtool] and using in lieu 就足够了 (甚至可能更好, 因为ethtool
看上去更强大).
☆──────────────────────────────────────☆
                        update和bdflush()
        在启动的日志里你可能能看到这些:
kernel: warning: process `update' used the obsolete bdflush system call
'update'是个使用bdflush()来清理硬盘的,现在这个已经被2.6的内核废除了,现在
改为使用内核控制pdflush
所以在 /etc/inittab 里面注释掉这行:
        #ud::once:/sbin/update
☆──────────────────────────────────────☆
                        一些工具程序
        如果你升级了很多工具到GNU发布的最新版本,并且选择了默认安装路径
(/usr/local/bin),并且把这个路径包含在了$PATH里第一条.有些工具却还是运行的
老版本.比如awk.
这样改:
1.      cd /usr/bin/
2.      mv awk awkORIG
3.      ln -s /usr/local/bin/gawk awk
这样就把旧版的awk保存为awkORIG,并且建了symlink到new GNU version 上.
其他hard coded的工具也类似处理.
☆──────────────────────────────────────☆
                                named
在boot logs里还有关于'named'以及它的控制器'rndc'的错误信息:
        process `named' is using obsolete setsockopt SO_BSDCOMPAT
去下载最新的 [bind source code 9.2.3],

解压,在/lib/isc/unix/socket.c里面找到需要修改的代码:
首先找到这个 (在1297行附近):
        #if defined(USE_CMSG) || defined(SO_BSDCOMPAT)
                int on = 1;
改成:
        #if defined(USE_CMSG)
                int on = 1;
再找到这段子程序(在1384行附近):
*********************************************************************
 #ifdef SO_BSDCOMPAT
        if (setsockopt(sock->fd, SOL_SOCKET, SO_BSDCOMPAT,
                       (void *)&on, sizeof on) < 0) {
                isc__strerror(errno, strbuf, sizeof(strbuf));
                UNEXPECTED_ERROR(__FILE__, __LINE__,
                                 "setsockopt(%d, SO_BSDCOMPAT) %s: %s",
                                 sock->fd,
                                 isc_msgcat_get(isc_msgcat, ISC_MSGSET_GENERAL,
                                                ISC_MSG_FAILED, "failed"),
                                 strbuf);

                /* Press on... /*
        }
 #endif
**********************************************************************
把这段全部注释掉,然后build ,install
这个版本在redhat上还有一个问题,我试图将named.pid 放在/var/run下面,但是
root是它的属主,'named'没有权限建立它.
所以在named.conf文件里添加
pid-file "/var/run/named/named.pid";
这一段到
 options {
           directory

                    }
这里就可以了
☆──────────────────────────────────────☆
                        USB存储设备
        数码相机的flash card reader.是个usb storage devices.
在编译内核时必须选上以下几项:
Device drivers
        -> USB Support
            -> [*]USB device file system
            -> USB mass storage support M
并且,usb mass storage 设备是像scsi设备一样对待的,所以还需要
编译内核时加上
scsi_mod etc
但是,如果就这样,你cat /proc/scsi/scsi
会发现'Generic Model: USB SD Reader',
这是因为这种多个设备一个槽的被认为是一个设备.
所以还需要在内核里加上:
        SCSI device support
                -> Probe alls LUNs on each SCSI device
这样在/proc/scsi/scsi里有四个槽,用/dev/sdb1就很容易mount上CF card 了
☆──────────────────────────────────────☆
                        硬盘dma
      hdparm测试
hdparm -tT /dev/hda
/dev/hda:
 Timing buffer-cache reads:   128 MB in  0.40 seconds =322.47 MB/sec
 Timing buffered disk reads:  64 MB in 13.73 seconds =  4.66 MB/sec
如果hdparm的dma 参数没法设置,在内核编译上
ATA/ATAPI/API/MFM/RLL support
        -> PCI IDE chipset support
                -> Generic PCI bus-master DMA support
                        -> Intel PIIXn chipset support
根据自己设备的实际情况选择.
然后就可以用hdparm -d1 /dev/hda设置dma了
☆──────────────────────────────────────☆
        键盘、鼠标的支持记得编译进内核,而不要编译成模块。
cd刻录需要scsi 设备支持,因为是模拟成scsi设备驱动的。
☆──────────────────────────────────────☆
        有些系统上grub.conf 会没法引导需要去掉"root=LABEL=/"
#kernel /vmlinuz-2.6.0-test10 ro root=LABEL=/
kernel /vmlinuz-2.6.0-test10 ro
☆──────────────────────────────────────☆
                        有些可能会启动时黑屏的
In the Character devices menu, if you don't see Virtual terminal as you first
selection, go back to the previous section (Input device support) and select
Input devices for compilation into the kernel then return here. Select
Virtual terminal to compile into the kernel. Also ensure you select Unix98
PTY support. Other selections are at your option. NOTE: you will want the
following line in your /etc/fstab file:
devpts     /dev/pts     devpts     default     0    0
Without the above line, those programs requiring a psuedo-terminal won't work.
There is another gotcha waiting below, but if you're impatient, see the
graphics support.
Graphics support has changed considerably and will cause confusion and a lack
of a working monitor for many. I highly suggest you choose frame buffer
device support. I use the boot parameter vga=791 on almost all my systems.
Choosing support for frame buffer devices will allow you to select the
generic VESA VGA graphics support. If you have a particular video card on the
list, I suggest you also choose that (or don't choose agpgart or dri support
or your kernel may fail to compile).
Regardless of whether or not you chose to include support for frame buffer
devices, the console display driver
 
阅读(1275) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~