Linux设备驱动3快速参考汇总--建立和运行模块

时间:2009-11-26

  作者:孙晓明,华清远见嵌入式学院讲师

  insmod

  modprobe

  rmmod

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

  #include <linux/init.h>

  module_init(init_funcTION);

  module_exit(cleanup_function);

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

  __init

  __initdata

  __exit

  __exitdata

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

  #include <linux/sched.h>

  重要的头文件中的一个. 这个文件包含很多驱动使用的内核 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 <linux/module.h>

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

  #include <linux/version.h>

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

  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 <linux/moduleparam.h>

  module_param(variable, type, perm);

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

  #include <linux/kernel.h>

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

  内核代码的 printf 类似物.

  “本文由华清远见https://www.embedu.org/index.htm提供”



  
上一篇:C语言回调函数学习
下一篇:线程解析(一)

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料