MODULE_AUTHOR、MODULE_DESCRIPTION、MODULE_LICENSE宏

在阅读Linux Driver源代码时,我们经常会在文件的结尾处看到诸如:MODULE_AUTHOR、MODULE_DESCRIPTION、MODULE_LICENSE等宏定义,这些宏主要是定义了一些模块信息。但这些模块信息具体是怎么加到模块里的?就需要深入分析一下这些宏定义具体是怎么定义的。下面我们以MODULE_AUTHOR为例,来具体分析一下有关module信息的宏。

首先,我门来看一下MODULE_AUTHOR()宏的定义:

#define MODULE_AUTHOR(_author)   MODULE_INFO(author, _author)

#define MODULE_INFO(tag, info) __MODULE_INFO(tag, tag, info)

#define __MODULE_INFO(tag, name, info)  \

static const char __UNIQUE_ID(name)[]  \

__used __attribute__((section(".modinfo"), unused, aligned(1))) \

= __stringify(tag) "=" info

#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)

#define ___PASTE(a,b) a##b

#define __PASTE(a,b) ___PASTE(a,b)

到这里,关于MODULE_AUTHOR()宏的所有定义已经全部展开,下面我们以一个实例来说明MODULE_AUTHOR的用法。

例如:MODULE_AUTHOR("Dennis")

展开后变为:

static const char __UNIQUE_ID_Dennis0[]

__used__attribute__((section(".modinfo"), unused, aligned(1)))

= "author"“=”“Dennis”

所以,展开后,我们可以发现,其实MODULE_AUTHOR宏其实是定义了一个以参数__author为标识符的一部分的字符数组。且将此变量放在.modinfo的段中。以便在加载模块时,提供模块信息。

MODULE_AUTHOR、MODULE_DESCRIPTION、MODULE_LICENSE宏

时间: 2024-10-17 12:07:44

MODULE_AUTHOR、MODULE_DESCRIPTION、MODULE_LICENSE宏的相关文章

第六章读书心得

本章主要学习了Android的底层开发,一个linux驱动统计单词数,主要学到了如下知识点: 6.1Linux驱动到底是个什么东西 了解linux驱动的工作和访问方式 6.2编写linux驱动程序的步骤 第一步:建立linux驱动骨架(装载和卸载linux驱动) 第二步:注册和注销设备文件 第三步:指定与驱动相关的信息 第四步:指定回调函数 第五步:编写业务逻辑 第六步:编写Makefile文件 第七步:编译linux驱动程序 第八步:安装和卸载linux驱动 6.3第一个linux驱动:统计单

第六章 读后心得体会

编写Linux驱动程序的步骤 第一步:建立Linux驱动骨架(装载和卸载Linux驱动). Linux驱动程序一般都需要指定module_init和module_exit,因此包含这两个函数及指定这两个函数的两个宏的C程序文件也可看作是Linux骨架. 第二步:注册和注销设备文件 分别使用misc_register和misc_deregister函数创建和移除设备文件. 第三步:指定与驱动相关的信息 通过MODULE_AUTHOR,MODULE_LICENSE,MODULE_ALLAS,MODU

《android深入探索》第六章心得

看了本书第六章,我学到了: linux系统下每个驱动都映射成一个文件(设备文件/驱动文件),都保存在/dev目录下.回掉函数的功能是使linux驱动能响应应用程序,使设备文件和应用程序交互的接口. 编写linux驱动程序(大体框架): ①   装载驱动:module_init()   卸载驱动:module_exit() ②   注册设备文件:misc_register()  注销设备文件:misc_deregister() ③   指定与驱动相关信息:MODULE_AUTHOR.MODULE_

第六章 第一个Linux驱动程序:统计单词个数 心得笔记

一.Linux系统将每个驱动都映射成一个文件.这些文件称为设备文件或驱动文件,都保存在/dev目录中.这使得与Linux驱动进行交互就向与普通文件进行交互一样容易.大多数Linux驱动都有与其对应的设备文件,因此与Linux驱动交换数据变成与驱动设备交换数据. 二.编写Linux驱动程序 1.建立Linux驱动骨架           Linux内核在使用驱动时需要装载与卸载驱动        装载驱动:建立设备文件.分配内存地址空间等:module_init 函数处理驱动初始化        

Linux内核模块文件组成介绍

作者:华清远见讲师 Linux驱动开发主要的工作就是编写模块,一个典型的Linux内核模块文件.ko 主要由以下几个部分组成. 模块加载函数(必须) 当通过insmod或modprobe命令加载内核模块时,模块的加载函数会自动被内核执行,完成本模块的相关初始化工作. Linux内核模块加载函数一般用static 关键字声明为内部链接,并以__init 标识.之所以标识为__init ,用途是如果编译内核时模块是以静态方式包含在vmlinux中,则在链接的时候标识为__init 的函数会放在.in

安卓移植和驱动开发第六章心得体会

第六章 第一个LINUX驱动程序:统计单词个数 统计单词数的word_count 驱动是本书实现的第一个完整的Linux 驱动.虽然word_count 驱动的功能并不复杂,但足以让以前从来接触过Linux 驱动的开发人员了解Linux 驱动的完整开发过程.本章不仅仅是介绍一个示例,还介绍了如何使用不同的方法测试Linux 驱动.这些方法主要以平台来区分.当然,要编写 Linux 驱动程序还需要更高级的功能. 如向打印机驱动写入数据时, 对于打印机 驱动来说,需要接收这些被写入的数据,并将它们通

《Android深度探索》(卷1)HAL与驱动开发 第六章心得体会

编写Linux驱动程序的步骤: 第1步:建立Linux驱动骨架(装载和卸载Linux驱动) 任何类型的程序都有一个基本的结构,例如,C语言需要有一个入口函数main.Linux驱动程序也不例外.Linux内核在使用驱动时首先需要装载驱 动. 在装载过程中需要进行一些初始化工作,例如,建立设备文件,分配内存地址空间等.当Linux系统退出时需要卸载Linux驱动,在卸载的过程中需要释放 由Linux驱动占用的资源,例如,删除设备文件.释放内存地址空间等.在Linux驱动程序中需要提供两个函数来分别

《Linux内核设计与分析》第十七章读书笔记

设备与模块 关于设备驱动和设备管理,四种内核成分. 设备类型:在所有Unix 系统中为了统一普通设备的操作所采用的分类. 模块: Linux 内核中用于按需加载和卸载目标码的机制. 内核对象:内核数据结构中支持面向对象的简单操作,还支持维护对象之间的父子关系. sysfs :表示系统中设备树的一个文件系统. 17 .1 设备类型 在Linux 以及所有Unix 系统中,设备被分为以下三种类型 块设备 字符设备 网络设备 块设备通常缩写为blkdev,它是可寻址的,寻址以块为单位,块大小随设备不同

第六章随想

第六章 统计单次个数 读后感 从这章开始则是进入了实验内容,即编写Linux驱动程序. 第一步:建立Linux驱动骨架(装载和卸载Linux驱动).在Linux驱动程序中需要提供俩个函数来分别处理驱动初始化和退出的工作,分别是module_init和module_exit宏指定 第二部:注册和注销设备文件.分别使用misc_register和misc_deregister函数创建和移除设备文件. 第三步:指定与驱动相关的信息 第四步:指定回调函数 第五步:编写业务逻辑 第六步:编写Makefil