运维系列&双系统系列:Linux内核编译问题详解
内核编译问题详解
- 内核编译问题详解
-
- 典型问题及解决方法
-
- RPM问题
- Glibc问题
- Hotplug(热插拔)问题
- Sysfs问题
-
- 解决方法是:
-
- ◆ 建立目录/sys:
- ◆ 在`/etc/rc.d/rc.sysinit文件`中找到“`mount -f /proc`”,在其下一行加入“`mount -f /sys`”。
- ◆ 同样在`/etc/rc.d/rc.sysinit文件`中找到“`action $"Mounting proc filesystem: " mount -n -t proc /proc /proc`”,在其下一行加入“`action $"Mounting sysfs filesystem: " mount -n -t sysfs /sys /sys`”。
- ◆ 在`/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}`”。
- USB问题
- Sound问题
- VMware问题
-
- 解决方法是:
-
- ◆ 将`/usr/bin/vmware-config.pl`中所有的“`/proc/ksyms`”替换为“`/proc/kallsyms`”。使用“`sed`”命令可以达到这个目的。
- ◆ 重新运行该脚本,使用内核头文件编译新的内核模块。在编译过程中如发生错误,应该入`/usr/lib/vmware/modules/source`,使用下面的命令将`vmnet.tar`解包:
- ◆ 进入`vmnet-only目录`修改`bridge.c文件`。将“`atomic_add(skb->truesize, &sk->wmem_alloc);`”修改为“`atomic_add(skb->truesize, &sk->sk_wmem_alloc);`”,并用类似的方式将“`protinfo`”改为“`sk_protinfo`”。
- ◆ 再次把`vmnet-only目录`用下面的命令重新打包为`vmmon.tar`:
- 其它问题
内核编译问题详解
对于用户,编译一个内核版本需要的不仅是升级内核和软件那么简单。一般来说,编译后的内核都能很好地工作,但是有些功能在初始化时(准确地说是在系统初始化阶段,即init
执行rc.sysini
和rcx.d时)会失败。失败的情况因人而异,比如有些人在笔记本上安装Red Hat 9.0
的USB设备
、Iptable
和RPM就全部失败,而有些人在安装PCMCIA设备
和FireWire设备
时会失败。
如果发现某些软件包无法正常工作,可以尝试下载最新的版本或重新编译、安装旧的版本,也可以通过进行一些相应的修改来解决问题。注意请在操作前备份文件。这里将总结一些常见的错误。
典型问题及解决方法
RPM问题
进入编译好的内核后,与RPM相关的命令有些不能使用,并出现下列错误:
rpmdb: unable to join the environment
error: db4 error