嵌入式linux内核的配置及编译_第1页
嵌入式linux内核的配置及编译_第2页
嵌入式linux内核的配置及编译_第3页
嵌入式linux内核的配置及编译_第4页
嵌入式linux内核的配置及编译_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

内核裁剪篇为什么要裁减内核自己定制编译的内核运行更快(具有更少的代码)

系统将拥有更多的内存(内核部分将不会被交换到虚拟内存中)

不需要的功能编译进入内核可能会增加被系统攻击者利用的漏洞

将某种功能编译为模块方式会比编译到内核内的方式速度要慢一些

如何升级内核添加进内核的方式:将新增加部分编译到内核中(build-in)把新增加部分编译成模块(module),动态加载。各自特点:编译到内核中,在内核启动时就可以自动支持相应部分的功能,这样的优点是方便、速度快,机器一启动,用户就可以使用这部分功能了;缺点是会使内核变得庞大起来,不管你是否需要这部分功能,它都会存在。建议经常使用的部分直接编译到内核中,比如网卡。如果编译成模块,就会生成对应的.o文件,在使用的时候可以动态加载,优点是不会使内核过分庞大,缺点是你得自己来调用这些模块。

内核的模块式结构内核模块是Linux内核向外部提供的一个接口,其全称为动态可加载内核模块(LoadableKernelModule,LKM),简称为模块。Linux内核之所以提供模块机制,是因为它本身是一个单内核(monolithickernel)。单内核的最大优点是效率高,因为所有的内容都集成在一起,但其缺点是可扩展性和可维护性相对较差,模块机制就是为了弥补这一缺陷。模块

模块是具有独立功能的程序,它可以被单独编译,但不能独立运行。它在运行时被链接到内核作为内核的一部分在内核空间运行,这与运行在用户空间的进程是不同的。模块通常由一组函数和数据结构组成,用来实现一种文件系统、一个驱动程序或内核中其他上层的功能。

模块与内核的关系模块和内核都在内核空间运行,模块编程在一定意义上就是内核编程。因为内核版本的每次变化使得其中的某些函数名也会相应地发生变化,因此模块编程与内核版本密切相关。本课中所涉及的内核编程基于的Linux内核为2.4.x版本,对于其他版本,可能还需要做一些调整。应用程序与内核模块的比较C语言应用程序内核模块程序使用函数libc库内核函数运行空间用户空间内核空间运行权限普通用户超级用户入口函数main()init_module()出口函数exit()cleanup_module()编译gcc-cgcc–c–D__KERNEl___DMOKULE连接gccGcc运行直接运行insmod调试gdbkdbug,kdb,kgdb等名字空间污染

namespacepullution

当存在大量的函数和全局变量,并且它们的名字没有明确的含义以至于难以区别时,就会发生所谓的名字空间污染。程序员需花费更多的时间和精力去记住这些已经保留的名字并为新符号寻找一个不重复的名字。名字空间冲突可能照成很多问题,如加载模块失败等古怪问题解决办法将所有符号定义为静态变量对于非全局变量的符号前加上一个内核中唯一的前缀。用户空间与内核空间操作系统的作用为程序提供一个计算机硬件的一致视图。负责程序的独立操作以及保护资源不受非法访问。内核运行在最高级(管理员模式supervisormode),可以进行所有操作。应用程序运行在优先级最低即所谓的用户模式(usermode),在这一级中处理器控制着对硬件的直接访问以及对内存的非授权访问。lsmod查看已注册的内核内核模块实例

#define__KERNEL__

#defineMODULE#include<linux/module.h>#include<linux/kernel.h>intinit_module(void){ printk("HellowWorld!\n”); return0;)voidcleanup_module(void){ printk("Goodbye,cruelworld!\n”);) module_init(hello_init);

module_exit(hello_exit);

模块主要函数及定义头文件及宏定义 #define__KERNEL__ #defineMODULE#include<linux/module.h>#include<linux/kernel.h>module_init():模块的初始化函数,

module_exit():模块的卸载函数,

初始化函数和卸载函数必须成对出现。模块常用信息:作者、描述、版权等, MODULE_AUTHOR("author");

MODULE_DESCRIPTION("thedescription");

MODULE_LICENSE("GPL");写内核或内核模块不能用写应用程序时的系统调用或函数库.模块的编译KDIR=/YF2410/kernelINCLUDEDIR=$(KDIR)/includeCFLAGS=-D__KERNEL__-DMODULE-I$(INCLUDEDIR)CC=arm-linux-gccOBJS=hello.o$(OBJS):hello.c $(CC)$(CFLAGS)-c$^clean: -rm-f$(OBJS)*.o模块的加载与卸载Insmod./hello.ormmodhellomodutils

modutils是管理内核模块的一个软件包。用户可以在任何提供内核源代码的地方获取modutils(modutils-x.y.z.tar,gz)源代码,然后选择最高级别的、patch.x.y.z等于或小于当前版本的内核版本,安装后在/sbin目录下就会有insmod、rmmod、ksyms、lsmod、modprobe等实用程序。当然,通常在加载Linux内核时,modutils已经被载入。Mo建du岗ti木ls的常对用命摊令in心sm泥od命令调用in拥sm肚od程序手,把扶需要域插入揭的模鞠块以嚼目标唯代码咏的形弓式插抹入到真内核锦中。赖在插纷入的蓝时候咬,in幕sm驼od自动栋调用in袄it魔_m皆od吴ul朱e()函数划运行昌。注传意,慢只有春超级桐用户估才能趴使用趋这个妖命令彩。格式#in枝sm壤od[pa劳th某]m贝od羡ul醉en窄am粱e.弦orm捞mo脊d命令调用rm去mo钳d程序垒,将衔已经肿插入木内核桌的模矩块从叉内核膨中移魄出。rm餐mo此d会自哥动运打行cl贤ea喷nu摘p_惜mo袭du厘le()函数驱,格式钓:#rm兵mo右d[pa盟th娃]m骗od战ul守en指am真e.乌oMo威du聪ti鼓ls的常萄用命旺令ls谊mo表d命令调用ls伤mo赢d程序拆将显桂示当条前系初统中春正在裂使用璃的模晚块信腥息。坏实际驱上这机个程左序的攀功能擦就是鸟读取肉/pr攀oc/mo基du正le村s文件世中的君数据庸。格式幕为:#ls她mo购dks码ym绪s命令Ks疗ym悉s这个目程序料用来找显示排内核尽符号缺和模提块符深号表绩的信金息。秒与ls歉mo喂d相似其,它谷的功乒能是寨读取/p置ro电c文件技系统偏中另喜一个尊文件/p吗ro梅c/ks司ym窄s的内陕容模块猜的导塞出和用境户空租间的讯应用污程序专不同纷的是蜻,引诊入一政个模护块的短目的川常常斤是为仔了给住内核革提供镇一些ro悼ut手in加e,来章完成事特定授的功趟能,酬很少轰有模沿块什胁么符浊号都烛不导孔出。Li泥nu铁x为用怜户提陷供了脂如下钓宏:EX毁PO遗RT想_S辜YM烘BO昌L(杂va骄r);桂/犯/输出sy鄙mb款olva猪rEX附PO常RT油_S慕YM在BO害L_肿GP算L(泡va浑r);搅/智/输出志的sy谅mb酸ol版权挂为GP堵L内核况符号调表模块承与模犹块之修间的雹共享旱方式共享延变量函数内核笔只把艘各个库模块宁中主持要的制变量奇和函倾数放夕在一坐个特吩定弯的集区段撑,这铃些变揉量和现函数汁统称争为符号。对于哈内核益这个妄特殊忌的母昂模块膝,在ke蔽me缠l/ks句ym线s.c中定名义了用可以毫从中辟“移盈出”寸的符兔号。模块叉的依天赖关贡系模块霜依赖如前白所述违,内绝核符君号表絮记录啄了所牺有模芝块可甜以访稠问的卖符号胶及相泡应的凤地址猜。当亭一个袍新的控模块循被装叨入内蒜核后倦,它秒所声签明的恨某些擦符号肾就会税被登来记到匪这个贯表中浙,使腔这些乌符号精可能摩被其师他模昨块所夫引用棚,这楼就引鸣出了烘模块座依赖旅问题弟。结一详个模开块A引用旱从另都一个俩模块B中移贸出的静符号畏,叫胖做模贼块B被模薯块A引用番,或悄者渔模稳块A依赖倾模块B。如茎果要郑链接矛模块A,必咳须先俊链接坛模块B。这蹲种模再块间菜相互雄依赖尤的关燥系叫筋做模就块依堆赖。模块除引用藏计数向器为了殿确保炮安全禁地卸罢载模扣块,毒每个猪模块钉都有盛一个心引用轧计数烧器。加当执香行模递块所抱涉及仆的操盆作时慰就递佛增该遍模块疫的计那数器辞,在泳操作睛结束步时就忽递减趴这个奖计数而器。沈另外晌,当山模块B被模剪块A引用称时,总模块B的引加用计盼数器邮就递夺增;糖引用驾结束范,计局数器两递减煮。什榆么时胖候可支以卸杏载这见个模师块?当然良只有刘这个完计数跟器值查为0的时泉候。嫂例如沈,当赖一个显文件付系统践还安咐装在圆系统兔中时展就不监能将程其卸援载,躁而当趁这个宵文件巩系统追不再驻被使派用时眼,引乌用计宗数器帐为0,可赴以卸宅载。在li刃nu汇x/mo鹅du下le.h文件萄中定塌义了狮如下炭三个纷宏来沫维护筒计数婚器:MO捐D怨IN急C违US字E犹CO轿UN疑T当前秩模块贩计数习器加1MO兵D叙DE瞒C爽US耳E迅CO速UN挡T当前浑模块醋计数青器减1MO丝式D辛m窑US芳E计数迎器非0时返除回真内核妇的编四译内核盈简介内核瓜是一锡个操锹作系与统的逢核心锹。它饰负责赞管理畅系统耍的进肾程、姻内存觉、设英备驱丑动程唉序、鸡文件铺和网弦络系决统,总决定终着系世统的初性能劈燕和稳百定性乎。Li滴nu纪x的一瞎个重午要特仪点就敢是其脂源代朴码的纷公开范性。蹲其所秧有的震内核裂源程翻序都殃可以岂在诱/us亩r/sr蜂c/Li磨nu界x下找巾到,径大部深分应少用软房诚件都涉是遵罗循GP谅L设计娇的,谜用户歉可以脊获取建相应叮的源邀程捏序睡代码获。配置画内核虏所需蜜指令#m愉ak罗eco攀nf搂ig基于拔文本尖的、钞最为截传统尾的配联置界刻面。#m醋ak鞭eme至nu疑co败nf渡ig基于土文本旅菜单讽的配这置界测面,需字符贞终端露下推羡荐使信用。#m府ak争exc些on施fi姥g基于炎图形急窗口陈模式共的配煮置界油面,Xw荣in冶do顽w环境支下推乡丰荐使牺用。#m乓ak籍eol副dc今on生fi屯g如果萝只想亦在原靠来内违核配协置的蛮基础解上修蹈改一疮些小扑地方徐,用镰此命念令会还省去咽不少第麻烦1代码稍成熟礼度选西项对那嗽些还农在测就试阶杜段的秤代码夏,驱聚动模您块等酸的支浸持。对那齿些已煤经老着旧的陆,被纽奉现有寇文件仓替代鬼了的干驱动南,代维码的粮支持肿,可技以不矩选。动态登加载泰模块老支持近选项支持郑模块独加载忍功能该项费用来店支持鞭跨内版核版葛本的篇模块把支持转。通过ke龄rn竞el努d程序机的帮执助在监需要诞的时酒候自匀动载株入或弯卸载轰那些喂可载悟入式逝的模谜块。系统皮类型昼,主摄要是CP成U类型蹦,以愧及于跟此相防关的狡内容常用报设备腔设置可热溜拔插蔽的设仁备的讽支持网络播支持sy仔st戚em鸦V的进望程间队通讯支持团在不蠢重启匠情况串下直突接改蚁变内选一谦个模宫拟数歼学协痛处理走器电源品管理MT迟D(fl验as饮h,RA鲁M等)意存储纲设备盈的设蚁置支持技对MT视D的分傍区操屑作所有MT亮D设备资提供存一个店字符恼设备岗,以朵便进周行读瞎写操俭作支持传利用RA屈M芯片锹作为冒缓存卸来使放用MT币D设备对NA嫌ND颂f连la蛛sh进行皂设置网络聋协议艳支持pp阅pTc致p/夕ip支持is鼓dn服务若想麦启动艇该项缠支持IS逗DN通讯瓶,应连启动多前面胡提到锋的Ne开tw担or估ki萝ng郑D距ev兴ic鲜es中的SL丑IP或PP鲜P。对输锈入设滤备的烟支持键盘丢、鼠挡标、斩游戏驾手柄炉等字符纲设备屯的设屿置虚拟精终端虚拟杨终端氧控制跟台串口月设置对I2籍C设备胜的支讯持多媒用体设龙备的某支持对视功频的董支持娃(V4上L)对音课频的疫支持文件夹系统特的支聪持份额洗分配应支持徒。支嫁持对昼每个肠用户忧使用嫩的磁捉盘空拦间进愉行限宁制。RO泰M掘fi蹄le帽s犁ys霉te卵m隙su袖pp欣or微tEX铅T3EX爹T2网络争文件尸系统酸(NF周S)光驱写的支旅持对各开国语午言的驱支持岗。一些滨有关壤内核贪调试锐及内妈核运挎行信哥息的就选项可以颈全部承关掉控制阴台设有备支糟持VG奇A她te哥xt识c应on雕so个lePc上使喂用Fr义am唤e碰Bu绢ff瞧er设备64箩0×文48笔016叮bp愚s内核归选项Y将该替功能够编译映进内探核。N不将练该功纹能编问译进杯内核启。M将该弦功能塞编译炒成可膏以在摔需要云时动辛态插钞入到额内核膨中的层模块伙。编译四命令#m寸ak疑ede俊p#m除ak教e陷cl详ea盖n#m谎ak梨ebz萌lm奋ag某e或ma饺kezl续ma浮gema骨ke舰de汉p实际胀上读婚取配苹置过骗程生怖成的尽配置睁文件帝,创携建对帮应于能配置宰的依赶赖关横系树捎,从贤而决领定哪隶些需炉要编佛译而党哪些为不需盗要;ma茄ke云c情le稿an完全装删除难前面担步骤跑留下明的文竹件,洞以避昨免出挎现一桂些错插误;ma醉kezl手ma贫ge和ma捡kebz剃lm魄ag营e命令戒则完羡全编苍译内数核,斜二者而生成塑的内练核都纯是使疑用gz愉ip压缩撑的,难只要掀使用享其中沙的一验个命畅令就基够了划,它依们的盘区别滚在于改使用ma吗kebz莲lm袭ag忙e命令下可以即生成廉稍大您一点糊的内劫核。冰这里硬建议波大家荣使用ma都kebz挽lm厕ag跳e命令斑。2.炉6内核支持深更多冻处理鹊器,浩比如AM舟D6挖4、一喘些大根型机悔及嵌系入式赴等,钢同时街改进砌了对控已有纵处理客器的亭支持胀。采眯用抢染占式取内核灯,使雨交互磁式操羡作的锁响应惯速度渔大大穷提高型。修犁改了I/牧O子系州统部捐分,搂保证眠在各杏种工伴作负杯荷下I/禽O都有织很好爹的响而应速新度。迁改进涛和部潮分重猪写了Mo杀du危le谈s功能膛,使锐之更普稳定啄。目改进腊

温馨提示

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

评论

0/150

提交评论