![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux驱动
文章平均质量分 91
Linux设备驱动相关文章
zsky_01
嵌入式软件工程师,专注于 RTOS、Linux、C/C++。【一起学嵌入式】
展开
-
Linux设备驱动-字符设备驱动浅析
Linux 设备驱动分为三种:字符设备驱动、块设备驱动、网络设备驱动。内核针对每一类设备都提供了对应的驱动模型框架,包括基本的内核设施和文件系统接口。其中,字符设备驱动程序是最常见的,也是相对比较容易理解的一种。其典型的程序框架示例,如下:#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/cdev.h>/* 定义一个字符设备原创 2022-01-06 10:17:59 · 1098 阅读 · 0 评论 -
Linux设备驱动-内核管理设备号机制
开篇本文引用的内核代码参考来自版本 linux-5.15.4 。在 Linux 系统中,每个注册到系统的设备都有一个编号,这个编号便是 Linux 系统中的设备号。设备号作为一种系统资源,需要加以管理。否则,如果设备号与驱动程序对应关系错误,就会引起混乱或引起潜在的问题。通过查看 /proc/devices 文件可以得到系统中注册的设备,第一列为主设备号,第二列为设备名称$ cat /proc/devicesCharacter devices: 1 mem 4 /dev/vc/0原创 2021-12-17 09:32:17 · 1630 阅读 · 0 评论 -
Linux设备驱动-模块加载过程
开篇本文引用的内核代码参考来自版本 linux-5.15.4 。在用户空间,用指令 insmod 来向内核空间安装一个内核模块,其使用方法如下:insmod xx.ko /* 向内核空间安装模块 xx */注意,加载内核模块需要具有 root 权限,否则会加载失败。当调用 “insmod xx.ko” 来安装 “xx.ko” 内核模块时,insmod 会首先利用文件系统的接口,将模块文件的数据读取到用户空间的一段内存中,然后通过系统调用 sys_init_module 让内核去处理模原创 2021-12-08 11:04:04 · 2021 阅读 · 0 评论 -
Linux设备驱动-模块卸载过程
开篇上一篇文章分析了内核模块的加载过程:Linux设备驱动-模块加载过程这篇文章来讲讲内核模块的卸载过程机制。本文引用的内核代码参考来自版本 linux-5.15.4 。在用户空间,通过指令 rmmod 可以将一个内核模块从系统中卸载,使用方法如下:rmmod xx /* 卸载已经加载的内核模块 xx */注意,卸载内核模块需要具有 CAP_SYS_MODULE 权限(root用户或者其他具有这个权限的用户),否则会加载失败。rmmod 指令通过系统调用 sys_modu原创 2021-12-08 12:32:23 · 3089 阅读 · 0 评论 -
Linux设备驱动-内核模块介绍
Linux内核模块,可以在系统运行期间动态扩展系统功能而无须重启系统,更无须为这些新增的功能重新编译一个新的系统内核映像。内核模块的这个特性为内核开发者开发验证新的功能提供了极大的便利。内核模块的文件格式以内核模块形式存在的驱动程序,比如 hello.ko,其在文件的数据组织形式上是 ELF(Executable and Linkable Format)格式。具体来说,内核模块是一种普通的可重定位的目标文件。用 file 命令查看 hello.ko 文件,可得到如下输出:$ file hel.原创 2021-11-30 15:38:32 · 942 阅读 · 0 评论