Linux驱动开发简述

 

一、Linux驱动开发思维:

1、与逻辑开发区别:

裸机开发:主跟寄存器打交道,有些MCU会提供库

Linux下的驱动开发:直接操作寄存器不现实

2、Linux下驱动开发:根据Linux下的各种驱动框架进行开发。满足框架,Linux下各种驱动框架的掌握。

GPIO框架:使能、时钟、IO复用配置复用、配置IO属性输入输出、

Linux提供API GPIO操作函数

 

IIC外设:设备地址;i2c读写函数-读取外设地址、

SPI外设:读写SPI外设寄存器数据;spi操作函数:read、write、byte

 

分层:

host驱动:

设备驱动:

3、驱动最终表现是 /dev/xxx 文件

打开、关闭、读写。。。

4、新的内核支持设备树

.dts文件,Linux分析设备树文件(.dts文件),此文件描述了设备信息

二、Linux驱动开发分类

三大类:

1、字符设备驱动,最多:指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后数据。字符设备是面向流的设备,常见的字符设备有鼠标、键盘、串口、控制台和LED设备等。

  蜂鸣器、按键、灯、I2C、GPS、

 

        • 字符设备驱动开发

驱动:获取外设、或者传感器数据,控制外设。数据会提交给应用程序。

Linux驱动编写既要编写一个驱动,还要编译一个简单地测试应用程序,APP。单片机下驱动和应用放到一个文件里面,杂糅到一起;Linux下驱动和应用程序是完全分开的

两种方式:编到内核;编译成一个.ko模块文件,动态加载

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

内核空间、用户空间

交互:系统调用、异常(中断)、陷入

(系统调用原理及详细过程:https://blog.csdn.net/qq_36822217/article/details/107237670

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

1、Linux里面一切皆文件,驱动设备表现就是一个/dev/下的文件,驱动加载成功后,会在/dev/下生成对应的文件,应用程序通过对这个文件进行相应的操作即可实现

应用程序调用open函数打开设备,比如led。应用程序通过write函数向/dev/led写数据,比如写1标识打开,写0表示关闭。如果要关闭设备那么就是close函数。

Linux应用程序对驱动程序的调用流程:

应用程序:open()、close()、read()、write()等其他API函数——》

库:对应的库函数                  ——》

内核:通过系统调用进入内核             ——》

驱动程序:驱动程序中的对应函数           ——》

硬件:具体硬件设备

 

2、编写驱动的时候也需要编写驱动对应的open、close、write函数,字符设备驱动  file_operations结构体(–Linux内核驱动操作函数集合 ) 成员变量的实现就是驱动的开发

  1>.考虑应用开发的便利性

  2>.驱动时分驱动框架的,按照驱动框架编写

 

2、块设备驱动,存储:指可以从设备的任意位置读取一定长度数据的设备。块设备包括硬盘、磁盘、U盘和SD卡等。

  emc、flash

3、网络设备驱动:为支持通过文件接口处理网络连接,Linux使用了源于BSD的套接字抽象,套接字keil看作应用程序、文件接口、内核的网络之间的代理。

  网卡

(一个设备不是说只属于一个类型,比如:USB WIFI,SDIO WIFI,属于网络设备驱动,又因为有USB、SDIO,也属于字符设备驱动)

 

 

 

 

版权声明:本文为blankJi原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/blankJi/p/16554485.html