基于嵌入式Linux可加载内核模块的研究.docVIP

基于嵌入式Linux可加载内核模块的研究.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于嵌入式Linux可加载内核模块的研究   摘要:随着嵌入式系统越来越广泛的应用,Linux由于其自身的特点成为最受欢迎的嵌入式操作系统之一。该文阐述了Linux在嵌入式系统中的应用,重点介绍了Linux可加载内核模块机制的基本原理和特点,以及编写和加载内核模块基本方法。   关键词:嵌入式Linux内核;可加载   中图分类号:TP316文献标识码:A文章编号:1009-3044(2008)26-1759-02      1 引言      一直以来,Linux操作系统以其开源性、稳定性、安全性和漏洞少等优良性能受到很多专业技术人员和公司的好评。而随着嵌入式技术的发展及广泛应用,Linux也由于其体积小、易于裁减、运行速度高和网络性能良好等优点成为嵌入式系统常用的操作系统之一,其中它的可加载内核模块机制体现出了强大的功能。      2 Linux在嵌入式系统中的应用      嵌入式系统(Embedded Systems)是计算机的一种应用形式,它是指“以具体应用为中心,以计算机和信息技术的发展为基础,将用户所需的特点功能嵌入到产片、装置或大型系统中,软硬件可裁剪,从而能够适应实际应用中对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统”。   正是由于嵌入式系统的应用特点,它对操作系统的要求并不同于一般的计算机系统。首先不同的宿主设备对嵌入式系统的要求都不一样,因此嵌入式操作系统的功能要足够强大,才能应付各种各样不同场合的使用。同时由于系统资源非常有限,嵌入式操作系统又必须满足精简高效、占用资源少、响应速度快的特点。对于设备控制系统,还有很重要的一个要求就是安全性和稳定性要好,不允许在控制过程中经常出现故障。   作为真正的32位操作系统,Linux能够很好地满足嵌入式系统的需要。Linux的可加载内核模块机制,支持设计人员可以根据不同嵌入式系统的需要,在不同的场合动态地选择不同功能的内核模块进行加载,内核可控制在100KB以内,这样既可实现对不同需求的支持,又可以一定程度上保证系统内核的精简,更好地实现操作系统功能专一而高效、高度节约资源、启动速度快、节省开发成本等目标。      3 Linux可加载内核模块机制      内核是Linux操作系统的核心,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。   当Linux系统要实现对某种特定功能的支持时,可以把相应部分编译到内核中,也可以把该部分编译成模块。如果编译到内核中,在内核启动时就可以自动支持相应部分的功能,但是会使内核变得庞大起来。如果编译成模块,就会生成对应的.ko文件,在需要使用时进行动态加载,这样就不会使内核过分庞大。所以通常将经常使用的部分直接编译到内核中,偶尔需要使用的部分作为动态可加载内核模块使用。   使用这种可加载内核模块机制,内核模块在需要时才加载到内核空间,不需要的时候可以释放内存资源,这样可以使内核更小更精简,从而避免占据太多的内核空间。而当需要添加内核功能时,只需要添加编译模块代码就可以了,不需要对基本内核进行频繁的改动。   对这种可加载内核模块的访问主要是通过内核中的一个全局变量module_list实现的。每当用户将一个模块加载到内核中时,这个模块就会被添加到由module_list形成的链表中。每当内核要使用到这个模块所提供的函数时,内核就会检索这个链表,找到相应的模块中的函数或变量。内核将资源登记在符号表中,模块可通过符号表使用核心资源。当模块加载入内核时,系统将新加载模块提供的资源和符号加到内核符号表中,通过这种通信机制,模块之间可以实现资源的互相访问。      4 内核模块的实现      4.1 内核模块的编写   一个内核模块至少要包含两个函数:用于加载时的模块初始化函数init_module()和用于卸载的模块结束函数cleanup_module()。实际应用中这两个函数可以用任意函数名代替,但是必须在函数定义后用宏module_init()和module_exit()进行声明,如:   static int __init lcd_init(void){…}   static void __exit lcd_exit(void){…}   module_init(lcd_init );   module_exit(lcd_exit);   4.2 内核模块的编译   编译时需要通过一个Makefile文件来完成,其具体内容可参考下面生成lcd.ko的Makefile文件:   obj -m +=lcd.ko   KDIR :=/usr/arc/linux-2.6   PWD :=$(shell pwd

文档评论(0)

heroliuguan + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8073070133000003

1亿VIP精品文档

相关文档