第12讲-Linux内核结构及移植_第1页
第12讲-Linux内核结构及移植_第2页
第12讲-Linux内核结构及移植_第3页
第12讲-Linux内核结构及移植_第4页
第12讲-Linux内核结构及移植_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

第十二讲

Linux内核结构及移植河南大学计算机与信息工程学院Linux内核结构及移植Linux内核结构Linux源代码结构Linux的移植Linux内核裁剪2Linux内核结构及移植Linux内核结构Linux源代码结构Linux的移植Linux内核裁剪3*4Linux内核结构*5Linux内核可以划分成三层。系统调用接口(SCI):实现了一些基本的调用功能,例如read和write等。内核代码:独立于体系结构的内核代码。这些代码是Linux所支持的所有处理器体系结构所通用的。依赖于体系结构的代码,构成了通常称为BSP(BoardSupportPackage)的部分。这些代码用作给定体系结构的处理器和特定于平台的代码。Linux内核结构*6Linux内核的主要子系统Linux内核结构*71)进程调度2)进程间通信3)内存管理4)虚拟文件系统5)网络堆栈6)设备驱动程序7)依赖体系结构的代码Linux内核的主要子系统Linux内核结构*8内核通过系统调用接口SCI层提供API来创建一个新进程,停止进程,并在进程间进行通信和同步;进程调度还包括处理活动进程间共享CPU的需求;内核进程管理的源代码在“./linux-2.6.x/kernel”中;依赖于体系结构的源代码在“./linux-2.6.x/arch”中。

1)进程调度Linux内核结构*9支持进程间各种通信机制,包括管道、FIFO、共享内存、信号、消息队列、套接字等。

2)进程间通信Linux内核结构*10为了提高效率,如果由硬件管理虚拟内存,内存是按照所谓的内存页方式进行管理的(对于大部分体系结构来说都是4KB)。Linux包括了管理可用内存的方式,以及物理和虚拟映射所使用的硬件机制。内存管理模式使用4KB缓冲区为基数,从中分配结构,并跟踪内存页使用情况,根据系统需要动态调整内存使用。内存管理的源代码在“./linux-2.6.x/mm”中。

3)内存管理Linux内核结构*11虚拟文件系统(VFS)为文件系统提供了一个通用的接口抽象。VFS在SCI和内核所支持的文件系统之间提供了一个交换层。文件系统的源代码在“./linux-2.6.x/fs”中。文件系统层之下的缓冲区可优化对物理设备的访问;缓冲区之下设备驱动程序接口。

4)虚拟文件系统Linux内核结构*12网络堆栈在设计上遵循模拟协议本身的分层体系结构。InternetProtocol(IP)是传输协议(通常称为传输控制协议TCP)下面的核心网络层协议。TCP上面是socket层,它是通过SCI进行调用的。Socket层是网络子系统的标准API,为各种网络协议提供用户接口。从原始帧访问到IP协议数据单元(PDU),再到TCP和用户数据报协议UDP,socket层提供了一种标准化的方法来管理连接,并在各个终点之间移动数据。内核中网络源代码在“./linux-2.6.x/net”中。

5)网络堆栈Linux内核结构*13Linux内核中有大量代码都在设备驱动程序中,它们能够支持特定硬件设备的运转。Linux源码树提供了一个驱动程序子目录,这个目录又进一步划分为各种支持设备,例如DMA、I2C、USB

等。设备驱动程序的代码可以在“./linux-2.6.x/drivers”中。

6)设备驱动程序Linux内核结构*14尽管Linux很大程度上独立于所运行的体系结构,但是有些元素则必须考虑体系结构才能正常操作并实现更高效率。./linux-2.6.x/arch

子目录中定义了内核源代码中依赖于体系结构的部分,其中包含了各种特定于体系结构的子目录(共同组成了BSP)。

7)依赖体系结构的代码Linux内核结构*15Linux内核的技术特点注重实用和效率:Linux内核被设计成分层的微内核,所以效率高,紧凑性强。内核可定制:选择适合的,剔除不需要的部分,适合嵌入式产品。LKM机制:LoadableKernelModule机制,用户在需要时现场动态加载,使用完毕可动态卸载。将模块从内核中独立出来。网络支持:支持大量网络协议。被动调用服务对象:Linux内核为用户进程服务的唯一方式是用户进程通过系统调用来请求在内核空间运行某个函数。虚拟内存技术:每个进程的虚拟内存空间为4GB。其中0-3GB属于用户空间,称为用户段;3-4GB属于内核空间,称为内核段。Linux内核结构Linux内核结构及移植Linux内核结构Linux源代码结构Linux的移植Linux内核裁剪1617/pub/linux/kernel/v2.6内核下载Linux内核目录结构linuxDocumentationarchdriversfsincludeinitmmlibnetscript帮助文档体系结构相关源代码驱动程序文件系统头文件kernel初始化Linux内存管理常用函数网络协议源代码脚本文件armbootkernellibmach-s3c2440vmlinux.lds压缩内核启动引导代码内核起始代码常用函数s3c2440平台相关代码核心的连接脚本文件与架构和平台相关的源代码都放在arch目录下,对于ARM的Linux,包含于arch目录下的arm子目录中。Linux内核arch目录*20Linux源代码结构结合源码包,仔细分析Linux-2.6.39内核源代码结构。*21linux-2.6.39:该主目录中包括所有的子目录,还含有唯一的一个Makefile文件。主要用途是通过识别哪些文件已被修改过,从而自动地决定在一个含有多个源程序文件的程序系统中哪些文件需要被重新编译。linux-2.6.39目录下的这个Makefile文件还嵌套地调用了所有子目录中包含的Makefile文件。这样,当linux目录(包括子目录)下的任何文件被修改过时,make都会对其进行重新编译。因此为了编译整个内核所有的源代码文件,只要在linux目录下运行一次make软件即可。Linux源代码结构1)linux主目录*22arch目录:包含和硬件体系结构相关的代码,每种平台占一个相应的目录。在这个目录下,针对不同体系结构所移植的版本都有三个子目录:kernel、lib和mm。kernel子目录包含依赖于体系结构实现的一般内核功能,如信号处理、时钟处理等;lib子目录包含库函数的本地实现,如果从依赖于体系结构的源码编译,则运行更快;mm子目录包含存储管理实现的代码。

Linux源代码结构2)arch目录*233)block目录:存放部分块设备驱动程序。4)crypto目录:存放常用加密和散列算法(如AES、SHA等),还有一些压缩和CRC校验算法。5)Documentation目录:存放关于内核各部分的通用解释和注释。6)drivers目录:存放设备驱动程序,每个不同的驱动占用一个子目录,如声卡的驱动对应于drivers/sound。这个目录拥有50%以上的内核源码,系统中所有的设备驱动程序都位于该目录中。7)fs目录:Linux支持的文件系统代码。不同的文件系统有不同的子目录与之对应。如ext、fat、ntfs等。8)include目录:存放头文件,包括了内核的大多数头文件,另外对每种支持的体系结构分别有一个子目录。其中,和系统相关的头文件被放置在linux子目录下。Linux源代码结构*249)init目录:存放内核初始化代码(不是系统引导代码)。包含了所有系统的初始化源码,许多主要的文件,如main.c就位于该目录下。该文件还包含了许多核心代码,如实现fork()的代码和最常执行的代码cpuidle()循环。10)ipc目录:处理进程间通信的全部所需的代码都放在该目录下。11)kernel目录:内核的最核心部分,许多最常调用的内核函数放在该目录下。包括调度器fork()和timer.c等,和平台相关的一部分代码放在arch/*/kernel目录下。12)lib目录:存放库文件代码。该目录放置内核其他部分经常所需要的代码,如inflate.c就放在这里,它能够在引导时解压内核并装入内存。与处理器结构相关的库代码放在arch/*/lib目录下。Linux源代码结构*2513)mm目录:包含了所有Linux实现虚拟内存管理的源码。与具体硬件体协结构相关的内存管理代码位于arch/*/mm目录下,如对应X86的就是arch/i386/mm/fault.c14)modules目录:存放已编译好的可动态加载的模块。15)net目录:存放所有提供网络支持的代码代码,实现了各种常见的网络协议,每个子目录对应网络的一个方面。16)scripts目录:存放用于配置内核的脚本文件及用户开发和维护手册。17)security目录:SELinux(Security-EnhancedLinux)的模块。18)sound目录:常用音频设备的驱动程序等。19)usr目录:/usr这是最庞大的目录,我们要用到的应用程序和文件几乎都存放在这个目录下Linux源代码结构Linux内核结构及移植Linux内核结构Linux源代码结构Linux的移植Linux内核裁剪26*27Linux移植:把Linux操作系统针对具体的目标平台做必要改写之后,安装到该目标平台使其正确的运行起来。Linux的移植Linux的移植Linux内核的移植可以分为板级移植和片级移植。板级移植:对于Linux发行版本中已经支持的CPU通常只需要针对板级硬件进行适当的修改即可。片级移植:对于Linux发行版本中没有支持的CPU则需要添加相应CPU的内核移植。片级移植相对板级移植来说要复杂许多,目前采用的Linux发行版本中已经包含S3C2440X

ARM920T处理器的移植包,因此,只需要在其上进行Linux板级移植的基本过程和方法。*291)交叉编译环境的搭建。2)修改相关的配置文件,如修改内核目录下的makefile文件中关于交叉编译工具相关的内容,此后就可以使用这个makefile进行编译了。3)修改linux内核源码,主要是修改和CPU相关的部分。4)内核的裁剪,根据项目的需要裁剪内核模块。5)内核的编译,将裁剪好的内核进行编译,生成二进制映像文件。6)内核的下载,将生成的二进制映像文件,烧写到目标平台。Linux的移植*30linux的移植主要包含启动代码的修改,内核的链接及装入,参数传递,内核引导几个部分。linux内核分为体系结构相关部分和体系结构无关部分。在Linux启动的第一阶段,内核与体系结构相关部分(arch目录下)首先执行,它会完成硬件寄存器设置,内存映像等初始化工作。然后把控制权转给内核中与系统结构无关部分。在移植工作中要改动的代码主要集中在与体系结构相关部分。Linux的移植Linux内核结构及移植Linux内核结构Linux源代码结构Linux的移植Linux内核裁剪31*32Linux内核的裁剪与编译看上去是个简单的过程。只是对配置菜单的简单选择。但是内核配置菜单本身结构庞大,内容复杂。熟悉与了解该菜单的各项具体含义就显得比较重要。Linux内核裁剪*33常用有如下几种方式:makeconfig

进入命令行,逐行配置makemenuconfig

menuconfig菜单makexconfig

xconfig菜单Linux内核裁剪makeconfig*35makemenuconfigLinux内核裁剪*36makexconfigLinux内核裁剪内核配置原则:大部分选项使用默认值,小部分根据用户不同进行选择。与内核关系紧密且经常使用的部分功能代码直接编译到内核中。与内核其他部分关系较远且不经常使用的部分功能代码编译成可加载模块。有利于缩短内核长度,减小内核消耗的内存。不需要的功能不选,或使用默认值。37Linux内核裁剪Linux常用配置选项系统及其存储器配置网络支持显示器支持触摸屏支持系统及其存储器配置在‘SystemType’菜单中中进行配置选择系统类型处理器型号选择处理器其它特性(USB支持等)网络支持在Networkingoptions以及Networkdevicesupport中进行配置选择支持TCP/IP协议在Networkdevicesupport配置中,添加选项Networkdevicesupport,并在Ethernet(10or100Mbit)中选择OtherISAcards,如下图所示选择NE2000/NE1000support采用RTL8019网卡芯片,为NE2000兼容网卡芯片网络支持显示器支持在Characterdevices以及Consoledrivers中进行配置。在Characterdevices配置中,添加选项Virtualterminal配置,如下图所示。Virtualterminal支持显示器支持在Consoledrivers中添加SupportFramebufferdevices配置如采用256色STN显示器,选择8bpp支持触摸屏支持在Characterdevices的SupportS3C2440TouchScreen子菜单中进行配置选择s3c2440触摸屏支持*45内核的编译在完成内核的裁减之后,内核的编译只要执行以下几条命令:(1)makeclean这条命令是在正式编译你的内核之前先把环境给清理干净。有时你也可以用makerealclean或makemrproper来彻底清除相关依赖,保证没有不正确的.o文件存在。(2)makedep这条命令是编译相关依赖文件。(3)makezImage这条命令就是最终的编译命令。有时可以直接用make(2.6.X版本上用)或makebzImage(给PC机编译大内核时用)。(4)makeinstall这条命令可以把相关文件拷贝到默认的目录。当然在给嵌入式设备编译时这步可以不要。因为具体的内核安装还需要你手工进行。编译Linux内核建立依赖关系

makedep编译内核

make编译内核

makezImage编译压缩核心(zImage)编译生成的Linux映像文件zImage通常保存在arch/arm/boot/目录下下载、运行和调试内核通过调试器下载内核并运行通过BOOTLOADER下载内核到SDRAM中运行通过BOOTLOADER将内核烧写到FLASH中,然后运行LinuxLinux内核移植主要过程1对于板级移植,内核移植主要包括如下几个部分:内核配置,包括板级包配置体系结构相关代码修改,根据板级包的配置,修改相应的体系结构相关代码,包括:压缩核心启动代码:linux/arch/arm/boot/内核启动代码:linux/arch/arm/kernel/板级相关代码:linux/arch/arm/mach-s3c2440/连接脚本核心连接脚本:linux/arch/arm/vmlinux.lds压缩核心连接脚本:linux/arch/arm/boot/compressed/linux.ldsLinux内核移植主

温馨提示

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

评论

0/150

提交评论