linux驱动 打印变量,linux驱动 内核函数 变量 宏定义

本文探讨了内核模块的加载与管理,如insmod工具的使用、模块初始化函数(__init__)和清理函数(__exit__)的定义,以及关键头文件的包含。讲解了如何通过`obj-m`和`sysfs`目录跟踪模块状态,以及如何使用`module_param`设置模块参数。重点介绍了` printk`函数在内核代码中的应用。
摘要由CSDN通过智能技术生成

insmod

modprobe(自动检测 模块加载时需要的别的模块)

rmmod

用户空间工具, 加载模块到运行中的内核以及去除它们.

#include

module_init(init_function);

module_exit(cleanup_function);

指定模块的初始化和清理函数的宏定义.

__init

__initdata

__exit

__exitdata

函数( __init 和 __exit )和数据 (__initdata 和 __exitdata)的标记, 只用在模块初始化或者清理时间. 为初始化所标识的项可能会在初始化完成后丢弃; 退出的项可能被丢弃如果内核没有配置模块卸载. 这些标记通过使相关的目标在可执行文件的特定的 ELF 节里被替换来工作.

#include

最重要的头文件中的一个. 这个文件包含很多驱动使用的内核 API 的定义, 包括睡眠函数和许多变量声明.

struct task_struct *current;

当前进程.

current->pid

current->comm

进程 ID 和 当前进程的命令名.

obj-m

一个 makefile 符号, 内核建立系统时(编译时)用来决定当前目录下的哪个模块应当被建立.

/sys/module

/proc/modules

/sys/module 是一个 sysfs 目录层次, 包含当前加载模块的信息. /proc/moudles 是旧式的, 那种信息的单个文件版本. 其中的条目包含了模块名, 每个模块占用的内存数量, 以及使用计数. 另外的字串追加到每行的末尾来指定标志, 对这个模块当前是活动的.

vermagic.o

来自内核源码目录的目标文件, 描述一个模块为之建立的环境.

#include

必需的头文件. 它必须在一个模块源码中包含.

#include

头文件, 包含建立的内核的版本信息.

LINUX_VERSION_CODE

整型宏定义, 对 #ifdef 版本依赖有用.

EXPORT_SYMBOL (symbol);

EXPORT_SYMBOL_GPL (symbol);

宏定义, 用来输出一个符号给内核. 第 2 种形式输出没有版本信息, 第 3 种限制输出给 GPL 许可的模块.

MODULE_AUTHOR(author);

MODULE_DESCRIPTION(description);

MODULE_VERSION(version_string);

MODULE_DEVICE_TABLE(table_info);

MODULE_ALIAS(alternate_name);

放置文档(作者相关,模块版本信息)在目标文件的模块中.

module_init(init_function);

module_exit(exit_function);

宏定义, 声明一个模块的初始化和清理函数.

#include

module_param(variable, type, perm);

宏定义, 创建模块参数, 可以被用户在模块加载时调整( 或者在启动时间, 对于内嵌代码). 类型可以是 bool, charp, int, invbool, short, ushort, uint, ulong, 或者 intarray.

#include

int printk(const char * fmt, ...);

内核代码的 printf 类似物.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值