收藏 分享(赏)

附录 2 如何编译Linux 内核.doc

上传人:tkhy51908 文档编号:7212866 上传时间:2019-05-10 格式:DOC 页数:4 大小:33KB
下载 相关 举报
附录 2 如何编译Linux 内核.doc_第1页
第1页 / 共4页
附录 2 如何编译Linux 内核.doc_第2页
第2页 / 共4页
附录 2 如何编译Linux 内核.doc_第3页
第3页 / 共4页
附录 2 如何编译Linux 内核.doc_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

1、附录 2 如何编译 Linux 内核:Linux 内核源码的组织结构Linux 内核作为一个特殊的程序,同样需要经过编译、链接之后才能运行,仅仅是它执行时拥有特殊的权限,位于特定的空间,并且不会也不可能依赖其他的软件罢了。Linux 发展至今(笔者在书写本书时的版本为 2.4) ,其内核的组织结构日渐清晰,层次日渐分明。一旦基本系统安装完毕,具有系统管理员权限的用户即可编译内核。一般来说,Linux 系统内核的源码放置在/usr/src/linux 目录下,它将依赖于体系结构的代码和独立于体系结构的代码分离开来(前者仅占 5%,通常是一些汇编代码和局部的,针对于不同体系结构的局部处理细节,如时

2、钟定时器频率) ,为了帮助你理清内核结构,下面列出了几个重要的源代码目录:arch/目录:该目录存放具体的依赖于体系结构实现的代码,在这个目录下,针对不同体系结构所移植的版本都有三个子目录:kernel/ ,lib/ 和 mm/。kernel/ 子目录包含依赖于体系结构实现的一般内核功能,例如信号处理、时钟处理等等。lib/子目录包含库函数的本地实现,如果从依赖于体系结构的源代码编译,则运行的更快。mm/子目录包含存储管理实现的代码。drivers/目录:这个目录拥有 50%以上的内核源码,所有的驱动程序源代码均位于该目录之下。fs/目录:该目录存放所有的系统支持的文件系统的实现代码。incl

3、ude/目录:一些重要的头文件。ipc/目录:处理进程间通信的全部所需的代码都放在 ipc/目录下。init/目录:该目录存放所有系统的初始化代码,许多重要的文件,例如 main.c 就位于该目录下,该文件包含了许多核心代码 比如实现 fork()的代码和最常执行的代码cpu-idle()循环。lib/目录: 该目录放置内核其它部分经常所需要的代码。例如, inflate.c 就放在这里,它能够在引导时解压内核并装入内存,它也知道如何解压标准 PKZIP 8 位压缩算法。kernel/目录:许多最常调用的内核函数放在该目录下。调度器 fork()和 timer.c 就放在这里。你还能在这个目录

4、下找到 printk.c。mm/目录:该目录包含所有 linux 实现虚拟内存管理的源代码。net/目录:所有提供网络支持的代码都放在这个目录下。Documention/目录:该目录存放了大量的内核代码相关文档,用户开发/维护手册。如何配置及编译 Linux 内核在能够实际的编译内核之前,必须告诉编译程序你需要那些功能,还必须告诉它是将这些功能模块编到内核中去还是将其配制成动态可装载的模块。下表列出了配置内核的命令:如上表,make config 将打开一个字符模式的对话框,在终端上一个接一个的问问题直到回答了所有的问题。对每一问题有三种可能的答案:Yes,No 和 Module。Module

5、 告诉内核配置在运行时使用动态可装载模块,而不是静态地将功能连接到内核中。make menuconfig 和 make xconfig 分别打开一个文本图形对话框和一个 GUI 对话框,功能显然和 make config 相同,但是可以只配置自己关心的部分,显然比 make config 方便的多。另外,如果你不希望对原始配置做过多的修改,可以选用 make oldconfig 选项。make config 命令中各个选项的意义如下: Code maturity level options 代码成熟等级。此处只有一项: prompt for development and/or incompl

6、ete code/drivers,如果你要试验现在仍处于实验阶段的功能,比如khttpd、IPv6 等,就必须把该项选择为 Y 了;否则可以把它选择为 N。 Loadable module support 对模块的支持。这里面有三项:Enable loadable module support:除非你准备把所有需要的内容都编译到内核里面,否则该项应该是必选的。Set version information on all module symbols:可以不选它。Kernel module loader:让内核在启动时有自己装入必需模块的能力,建议选上。 Processor type and f

7、eatures:CPU 类型。 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 M

8、anagement BIOS support:高级电源管理 BIOS 支持。 Memory Technology Device(MTD):MTD 设备支持。 Parallel port support:并口支持。 Plug and Play configuration:即插即用设备。 Block devices:块设备支持,主要有:Normal PC floppy disk support:普通 PC 软盘支持。这个应该必选。Mulex DAC960/DAC1100 PCI RAID Controller support:RAID 镜像。Network block device support

9、:网络块设备支持。Logical volume manager(LVM )support:逻辑卷管理支持。Multiple devices driver support:多设备驱动支持。RAM disk support:RAM 盘支持。 Networking options:网络配置选项。 Telephony Support:电话支持。linux 下可以支持电话卡,这样你就可以在 IP 上使用普通的电话提供语音服务了。 SCSI support:SCSI 设备的支持。 Fusion MPT device support:需要 Fusion MPT 兼容 PCI 适配器,不用选。类型 命令(必须

10、具有管理员权限)文本提示 make config文本菜单 make menuconfigGUI(需要运行 X-Window) make xconfig IrDA(infrared)support:红外线支持。 Character devices:字符设备。 File systems:文件设备,主要选项如下:Quota support:Quota 可以限制每个用户可以使用的硬盘空间的上限,在多用户共同使用一台主机的情况中十分有效。DOS FAT fs support:DOS FAT 文件格式的支持,可以支持 FAT16、FAT32。ISO 9660 CD-ROM file system supp

11、ort:光盘使用的就是 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 分别是 li

12、nux 和 Windows 相互以网络邻居的形式访问对方所使用的文件系统,根据需要加以选择。 Console drivers:控制台驱动。一般使用 VGA text console 就可以了,标准的80*25 的文本控制台。 Sound:声卡驱动。 USB supprot:USB 支持。由于课程实验六的需要,必须选上。一旦你满意的配置好内核,就可以进行编译了。/usr/src/linux 目录下的 makefile 是构建 Linux 内核的顶层 makefile。在该目录下只用以下几个命令(必须具有超级用户或者管理员权限)就可以将内核重新构建出来:#make clean#make confi

13、g#make depend#make其中,make clean 入口将删除旧的可装载对象文件和其他临时文件。make config 入口会导致 Configure 的 bash 脚本的执行,如果你前面已经配置好了内核,那么这条命令可以不用。make depend 入口是根据各个文件之间的依赖关系,确定合适的编译顺序。make 入口:编译所有内核源代码,生成内核可执行文件 vmlinux。另外,make boot 可以压缩 vmlinux 文件来建立一个可启动的内核映像并将其安装到/usr/src/linux/arch/i386/boot/zImage 中。如果你使用 LILO 引导,也可以使用

14、命令 make bzImage 这时,会在该目录下生成一个名为 bzImage 的文件,将上述文件 重命名后,拷贝到/etc/lilo 所在的目录,在 lilo.conf 中增加新的引导签,再次运行 LILO,你的内核就可以被引导了。编码风格读完本书,你可能觉得也要为 Linux 内核做贡献。欢迎你这样做,但你一定要遵守一定的编码约定: 注释是/*/风格的,单行注释也是这样,不接受/注释。 函数开始的大括号(独占一行。 if 语句以这种方式编码:if(str0=0strncpy(name+4,str,1);elseprintk(“error param”);namesizeof(name)-1=0; 单行 if 语句是可以接受的:if(!strcmp(str,”abc”) strcpy(str,”abc”); 从很早开始,内核源代码就一直包含许多 goto,Linux 也不例外,差不多每 80 行代码就有一个 goto。并不是因为草率的编码风格,而是出于执行效率的考虑。例如,在一些 while 语句中,使用 goto 跳出代码块,而不是使用 break。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报