部分(搞高篇)讲稿-内核内核编译.ppt
《部分(搞高篇)讲稿-内核内核编译.ppt》由会员分享,可在线阅读,更多相关《部分(搞高篇)讲稿-内核内核编译.ppt(70页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、二二.配置编译配置编译LinuxLinux内核内核1.1.LinuxLinux内核编译内核编译 2.2.LinuxLinux内核配置系统内核配置系统1.Linux1.Linux内核编译内核编译1.1 Linux内核简介1.2 Linux内核版本号1.3 为什么重新编译内核1.4 内核编译模式1.5 内核源码结构1.6 内核裁剪与编译 1.7 内核配置选项介绍内核内核:是一个操作系统的核心。是一个操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性文件和网络系统,决定着系统的性能和稳定性。内核简述内核简述:(
2、让大家宏观的认识一下让大家宏观的认识一下,具体可参看具体可参看LinuxLinux操作系统相关教材操作系统相关教材)Linux 内核由内核由5个主要的子系统组成:个主要的子系统组成:进程调度(进程调度(SCHEDSCHED)内存管理(内存管理(MMMM)虚拟文件系统(虚拟文件系统(VFSVFS)网络接口(网络接口(NETNET)进程间通信(进程间通信(IPCIPC)1.1 Linux1.1 Linux内核简介内核简介Linux 内核子系统的抽象结构进程调度:它控制着进程对CPU的访问。Linux 使用比较简单的基于优先级的进程调度算法选择新的进程。内存管理:内存管理允许多个进程安全地共享主内存
3、区域。Linux 的内存管理支持虚拟内存,即在计算机中运行的程序,其代码、数据和堆栈的总量可以超过实际内存的大小,操作系统只将当前使用的程序块保存在内存中,其余的程序块则保留在磁盘上。必要时,操作系统负责在磁盘与内存之间交换程序块。虚拟文件系统:它可以隐藏各种硬件的具体细节,为所有设备提供统一的接口,VFS 还支持多达数十种不同的文件系统,这也是Linux 较有特色的一部分。网络接口:提供对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议和网络设备驱动程序两部分。网络协议部分负责实现每一种可能的网络传输协议;网络设备驱动程序负责与硬件设备进行通信;进程间通信:它的作用是支持进程间
4、各种通信机制。linuxlinux的一个重要的特点的一个重要的特点:源代码的公开性源代码的公开性1.所有的内核源程序都可以在/usr/src/linux下找到2.大部分应用软件也都是遵循GPL(GNU通用许可证)而设计的,你 都可以获取相应的源程序代码 3.全世界任何一个软件工程师都可以将自己认为优秀的代码加入 到其中,由此引发的一个明显的好处就是Linux修补漏洞的快 速以及对最新软件技术的利用 拥有了内核的源程序的好处:1.1.可以了解系统是如何工作的可以了解系统是如何工作的 通过读源代码,我们就可以了解系统的工作原理,这在 Windows下简直是天方夜谭。2.2.我们可以针对自己的情况,
5、量体裁衣,定制适合自己的操作我们可以针对自己的情况,量体裁衣,定制适合自己的操作 系统,这样就需要重新编译内核系统,这样就需要重新编译内核 Linux独特的模块机制可以根据用户的需要,实时地将某些模 块插入到内核或从内核中移走,在Windows下很难,几乎是不可能!3.3.我们可以对内核进行修改,以符合自己的需要。我们可以对内核进行修改,以符合自己的需要。这相当于自己开发了一个操作系统,但是大部分的工作已经 做好了,你所要做的就是要增加并实现自己需要的功能。在Windows下,除非你是微软的核心技术人员,否则就不可能!1.2 Linux1.2 Linux内核版本号内核版本号 由于linux的源
6、程序是完全公开的,任何人只要遵循GPL,就可以对内核加以修改并发布给他人使用。为了确保这些无序的开发过程能够有序地进行,Linux采用了双树系统:稳定树(stable tree)非稳定树(unstable tree)或开发树(development tree)一些新特性、实验性改进等都将首先在开发树中进行。如果在开发树中所做的改进也可以应用于稳定树,那么在开发树中经过测试以后,在稳定树中将进行相同的改进。一旦开发树经过了足够的发展,开发树就会成为新的稳定树。开发数就体现在源程序的版本号中:源程序版本号的形式为:对于稳定树来说,y是偶数;对于开发树来说,y比相应的稳定树大1 因此,是奇数下载内核
7、版本地址http:/1.3 1.3 为什么重新编译内核为什么重新编译内核 linux作为一个自由软件,在广大爱好者的支持下,内核版本不断更新。新的内核增加了许多新的特性。如果用户想要使用这些新特性,或想根据自己的系统度身定制一个更高效,更稳定的内核,就需要重新编译内核。为什么要重新定制自己的内核?一般主要有下面四个考虑:(1)尺寸小 自己定制编译的内核具有更少的代码,运行会更快(2)节省内存 由于内核部分永远占用物理内存,定制内核可使系统 拥有更多的物理内存(3)减少漏洞 不需要的功能编译进入内核可能会增加被系统攻 击者利用的漏洞(4)动态加载模块 根据需要动态地加载或者卸载模块,可以节省系统
8、内存1.4 1.4 内核编译模式内核编译模式 要增加对某部分功能的支持,比如要增加对某部分功能的支持,比如:网络之类,可网络之类,可以把相应部分编译到内核中(以把相应部分编译到内核中(build-inbuild-in),也可以把该),也可以把该部分编译成模块(部分编译成模块(modulemodule),动态调用。),动态调用。如果编译到内核中如果编译到内核中:优点优点:在内核启动时就可以自动支持相应部分的功能,在内核启动时就可以自动支持相应部分的功能,这样的优点是方便、速度快,机器一启动,你就可以这样的优点是方便、速度快,机器一启动,你就可以使用这部分功能了;使用这部分功能了;缺点缺点:会使内
9、核变得庞大起来,不管你是否需要这部会使内核变得庞大起来,不管你是否需要这部分功能,它都会存在分功能,它都会存在;建议经常使用的部分直接编译到内核中,比如网卡。建议经常使用的部分直接编译到内核中,比如网卡。如果编译成模块,就会生成对应的如果编译成模块,就会生成对应的.o.o文件,在使用文件,在使用的时候可以动态加载的时候可以动态加载。优点优点:不会使内核过分庞大不会使内核过分庞大;缺点缺点:你得自己来调用这些模块。你得自己来调用这些模块。1.5 1.5 内核源码结构内核源码结构LinuxLinux核心源程序通常都安装在核心源程序通常都安装在/usr/src/linux/usr/src/linux
10、下下:Arch Arch:archarch子目录包括了所有和体系结构相关的核子目录包括了所有和体系结构相关的核心代码。它的每一个子目录都代表一种支持的体心代码。它的每一个子目录都代表一种支持的体系结构,例如系结构,例如i386i386就是关于就是关于intel cpuintel cpu及与之相及与之相兼容体系结构的子目录。兼容体系结构的子目录。PCPC机一般都基于此目录;机一般都基于此目录;Include:Include:include include子目录包括编译核心所需要的大部分头文子目录包括编译核心所需要的大部分头文件。件。与平台无关的头文件在与平台无关的头文件在:include/lin
11、ux:include/linux子目录下,子目录下,与与intel cpuintel cpu相关的头文件在相关的头文件在:include/asm-i386:include/asm-i386子目录下子目录下,与与arm cpuarm cpu相关的头文件在相关的头文件在:include/asm-arm:include/asm-arm子目录下子目录下InitInit:这个目录包含核心的初始化代码这个目录包含核心的初始化代码(注:不是系统的引注:不是系统的引导代码导代码),包含两个文件,包含两个文件main.cmain.c和和Version.cVersion.c,这是研究,这是研究核心如何工作的一个非
12、常好的起点。核心如何工作的一个非常好的起点。Mm Mm:这个目录包括所有独立于这个目录包括所有独立于 cpu cpu 体系结构的内存管理体系结构的内存管理代码,如页式存储管理内存的分配和释放等;而和体系结代码,如页式存储管理内存的分配和释放等;而和体系结构相关的内存管理代码则位于构相关的内存管理代码则位于arch/*/mm/;arch/*/mm/;例如例如arch/i386/mm/Fault.c arch/i386/mm/Fault.c KernelKernel:主要的核心代码,此目录下的文件实现了大多数主要的核心代码,此目录下的文件实现了大多数linuxlinux系统的内核函数,其中最重要的
13、文件当属系统的内核函数,其中最重要的文件当属sched.csched.c;同样,和体系结构相关的代码在同样,和体系结构相关的代码在arch/*/kernelarch/*/kernel中;中;DriversDrivers:放置系统所有的设备驱动程序放置系统所有的设备驱动程序;每种驱动程序又各每种驱动程序又各占用一个子目录:占用一个子目录:如,如,/block/block 下为块设备驱动程序,比如下为块设备驱动程序,比如ideide(ide.cide.c)。)。Lib:Lib:放置核心的库代码放置核心的库代码;Net:Net:与网络相关的代码与网络相关的代码;Ipc:Ipc:这个目录包含核心的进程
14、间通讯的代码这个目录包含核心的进程间通讯的代码;Fs:Fs:所有的文件系统代码和各种类型的文件操作代码,所有的文件系统代码和各种类型的文件操作代码,它的每一个子目录支持一个文件系统,它的每一个子目录支持一个文件系统,例如例如fatfat和和ext2;ext2;Scripts:Scripts:此目录包含用于配置核心的脚本文件等。此目录包含用于配置核心的脚本文件等。阅读理解内核源码的三个重要文件阅读理解内核源码的三个重要文件:1.在每个目录下,都有在每个目录下,都有:.depend .depend 文件文件 Makefile Makefile 文件,文件,这两个文件都是这两个文件都是编译时使用的辅
15、助文件编译时使用的辅助文件,仔细阅读,仔细阅读这两个文件对弄清各个文件这间的联系和依托关系很有这两个文件对弄清各个文件这间的联系和依托关系很有帮助;帮助;2.2.在有的目录下还有在有的目录下还有Readme Readme 文件,它是对文件,它是对该目录下的该目录下的文件的一些说明文件的一些说明,同样有利于我们对内核源,同样有利于我们对内核源码的理解;码的理解;1.6 1.6 内核裁内核裁剪剪与编译与编译 通常要运行的第一个命令是:通常要运行的第一个命令是:cd/usr/src/linuxcd/usr/src/linux make mrpropermake mrproper该命令确保源代码目录下
16、没有该命令确保源代码目录下没有不正确的不正确的.o.o文件文件以及以及文文件的互相依赖件的互相依赖。也可用也可用make cleanmake clean 或或 make realcleanmake realclean接下来的内核裁剪与编译过程接下来的内核裁剪与编译过程 Linux Linux 内核的裁剪与编译看上去是个挺简单的过程,内核的裁剪与编译看上去是个挺简单的过程,只是对配置菜单的简单选择。只是对配置菜单的简单选择。实质上是内核配置菜单本身结构庞大,内容复杂。实质上是内核配置菜单本身结构庞大,内容复杂。因此熟悉与了解该菜单的各项具体含义就显得比较重要。因此熟悉与了解该菜单的各项具体含义就
17、显得比较重要。我们现在就对其作一些介绍:我们现在就对其作一些介绍:Linux Linux 内核的编译菜单有好几个版本,运行:内核的编译菜单有好几个版本,运行:1 1)基于字符界面的基于字符界面的configconfig:make config make config进进 入命令行,可以一行一行的配置入命令行,可以一行一行的配置;2 2)基于图形界面的基于图形界面的menuconfigmenuconfig:make menuconfig make menuconfig 进入进入menuconfig menuconfig 菜单。菜单。(稳定且用得最多稳定且用得最多)3 3)基于图形界面的基于图形界
18、面的xconfig:make xconfigxconfig:make xconfig 进入进入xconfigxconfig菜单菜单基于字符界面的基于字符界面的make configmake config 基于图形界面的基于图形界面的menuconfig menuconfig 配置菜单配置菜单基于图形界面的基于图形界面的xconfig xconfig 配置菜单配置菜单 在选择相应的配置时,有三种选择方式,它们的含义在选择相应的配置时,有三种选择方式,它们的含义如下:如下:Y Y将该功能编译进内核;将该功能编译进内核;N N不将该功能编译进内核;不将该功能编译进内核;M M将该功能编译成可以在需要
19、时动态插入到内核将该功能编译成可以在需要时动态插入到内核中的模块中的模块(动态加载的模块动态加载的模块)。对于使用对于使用make menuconfigmake menuconfig,需要使用,需要使用空格键空格键进行进行选取选取(xconfigxconfig可以用鼠标可以用鼠标)。在每一个选项前都有一个在每一个选项前都有一个括号括号,有中括号,有中括号、尖括号和尖括号和圆括号圆括号:用空格键选择时用空格键选择时:中括号中括号:空或空或“*”“*”空表示空表示:此选项不要此选项不要 “*”“*”表示表示:编译到内核里编译到内核里(静态静态)尖括号尖括号:空,空,*和和M“M“空表示空表示:此选
20、项不要此选项不要 “*”表示表示:编译到内核里编译到内核里(静态静态)“M“表示表示:编译成模块编译成模块(动态动态)圆括号圆括号:要求在所提供的几个选项中选择一项要求在所提供的几个选项中选择一项 在完成内核的裁减之后,内核的编译就是一个非常在完成内核的裁减之后,内核的编译就是一个非常简单的过程。你只要执行以下几条命令就行:简单的过程。你只要执行以下几条命令就行:1.make dep1.make dep make dep make dep 作用:读取配置过程生成的配置文件,来作用:读取配置过程生成的配置文件,来创建对应于配置的依赖关系树,从而决定哪些需要编译创建对应于配置的依赖关系树,从而决定
21、哪些需要编译而那些不需要;而那些不需要;2.make zImage/make bzImage2.make zImage/make bzImage make zImage make zImage和和make bzImagemake bzImage则实现完全编译内核,则实现完全编译内核,二者生成的内核压缩文件的,只要使用一个就够了,它们二者生成的内核压缩文件的,只要使用一个就够了,它们的区别在于使用的区别在于使用make bzImagemake bzImage可以生成大一点的内核。可以生成大一点的内核。3.make install3.make install(MakefileMakefile中)中
22、)这条命令可以把相关文件拷贝到指定的目录。这条命令可以把相关文件拷贝到指定的目录。事例事例:在内核配置中添加对在内核配置中添加对USBUSB输入设备的支持输入设备的支持1.Make menuconfig 1.Make menuconfig 进入配置菜单进入配置菜单2.2.添加添加Input core support Input core support 3.3.添加添加USB support/USB Human Interface Device USB support/USB Human Interface Device (full HID)support (full HID)support
23、具体配置菜单,首先进入内核所在目录,键入具体配置菜单,首先进入内核所在目录,键入make menuconfig make menuconfig,就会看到配置菜单,就会看到配置菜单:选项比较复杂,这里简单介绍一些重要选项选项比较复杂,这里简单介绍一些重要选项。裁减时应根据具体情况,裁减时应根据具体情况,参考帮助参考帮助的内容加以选择。的内容加以选择。1.7 1.7 内核配置选项介绍内核配置选项介绍 1.Code maturity level options 1.Code maturity level options 代码成熟度选代码成熟度选 项,它有子项:项,它有子项:1.1.prompt fo
24、r development and/or incomplete 1.1.prompt for development and/or incomplete code/drivers code/drivers 该选项是对那些还在测试阶段的代码,驱动模块等该选项是对那些还在测试阶段的代码,驱动模块等的支持。一般应该选这个选项。的支持。一般应该选这个选项。1.2.prompt for obsolete code/drivers 1.2.prompt for obsolete code/drivers 该项用于对那些已经老旧的,被现有文件替代了的该项用于对那些已经老旧的,被现有文件替代了的驱动,代码的支
25、持,可以不选,在新的版本中已被替换。驱动,代码的支持,可以不选,在新的版本中已被替换。2.loadable module support 2.loadable module support 动态加载模块支持选项,动态加载模块支持选项,其子项有:其子项有:2.1.enable module support 2.1.enable module support 支持模块加载功能,应支持模块加载功能,应 该选上。该选上。2.2 set version information on all module symbols2.2 set version information on all module s
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 部分 搞高篇 讲稿 内核 编译
限制150内