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;
};
相关推荐
JobDocLS14 分钟前
Linux系统相关知识
linux·运维·服务器
QT 小鲜肉20 分钟前
【Linux命令大全】001.文件管理之gitview命令(实操篇)
linux·运维·服务器·chrome·笔记
DeeplyMind22 分钟前
Linux MMU Notifier 机制与应用系列目录
linux·驱动开发·mmu notifier
进击大厂的小白32 分钟前
55.中断线程化
驱动开发
G_H_S_3_1 小时前
【网络运维】OpenStack 块存储与对象存储:Cinder 与 Swift 篇
linux·运维·网络·openstack
一点晖光1 小时前
MongoDB特殊查询语句
linux·mongodb
阿干tkl1 小时前
误卸载 openssl-libs 的补救方法
linux·运维
G_H_S_3_1 小时前
【网络运维】Docker网络:基础与实战
linux·运维·网络·docker
嵌入式学习和实践2 小时前
Linux/Windows 系统架构查看、安装包选择指南(嵌入式开发场景适配)
linux·windows·系统架构
小安运维日记2 小时前
RHCA - DO374 | Day09:自定义内容集和执行环境
linux·运维·服务器·系统架构·ansible·改行学it