linux驱动开发步骤

驱动开发步骤

1、实现模块的加载和卸载入口

复制代码
module_init(chr_dev_init)
module_exit(chr_dev_exit)

2、在模块加载入口函数中:

a,申请主设备号----让内核能够区分和管理不同的字符设备

复制代码
register_chrdev(dev_major, "chr_dev", &my_fops)

b,创建设备文件节点----为用户提供一个可以操作文件的接口

复制代码
struct class *class_create(THIS_MODULE, "chr_cls");
struct device *device_create(devcls, NULL, MKDEV(dev_major, 0), NULL, "name_device")

c,硬件的初始化

1.地址的映射
复制代码
将硬件寄存器地址映射到虚拟文件系统,通过ioremap
2.申请中断
3.实现硬件寄存器的初始化----配置GPIO功能

实现file_operations

复制代码
const struct file_operation my_fops = {
.open = chr_drv_open,
.close = chr_drv_close,
.read = chr_drv_read;
};
相关推荐
dessler20 分钟前
代理服务器-LVS的DR模式
linux·运维·云计算
梦星辰.1 小时前
VSCode CUDA C++进行Linux远程开发
linux·c++·vscode
远方16091 小时前
0x-2-Oracle Linux 9上安装JDK配置环境变量
java·linux·oracle
cui_win2 小时前
每日一令:Linux 极简通关指南 - 汇总
linux·运维·服务器
知星小度S2 小时前
Linux权限探秘:驾驭权限模型,筑牢系统安全
linux·运维·服务器
黄交大彭于晏2 小时前
发送文件脚本源码版本
java·linux·windows
搞Linux的杰仔3 小时前
Ubuntu20.04基础配置安装——系统安装(一)
linux·嵌入式开发
Kaede65 小时前
如何应对Linux云服务器磁盘空间不足的情况
linux·运维·服务器
apocelipes10 小时前
Linux c 运行时获取动态库所在路径
linux·c语言·linux编程
努力学习的小廉11 小时前
深入了解linux系统—— 进程池
linux·运维·服务器