当前位置: 首页 > news >正文

70. Linux驱动开发与裸机开发区别,字符设备驱动开发

一、裸机驱动开发回顾

1、底层,跟寄存器打交道,有些MCU提供了库。

二、Linux驱动开发思维

1、Linux下驱动开发直接操作寄存器不现实。
2、根据Linux下的各种驱动框架进行开发。一定要满足框架,也就是Linux下各种驱动框架的掌握。
3、驱动最终表现就是/dev/xxx文件。打开、关闭、读写、。。。
4、现在新的内核支持设备树,这个一个.dts文件,此文件 描述了板子的设备信息。

三、Linux驱动开发分类

linux驱动分为三大类:
1、字符设备驱动,最多的。
2、块设备驱动,存储
3、网络设备驱动,
一个设备不说是一定只属于某一个类型。比如USB WIFI,SDIO WIFI,属于网络设备驱动,因为他又有USB和SDIO,因此也属于字符设备驱动。

四、应用程序和驱动的交互原理

1、驱动就是获取外设、或者传感器数据,控制外设。数据会提交给应用程序。Linux驱动编译既要编写一个驱动,还要我们编写一个简单的测试应用程序,APP。单片机下驱动和应用都是放到一个文件里面,也就是杂糅到一起。Linux下驱动和应用是完全分开的。

用户空间(用户态)和内核空间(内核态):
Linux操作系统内核和驱动程序运行在内核空间、应用程序运行在用户空间。

应用程序想要访问内核资源,怎么办,有三种方法:系统调用、异常(中断)和陷入。

应用程序不会直接调用系统调用,而是通过API函数来间接的调用系统调用,比如POSIX、API和C库等。unix类操作系统中最常用的编程接口就是POSIX。
应用 程序使用open函数 打开一个设备文件。

每个系统调用都有一个系统调用号。
系统调用处于内核空间,应用程序无法直接访问,因此需要“陷入“到内核,方法就是软中断。陷入内核以后还要指定系统调用号。

五、字符设备驱动开发流程

1,Linux里面一切皆文件,驱动设备表现就是一个/dev/下的文件,/dev/led。应用程序调用open函数打开设备,比如led。应用程序通过write函数向/dev/led写数据,比如写1表示打开,写0表示关闭。如果要关闭设备那么就是close函数。
2,编写驱动的 时候也需要编写驱动对应的open、close,write函数。字符设备驱动fileoptions_struct.

1、驱动最终是被应用调用的,在写驱动的时候要考虑应用开发的便利性。
2、驱动是分驱动框架的,要按照驱动框架来编写,对于字符设备驱动来说,重点编写应用程序对应的open、close、read、write等函数。

相关文章:

  • 服务器中防火墙的重要性
  • 上门家政小程序实战,从0到1解决方案
  • 学习本地部署DeepSeek的过程(基于LM Studio)
  • 调用通义千问实现语音合成并将合成的音频通过扬声器播放
  • Transformer 通关秘籍2:利用 BERT 将文本 token 化
  • 【悲观锁和乐观锁有什么区别】以及在Spring Boot、MybatisPlus、PostgreSql中使用
  • 简历含金量的描述和注意事项!
  • 如何用Redis统计网站的UV
  • 影刀魔法指令3.0:开启自动化新篇章
  • 计算机视觉3——模板匹配与拟合
  • Maven入门
  • 3.26学习总结
  • Android系统的安全问题 - Android的Trusty TEE
  • LLM实践(二)——基于llama-factory的模型微调
  • OpenGL绘制文本
  • SQL Server常见问题解析
  • WPF ContentTemplate
  • Pytorch学习笔记(七)Learn the Basics - Optimizing Model Parameters
  • C++——重载
  • Linux系统-ls命令
  • IMF前副总裁朱民捐赠1000万元,在复旦设立青云学子基金
  • 中国银行副行长刘进任该行党委副书记
  • 对谈|李钧鹏、周忆粟:安德鲁·阿伯特过程社会学的魅力
  • 北京动物园:大熊猫“萌兰”没有参加日本大阪世博会的计划
  • 西班牙葡萄牙突发全国大停电,欧洲近年来最严重停电事故何以酿成
  • 特朗普声称中方领导人打了电话,外交部:近期中美元首没有通话