Linux驱动程序框架

Linux驱动程序框架1 驱动程序框架首先,我们来看一个最简单的驱动程序,我们学习C语言的第一个程序,我想大部分都是HelloWorld程序,驱动依然如此。我们来看下

欢迎大家来到IT世界,在知识的湖畔探索吧!

1 驱动程序框架

首先,我们来看一个最简单的驱动程序,我们学习C语言的第一个程序,我想大部分都是HelloWorld程序,驱动依然如此。

我们来看下我们的第一个驱动:

Linux驱动程序框架

1.1 模块的出入点

我们在编写应用程序时,都有一个main()函数,这个函数是应用程序的入点,当这个函数返回时,应用程序便退出了。对于内核模块就不一样了,内核模块有一个入点,同时还有一个出点。入点,是模块加载时调用的函数;出点,是模块卸载的调用的函数。

对于内核函数的出入点,我们不用像应用程序的main()函数一样,需要是固定的函数名,出入点的函数名可以被命名成任意名字,但是想要程序出入点,我们需要将函数名作为参数提供给module_init()和module_exit()这两个宏,通知内核,将他们标识为出入点,即相应的加载和删除函数。就如我们的第一个驱动代码所示。

注:在模块加载或卸载后,init函数或exit函数被立即执行一次

1.2 模块信息

我们可以通过以下命令获取模块的信息:

objdump xxx.ko -d -j .modinfo

l xxx.ko表示编译后生成的模块文件。

l .modinfo是指存储模块信息的段。

Linux驱动程序框架

modinfo部分可以看作模块的数据表,我们可以使用modinfo命令来格式化打印存储在.modinfo段中的相关信息:

Linux驱动程序框架

在模块信息中,我们除了看到标准信息外,我们还可以看到许可、模块作者、参数描述、模块版本和模块描述。下面做简单描述。

注:我们可以使用 objdump -h xxx.ko命令获取更多的段的相关信息。

1.1.1 许可

MODULE_LICENSE()宏,定义了模块的许可,如源码中所示:

MODULE_LICENSE(“GPL”);

该宏告诉内核模块采用何种许可,当使用的是与GPL不兼容的许可时,将导致模块不能通过EXPORT_SYMBOL_GPL()宏看到或使用内核导出的服务函数,这个宏只对GPL兼容模块显示符号。内核中,我们还可以看到EXPORT_SYMBOL()宏,该宏表示具有任何许可的模块导出函数。我们可以在内核源码的include/linux/module.h中看到相关许可说明:

Linux驱动程序框架

注:模块至少必须和GPL兼容,这样才能获取完整的内核服务

1.1.2 模块作者

MODULE_AUTHOR()宏,声明了模块的作者,如:

MODULE_AUTHOR(“ZPC”);

当作者有多个的情况下,每一作者都需要使用MODULE_AUTHOR()声明。

1.1.3 模块描述

MODULE_DESCRIPTION()宏,简要描述了模块的功能,我的示例代码中没有加入该宏,大家可以自行添加,重新编译后查看相关信息有何不同之处。

MODULE_DESCRIPTION(“My first module!”);

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/34731.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信