QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2655|回复: 4

kernel 2.6.0-README(翻译草稿-3)

[复制链接]
发表于 2004-1-1 17:18:26 | 显示全部楼层 |阅读模式
*********************************************
第一次翻译这些技术文章,错误多多,请多指教!
*********************************************
kernel 2.6.0-README(翻译草稿-3) bamfox 翻译

编译内核:


-确信你拥有可用的gcc 2.95.3。
   已知gcc 2.91.66 (egcs-1.1.2)和 gcc 2.7.2.3不能编译内核的某些模块,并且他们是不再被支持的。如必要,也要记得升级你的binutils包(for as/ld/nm and company)。更多的信息,请参照./Documentation/Changes。
   
   请注意:你仍然能够用此内核运行a.out用户程序。

-执行“make bzImage”命令创建一个压缩的内核映象(image )。如果你想制作一个启动盘(不需要root 文件系统或者LILO),那么在A:驱动器里插入一张软盘,并且执行“make bzdisk”命令。假设你已经有装好的适用于内核的makefiles的lilo,但是,第一次,你可能不愿意检查你自己的lilo设置,那么也可以执行“make install”。

   为了实际安装,你必须处于root 权限下,而不是任何一般构建所要求的那样。不要进入伪root 名下。

-在你系统不能导引bzlmage内核这样的不幸的情况下,你仍然能够按照zlmage编译你的内核。可是,由于在将来某些时候,zlmage支持将会被移除(废除),出于对zlmage的偏爱,我们鼓励因引导kernels内核出问题的人们向linux-kernel mailing list和H. Peter Anvin <[email protected]>报告这些问题,报告时加上硬件配置信息的细节。

-如果你以“modules”方式配置所有的内核部分,则必须先执行“make module”,然后紧接着执行“make modules_install”。

-手动备份内核以防错误的发生。对于正在开发的版本来说,这更具的实际意义,这是因为每个新发布的版本包含新的代码,而他们没有被调试过。同样的,也要确保备份与该内核相应的modules。假如你安装的新内核与你现在工作的内核版本号相同,那么在你执行“make modules_install”之前,要备份modules目录。

-为了引导新内核,你必须复制内核image(编译完成之后,在 .../linux/arch/i386/boot/bzImage里找)到你规定的导引内核能被找到的地方。

   某些情况下,内核image被放在软盘里,这时你要复制这个内核balmage文件到/dev/fd0以制作一张可导引的软盘。

   如果你从硬盘导引Linux,多数情况是你利用LILO来完成导引的,它是依照 /etc/lilo.conf文件里的说明应用内核映象的。这个内核映象通常是/vmlinuz、/boot/vmlinuz、/bzImage 或者/boot/bzImage。为了利用新的内核,要保存一份旧映象的副本同时拷贝新的映象覆盖旧的。接着,你必须重新运行LILO以更新加载map。如果没有这样做,你将不能启动新的内核映象。

   重新安装LILO通常就是运行/sbin/lilo。你可以编辑/etc/lilo.conf来为旧的内核映象(叫,/vmlinux.old)确定一个entry以防新的内核不工作。更多的信息请参看LILO文档。

   在重新安装LILO之后,你应该进行完所有的设置。关闭系统,重新启动,恭喜。
   
   如果你曾在内核映象中改变动过默认的导引设备、显示模式、ramdisk大小等等,应用rdev程序(或者可选的合适的LILO引导选项)。不必重新编译内核来改变这些参数。

-以新内核重新启动,祝贺你。


如果出错:

-如果你有问题,且它好像是由于内核bugs引起的,请检查MAINTAINERS文件,看是否有负责困扰你的那部分内核的人。如果列表里没有,那么要做的是把他们邮寄给我([email protected]),并且尽可能地发给任何别的相关邮件列表或者新闻组。

-在所有的bug报告中,务必请告知你要讨论什么内核、怎样再现错误以及你安装的是什么东西(按你的习惯)。若是新问题,那么就这样告诉我;若是旧问题,请第一次遇到它时就告诉我。

-假如在你的屏幕上或者系统日志(system log)上,bug导致这样的或者是相似的内核调试信息:

                          unable to handle kernel paging request at address C0000010
                          Oops: 0002
        EIP:   0010:XXXXXXXX
        eax: xxxxxxxx   ebx: xxxxxxxx   ecx: xxxxxxxx   edx: xxxxxxxx
        esi: xxxxxxxx   edi: xxxxxxxx   ebp: xxxxxxxx
        ds: xxxx  es: xxxx  fs: xxxx  gs: xxxx
        Pid: xx, process nr: xx
        xx xx xx xx xx xx xx xx xx xx
     
    请务必准确完整的把它复制下来。这个dump对你来说看起来不好理解,但是它的确包含着有助于分析这个问题的信息。这个dump之上的文字也是非常重要地:它说明的一些事情,这些事情与为什么内核要打印出代码有关(在上边的例子中,内核打印出那些代码是由于环的内核指针引起的)。关于dump意义的更多信息可在于Documentation/oops-tracing.txt文件中寻找。

-你可使用“ksymoops”程序来弄明白dump的意思。这个工具可以从下边的地址下载:
    ftp://ftp.<country>.kernel.org/pub/linux/utils/kernel/ksymoops
    你也可以手动完成dump查找。

-在像上边那样的调试dumps里,如果你能查找到EIP值的意思,那么它的帮助作用是很大的。诸如hex的值对 我或者别的任何人没有多大的帮助:这个值根据你自己内核的设置而定。你应该做的是从EIP行(忽略“0010)取出hex的值,并且在内核名列表里查找它以明确拿一个内核函数包含这个讨厌的地址。

     为了找出内核函数名,你得必须找到与内核相关联的、显现出问题的征兆的system binary文件。它就是文件“linux/vmlinux”。为了提取名子列表并且使得它与来自内核的EIP相匹配,可这样做:
     
       nm vmlinux | sort | less

      这个操作给出一串内核地址并以升序排列,从中,可以很简单的找到含有那个讨厌地址的函数。注意:由内核调试函数给出地址将不一定与要找的函数地址完全一致(事实上,完全一致是很不可能的),因此,你不能仅“grep”这个列表,然而,这个列表将给出你每个内核函数的起始点,所以,通过找这样的函数 ,这个函数的起始地址比你要找的函数低,而它后边的函数地址又比它高,这样你就找到了你想要的函数。实际上,在你的报告中包含一点背景是个不错的注意,就是列出你感兴趣的函数周围的几行即可。

      如果因某些原因你没法照上边说的做(你有一个预编译的内核映象(kernel image)或者相似的东西),那么尽可能详细的告诉我你的安装过程,这将很有帮助。

-可选择的方案是,你能够在一个处于运行状态的内核上使用gdb。(只读;例如你不能改变值或者设置断点)为了这样做,首先用“-g”参数编译内核;适当地编辑arch/i386/Makefile,然后执行“make clean”。你还得使CONFIG_PROC_FS 为enable状态(通过“make config”修改)。

     你以新内核重启之后,执行“gdb vmlinux /proc/kcore”。现在,你就可利用所有的gdb常用命令了。查找你的系统崩溃在那个点的命令是:l *0xXXXXXXXX。(用EIP的值替换xxxes)

    gdb'ing a non-running kernel currently fails,这是因为gdb(错误的)忽视了the starting offset for which the kernel is compiled。

***********************************************************
至此,“kernel 2.6.0-README”就翻译完了,其中错误还请各位指正,好及时修正。谢谢!
***********************************************************
发表于 2004-1-2 00:16:05 | 显示全部楼层
太好了。
回复

使用道具 举报

发表于 2004-1-2 21:47:33 | 显示全部楼层

希望都放在一个帖子里
多谢
建议转到内核编译安装版块
回复

使用道具 举报

 楼主| 发表于 2004-1-3 16:18:21 | 显示全部楼层
希望,各位仔细看看,提出意见。做到“忠实原作,又能符合阅读习惯”,我的功力还有待提高,更不要说“信、达、雅”啦。

下面,我会翻译一下:Documentation/Changes,这个对编译内核也比较重要。
请各位指点呀。希望在回家前把它们润色好。谢谢!

请教:“the starting offset for which the kernel is compiled”,这个表示什么意思?
回复

使用道具 举报

发表于 2004-1-5 13:16:52 | 显示全部楼层
大概是:
内核编译的起始偏移量
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-4-20 23:14 , Processed in 0.088648 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

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