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;
};
相关推荐
winner888132 分钟前
Linux 软件安装 “命令密码本”:yum/apt/brew 一网打尽
linux·运维·服务器
思麟呀2 小时前
Linux的基础IO流
linux·运维·服务器·开发语言·c++
winner88813 小时前
嵌入式Linux驱动开发全流程:工具协作+核心概念拆解(从入门到理解)
linux·运维·驱动开发
ShiinaKaze3 小时前
fatal error: bits/c++config.h: No such file or directory
linux·gcc·g++
Archy_Wang_13 小时前
脚本自动生成专业Linux巡检报告
linux·运维·服务器
java_logo3 小时前
SGLANG Docker容器化部署指南
linux·运维·docker·容器·eureka·1024程序员节
敲代码的瓦龙5 小时前
操作系统?进程!!!
linux·c++·操作系统
打不了嗝 ᥬ᭄5 小时前
数据链路层
linux·网络·网络协议·http
piaoxue8205 小时前
MFA MACOS 安装流程
linux·运维·服务器
鱼干~7 小时前
electron基础
linux·javascript·electron