MODULE_AUTHOR、MODULE_DESCRIPTION、MODULE_LICENSE宏

MODULE_DEVICE_TABLE函数 在你的板子的linux内核有如下文件:/arch/arm/mach-xxxx/board_xxxx.c,该文件中,有struct i2c_board_info __initdata i2c_info,该结构体列表中,有你的这个 wifi driver的i2c信息,这两份信息,通过 wifi_rf_i2c_id 里面的 RDA_WIFI_RF_I2C_DEVNAME 名称来匹配,名称一致,则成功 阅读详情

在阅读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的段中。以便在加载模块时,提供模块信息。

Duplicate Cleaner Pro 5.16 保姆级教程:如何用哈希值精准清理重复文件(附音频/视频模式详解) 本文详细介绍了Duplicate Cleaner Pro 5.16如何利用哈希值技术精准清理重复文件,特别针对音频、视频和图片等多媒体文件提供了专业解决方案。通过哈希算法比对和多媒体特征识别,帮助用户高效管理存储空间,提升文件整理效率。 阅读详情

相关推荐

MBIST --- PATR1.Memorybist测试原理

mem bist作为现在design设计中不可或缺的DFT设计内容,越发重要。本章节主要介绍mem bist组成部分,测试的原理以及注意事项。

sinat_27691203的博客 1万+

MODULE_AUTHOR 功能

#include <linux/module.h> #include <linux/init.h> moudle.h 包含了大量加载模块需要的函数和符号的定义. 你需要 init.h 来指定你的初始化和清理函数, 如我们在上面的 “hello world” 例子里见到的, 这个我们在下一节中再讲. 大部分模块还包含 moudleparam.h, 使得可以在模块加载时传递参数...

weixin_38853761的博客 3720

解决Cursor AI工具地域限制报错的方法与原理

地理围栏(GEO-fencing)是现代云服务常用的访问控制技术,通过IP地址库匹配、支付系统验证等方式实现区域限制。在AI编程工具领域,这种技术常导致类似Cursor出现的'unsupported country region'报错。从技术实现看,服务商会综合HTTP头信息、时区设置等多维度数据进行地理位置判断。开发者可通过调整网络出口、配置本地模型或使用企业版等方案解决。本文以Cursor为例,详细分析了AI工具地域限制的底层原理,并提供了包括Ollama本地部署在内的多种工程实践方案,特别适合需要稳定

weixin_30820077的博客 926

MODULE_AUTHOR宏(一)

用法 MODULE_AUTHOR(&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;quot;lxp@hzmct.com&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;quot;); 2.定义

qq_36412526的博客 3195

HFSS新手避坑指南:手把手教你用FR4基板仿真威尔金森功分器(附参数优化技巧)

本文详细介绍了使用HFSS仿真FR4基板威尔金森功分器的12个关键细节,包括介质基板设置、微带线建模、隔离电阻设置等实战技巧。特别针对微波技术中的常见问题,提供了参数优化和结果解读的实用方法,帮助新手快速掌握HFSS仿真技能。

weixin_27310417的博客 225

将3DMax编辑的动画,导入给已经绑定蒙皮好的模型给Unity使用

现在程序猿想做独立游戏,即容易,也难。 说容易,引擎越来越傻瓜化。 说难,到哪去找靠谱的美术? 好在伟大的AssetStore(还有淘宝上)有大批不赖的资源可以用。 现成的模型,是好,但是,没有配套的动作,却是一件让人头疼的事情,即使用IK动画,也不能完美的弥补这一缺陷。 虽然Unity具备 retargeting 功能,但是,也不是万能的,很多情况下,非标准的骨骼会导致

正经的时候都在打游戏 1万+

【Linux驱动基础详解】| Linux模块声明与描述

我们在编写一个模块的时候,常常使用一些宏定义来标识模块的作者,版本,以及相关信息的描述,如:`MODULE_AUTHOR`、`MODULE_DESCRIPTION`、`MODULE_LICENSE`、`MODULE_ALIAS`等,那么这些宏是如何进行管理的呢?

Donge's Blog 2256

Linux初级介绍之番外篇:Linux挂载windows中的共享目录

挂载windows共享目录Windows端共享权限设定解禁Guest设置共享目录权限Linux挂载端扫描共享目录挂载共享目录遇到错误的解决方案 Windows端共享权限设定 解禁Guest 右击我的电脑选择管理–>本地用户和组–>在用户项中双击Guest用户–>取消账号已禁用选项 设置共享目录权限 右击共享目录点属性–>在共享页面中点击共享选项–>下拉选择共享对象为Everyone–>点击共享按钮 3.设置本地策略 打开命令框–>输入secpol.msc–&gt

m0_53497201的博客 228

Linux驱动开发(四)——模块声明与描述

   本次实验中主要讲述宏:MODULE_LICENSE  MODULE_AUTHOR MODULE_DESCRIPTION MODULE_SUPPORTED_DEVICE和modinfo命令的使用。            宏 MODULE_LICENSE的作用主要是声明描述内核模块的许可权限,如果程序中不进行此声明,则在模块加载时,将会报出“ module license 'unspecifie...

代码穿越 2859

AI Agent Harness Engineering 的“热插拔”能力:模块化设计思路

本文我会结合我在大厂做AI Agent平台的实战经验,从核心概念、架构设计、代码实现、落地实战多个维度,给大家详细讲解AI Agent Harness Engineering的核心能力——热插拔的模块化设计思路。我们会从问题根源出发,一步步搭建一个完整的支持热插拔的Agent Harness框架,包含组件抽象、注册中心、生命周期管理、配置驱动、容错机制等核心模块。

AI天才研究院 500

最佳RANSAC算法拟合矩形的实现(基于PCL库)

最佳RANSAC算法是一种常用的参数估计方法,用于从数据集中拟合出最佳的模型。在计算机视觉和图像处理领域,最佳RANSAC算法常用于拟合几何形状,如矩形。本文将详细介绍如何使用点云库(PCL)中的最佳RANSAC算法来拟合矩形,并提供相应的源代码。

JbPatch的博客 1540

1.1 Linux内核模块编写

Linux内核模块是一段单独编译的内核代码,它在Linux内核空间运行,在需要时被加入内核,在不需要时也可从内核中卸载。

lf282481431的博客 2112

开源Harness项目DeerFlow 2.0,让智能体几乎能完成任何复杂任务

从提示工程到上下文工程,再到如今的 Harness,这条演进路径的本质是从“教模型如何理解人类”迈向“为模型构建一个可执行、可信赖、可长期运转的数字世界”。 当越来越多像 DeerFlow 2.0 这样的 Super Agent Harness 走向普及,AI 将真正进化为能理解、会规划、可执行、敢交付、长期负责的成熟生产力形态。

技术引领业务创新 519

Linux内核模块编程入门-4(Licensing和Module Documentation)

若运行在2.4内核或后面的版本,当加载所有权模块时,或注意到有如下的内容: 在内核2.4或后面的版本,使用的机制是在GPL许可证下识别代码,以警告相关人员该代码是非开源的。这是通过MODULE_LICENSE()宏来完成的,通过设置许可证为GPL,这样可以防止打印警告信息,定义在linux/module.h。 相似的,MODULE_DESCRIPTION()用于描述模块是干什么

Second的专栏 1424

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

MODULE_DEVICE_TABLE宏的作用

1. MODULE_DEVICE_TABLE (usb, skel_table); 该宏生成一个名为__mod_pci_device_table的局部变量,该变量指向第二个参数。内核构建时,depmod程序会在所有模块中搜索符号__mod_pci_device_table,把数据(设备列表)从模块中抽出,添加到映射文件/lib/modules/KERNEL_VERSION/modules.pcim...

boyemachao的专栏 1369

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

MODULE_DEVICE_TABLE

1. MODULE_DEVICE_TABLE (usb, skel_table); 该宏生成一个名为__mod_pci_device_table的局部变量,该变量指向第二个参数。内核构建时,depmod程序会在所有模块中搜索符号__mod_pci_device_table,把数据(设备列表)从模块中抽出,添加到映射文件/lib/modules/KERNEL_VERSION/modules.pci

宇宙的起源 1111

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Linux内核模块开发:模块声明详解与最佳实践

MODULE_LICENSE是唯一必须的声明,它决定了模块能使用内核的哪些功能。GPL许可证的模块可以访问所有内核符号,而专有许可证的模块会被标记为"污染内核"。平台提供了便捷的代码生成和预览功能,无需复杂环境配置就能验证模块声明效果。我实际使用时发现,通过简单的提示词就能生成完整的内核模块示例代码,特别适合初学者理解和实践。模块声明就像程序的身份证,让内核知道这个模块是谁开发的、有什么功能、遵循什么协议。当系统出现问题时,管理员可以通过modinfo命令查看模块的作者、版本等信息,快速定位问题来源。

BlackironWolf89的博客 818

【Linux内核模块】模块声明与描述

格式:MODULE_INFO(键, "值")​作用:添加自定义元信息,比如:代码语言:javascriptAI代码解释这些信息会被modinfo识别并显示,适合添加版本日期、测试状态等自定义内容。​。

2509_93923260的博客 392

Linux模块编程系列之二 熟悉特定的…

这些宏定义在下 MODULE_AUTHOR(name) 定义驱动的编程者,name为string MODULE_LICENSE(license) 定义驱动的license,一般为GPL,或相关公司的license MODULE_DESCRIPTION(desc) 对驱动程序的描述,string MODULE_SUPPORTED_DEVICE(name) 驱动程序所支持的设备,str

shangyaowei的专栏 355

驱动学习笔记(二)--------字符设备驱动基础

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 @[TOC]驱动学习----字符设备驱动基础 驱动开发步骤 (1)驱动源码编写、Makefile编写、编译 (2)insmod装载模块、测试、rmmod卸载模块 编译完成后得到了 1、内核源码树。2、编译ok的zImage 简单的模块源码分析 常用命令 (1) lsmod:list module (2) insmod:install module (3) modinfo,加xxx.ko,其中有个depends,如usb的wifi,wifi

东篱下 235

Linux SPI字符设备驱动开发(一) - 驱动模块中的宏

一、驱动模块中的宏 module_init(veb_a5_spi_init); //将veb_a5_spi_init()声明为模块的入口函数 module_exit(veb_a5_spi_exit); // 将veb_a5_spi_exit()声明为模块的退出函数 MODULE_LICENSE(“GPL”); // 模块的许可证声明。Ubuntu遵循GPL(通用公共许可证)协议,只有加上这个声明,我们写的驱动才能加载到内核中 ...

七度使徒的博客 381
上一篇: C语言函数参数传递原理
下一篇: 面向对象语言的多态性问题
计算机与认知
博客等级 码龄14年 31粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值