文档库 最新最全的文档下载
当前位置:文档库 › linux-sh4-2.6.32.42_stm24_V4.0-README-读我_中文版

linux-sh4-2.6.32.42_stm24_V4.0-README-读我_中文版

Linux 内核发布版本2.6.xx
这是linux 2.6版的发行说明。仔细地阅读它们,它们会告诉你这是什么,如何安装内核,出问题后该如何去做。
什么是LINUX?
linux是unix操作系统的一个克隆,是由 Linus Torvalds 在网络上一个松散的黑客组织的协助下从头编写。它的目标是对POSIX和Single UNIX 规范的遵从。
linux拥有所有你在现代成熟的UNIX中所期待的特点,包括真正的多任务,虚拟内存,共享库,按需加载,共享即写即拷可执行文件,恰当的内存管理和多堆栈网络包括IPv4和IPv6。
它是分布于GNU通用许可证之下的,请参阅附带的文件以了解更多细节。
Linux运行与什么硬件平台?
尽管最初是给32位x86(386或者更高)平台的PC机开发的,今天,Linux还能(至少是)运行在 Compaq Alpha AXP, Sun SPARC and 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 and Renesas M32R architectures。
Linux可以很方便的移植到大多数的通用的32位和64位体系架构,只要它们有一个分页内存管理单元(PMMU)和一个GNU C编译器(gcc)的端口。Linux同样可以移植到许多没有PMMU架构中,虽然那时功能显而易见的有限。linux还可以移植到本身。你可以运行内核作为用户空间的应用程序——这叫座UserMode Linux(UML)。
文档:
——这里有很多可用的文档,无论是以网络上的电子形式还是纸质的书本上,无论是Linux特定的问题还是与通用的UNIX相关的问题。我建议到任何Linux FTP 站点文档的子目录中查看关于LDP(Linux文档工程)的书籍。这个README文档并不是关于系统的文档:还有更多更好的可用资源。
——在Documentation/ 子目录中有各种各样的README文件:这些通常包含内核特有的安装说明,例如对于驱动的安装说明。通过Documentation/00-INDEX 来查看所包含的文件列表。请阅读更改文件,因为它包含问题的信息,这写问题可能是通过升级内核导致的。
——在Documentation/Docbook/ 子目录包含了很多对内核研发人员和用户的指导。这些指导可以呈现为许多格式:PostScript(.ps)、PDF、HTML、&man-pages,等等。
安装后,命令“make psdocs”、“make pdfdocs”、“make htmldocs”、“make mandocs”等命令可以让文档呈现为所需格式。
内核源的安装:
——如果你安装完整资源,把内核原始码放在你用有权限的目录中(例如,你的home目录),并且解压之:
gzip -cd linux-2.6.xx.tar.gz | tar xvf -

bzip2 -dc linux-2.6.xx.tar.bz2 | tar xvf -
将“xx”用最新的内核版本号代替。
不要使用“/usr/src/linux”区域。这个地方有着一组(通常是不完整)的内核header,这组内核和header是用于库头文

件的。它们应匹配那个库,并且不被kernel-du-jour发生的任何事情扰乱。
——你同样可通过2.6.xx发行版本间打补丁的方法升级。补丁以传统的gzip和新型的bzip2格式发布。通过补丁方式安装,获得所有的较新的补丁文件,进入内核资源(linux-2.6.xx)顶级目录,然后执行命令:
gzip -cd ../patch-2.6.xx.gz | patch -p1

bzip2 -dc ../patch-2.6.xx.bz2 | patch -p1
(依次地,用比你的当前资源树版本高的全部版本号代替xx)然后你应该就ok了。你可能会移除备份文件(xxx~或xxx.orig),并且确保没有损坏的补丁(xxx#或xxx.rej)。如果有的话,可能是你或者我犯了一个错误。
不同于2.6.x内核打补丁,2.6.x.y打补丁(也被称为-stabel稳定版内核)不是增量而是直接应用于2.6.x内核。请阅读Documentation/applying-patches.txt 获取更多信息。
另外,patch-kernel脚本可以自动处理这个过程。它决定当前内核版本和任何发现的补丁的应用。
linux/scripts/patch-kernel linux
在上述命令中,第一个参数是内核源的位置。补丁应用于当前目录,但是另一个目录可以被指定为第二个参数。
——如果你正在发行版本之间升级,用到了稳定系列补丁(例如,patch-2.6.xx.y),注意这些“dot-releases”并不是增量,而是必须应用于2.6.xx基础树。例如,如果你的基内核是2.6.12,你想应用2.16.12.3补丁,你不必,且实际上必须不能首先应用2.6.12.1和2.6.12.2两个补丁包。同样,如果你正运行的内核版本是2.6.12.2,而且你想跳到2.6.12.3,你必须返回到2.6.12.2补丁包(就是 patch -R)然后再安装2.6.12.3补丁包。
你可以在Documentation/applying-patches.txt 中深入阅读这些内容。
——确保你没有任何stale.o文件和依赖文件:
cd linux
make mrproper
现在你应该正确安装了源码。
软件需求
编译和运行2.6.xx内核需要最新版本的不同软件包。查阅Documentation/Changes 来获取所需的最低版本号,和如何获得这些软件包的更新。注意,过度使用这些软件包的旧版本可能引起简介错误,这些错误很难追踪,所以不要以为你可以仅仅在编译或操作出现显著错误时再更新软件包。
内核的编译目录
当编译内核时,所有的输出文件将会默认和内核源码存储在一起。使用选项“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/kernel menuconfig
make O=/home/name/build/kernel
sudo make O=/home/name/build/kernel modules_install install
请注意:如果“O=output/dir”选项被使用了,那么这个选项也一定会被用于make所有的调用。
配置kernel
不要跳过这一步,即使你仅仅

是小版本升级。新的配置选项被加到了每个发行版本中,并且如果配置文件没有像预期的建立的话,奇怪的问题就会出现。如果你想将你已存在的配置以最小的工作量放到新版本中,使用命令“make oldconfig”,这个命令只会问你新的问题的答案。
——其他的配置命令如下:
“make config” 纯文本界面。
“make menuconfig” 基于文本的颜色菜单、单选列表和对话框。
“make xconfig” 基于X windows(Qt)的配置工具。
“make gconfig” 基于X windows(Gtk)的配置工具。
“make oldconfig” 默认所有的基于你的已存在的./.config文件中的内容所涉及的问题,并且之只要求新的配置符号。
“make silentoldconfig” 同上,但是避免因已存在的问题杂乱屏幕。此外更新依赖文件。
“make defconfig” 通过使用默认符号的值(来源于arch/$ARCH/defconfig 或者arch/$ARCH/configs/${PLATFORM}_defconfig,这取决于不同的架构)新建一个./.config 文件。
“make ${PLATFORM}_defconfig” 通过使用默认符号的值(来源于arch/$ARCH/configs/${PLATFORM}_defconfig)新建一个./.config 文件。使用“make help”来获取你的架构的所有可用的平台列表。
“make allyesconfig” 通过设置符号值尽可能为“n”来新建一个./.config 文件。
“make randconfig” 通过设置符号值为随机的值来创建一个./.config 文件。
你可以通过Linux内核配置工具(在Documentation/kbuild/kconfig.txt)找到更多的信息。
“make config”的注意事项:
——拥有不必要的驱动将会使内核变大,并且在某些特定的情况下导致出问题:探寻一个不存在的控制卡可能会使其他的控制卡混乱
——使用处理器型号设置高于386来编译内核将会导致内核不能在386平台上工作。内核将会在启动时检测这个,并且放弃它。
——一个拥有数学模拟编译的内核将依旧使用协同处理器,如果有的话:数学模拟在这里将从来不会用到。内核将慢慢变大,但是将会工作于不同的机器上,不管它们是否拥有一个数学协同处理器。
——“内核黑客”配置详细信息通常导致更大或者更慢的内核(或者两者都有),甚至使内核不够稳定(通过配置一些例程来试图打断坏的代码去发现内核错误(kmalloc()))。因此,你应该尽可能对“开发”、“试验”或者“调试”特性的问题回答“n”。
编译内核:
——确保你拥有至少是gcc 3.2可用。
更多信息,请参阅Documentation/Changes。
请注意,你仍旧可以使用此内核运行a.out用户程序。
——运行“make”来创建一个被压缩的内核映像。如果你把lilo安装来适合内核makefiles,也可以使用“make install”,但是你可能会首先检查你特定ilo的安装。
为了实际的安装,你必须先root,但是没有一个正常的构建

需要这个。不要滥用root的名字。
——如果你已经配置过内核所有的部分作为“modules模块单元”,你将会同样做“make modules_install”。
——冗长的内核编译/构建输出:
通常,内核构建系统运行在一个相当安静的模式(不是今天的完全静默)。然而,有时你或者其他内核开发者需要查看编译、链接,或者其他确切的它们执行的命令。为了这个,使用“冗长”构建模式。这个用在“make”命令中插入“V=1”来完成。例如:
make V=1 all
为了让构建系统同样告诉我们重建每个目标的原因,使用“V=2”。默认值是“V=0”。
顺便保存一份备份内核以防出差错。这个尤其适用于开发版发行的时候,由于每个新的发行版本包含了新的没有经过调试的代码。确保你保存了一个那个内核相应模块的备份。如果你安装一个新的内核,与你的工作内核拥有相同的版本号,在“make modules_install”之前将你的模块目录做一个备份。
另外,在编译之前,使用内核配置选项“LOCALVERSION”给常规的内核版本附加一个独特的后缀。LOCALVERSION可以在“General Setup”(通用设置菜单)里面设置。
——为了启动你的新内核,你需要复制内核映像(例如,编译后为../linux/arch/i386/boot/bzImage)到你的常规可以启动的内核所在的地方。
——直接从软盘启动内核而不用bootloader的协助(像LILO)不再支持。
如果你从硬盘驱动器启动Linux,你有可能是使用LILO,它使用内核镜像中/etc/lilo.conf作为指定文件。内核映像文件通常是/vmlinuz,/boot/vmlinuz,/bzImage 或/boot/bzImage。要使用新的内核,要保存一个旧映像的拷贝,然后把新的映像复制并覆盖旧的映像。然后,你必须重新运行LILO来更新加载映射。如果你不这么做的话,你将不会通过新映像的引导。
重新安装LILO通常是运行/sbin/lilo。你可以编辑/etc/lilo.conf 来指定一个你的旧版内核映像的入口(比如/vmlinux.old),以防新的映像不工作。查看LILO 文档获得更多信息。
重新安装LILO后,你应该准备就绪了。关闭系统,重启,and enjoy!并享受!
如果你需要改变默认的根设备、视频模式、虚拟磁盘大小等等,在内核映像中,使用“rdev”程序(或在适当的时候使用其他的LILO引导项)。不必重新编译内核来改变这些参数。
——使用新内核重启并享受之。
如果出现问题:
——如果你有看似由内核bug引起的问题,请检查文件MAINTAINERS来查看这里是否有一个特定的个人相关的内核部分,这部分你有麻烦了。如果没有任何人列在这,然后第二个最好的选择是发邮件给我(torvalds@https://www.wendangku.net/doc/1518146556.html,),而且也有可能提供给其他任何相关的邮件列表或新闻组。
——在所有的bug报告中

,请告诉我们你讲述的是什么内核,如何复制重现这个问题,和你的设置(用你的常识)。如果问题是新的,告诉我这些,如果这个是老问题,请尝试告诉我你第一次遇到的时间。
——如果这个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
或在你屏幕上或系统日志中有相似的内核调试信息,请准确的复制它。转储对你可能看起来比较难以理解,但是它包含了可能调试问题的信息。在转储之上的文本同样重要:它讲述了为什么内核转储了代码(在以上的例子中它是由于坏的内核指针产生的)。关于制作有意义的转储文件的更多信息请参阅Documentation/oops-tracing.txt。
——如果你使用CONFIG_KALLSYMS编译内核,你可以发送这个作为转储文件,否则你将不得不使用“ksymoops”程序来制作有意义的转储文件(但是使用CONFIG_KALLSYMS编译通常是首选)。
这个使用工具可以从一下网站下载:
ftp://ftp.https://www.wendangku.net/doc/1518146556.html,/pub/linux/utils/kernel/ksymoops/ 。
此外,你可以手动制作转储查找:
——如上,在调试转储方面,如果你能看懂EIP值的意思将会有很大的帮助。这个十六进制值这样并不能非常的帮助我或其他人:它将取决于你的特定内核的设置。你应该做的是从EIP线上取下十六进制的值(忽略“0010”),然后在内核名字表中查找它,去看那个内核函数包含了这个地址。
要找出这个内核函数的名字,你将会需要找到与内核相关表现此症状的系统二进制文件。这就是文件“linux/vmlinux”。要提取名字列表并且从内核崩溃的EIP中匹配它,需要做:
nm vmlinux | sort |less
这将给你一个按升序排列的内核地址列表,从这里面可以很轻松的找到包含冲突地址的函数。注意,内核调试信息所给出的地址可能不是准确匹配函数地址(实际上,这是非常不幸的),所以你不能仅仅“grep”查找列表:然而,这列表将会给你每个内核函数的起始指针,所以通过查找函数可以找到一个比你要查找那个的低的起始地址,你想要找的是一个比这个高的地址。实际上,包含一点你的问题报告的“context”上下文可能是一个好主意,给出了你感兴趣的那行的周围几行。
如果你因为一些原因不能完成上面所述(你有一个预编译的内核映像或类似的),将尽可能多的关于你的设置告诉我,这会很有帮助。请查看REPORTING-BUGS文件获取详细信息。
——或者,你可一使用gdb来运行内核。(只读,例如,你不能改变值或

设置断点)要做这个,你首先得使用选项-g编译内核;恰当地编辑arch/i386/Makefile,然后使用命令“make clean”。你还得启用CONFIG_PROC_FS(通过“make config”)。
当你使用新的内核重启之后,输入“gdb vmlinux/proc/kcore”。你现在可以使用所有的gdb常用命令。当你系统崩溃是你可一使用查找指针命令“l *0xXXXXXXXX”。(将这些X使用EIP的值代替。)
目前gdb操作一个非运行内核失败是因为gdb(错误地)忽视每个内核编译的起始偏移。

相关文档