附录 2 如何编译Linux 内核.doc_第1页
附录 2 如何编译Linux 内核.doc_第2页
附录 2 如何编译Linux 内核.doc_第3页
附录 2 如何编译Linux 内核.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

附录 2 如何编译Linux 内核: Linux 内核源码的组织结构Linux内核作为一个特殊的程序,同样需要经过编译、链接之后才能运行,仅仅是它执行时拥有特殊的权限,位于特定的空间,并且不会也不可能依赖其他的软件罢了。Linux发展至今(笔者在书写本书时的版本为2.4),其内核的组织结构日渐清晰,层次日渐分明。一旦基本系统安装完毕,具有系统管理员权限的用户即可编译内核。一般来说,Linux系统内核的源码放置在/usr/src/linux目录下,它将依赖于体系结构的代码和独立于体系结构的代码分离开来(前者仅占5%,通常是一些汇编代码和局部的,针对于不同体系结构的局部处理细节,如时钟定时器频率),为了帮助你理清内核结构,下面列出了几个重要的源代码目录:arch/目录:该目录存放具体的依赖于体系结构实现的代码,在这个目录下,针对不同体系结构所移植的版本都有三个子目录:kernel/,lib/ 和mm/。kernel/子目录包含依赖于体系结构实现的一般内核功能,例如信号处理、时钟处理等等。lib/子目录包含库函数的本地实现,如果从依赖于体系结构的源代码编译,则运行的更快。mm/子目录包含存储管理实现的代码。drivers/目录:这个目录拥有50%以上的内核源码,所有的驱动程序源代码均位于该目录之下。fs/目录:该目录存放所有的系统支持的文件系统的实现代码。include/目录:一些重要的头文件。ipc/目录:处理进程间通信的全部所需的代码都放在ipc/目录下。init/目录:该目录存放所有系统的初始化代码,许多重要的文件,例如main.c就位于该目录下,该文件包含了许多核心代码 比如实现fork()的代码和最常执行的代码cpu-idle()循环。lib/目录: 该目录放置内核其它部分经常所需要的代码。例如,inflate.c就放在这里,它能够在引导时解压内核并装入内存,它也知道如何解压标准PKZIP 8 位压缩算法。kernel/目录:许多最常调用的内核函数放在该目录下。调度器fork()和timer.c就放在这里。你还能在这个目录下找到printk.c。mm/目录:该目录包含所有linux实现虚拟内存管理的源代码。net/目录:所有提供网络支持的代码都放在这个目录下。Documention/目录:该目录存放了大量的内核代码相关文档,用户开发/维护手册。 如何配置及编译Linux 内核在能够实际的编译内核之前,必须告诉编译程序你需要那些功能,还必须告诉它是将这些功能模块编到内核中去还是将其配制成动态可装载的模块。下表列出了配置内核的命令:类型命令(必须具有管理员权限)文本提示make config文本菜单make menuconfigGUI(需要运行X-Window)make xconfig如上表,make config 将打开一个字符模式的对话框,在终端上一个接一个的问问题直到回答了所有的问题。对每一问题有三种可能的答案:Yes,No和Module。Module告诉内核配置在运行时使用动态可装载模块,而不是静态地将功能连接到内核中。make menuconfig 和 make xconfig 分别打开一个文本图形对话框和一个GUI对话框,功能显然和make config相同,但是可以只配置自己关心的部分,显然比make config 方便的多。另外,如果你不希望对原始配置做过多的修改,可以选用make oldconfig选项。make config 命令中各个选项的意义如下:l Code maturity level options 代码成熟等级。此处只有一项:prompt for development and/or incomplete code/drivers,如果你要试验现在仍处于实验阶段的功能,比如khttpd、IPv6等,就必须把该项选择为Y了;否则可以把它选择为N。l Loadable module support 对模块的支持。这里面有三项:Enable loadable module support:除非你准备把所有需要的内容都编译到内核里面,否则该项应该是必选的。Set version information on all module symbols:可以不选它。Kernel module loader:让内核在启动时有自己装入必需模块的能力,建议选上。l Processor type and features:CPU类型。l General setup这里是对最普通的一些属性进行设置。这部分内容非常多,一般使用缺省设置就可以了。下面介绍一下经常使用的一些选项:Networking support:网络支持。必须,没有网卡也建议你选上。PCI support:PCI支持。如果使用了PCI的卡,当然必选。PCI access mode:PCI存取模式。可供选择的有BIOS、Direct和Any。 Support for hot-pluggabel devices:热插拔设备支持。Power Management support:电源管理支持。Advanced Power Management BIOS support:高级电源管理BIOS支持。l Memory Technology Device(MTD):MTD设备支持。l Parallel port support:并口支持。l Plug and Play configuration:即插即用设备。l Block devices:块设备支持,主要有:Normal PC floppy disk support:普通PC软盘支持。这个应该必选。Mulex DAC960/DAC1100 PCI RAID Controller support:RAID镜像。Network block device support:网络块设备支持。Logical volume manager(LVM)support:逻辑卷管理支持。Multiple devices driver support:多设备驱动支持。RAM disk support:RAM盘支持。l Networking options:网络配置选项。l Telephony Support:电话支持。linux下可以支持电话卡,这样你就可以在IP上使用普通的电话提供语音服务了。l SCSI support:SCSI设备的支持。l Fusion MPT device support:需要Fusion MPT兼容PCI适配器,不用选。l IrDA(infrared)support:红外线支持。l Character devices:字符设备。l File systems:文件设备,主要选项如下:Quota support:Quota可以限制每个用户可以使用的硬盘空间的上限,在多用户共同使用一台主机的情况中十分有效。DOS FAT fs support:DOS FAT文件格式的支持,可以支持FAT16、FAT32。ISO 9660 CD-ROM file system support:光盘使用的就是ISO 9660的文件格式。NTFS file system support:ntfs是NT使用的文件格式。/proc file system support:/proc文件系统是linux提供给用户和系统进行交互的通道,必须选上,否则课程实验一无法正常进行。还有另外三个大类都规到这儿了:Network File Systems(网络文件系统)、Partition Types(分区类型)、Native Language Support(本地语言支持)。值得一提的是Network File Systems里面的两种:NFS和SMB分别是linux和Windows相互以网络邻居的形式访问对方所使用的文件系统,根据需要加以选择。l Console drivers:控制台驱动。一般使用VGA text console就可以了,标准的80*25的文本控制台。l Sound:声卡驱动。l USB supprot:USB支持。由于课程实验六的需要,必须选上。一旦你满意的配置好内核,就可以进行编译了。/usr/src/linux目录下的makefile 是构建Linux内核的顶层makefile。在该目录下只用以下几个命令(必须具有超级用户或者管理员权限)就可以将内核重新构建出来:#make clean#make config#make depend#make其中,make clean 入口将删除旧的可装载对象文件和其他临时文件。make config 入口会导致Configure的bash脚本的执行,如果你前面已经配置好了内核,那么这条命令可以不用。make depend 入口是根据各个文件之间的依赖关系,确定合适的编译顺序。make入口:编译所有内核源代码,生成内核可执行文件vmlinux。另外,make boot 可以压缩vmlinux文件来建立一个可启动的内核映像并将其安装到/usr/src/linux/arch/i386/boot/zImage中。如果你使用LILO引导,也可以使用命令make bzImage这时,会在该目录下生成一个名为bzImage的文件,将上述文件重命名后,拷贝到/etc/lilo所在的目录,在lilo.conf中增加新的引导签,再次运行LILO,你的内核就可以被引导了。编码风格读完本书,你可能觉得也要为Linux内核做贡献。欢迎你这样做,但你一定要遵守一定的编码约定:l 注释是/*/风格的,单行注释也是这样,不接受/注释。l 函数开始的大括号(独占一行。l if语句以这种方式编码:if(str0=0&str0=9)strcpy(name,”abcd”);strncpy(name+4,str,1);else

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论