linux内核中README文档翻译

Linux kernel release 2.6.xx <http://kernel.org/>

这些是Linux版本2.6的发行说明。 仔细阅读,因为他们告诉你这是什么,解释如何安装内核,以及如果出现问题怎么办。

什么是LINUX?

   Linux是操作系统Unix的克隆版,由Linus Torvalds在整个网络上由松散的黑客团队协助编写。 它的目标是符合POSIX和单一UNIX规范。
   它具备您在现代成熟的Unix中所期望的所有功能,包括真正的多任务处理,虚拟内存,共享库,按需加载,共享的写入时复制执行文件,正确的内存管理以及包括IPv4和IPv6的多层网络。

它是根据GNU通用公共许可证分发的 - 请参阅随附的COPYING文件以获取更多详细信息。

他在什么硬件平台上运行?

        尽管最初是为基于x86的32位x86个人电脑(386或更高版本)开发的,但现在Linux还可以(至少)在Compaq Alpha AXP,Sun SPARC和UltraSPARC,Motorola 68000,PowerPC,PowerPC64,ARM,Hitachi SuperH,Cell ,IBM S / 390,MIPS,HP PA-RISC,Intel IA-64,DEC VAX,AMD x86-64,AXIS CRIS,Xtensa,AVR32和Renesas M32R架构。
          只要具有分页内存管理单元(PMMU)和GNU C编译器(gcc)的端口(GNU编译器集合,GCC的一部分),Linux可以轻松移植到大多数通用的32位或64位体系结构中,。 Linux也已被移植到一些没有PMMU的体系结构中,但功能显然有限。 Linux也被移植到自己。 您现在可以将内核作为用户空间应用程序运行 - 这称为UserMode Linux(UML)。

文档:

- 在Internet和电子书中都有大量的文档,既有Linux特有的,也有关于一般UNIX问题的。 我建议查看LDP(Linux Documentation Project)书籍的任何Linux FTP站点上的文档子目录。 本自述文件并不意味着是系统文档:有更好的可用来源。

- Documentation /子目录中有各种README文件:这些文件通常包含某些驱动程序的内核特定安装说明。 有关每个文件中包含的内容的列表,请参阅Documentation / 00-INDEX。 请阅读更改文件,因为它包含有关可能因升级内核而导致的问题的信息。

- Documentation / DocBook /子目录包含针对内核开发人员和用户的一些指南。 这些指南可以以多种格式呈现:PostScript(.ps),PDF和HTML等。 安装完成后,“make psdocs”,“make pdfdocs”或“make htmldocs”将以请求的格式显示文档。

安装内核:

- 如果您安装了完整的源代码,请将内核tarball放在您有权限的目录中(例如您的主目录)并将其解压缩:

        gzip -cd linux-2.6.XX.tar.gz | tar xvf -

   or
        bzip2 -dc linux-2.6.XX.tar.bz2 |tar xvf -

将“XX”替换为最新内核的版本号。

        不要使用/ usr / src / linux区域! 这个区域有一个(通常是不完整的)库头文件使用的内核头文件。 它们应该与库相匹配,而不会因为内核日期的变化而变得混乱。

- 您还可以通过修补在2.6.xx版本之间进行升级。 修补程序分布在传统的gzip和较新的bzip2格式中。要通过修补来安装,请获取所有较新的修补程序文件,进入内核源代码(linux-2.6.xx)的顶层目录并执行:

        gzip -cd ../patch-2.6.xx.gz | patch -p1
   or
        bzip2 -dc ../patch-2.6.xx.bz2 | patch-p1

      (对于大于当前源树版本_in_order_的所有版本重复xx),并且应该没问题。您可能需要删除ackup文件(xxx〜或xxx.orig),并确保没有失败的修补程序 (xxx#或xxx.rej)。 如果有的话,你或我犯了一个错误。
        与2.6.x内核的补丁不同,2.6.x.y内核(也称为“稳定内核”)的补丁不是增量式的,而是直接应用于基本2.6.x内核。 有关更多信息,请阅读Documentation / apply-patches.txt。

或者,可以使用脚本patch-kernel来自动执行此过程。它会确定当前的内核版本并应用所发现的任何修补程序。

linux/scripts/patch-kernel linux

上面的命令中的第一个参数是内核源码的位置。 修补程序从当前目录应用,但可以将替代目录指定为第二个参数。


- 如果要使用stable系列修补程序在各个发行版之间进行升级(例如patch-2.6.xx.y),请注意这些“点发行版”不是增量式的,必须应用于2.6.xx基本树。 例如,如果您的基础内核是2.6.12,并且您想要应用2.6.12.3修补程序,则您不需要,也不一定首先应用2.6.12.1和2.6.12.2修补程序。 同样,如果您正在运行内核版本2.6.12.2并希望跳转到2.6.12.3,则必须首先反转2.6.12.2修补程序(即patch -R)_before_应用2.6.12.3修补程序。
    您可以在Documentation / apply-patches.txt中阅读更多内容

- 确保你没有旧的.o文件和依赖关系:

        cd linux
        make mrproper

你现在应该已经正确安装了源代码。

软件要求

        编译和运行2.6.xx内核需要各种软件包的最新版本。 请参阅文档/更改以了解所需的最低版本号以及如何获取这些软件包的更新。 请注意,使用这些软件包的过时版本可能会导致非常难以追踪的间接错误,因此,不要假设只有在uild或操作过程中出现明显问题时才能更新软件包。

内核的BUILD目录:

编译内核时,所有输出文件将默认与内核源代码一起存储。
    使用选项“make O = output / dir”可以指定输出文件(包括.config)的替代位置。

例:
      内核源代码:/usr/src/linux-2.6.N
      建立目录:/ home / name / build / kernel

配置和构建内核使用:

cd /usr/src/linux-2.6.N
   make O=/home/name/build/kernelmenuconfig
   make O=/home/name/build/kernel
   sudo make O=/home/name/build/kernelmodules_install install

请注意:如果使用'O = output / dir'选项,那么它必须用于make的所有调用。

配置内核:

        即使您只升级一个次要版本,也不要跳过这一步。每个版本中都会添加新的配置选项,如果配置文件未按预期设置,则会出现奇怪的问题。 如果你想以最小的工作量将现有的配置转换为新版本,可以使用“make oldconfig”,它只会向你询问新问题的答案。

- 备用配置命令是:

"make config" 纯文本界面。

"make menuconfig" 基于文本的颜色菜单,单选列表对话框。

"make xconfig" 基于X窗口(Qt)的配置工具。

"make gconfig" 基于X窗口(Gtk)的配置工具。

"make oldconfig"  根据现有的./.config文件的内容默认所有问题并询问新的配置符号。

"makesilentoldconfig" 像上面一样,但避免了已经回答了问题的屏幕混乱。

"make defconfig" 使用arch / $ ARCH / defconfig中的默认符号值创建./.config文件。

"make allyesconfig" 通过尽可能地将符号值设置为'y'来创建./.config文件。

"make allmodconfig" 通过尽可能地将符号值设置为'm'来创建一个./.config文件。

"make allnoconfig"  尽可能通过将符号值设置为'n'创建一个./.config文件。
"make randconfig" 通过将符号值设置为随机值来创建./.config文件。

        allyesconfig / allmodconfig / allnoconfig / randconfig变体还可以使用环境变量KCONFIG_ALLCONFIG来指定一个文件名,其中包含用户需要设置为特定值的配置选项。 如果不使用KCONFIG_ALLCONFIG = filename,那么“make * config”将检查名为“all {yes / mod / no / random} .config”的文件,以便强制使用符号值。 如果找不到该文件,它会检查名为“all.config”的文件以包含强制值。

- 不必要的驱动程序会使内核变大,并且在某些情况下会导致问题:探测不存在的控制器卡可能会混淆您的其他控制器。
- 编译内核时,如果设置的“处理器类型”高于386,将导致内核不能在386上工作。内核将在启动时检测到这一点,并放弃。
- 如果存在一个数学仿真的内核,将会使用协处理器:在这种情况下,数学仿真将永远不会被使用。 内核会稍微大一些,但不管是否有数学协处理器,它都可以在不同的设备上工作。
- “内核黑客”配置细节通常会导致更大或更慢的内核(或两者),甚至可能通过配置一些例程来主动尝试中断adcode以查找内核问题(kmalloc()),从而使内核更加稳定。 因此,您应该回答'n'以解决“开发”,“实验性”或“调试”功能的问题。

编译内核:

- 确保你至少有gcc 3.2可用。 有关更多信息,请参阅文档/更改。
    请注意,您仍然可以使用此内核运行a.out用户程序。

- 做一个“make”来创建一个压缩的内核映像。如果您安装了lilo以适应内核makefile,也可以执行“make install”,但您可能需要首先检查您的特定lilo设置。
  要进行实际安装,您必须是root用户,但没有一个正常的构建应该要求这样做。不要徒然取名根。
  - 如果您将内核的任何部分配置为`modules',则还必须执行“make modules_install”。
  - 如果出现问题,请备好内核。对于开发版本尤其如此,因为每个新版本都包含尚未调试的新代码。确保您保留了与该内核对应的模块的备份。如果您正在安装与您的工作内核具有相同版本号的新内核,请在执行“make modules_install”之前备份模块目录。

   或者,在编译之前,使用内核配置选项“LOCALVERSION”将唯一后缀附加到常规内核版本。 LOCALVERSION可以在“常规设置”菜单中进行设置。

- 为了启动你的新内核,你需要将内核映像(例如编译后的... / linux / arch / i386 / boot / bzImage)复制到你的常规可引导内核找到的地方。

  - 不再支持LILO等引导加载程序,直接从软盘引导内核。

        如果你从硬盘启动Linux,你可能会使用LILO,它使用文件/etc/lilo.conf中指定的内核镜像。内核映像文件通常是/ vmlinuz,/ boot / vmlinuz,/ bzImage或/ boot / bzImage。要使用新内核,请保存旧图像的副本并将新图像复制到旧图像上。然后,您必须重新运行LILO以更新加载地图!如果你不这样做,你将无法启动新的内核镜像。
   重新安装LILO通常是运行/ sbin / lilo的问题。您可能希望编辑/etc/lilo.conf以指定旧内核映像的条目(例如,/ vmlinux.old),以防新映像无法正常工作。有关更多信息,请参阅LILO文档。
   重新安装LILO后,你应该全部设置好。关闭系统,重新启动并享受!
   如果您需要更改内核映像中的默认根设备,视频模式,ramdisk大小等,请使用'rdev'程序(或者适当时使用LILO启动选项)。不需要重新编译内核来更改这些参数。

- 重新启动新内核并享受。

如果出现一些错误:

- 如果您的问题似乎是由于内核错误造成的,请检查MAINTAINERS文件以查看是否有某个特定人员与您遇到问题的内核部分相关联。 如果没有任何人在那里列出,那么第二件最好的事情是将它们邮寄给我([email protected]),并可能发送给任何其他相关邮件列表或新闻组。
  - 在所有的错误报告中,*请*告诉你在说什么内核,如何复制问题,以及你的设置是什么(使用你的常识)。 如果问题是新的,请告诉我,如果问题很老,请在您第一次注意时告诉我。

- 如果消息中出现类似下面的错误:

无法处理地址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

或屏幕上或系统日志中的类似内核调试信息,请重复*完全*。 转储可能看起来让人无法理解,但它确实包含可能有助于调试问题的信息。 转储上方的文本也很重要:它说明了内核转储代码的原因(在上例中,这是由于内核指针不佳)。 有关如何理解转储的更多信息,请参阅Documentation / oops-tracing.txt
- 如果你用CONFIG_KALLSYMS编译了内核,你可以按原样发送转储,否则你将不得不使用“ksymoops”程序来理解转储(但通常首选使用CONFIG_KALLSYMS进行编译)。
    该实用程序可以从中下载
    ftp:// ftp。<country> .kernel.org / pub / linux / utils / kernel / ksymoops /。

或者,您可以手动进行转储查找:

- 在调试像上面这样的转储时,如果您可以查看EIP值的含义,它会有很大的帮助。 这个十六进制值对我或其他任何人都没有太大的帮助:它取决于你特定的内核设置。 你应该做的是从EIP行取十六进制值(忽略“0010:”),然后在内核名单中查看它,看看哪个内核函数包含有问题的地址。

要找出内核函数名称,您需要查找与显示错误的内核关联的系统二进制文件。 这是文件'linux / vmlinux'。 提取名称并将其与之匹配 从内核崩溃EIP,得到:

nm vmlinux | sort | less

这会给你一个按升序排列的内核地址列表,从中可以很容易地找到包含违规地址的函数。 请注意,由内核调试消息给出的地址不一定与函数地址完全匹配(实际上,这是不太可能的),所以你不能仅仅'grep'列表:然而,列表会给你 每个内核函数的起点,因此通过查找起始地址低于所搜索函数的函数,但后跟函数的地址更高,您将找到所需的函数。 事实上,在你的问题报告中加入一些“上下文”可能是一个好主意,围绕这个有趣的问题写几行。
    如果由于某种原因无法完成上述操作(您有预编译的内核映像或类似内容),尽可能多地告诉我有关您的设置的信息将有所帮助。 详情请阅读REPORTING-BUGS文件。

- 或者,您可以在正在运行的内核上使用gdb。 (只读;即不能更改值或设置断点)。为此,首先使用-g编译内核; 编辑arch / i386 / Makefile,然后做一个“make clean”。 你还需要启用CONFIG_PROC_FS(通过“make config”)。 在用新内核重新启动后,执行“gdb vmlinux / proc / kcore”。 您现在可以使用所有常用的gdb命令。 查找系统崩溃点的命令是“l * 0xXXXXXXXX”。 (用EIP值替换XXX.)gdb当前未运行的内核失败,因为gdb(错误地)忽略了内核编译的起始偏移量。







































猜你喜欢

转载自blog.csdn.net/u012241570/article/details/80483300