本节总结了我们在本章接触到的内核函数, 变量, 宏定义, 和 /proc 文件. 它的用意是作为一个参考. 每一项列都在相关头文件的后面, 如果有. 从这里开始, 在几乎每章的结尾会有类似一节, 总结一章中介绍的新符号. 本节中的项通常以在本章中出现的顺序排列:

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

  1. insmod
  2. modprobe
  3. rmmod

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

#include <linux/init.h>
module_init(init_function);
module_exit(cleanup_function);
  1. __init
  2. __initdata
  3. __exit
  4. __exitdata

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

#include <linux/sched.h>

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

struct task_struct *current;

当前进程.

current->pid
current->comm

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

  1. 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 类似物.

Linux驱动开发快速参考相关推荐

  1. Linux驱动开发(十五)---如何使用内核现有驱动(显示屏)

    前文回顾 <Linux驱动开发(一)-环境搭建与hello world> <Linux驱动开发(二)-驱动与设备的分离设计> <Linux驱动开发(三)-设备树> ...

  2. Linux驱动开发(十)---树莓派输入子系统学习(红外接收)

    前文回顾 <Linux驱动开发(一)-环境搭建与hello world> <Linux驱动开发(二)-驱动与设备的分离设计> <Linux驱动开发(三)-设备树> ...

  3. Linux驱动开发(三)---设备树

    前文回顾 <Linux驱动开发(一)-环境搭建与hello world> <Linux驱动开发(二)-驱动与设备的分离设计> 继续宣传一下韦老师的视频 70天30节Linux驱 ...

  4. 嵌入式linux驱动开发之点亮led(驱动编程思想之初体验)

    这节我们就开始开始进行实战啦!这里顺便说一下啊,出来做开发的基础很重要啊,基础不好,迟早是要恶补的.个人深刻觉得像这种嵌入式的开发对C语言和微机接口与原理是非常依赖的,必须要有深厚的基础才能hold的 ...

  5. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之设备树模型

    文章目录 前言 1.设备树的作用 2.设备树的语法 2.1.设备树的逻辑图和dts文件.dtb文件 2.1.1.1Devicetree格式 1DTS文件的格式 node的格式 properties的格 ...

  6. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之总线设备驱动模型

    文章目录 前言 1.驱动编写的三种方法 1.1.传统写法 1.2.总线驱动模型 1.3.设备树驱动模型 2.Linux实现分离:Bus/Dev/Drv模型 2.1.Bus/Dev/Drv模型 2.2. ...

  7. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之LED驱动框架--面向对象、分层设计思想

    文章目录 前言 1.LED驱动程序框架 1.1.对于LED驱动,我们想要什么样的接口? 1.2.LED驱动要怎么写,才能支持多个板子?分层写 1.3.程序分析 驱动程序 应用程序 Makefile 1 ...

  8. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之第一个驱动

    文章目录 前言 1.Hello驱动 1.1.APP打开的文件在内核中如何表示? 1.2.打开字符设备节点时,内核中也有对应的struct file 1.3.如何编写驱动程序? 1.4.驱动程序代码 1 ...

  9. 嵌入式linux应用层中断函数,嵌入式LINUX驱动开发(中断处理函数)

    嵌入式LINUX驱动开发(中断处理函数) 2020年08月11日 | 萬仟网网络运营 | 我要评论 嵌入式LINUX驱动学习之7中断相关(一)中断处理函数一.函数.头文件及说明二.编译举例:一.函数. ...

最新文章

  1. 支付宝app支付总结
  2. 教授爆笑讲解超级玛丽
  3. uniformRowHeights属性
  4. 前端学习(3226):回调形式的ref
  5. C#回调函数应用示例,形象比喻方法助理解
  6. android 沙盒 ios,iOS中的沙盒机制
  7. cie规定的标准光源_孩视宝:健康自然的光源是护眼灯发展的重点
  8. nginx优化--突破十万并发
  9. Spring 事务和事务传播机制
  10. NLS_LANG详解
  11. 为什么不要去小公司上班?这是我血与泪的教训!!!
  12. 有利可图网_您的基于云的应用程序可能是有利可图的产品
  13. 滴滴优步合并之后:瓜分全球市场 从此专注“分享”盈利
  14. 大三保研夏令营须知及前期准备工作
  15. js实现520倒计时
  16. EOJ 3674.唐纳德先生与 .DOC
  17. 大淘客的index.php,大淘客网站报错无法正常访问解决方法
  18. 设计自己的小游戏-飞机大战奖励篇
  19. http://qq.ip138.com/baidu-id/index.asp
  20. python自动发弹幕_一个直播弹幕机器人诞生过程,Python制作自动发送弹幕小程序...

热门文章

  1. Android自定义View之上拉、下拉列表 头部元素跟随 缩放、平移效果的实现
  2. Web Service——CXF+Spring 整合
  3. 使用VS Code开发asp.net core (上)
  4. idea 和 maven学习
  5. NMEA码详解【转】
  6. Java,使用泛型构建自己的工具包——包装System.out
  7. X++中对字符串进行操作的函数
  8. mysql巡检常用命令_mysql 常用命令
  9. php 跟踪邮件,php – 电子邮件跟踪 – GMail
  10. 空间数据引擎oracle_空间数据库oracle