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;
};
相关推荐
数据智能老司机13 分钟前
Linux内核编程——Linux设备模型
linux·架构·操作系统
BD_Marathon1 小时前
ubuntu防火墙使用
linux·ubuntu
dessler1 小时前
Kafka-消费者(Consumer)和消费者组(Consumer Group)
linux·运维·kafka
kfepiza1 小时前
Debian-10-standard用`networking`服务的`/etc/network/interfaces`配置文件设置多网卡多IPv6
linux·debian
进击的程序汪1 小时前
Linux 启动过程流程图--ARM版
linux·运维·arm开发
deeper_wind2 小时前
MySQL数据库基础(小白的“升级打怪”成长之路)
linux·数据库·mysql
Raners_2 小时前
【Linux】文件权限以及特殊权限(SUID、SGID)
linux·安全
egoist20232 小时前
【Linux仓库】进程优先级及进程调度【进程·肆】
linux·运维·服务器·进程切换·进程调度·进程优先级·大o1调度
2301_1472583693 小时前
7月2日作业
java·linux·服务器
xuanzdhc7 小时前
Linux 基础IO
linux·运维·服务器