版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1、嵌入式Linux内核缩减、丁男丁难_、嵌入式系统软件设计、2、为什么要缩减内核、自己定制编译的内核运行速度更快(使用较少的代码)、不需要的功能编译内核(内核部分不会交换为虚拟内存)会增加系统攻击者使用的脆弱性。将特定功能编译为模块比编译为内核慢。3,升级内核,如何将其添加到内核:将新添加的部分编译到内核(build-in)将新添加的部分编译到模块(module)中并动态加载。每个特性:可以编译到内核中,在内核启动时自动支持该部分的功能,因此具有方便、快速、设备启动后用户即可使用该部分功能的优点;缺点是可以使内核庞大,无论是否需要其中的一些功能,它都会存在。建议将经常使用的部分(如网卡)直接
2、编译到内核中。编译为模块。o文件创建和使用时可以动态加载,其优点是不会使内核过大。缺点是必须直接调用这些模块。4内核的模块化结构内核模块是Linux内核提供的外部接口之一,全部称为动态可加载内核模块(LoadableKernelModule,LKM),简称为模块。Linux内核提供模块机制的原因是它本身是单个内核(monolithickernel)。单个内核的最大优点是效率,因为所有内容都集成在一起了。但是,存在可扩展性和可维护性相对较差的缺点,模块机制正是为了弥补这一缺陷。5,模块,模块是具有独立功能的程序,可以单独编译,但不能独立运行。它在运行时连接到内核,作为内核的一部分在内核空间中运行
3、,与在用户空间中运行的进程不同。模块通常由一组函数和数据结构组成,这些函数和数据结构在文件系统、驱动程序或内核中实现其他上层的功能。6,模块和内核的关系,模块和内核都在内核空间中运行,模块编程在某种意义上是内核编程。模块编程与内核版本密切相关,因为只要内核版本发生变化,其中的一些函数名称就会相应地发生变化。本节介绍的基于内核编程的Linux内核是24x版本,其他版本可能需要进行一些调整。7、应用程序与内核模块比较,8、名称空间污染namespacepullution,存在很多函数和全局变量,其名称没有明确的意义难以区分时所谓的名称空间污染。程序员必须花更多的时间和精力记住这些已经保存的名字,并
4、为新元件找到不重复的名字。命名空间冲突是一种奇怪的故障排除方法(如模块加载失败),通过将所有符号定义为静态变量,可以在非全局变量的符号之前添加内核唯一的前缀。9,用户空间和内核空间,操作系统的作用为程序提供计算机硬件的一致视图。负责程序的独立工作,保护资源不受非法访问。内核运行在可以执行所有操作的最高级别(管理员模式supervisormode)。应用程序在优先级最低的用户模式(usermode)下运行,在此级别,处理器控制对硬件的直接访问和对内存的未授权访问。10,查看lsmod注册的内核,11,内核模块实例,# define _ _ kernel _ # define module # i
5、nclude # include intrhello _ includen );return 0;)void hello _ exit(void)printk(good bye,cruelworld!n );)module _ init(hello _ init);module _ exit(hello _ exit);12,模块主要函数和定义,头文件和宏定义# define _ _ kernel _ # define module # include # include module _ init():模块通用信息:作者、说明、版权等,MODULE _ AUTHOR(AUTHOR);modu
6、le _ description(the description);MODULE _ LICENSE(GPL);13,编译模块,# kdir=/arm 2410s/kernel-2410 skdir=/usr/src/2 . 4 . 30-8 includedir=$(kdir)o,14,加载和卸载模块,insmod。/hello.ormmodhello,15,modutils,modutils是管理内核模块的单个软件包。用户从提供内核源代码的任何地方获取modutils(modutils-xyztar,gz)源代码,并选择最高级别patchxyz等于或小于当前版本的内核版本,安装后sbin目
7、录中的insmod、rmmod、ksyms、lsmod、mod products当然,当加载Linux内核时,通常已经加载了modutils。16,Modutils的一般指令,insmod指令会呼叫insmod程式,将需要插入的模组做为目标程式码插入核心。Insmod在插入时自动调用init_module()函数来执行。只有超级用户才能使用此命令。#insmodpathmodulename.ormmod格式命令调用rmmod程序,从内核中删除已插入内核的模块。Rmmod以# rmmodmodulename,17,Modutils的通用命令格式自动运行cleanup_module()函数,当ls
8、mod命令调用lsmod程序时,将显示当前系统正在使用的模块信息。实际上,此程序的功能是读取procmodules文件中的数据。格式如下:#lsmodKsyms命令Ksyms此程序用于显示有关内核符号和模块符号表的信息。与Lsmod类似,读取/proc文件系统中其他文件/proc/ksyms的内容,导出模块18,引入一个模块(与用户空间中的应用程序不同)的目的通常是为内核提供一些routine以执行特定功能,很少导出任何元件。Linux将EXPORT_SYMBOL(var)宏提供给用户。/symbolvarEXPORT_SYMBOL_GPL输出(var)。/导出的symbol将GPL、19、内
9、核符号表、模块和模块之间的共享变量函数内核,将每个模块的关键变量和函数集中放在一个称为符号的特定部分中。对于称为内核的特殊arm模块,定义kernelksymsc“弹出”的字符。20,/* interrupt handling */export _ symbol(add _ timer);EXPORT _ SYMBOL(del _ timer);EXPORT _ SYMBOL(request _ IRQ);EXPORT _ SYMBOL(free _ IRQ);#if!defined(config _ ia64)/* IRQ _ statspartofstructcpuinfo _ ia64
10、*/export _ symbol(IRQ _ stat内核符号表记录所有模块都可以访问的符号及其地址,如#endif,21,模块相关性,模块相关性前面所述。将新模块加载到内核中后,声明的一些符号将在此表中注册,并可以由其他模块引用,从而导致模块依赖问题。一个模块a引用从另一个模块b移动的符号,模块b被模块a引用,或者模块a从属于模块b。要链接模块a,必须先链接模块b。此模块之间的相互依赖性称为模块依赖性。22,模块引用计数器,每个模块都有一个引用计数器,以便安全卸载模块。在执行与模块相关的操作时,请增加该模块的计数器,完成后请减少此计数器。此外,如果模块b被模块a引用,模块b的参考计数器将增
11、加。参考结束,计数器减少。什么时候可以卸下此模块?当然,只有当这个计数器值为零时。例如,文件系统安装在系统上时不能卸载,如果文件系统不再使用,则引用计数器为零,可以卸载。为了维护计数器,linuxmoduleh文件中定义了三个宏:MODINCUSECOUNT当前模块计数器1MODDECUSECOUNT当前模块计数器减1MODmUSE计数器非0时为true,23,内核编译,24,内核简介,内核是操作系统的核心。管理系统的进程、内存、设备驱动程序、文件和网络系统,以确定系统的性能和可靠性。Linux的重要特征是源代码的公开性。所有相应的内核源代码都可以在usrsrcLinux上找到,大多数应用程序
12、都是按照GPL设计的,用户可以获取相应的源代码。25,内核配置所需的命令,#makeconfig是最常用的基于文本的配置接口。#makemenuconfig基于文本终端下建议的文本菜单的配置界面。#makexconfig基于图形窗口模式下的配置界面,建议在Xwindow环境中使用。#makeoldconfig如果您只想根据原始内核配置修改一小部分,使用此命令可以省去很多麻烦。26,1,代码成熟度选项为仍在测试阶段的代码、驱动程序模块等提供支持。替换为现有文件的旧驱动器,代码支持,未选择。动态加载模块支持可选模块加载功能支持此选项用于支持跨内核版本的模块支持。在Kerneld程序的帮助下,按需加
13、载或卸载可自动加载的模块。系统类型,主要是CPU类型及其相关事项,共同设备设置可热插拔设备的支持网络支持systemV的进程间通信支持直接选定的模拟协处理器电源管理更改,MTD(flash、RAM等)存储设备的设置支持MTD的分区操作支持为所有MTD设备提供单个字符设备,进行读取和写入操作,输入设备的支持键盘、鼠标、游戏句柄等,文字设备的设置虚拟终端虚拟终端控制台串行端口设置I2C设备的支持,28,多媒体设备的支持视频支持(V4L)的音频支持,文件系统的支持共享分配支持。支持对每个用户使用的磁盘空间的限制。支持ROMfilesystemsupportEXT3EXT2网络文件系统(NFS)光驱支
14、持各国语言。内核调试和内核执行信息的某些选项可以全部关闭,控制台设备可以使用VGAtextconsolePc中的FrameBuffer设备64048016bps,29,内核选项,y将此功能编译到内核中。 n不将此功能编译到内核中。m使用可以在需要时动态插入内核的模块编译此功能。30,命令编译,# make dep # make dep # make clean # makebzlmage或makezlmagemakedep读取配置过程实际生成的配置文件,并生成与配置相对应的依存关系树以确定需要编译和不需要的内容;Makeclean完全删除上一步骤中留下的文件,以防止某些错误。Makezlmag
15、e和makebzmage命令完全编译内核,两者均生成使用gzip压缩的内核。使用其中一个命令就足够了。区别在于,使用makebzmage命令可以生成稍大的内核。建议使用Makebzlmage命令。增强了对现有处理器的支持,同时支持更多处理器,包括31,2.6核、AMD64、部分大型机和嵌入式。采用预占核心,交互式操作的响应速度大大提高。I/O子系统部分已修改,以在各种工作负载下保持良好的I/O响应速度。Modules功能已得到改进,部分重新编写,更加稳定。改进了USB支持,可以支持当前大多数主流USB设备。加强对无线设备的支持。新内核集成了uCLinux并添加了新的体系结构和处理器类型,包括对无MMU系统的支持。事实上,2.6版内核中的许多新功能是针对企业应用程序的增强功能,如支持多达64个CPU、64GB内存和非统一存储访问(NUMA)。对于普通PC用户,2.6版内核能感受到的是对U
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026西安市雁塔区第十三幼儿园教师招聘建设考试备考题库及答案解析
- 2026四川高能智盾科技有限公司招聘市场开发岗等岗位13人建设笔试参考题库及答案解析
- 2026国家开发投资集团有限公司战略性新兴产业国投创新院板块招聘建设笔试备考题库及答案解析
- 2026江西赣州市会昌县锦诚物业管理有限公司招聘劳务派遣工作人员2人建设考试备考题库及答案解析
- 2026辽宁省朝阳市喀左县教育局直属学校赴高校招聘教师(第二批次)13人建设考试参考试题及答案解析
- 2026湖北省崇阳县人才引进26人建设笔试模拟试题及答案解析
- 2026江苏无锡市住房公积金管理中心招聘2人建设考试备考试题及答案解析
- 2026年山东交通职业学院公开招聘博士研究生(30名)建设笔试模拟试题及答案解析
- 2026年中国科大附一院(安徽省立医院)心血管内科高超课题组科研助理招聘4人建设笔试备考题库及答案解析
- 2026广东广湛城旅游轮有限公司招聘建设考试参考题库及答案解析
- 股骨干骨折护理个案
- 无创辅助呼吸护理要点
- GB/T 6433-2025饲料中粗脂肪的测定
- 《生殖医学进展:胚胎冷冻保存技术》课件
- 施工现场环境保护责任清单
- DL∕T 5342-2018 110kV~750kV架空输电线路铁塔组立施工工艺导则
- DZ∕T 0291-2015 饰面石材矿产地质勘查规范
- 概念辨析复习 -2021-2022学年高一下学期物理人教版(2019)必修第二册(含答案)
- 《乙烯基聚乙二醇醚(VPEG)、乙烯氧基丁基聚乙二醇醚(VBPEG)》
- 甜食酒服务-教育课件
- 道路运输企业两类人员安全考核题库题库(1020道)
评论
0/150
提交评论