Linux内核

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Linux内核编译移植课程主要内容什么是内核(扩展)–内核定义–内核的类型–Linux内核的启动过程–内核的组成部分–内核的五大功能模块–内核代码结构的简要剖析如何进行内核移植(书本第六章内容)注:标题带***表示PPt扩展的重要内容***什么是内核***内核是操作系统最基本的部分。内核通常提供一种硬件抽象的方法来完成应用程序对计算机资源的访问。内核为应用软件和硬件提供了一套简洁,统一的接口,使程序设计更为简单。***什么是内核***增强型计算机(对于应用程序)资源管理器(对于程序)库***内核的类型***微内核只有最基本的功能直接由中央内核(微内核)实现,所有其他的功能都委托给一些独立进程,这些进程通过明确定义的通信接口与中心内核通信。应用:机器人、医疗器械宏内核---linux内核内核的全部代码,包括所有子系统都打包到一个文件中***Linux的启动过程***–引导加载程序(Bootloader)–Linux内核–文件系统–应用程序***linux内核的组成部分******Linux的主要组成部分***系统调用接口进程管理内存管理虚拟文件系统网络堆栈设备驱动程序依赖体系结构代码***系统调用接口***SCI层提供了某些机制执行从用户空间到内核的函数调用。在./linux/kernel中您可以找到SCI的实现,并在./linux/arch中找到依赖于体系结构的部分。***进程管理***进程管理的重点是进程的执行。在内核中,这些进程称为线程,代表了单独的处理器虚拟化(线程代码、数据、堆栈和CPU寄存器)。在用户空间,通常使用进程这个术语,不过Linux实现并没有区分这两个概念(进程和线程)。内核通过SCI提供了一个应用程序编程接口(API)来创建一个新进程(fork、exec或PortableOperatingSystemInterface[POSIX]函数),停止进程(kill、exit),并在它们之间进行通信和同步(signal或者POSIX机制)。***进程管理***进程管理还包括处理活动进程之间共享CPU的需求。内核实现了一种新型的调度算法,不管有多少个线程在竞争CPU,这种算法都可以在固定时间内进行操作。这种算法就称为O(1)调度程序,这个名字就表示它调度多个线程所使用的时间和调度一个线程所使用的时间是相同的。O(1)调度程序也可以支持多处理器(称为对称多处理器或SMP)。您可以在./linux/kernel中找到进程管理的源代码,在./linux/arch中可以找到依赖于体系结构的源代码。***内存管理***内核所管理的另外一个重要资源是内存。为了提高效率,如果由硬件管理虚拟内存,内存是按照所谓的内存页方式进行管理的(对于大部分体系结构来说都是4KB)。Linux包括了管理可用内存的方式,以及物理和虚拟映射所使用的硬件机制。不过内存管理要管理的可不止4KB缓冲区。Linux提供了对4KB缓冲区的抽象,例如slab分配器。这种内存管理模式使用4KB缓冲区为基数,然后从中分配结构,并跟踪内存页使用情况,比如哪些内存页是满的,哪些页面没有完全使用,哪些页面为空。这样就允许该模式根据系统需要来动态调整内存使用。为了支持多个用户使用内存,有时会出现可用内存被消耗光的情况。由于这个原因,页面可以移出内存并放入磁盘中。这个过程称为交换,因为页面会被从内存交换到硬盘上。内存管理的源代码可以在./linux/mm中找到。***虚拟文件系统***虚拟文件系统(VFS)是Linux内核中非常有用的一个方面,因为它为文件系统提供了一个通用的接口抽象。VFS在SCI和内核所支持的文件系统之间提供了一个交换层在VFS上面,是对诸如open、close、read和write之类的函数的一个通用API抽象。在VFS下面是文件系统抽象,它定义了上层函数的实现方式。它们是给定文件系统(超过50个)的插件。文件系统的源代码可以在./linux/fs中找到。文件系统层之下是缓冲区缓存,它为文件系统层提供了一个通用函数集(与具体文件系统无关)。这个缓存层通过将数据保留一段时间(或者随即预先读取数据以便在需要是就可用)优化了对物理设备的访问。缓冲区缓存之下是设备驱动程序,它实现了特定物理设备的接口。***网络堆栈***网络堆栈在设计上遵循模拟协议本身的分层体系结构。回想一下,InternetProtocol(IP)是传输协议(通常称为传输控制协议或TCP)下面的核心网络层协议。TCP上面是socket层,它是通过SCI进行调用的。socket层是网络子系统的标准API,它为各种网络协议提供了一个用户接口。从原始帧访问到IP协议数据单元(PDU),再到TCP和UserDatagramProtocol(UDP),socket层提供了一种标准化的方法来管理连接,并在各个终点之间移动数据。内核中网络源代码可以在./linux/net中找到。***设备驱动程序***Linux内核中有大量代码都在设备驱动程序中,它们能够运转特定的硬件设备。Linux源码树提供了一个驱动程序子目录,这个目录又进一步划分为各种支持设备,例如Bluetooth、I2C、serial等。设备驱动程序的代码可以在./linux/drivers中找到。***内核模块处理方式***要增加对某部分功能的支持,可以把相应部分编译到内核中,也可以把该部分编译成模块,动态调用。–如果编译到内核中,在内核启动时就可以自动支持相应部分的功能,这样的优点是方便、速度快,机器一启动,你就可以使用这部分功能了;缺点是会使内核变得庞大起来,经常使用的部分直接编译到内核中,比如网卡。–如果编译成模块,就会生成对应的.o文件,在使用的时候可以动态加载,优点是不会使内核过分庞大,缺点是你得自己来调用这些模块。在选择相应的配置时,有三种选择方式:Y-将该功能编译进内核N-不将该功能编译进内核M-将该功能编译成可以在需要时动态插入到内核中的模块***依赖体系结构的代码***尽管Linux很大程度上独立于所运行的体系结构,但是有些元素则必须考虑体系结构才能正常操作并实现更高效率。./linux/arch子目录定义了内核源代码中依赖于体系结构的部分,其中包含了各种特定于体系结构的子目录(共同组成了BSP)。对于一个典型的桌面系统来说,使用的是i386目录。每个体系结构子目录都包含了很多其他子目录,每个子目录都关注内核中的一个特定方面,例如引导、内核、内存管理等。这些依赖体系结构的代码可以在./linux/arch中找到。***Linux内核源码的组成部分***/Linux2.6.30.4--+--/arch存放体系结构的源代码|--/document存放一些说明文档|--/drivers存放驱动程序源代码|--/fs存放支持文件系统的源代码|--/include包括编译核心所需要的大部分头文件|--/init包含核心的初始化代码(不是系统引导代码)|--/ipc核心进程间通信的代码|--/kernel内核管理的核心代码|--/lib核心库代码|--/mm独立于cpu结构的内存管理代码***Linux内核源码的组成部分***|--/net核心的网络部分代码|--/scripts包含用于配置核心的脚本文件|--/block块设备的I/O调度|--/cypto常用加密和散列算法|--/security主要包含Selinux模块|--/sound音频设备的驱动核心代码|--/usr实现了用于打包和压缩的cpio等|--/makefile编译规则文件|--/config配置文件***Linux内核源码解压后示意图******Linux内核移植***为什么要进行内核移植?–什么叫移植所谓移植,是指要在一个全新研发的硬件上跑Linux,对内核代码所做的修改–内核移植的作用为所要运行该内核的硬件平台制定合适的内核代码为该内核添加对文件系统的支持裁剪不用的模块增加必须的模块如何进行linux内核移植(书本第六章)NANDFLASH分区配置内核内核编译下载内核到开发板NANDFLASH分区NANDFLASH的作用NANDFLASH共有64M,用于存储开发板的引导程序、内核、文件系统(相当于计算机的硬盘)为什么要指明NANDFLASH的分区情况–传统磁盘:分区靠分区表,即partitiontable–NANDFLASH:分区需要在内核代码中指明NANDFLASH分区如何进行NANDFLASH分区(参考P134,表6.1)如何进行分区修改:修改/linux-2.6.22.1/arch/arm/plat-s3C24XX/common-smdk.c文件禁止内核ECC校验(书本P136)配置内核修改makefile添加devfs配置(2.6以后的内核版本取消此选项)配置内核选项注:实验以及课程设计中所涉及的开发板安装的内核版本为linux2.6.30.4配置内核---修改makefile文件(P137)修改makefile文件的目的---指明使用的编译器是交叉编译器!修改参数ARCH和CROSS_COMPILE–ARCH参数表明要内核运行的目标是ARM体系–CROSS参数表明编译此内核需要使用交叉编译器是arm-linux-前缀的交叉编译器注意:如果需要使用特殊指定的交叉编译器(不是用PATH路径下指定下的),可以用绝对路径方式,(书P137)配置内核选项为什么要进行配置(补充)配置方法启动界面读取已有的配置文件选择具体的配置选项配置内核选项---为什么要进行内核配置(补充)要使得标准内核源代码能够生成特殊的目标文件从标准---特殊:所以要进行配置配置内核选择---内核配置的方法(P138)makeconfig:命令行模式的配置方法makeoldconfig:利用已有的.config文件makemenuconfig:文本菜单式配置,实验中采用更的方法(如果.config文件存在,使用.config的默认配置)makexconfig:图形化界面的配置方法,可通过鼠标进行配置,需要XWindow的支持(如果.config文件存在,使用.config的默认配置)注意:无论何种方法,都是为了修改生成linux目录下的.config文件利用makemenuconfig启动配置界面命令[root@local~]#cdlinux-2.6.22.1(实验为linux2.6.30.4)[root@locallinux2.6.22.1]#makemenuconfig利用文本菜单的方式进行配置结果---启动配置界面,如下图读取已有的配置文件作用:先利用默认的配置文件,进行初步配置命令:–书本上的方法:1.按LoadanAlternateConfiguationFile回车后输入./arch/arm/configs/S3c2440_deconfig.config;然后保存2.直接用命令[root@local~]#cparch/arm/configs/S3c2440_deconfig.config.config两种方法实现一个目的:将S3C2440_deconfig.config文件保存成为.config的配置文件命令(接上页)–实验四的方法:1.按LoadanAlternateConfiguationFile回车后输入./config_EmbedSky_A70_256MB;然后保存2.直接用命令[root@local~]#cpconfig_EmbedSky_A70_256MB.config两种方法实现一个目的:将config_EmbedSky_A70_256MB文件保存成为.config的配置文件选择具体的配置选项---在默认配置下做进一步修改主菜单配置选项:参考P140注意:–[*]表示该选项加入内核编译–[]表示不选择该选项–[M]表示该选项作为模块编译进内核,即可以动态加载和卸载

1 / 68
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功