linux内核的编译(4)
2008-02-23 07:17:46来源:互联网 阅读 ()
般是经由外来的软体来利用,在这里列出一部分最普遍的:
4.1. kbd
Linux 的控制台有著比你所能吃惊更多的特色。这包括切换字型,重新对映你的键盘,
切换显示模式(比较新的核心)的能力等等。kbd 这套软体里有能够让使用者做这些动
作的支援程序,还加上一大堆的字型以及几乎足以适用任何键盘的一些键盘对映表。
4.2. hdparm
像很多软体一样,这曾经是一个核心修补档及其支援程序。这些修补档被公认为核心的
一部分,而用来最佳化以及调适你硬碟的支援程序一般是分开发行的。
5. 一些陷阱
5.1. 清除
如果你的新核心会做一些真的很奇怪的事(这曾经发生在我身上),有可能是因为你忘
了做清除( make clean )。症状从你的核心不正常地崩溃到奇怪的输出入问题,一直
到可怜的执行效率等等不一而足,可以是任何事。最好也要确定你有做确认( make
dep )。
5.2. 巨大或缓慢的核心
如果你的核心占用了大量的记忆体,或者它真的是很大很大,也或者是即使用你全新的
486DX6/440 来编译却都还像是永远编译不完的话,那麽有可能是因为你配置了太多不
必要的东西(设备驱动程序,文件系统等等)。如果你不会用到某些东西,那就不要配
置它,因为它真的会占用记忆体。
如果你的记忆体少於 16 Megs ,确定你在″ limit memory to low then 16MB ″这个
问题上回答的是″ y ″。这会造成很大的不同(尤其是只有在 4 MB 的系统上)最明
显的症状是记忆体与磁碟之间异常大量的资料交换。如果你的磁碟发出很多噪音,检查
一下你的核心配置。
你可以找出你机器上全部记忆体的数量,然後减掉 /proc/meminfo 里面的″ total
mem ″或″ free ″指令所得的记忆体数量来得知核心使用了多少记忆体。你也可以执
行” dmesg ”(或者也可以查看核心的记录档,它一定在会你的系统里)。看起来就
像这一行:
Memory: 15124k/16384k available (552k kernel code, 384k reserved, 324k
data)
我的 386(配置很少垃圾)显示如下:
Memory: 7000k/8192k available (496k kernel code, 384k reserved, 312k
data)
5.3. 核心没有编译
如果它没有被编译,那麽可能是有个修补档失败了,或者是你从某个地方拿到的原始程
式码有问题。也有可能是因为你的 gcc 版本不正确或坏掉了。确定 Linus 在 README
里所描述的符号链结都有正确建立。一般说来,如果核心没能编译,这表示在某些地方
有严重的错误。
5.4. 新版的核心似乎不能启动
没有执行 LILO ,或是没有正确的配置它。有一次我曾经碰到的问题是出在配置档里,
我用了″ root = /dev/hda ″而不是″ root = /dev/hda1″(这在刚开始时真的是
很讨厌,但是一旦你有了一个可以用的配置档,应该不需要去再去改变它)
5.5. 你忘了执行 lilo ,或系统根本不能启动
噢!现在最好的办法是用磁片启动,并且准备另一张可以启动的磁片(像是” make
zdisk ”时做的磁片)。你得知道你的根目录( / )所在的分割区以及它的格式(
second extended, minix 等等)在下面的例子中,你也得知道你的 /usr/src/linux
source tree 在那个分割区,它的格式,以及它一般会挂在那儿。
在这个例子中, 根目录 / 是 /dev/hda1 ,而持有 /usr/src/linux 的分割区是
/dev/hda3 , 一般会挂在 /usr 下。它们都是 second extended 文件系统。可以运作
的核心映像叫做 zImage ,放在 /usr/src/linux 底下。
这个主意是这样的,假若有一个可以运作的核心映像叫做 zImage 在 /usr/src/linux
下,可能可以把它用在新的磁片上。另外一个不一定会更好的变通办法(这跟你的系统
怎麽组成的有关)在说明这个例子之後会讨论到。
首先,从 boot/root 磁片或者是 rescue 磁片开机,然後将持有可运作核心的分割区
挂上来:
mkdir /mnt
mount -t ext2 /dev/hda3 /mnt
如果 mkdir 指令显示该目录已经存在,忽略掉不必理会它。现在,cd 到持有可运作核
心的地方(注意: /mnt /usr/src/linux - /usr = /mnt/src/inux )。把一张格式
化过的磁片放进 a: 磁碟机,(确定不是你的 boot/root 磁片!),把映像档倾倒到
磁片里去,然後配置你的根目录分割区。
cd /mnt/src/linux
dd if=zImage of=/dev/fd0
rdev /dev/fd0 /dev/hda1
cd 到根目录 / 并且卸下标准 /usr 分割区:
cd /
umount /mnt
你现在应该可以从这张磁片正常的开机了。在这次开机後不要忘记执行 lilo (或是其
它无论你曾经做错的什麽事)!
如同前面曾经提过的,还有另外一种很普遍的变通方式。如果情况是你有一个可以运作
的核心在放在 / (例如 /vmlinuz ),你也可以使用它。假定所有的条件都跟上面的
例子一样,而我的核心映像是 /vmlinuz ,只要对上面的例子做这些改变:
把 /dev/hda3 改成 /dev/hda1( / 分割区),把 /mnt/src/linux 改成 /mnt ,并且
把 if=zImage 改成 if=vmlinuz 。至於前面有关注意如何推导出 /mnt/src/linx 的那
个部分可以忽略。
5.6. 系统表示” Warning: bdflush not running”
这可以算是一个相当严重的问题。从 1.0 版以後的核心开始(我记不清楚确实的版本
了,但大概是在 1994 年 4 月, 20 日左右),有个会周期性地更新文件系统缓冲区的
程序叫做″ update ”被升级或取代掉了。
取得″ bdflush ″的原始程序码(你应该可以从你取得核心的地方找到),然後编译
它(你可能会希望在旧版的核心下执行编译及安装)。它会以″ update ″为名安装它
自己,而在此之後你的新核心应该会运作良好。
5.7. 系统显示关於 obsolete routing requests 的奇怪讯息
取得新版的 route 程序,并且重新编译旧的要件。 /usr/src/linux/route.h (这是
/usr/src/linux 下的一个档案)已经做了修改。
6. □诀和技巧
6.1. 重导 make 或是 patch 指令的输出
如果你想要记录这些″ make ″或是″ patch ″ 指令到底做了些什麽,你可以把萤幕
的输出重导到一个档案去。首先,要知道你用的是是那一种 shell:″ grep root
/etc/passwd″ 然後寻找看起来像″ /bin/csh ″一类的东西。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:Linux简明系统维护手册(二)
下一篇:在Linux中制作VCD
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash
