博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux字符设备驱动编(步骤,框架(面向对象),分层)
阅读量:3917 次
发布时间:2019-05-23

本文共 1194 字,大约阅读时间需要 3 分钟。

文章目录

Linux字符设备驱动编程步骤、

  1. 实现入口函数 xxx_init() 和卸载函数 xxx_exit()
  2. 申请设备号 register_chrdev_region (与内核相关)
  3. 注册字符设备驱动 cdev_alloc,cdev_init,cdev_add (与内核相关)
  4. 利用 udev/mdev 机制创建设备文件(节点) class_create,device_create(与内核相关)
  5. 硬件部分初始化
    • IO 资源映射 ioremap ,内核提供 gpio库函数(与硬件相关)
    • 注册中断(与硬件相关)
    • 初始化等待队列(与内核相关)
    • 初始化定时器(与内核相关)
  6. 构建 file_operation 结构(与内核相关)
  7. 实现操作硬件的方法 xxx_open,xxx_read,xxx_write…(与硬件相关)

思考:有些通用代码不需要去写,内核可以帮助写出来,我们只需要编写少部分的代码(差异化代码)

目的:(1)修改/编写更少的代码。去兼容更多不同的设备;(2)代码重用,兼容性强,可移植性

Linux程序框架的概念

  1. 内核引入程序框架的思想:代码重用性好,可维护,可伸缩
  2. 通用功能,写一次,可重用性好
  3. 差异功能,平台不同,可移植性好
  4. 内核框架采用分层
  5. 建立设备模型,它外在表现,平台设备驱动(总线,设备,驱动来实现的)
  6. 面向对象的编程方式

面向对象代码实现(伪代码)

struct A{
...};struct B{
struct A obj; //结构体,对象};//B是A的子类
  • 分层思想
    在这里插入图片描述
  • 分层代码实现
  1. 定义结构体 抽象类
struct mydriver{
char *name; int irq; int addr; void (*func)(); struct mydriver *next;};
  1. 初始化(底层硬件初始化)
//构建mydriver对象struct mydriver *drv = alloc(...);//设置mydriver对象drv->irq = ...;drv->addr = ...;drv->func = key_func//注册register(mydriver对象);xxx_add(mydriver对象);//定义void key_func(){
...}
  1. 分层
//上层struct mydriver *temp;temp->nametemp->func()//======调用内核核心层接口//核心层:全局变量,链表struct mydriver *head;head->a>b;//======注册到内核核心层//底层struct mydriver a;a.name = "key";a.irq = EINTX;a.func = ...//定义void key_func(){
...}

转载地址:http://hscrn.baihongyu.com/

你可能感兴趣的文章
使用 C# 捕获进程输出
查看>>
数据库单表千万行 LIKE 搜索优化手记
查看>>
.NET Core 中生成验证码
查看>>
.NET Core 中导入导出Excel
查看>>
初识ABP vNext(8):ABP特征管理
查看>>
WPF 消息框 TextBox 绑定新数据时让光标和滚动条跳到最下面
查看>>
【BCVP】实现基于 Redis 的消息队列
查看>>
网络安全逐渐成为程序员的必备技能
查看>>
在Docker中配置ASP.NETCore的HTTPS模式
查看>>
统信发布UOS V20 进军个人市场 生态日益完善
查看>>
【追加功能】OFFICE插件管理工具重整后再上路,更好用易用。
查看>>
Confluent官博:Kafka最牛队列,性能15倍于RabbitMQ!
查看>>
使用SWAGGER和ASP.NET CORE设置可选路由参数
查看>>
C#刷剑指Offer | 二叉搜索树的后序遍历序列
查看>>
新版 C# 高效率编程指南
查看>>
跟我一起学.NetCore之文件系统应用及核心浅析
查看>>
初识ABP vNext(11):聚合根、仓储、领域服务、应用服务、Blob储存
查看>>
chrome禁止三方cookie,网站登录不了怎么办
查看>>
Git 图形化操作之合并提交记录
查看>>
Istio Pilot 源码分析(二)
查看>>