Linu内核的裁剪与移植.ppt
- 文档编号:7889285
- 上传时间:2023-05-12
- 格式:PPT
- 页数:33
- 大小:685.50KB
Linu内核的裁剪与移植.ppt
《Linu内核的裁剪与移植.ppt》由会员分享,可在线阅读,更多相关《Linu内核的裁剪与移植.ppt(33页珍藏版)》请在冰点文库上搜索。
1,嵌入式操作系统,适用专业:
物联网工程任课教师:
兰方鹏联系方式:
13453194233E-mail:
QQ:
275392011,TaiyuanUniversityofTechnology,太原理工大学计算机科学与技术学院,2,Linux内核的裁剪与移植,Linux内核简介Linux内核源码结构Linux进程通信Make工程管理器配置NFS服务器,3,Linux内核简介,Linux体系结构图:
4,Linux内核简介,Linux系统两大部分构成:
UserSpace:
用户空间KernelSpace:
内核空间,Linux系统为什么要划分为用户空间和内核空间呢?
X86系统下的CPU具有4个不同的运行级别:
Ring0-Ring3;Ring0下,可以执行特权指令,Ring3下则有很多限制。
Linux系统利用了CPU的这一特性,使用了两级来分别运行应用程序和Linux内核:
其目的是:
使得操作系统本身得到充分的保护。
5,Linux内核简介,Linux内核空间与用户空间是程序执行的两种不同状态,通过系统调用和硬件中断能够完成从用户空间到内核空间的转移。
6,Linux内核简介,Linux内核架构:
7,Linux内核简介,SystemCallInterface(SCI)为用户提供了一套标准的系统调用函数来访问Linux内核,搭建了用户空间到内核空间的桥梁。
ProcessManagement(PM)进程管理实现进程创建、调度、进程通信等,MemoryManagement(MM)内存管理主要是控制多个进程安全地共享内存区域,8,Linux内核简介,NetworkStack网络协议栈为Linux提供了丰富的网络协议实现,DeviceDrivers(DD)Liunx内核中有大量代码都在设备驱动程序中,它们控制特定的硬件设备。
9,Linux内核简介,VirtualFileSystem(VFS)VFS隐藏各种文件系统的具体细节,为文件操作提供统一的接口。
10,Linux内核源码结构,目录结构Linux内核源代码采用树形结构进行组织,非常合理地把功能相关的文件都放在同一个子目录下,使得程序更具可读性。
11,Linux内核源码结构,内核代码下载地址:
www.kernel.org,12,Linux内核-目录结构,archarch是architecture的缩写。
内核所支持的每种CPU体系,在该目录下都有对应的子目录。
每个CPU的子目录,又进一步分解为boot(系统引导程序)、mm(内存管理)、lib(硬件相关工具函数)和kernel(系统调用)等子目录。
block部分块设备驱动程序,crypto加密、压缩、CRC校验算法,documentation内核的文档,13,Linux内核-目录结构,drivers设备驱动程序。
init内核初始化代码,ipc进程间通信的实现代码,kernelLinux大多数关键的核心功能(进程控制、调度程序、模块化)都在这个目录实现,lib库文件代码,14,Linux内核-目录结构,samples内核编程的范例,scripts配置内核的脚本,securitySElinux的模块,sound音频设备的驱动程序,vir内核虚拟机,15,Linux内核-目录结构,net网络协议的是实现代码,802appletalk8021qbridgeipv4ipv6bluetoothethernetwanrouter,16,Linux内核-目录结构,fs存放各种文件系统的实现代码,每个子目录对应一种文件系统的实现。
devpts/dev/pts虚拟文件系统ext2ext3fat/windows文件系统isofs/ISO9660光盘CDROM上的文件系统vfat/MS-DOS文件系统nfs/网络文件系统,17,include存放内核所需要的头文件,linux/存放和平台无关的头文件asm-i386/和平台相关的头文件netvideosoundscsiconfigasm,Linux内核-目录结构,18,Linux内核-配置内核,Linux内核,内核是操作系统的核心。
它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。
内核源代码公开,linux的一个重要的特点就是其源代码的公开性,所有的内核源程序都可以在/usr/src/kernels/xxxx下找到,大部分应用软件也都是遵循GPL而设计的。
19,Linux内核-配置内核,便于深入学习操作系统:
我们可以了解系统是如何工作的。
通过通读源代码,我们就可以了解系统的工作原理,这在Windows下简直是天方夜谭。
内核源代码公开的意义,修补漏洞的快速以及对最新软件技术的利用,量体裁衣,定制适合自己的系统,这样就需要重新编译内核,为什么要重新编译内核?
自己定制编译的内核运行更快、更稳定(具有更少的代码)不需要的功能编译进入内核可能会增加被系统攻击者利用的漏洞将某种功能编译为模块方式会比编译到内核内的方式速度要慢一些更新的内核会支持更多的硬件,并且一般会修复老版本中发现的许多漏洞等,20,Linux内核-配置与编译,Linux内核版本号,Linux的源程序是完全公开的,任何人只要遵循GPL,就可以对内核加以修改并发布给他人使用,为了确保这些无序的开发过程能够有序地进行,Linux采用了双树系统。
一个树是稳定树(stabletree),另一个树是非稳定树(unstabletree)或者开发树(developmenttree)。
一些新特性、实验性改进等都将首先在开发树中进行。
如果在开发树中所做的改进也可以应用于稳定树,那么在开发树中经过测试以后,在稳定树中将进行相同的改进。
一旦开发树经过了足够的发展,开发树就会成为新的稳定树。
开发数就体现在源程序的版本号中,源程序版本号的形式为x.y.z:
对于稳定树来说,y是偶数;对于开发树来说,y比相应的稳定树大1(因此,是奇数),21,Linux内核-配置与编译,下载最新内核:
linux-3.13.6.tar.xzwww.kernel.org,#tarxvfxz-5.0.3.tar#cdxz-5.0.3#./configure#make#makeinstall,下载xz-5.0.3.tar.bz2解压工具,然后编译安装,解压linux-3.13.6.tar.xz文件,#xz-dlinux-3.13.6.tar.xz#tarxvflinux-3.13.6.tar,22,Linux内核-定制步骤,内核定制步骤:
makeclean,清除临时文件、中间文件和配置文件,removemostgeneratedfilesbutkeeptheconfig,makemrproper,removeallgeneratedfilesandconfigfiles,makedistclean,mrproper+removeeditorbackupandpathcfiles,注意:
以上命令的执行必须在linux-3.13.6目录下进行,23,内核定制步骤:
确定目标系统的软硬件配置情况:
CPU的类型、网卡型号、所需支持的协议等。
makeconfig:
基于文本模式的交互式配置,makemenuconfig:
基于文本模式的菜单型配置(推荐使用),使用如下命令之一配置内核:
makeoldconfig:
使用已有的配置文件(.config),但是会询问新增的配置选项,makexconfig:
图形化的配置(需要安装图形化系统),Linux内核-定制步骤,24,使用方向键在各个选项间移动使用“Enter”键进入下一层选项选项:
“空”和“*”选项:
“空”、“*”和“M”()选项:
在你所提供的几个选项中选一项y:
将这个项目编译进内核m:
将这个项目编译为模块n:
不选择空格:
在y、m、n中切换h:
显示选项的帮助信息两次ESC:
返回到上层选项,makemenuconfig:
X86平台makemenuconfigARCH=armCROSS_COMPILE=arm-linux-ARM平台,Linux内核-定制步骤,25,Y:
编译到内核中(build-in)N:
编译成模块(module),动态调用,内核编译模式,Linux内核-定制步骤,编译策略的选择,编译到内核中,在内核启动时就可以自动支持相应部分的功能,这样的优点是方便、速度快,机器一启动,就可以使用这部分功能了;缺点是会使内核变得庞大起来,不管是否需要这部分功能,它都会存在,这就是Windows惯用的招数,建议经常使用的部分直接编译到内核中,比如网卡。
编译成模块,就会生成对应的.o文件,在使用的时候可以动态加载,优点是不会使内核过分庞大,缺点是使用时需要调用这些模块。
26,配置菜单中配置项的选择:
内核配置通常在一个已有的配置文件基础上,通过修改得到新的配置文件Linux内核提供了一系列可供参考的内核配置文件,该文件位于:
arch/arm/configs,选择相应的配置文件拷贝过来:
#cps3c6400_defconfig./././.config#cp/boot/config-2.6.18-53.el5.config,修改该配置文件,#makemenuconfigARCH=armCROSS_COMPILE=arm-linux-,Linux内核-定制步骤,#makemenuconfig,27,编译内核:
makezImagemakebzImagemakeuImageARCH=armCROSS_COMPILE=XXXarm-linux-,在x86平台,zImage只能用于小于512K的内核,内核映像分为压缩的内核映像和未压缩的内核映像:
压缩的内核映像文件名为zImage或Image,位于:
arch/arm/boot/未压缩的内核映像文件名为vmlinux,位于源码树的根目录中,内核定制步骤:
Linux内核-定制步骤,28,编译内核时可能出现的问题:
编译环境:
VmWare的Linux+WindowsXP+vmhgfs文件共享,错误描述:
ln:
creatingsymboliclinkXXXXXX:
Operationnotsupported,错误原因:
由于在编译的时候,要用ln去建立一些软链接,而这些文件是从Windows中通过VMWare虚拟机共享进Linux的,而虽然此种操作在Linux系统中很常见,但Windows不支持,所以编译会报错。
解决方法:
把共享目录拷贝到linux系统中或者搭建samba服务器,Linux内核-定制步骤,29,编译内核模块:
makemodules安装过程可能较长,内核定制步骤:
安装内核模块:
makemodules_install这个命令实际上是把编译好的内核模块从内核源代码目录拷贝到/lib/modules目录下,Linux内核-定制步骤,30,制作initramdisk:
mkinitrdinitrd-$version$versionmkinitrdinitrd-2.6.292.6.29$version可以通过查询/lib/modules下的目录得到,内核定制步骤:
initrd是在实际根文件系统可用之前挂载到系统中的一个初始根文件系统,initrd是一个临时的文件系统,在没有存储设备的嵌入式系统中,initrd可以是永久的根文件系统。
使用initrd的主要原因是在内核启动之后能够判断哪些硬件驱动需要加载,文件系统有没有问题,最终使得根分区能顺利挂载。
Ubuntu、Debian使用mkinitramfs命令,Linux内核-定制步骤,31,拷贝内核映像文件到相应的目录,cparch/x86/boot/bzImage/boot/vmlinuz-$version,内核安装步骤:
Linux内核-安装,拷贝ramdisk文件到相应的目录,cp$initrd/boot/,修改配置文件,修改/etc/grub.conf或者:
修改/boot/grub/grub.conf,32,grub配置文件/etc/grub.conf,Linux内核-安装,default:
grub启动时默认菜单项。
0表示第一行,如果是多系统可以修改此选项改变默认光标停留位置timeout:
自动启动系统前停留的时间,单位时间是secondsplashimage:
启动菜单的背景图片(xpm图像)title:
指定一个启动操作系统的名称root:
指定相应内核镜像所在目录/boot所在的磁盘分区,hd0-n表示第几个硬盘,x则表示的是第几个分区-1initrd:
指定Linux的initialramdisk所在路径,33,grub配置文件/etc/grub.conf,Linux内核-安装,kernel:
Linux内核镜像所在路径,ro:
只读root=LABEL=/:
表示Linux根文件系统路径LABEL=/:
硬盘分区格式化为相应文件系统后所加的标签quiet:
安静模式,不显示核心检测的信息rhgb:
redhatgraphicboot,启动过程中用图形化界面显示启动信息,查看内核版本#uname-sr,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linu 内核 裁剪 移植