预览加载中,请您耐心等待几秒...
1/3
2/3
3/3

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

.,. 第19卷第4期广东经济管理学院学报Vol19No4 . 204年8月JoumalOfGuangdongInstituteofBusinessAdministrationAug2004 嵌入式Linux内核模块加载技术的分析 李淑文 , (广东经济管理学院广东广州510260) , 摘要:分析嵌入式Linux中利用模块加载技术实现对其核心动态更新的机制和原理详 。 细给出了Linux模块载入与却载的具体实现 关键词:Linux;内核模块;加载技术 中图分类号:TP316文献标识码:A文章编号:1672一4100(2004)04一0()78一03 cenuxeue onLoadTehnologyofEmbddedLiKrnelModl LiShuwen ,, (GuangdongInstituteofBusinessAdministrationGuan邵hou510260) - Abstract:Thepaperanalyzeshowthemoduleloadteehnolo盯15即pliedtodynamieallyrenewthein .. ternalsofembeddedLinuxItstudiesthedetailedproeessoftheloadandunloadofLinuxkernelmodules ,, Keywords:Linuxkemelmoduleloadteehnolo群 , 嵌人式Linux内核结构借助微内核设计思为了满足某些特定场合的要求需要利用模 ,,、。 想使Linux运行效率高方便系统的定制更新块的动态加载对内核进行有效的裁减和改造这 ,。。 和移植这与模块动态加载特性有关必须深人理解Linux内核的运行机制以下企图 。 Unux中,模块是未被编译进内核的一种目标说明 , 文件它们可以经过链接进内核生成可执行的机、 。一内核与模块技术分析 器代码需要时借助某些手段可很快地将其编译 。, 进内核,实现内核的更新模块加载由运行的加载在Linux内核中与模块相关的主要数据结 。。, 程序完成加载过程中模块的重定位和地址绑定构有:module和symboljable其中module用于记 。。 系统启动时或系统启动后都能进行模块加载这录模块的信息和相互调用关系symbol」able则用 。, 些即谓模块的动态加载功能于将模块动态链接进核心它是一个很重要的数 。, 模块动态加载有很好的特性当某些功能模据结构主要记录了两方面的信息:一是模块提供 。 块暂时不需要时可以从内核中卸载,需要用到时的函数和变量;二是模块的引用信息前者用于核 。 又能进行添加这样不仅把内核的镜像文件保持心和模块间的通信,后者则用于记录该模块引用 ,。。 在最小而且最大限度地节省内存利用Unux模其它模块的情况这两个数据结构是通过由 块动态加载特性,可以灵活地完成对系统的扩展medule指向它对应的symobl」able指针联系起来 。 和更新,例如,可以将驱动程序封装成模块形式,的 , 像网络接口驱动,终端驱动,网络文件系统驱动模块为了使用所需资源必须有一个机制使 。。 等,在需要的情形下能被加载或卸载核心能够找到它们例如,模块需要调用核心内存 收稿日期:204一06一n 一,,,。 作者简介:李淑文(1968)女广东阳春人广东经济管理学院信息工程系教师 。。 分配例程kmaloC()来分配内存模块在创建时并完成某些任务的代理 ,, 不知道kmalloC()在内存中的位置这样核心必须如图1所示无论是直接手工加载模块还是 e, 在使用这些模块前修改模块中对kmaloC()的引由kmeld守护进程动态加载都需要通过调用 。。, 用地址核心在其核心符号表中维护着一个核心insmed命令实现执行insmod命令时必须指出 ,,。 资源链表这样当我们加载模块时它能够解析出所要装载模块的位置即模块的路径名insmod 。,, 模块中对核心资源的引用另外Limix还允许存利用一个特权系统调用可以找到内核的导出符 。 在模块堆栈,以供它在模块之间相互调用时使号表其中,符号是成对出现的,一个是符号名称, 。,。 用例如VFAT文件系统模块可能需要FAT文件另外一个是符号的值如符号的地址 , 系统模块的服务因为VFAT文件系统多少是从insn1Od 。 FAT文件系统中扩展而来某个模块对其它模块用户请求 moue 的服务或资源的需求类似于模块对核心本身资源dl 或服务的请求,不过,此时所请求的服务是来自另用户态;核心态 。, 外一个事先已加载的模块每当加载模块时核心图1模块载入图 将把新近加载模块输出的所有资源和符号添加到insmod命令执行时系统的动作