Linux驱动.之驱动开发思维,设备,驱动,总线分析思想,驱动的分类(字符设备,块设备,网络设备)

在stm32,裸机开发时,偏底层,跟寄存器打交道,有些MCU提供了库,库也还是操作寄存器的,通过配置寄存器,

配置各种工作模式,时钟,等等,交换数据等等。

Linux下驱动开发直接操作寄存器不现实。一个soc的资源比较庞大,寄存器比较多,不肯能,所有设备,都直接操作寄存器。

Linux下,驱动开发,是根据Linux下的各种驱动框架进行开发。一定要满足框架,也就是Linux下各种驱动框架的掌握,完善框架。添加修改不同设备的属性,比如gpio,配置输入输出模式,高低电平等等,直接调用内核,提供的api,来进行操作。比如iic,spi,都是通过api来操作。将设备,驱动,进行了分离。驱动由厂商提供完善,总线由内核完善,设备的一部分由soc厂商完善,剩下一些配置等,由驱动开发者,进行修改移植。

驱动最终表现就是/dev/xxx文件。打开、关闭、读写、。。。

现在新的内核支持设备树,这个一个.dts文件,此文件 描述了板子的设备信息。比如要操作i2c一个外设,就要知道外设的地址,将设备信息,添加到设备树,板卡所有的信息,都添加到设备树,来告诉内核,板卡有什么资源,启动时,就会根据设备,去寻找驱动,进行匹配。

linux驱动分为三大类

1、字符设备驱动,最多的。字符设备,就是一个个字节,按字节流的方式,读写操作设备

2、块设备驱动,存储类设备,按块,读写数据,如sd卡都是一个块,页读写数据的

3、网络设备驱动,和网络相关的,就是网络设备

一个设备不说是一定只属于某一个类型。比如USB WIFI,SDIO WIFI,属于网络设备驱动,因为他又有USB和SDIO,因此也属于字符设备驱动。

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

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

用户空间(用户态)和内核空间(内核态):

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

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

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

应用 程序使用open函数 打开一个设备文件。

每个系统调用都有一个系统调用号。

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

关于虚拟内存有三点需要注意:

4G的进程地址空间被人为的分为两个部分--用户空间与内核空间。用户空间从0到3G(0xc0000000),内核空间占据3G到4G。用户进程通常情况下只能访问用户空间的虚拟地址,不能访问内核空间的虚拟地址。例外情况只有用户进程进行系统调用(代表用户进程在内核态执行)等时刻可以访问到内核空间。

用户空间对应进程,所以每当进程切换,用户空间就会跟着变化;而内核空间是由内核负责映射,它并不会跟着进程变化,是固定的。内核空间地址有自己对应的页表,用户进程各自有不同的页表。

每个进程的用户空间都是完全独立、互不相干的。
一、4G地址空间解析图

二、虚拟地址空间分配及其与物理内存对应图

相关推荐
陈桴浮海9 分钟前
【Linux&Ansible】学习笔记合集二
linux·学习·ansible
生活很暖很治愈17 分钟前
Linux——环境变量PATH
linux·ubuntu
?re?ta?rd?ed?19 分钟前
linux中的调度策略
linux·运维·服务器
深圳市九鼎创展科技21 分钟前
瑞芯微 RK3399 开发板 X3399 评测:高性能 ARM 平台的多面手
linux·arm开发·人工智能·单片机·嵌入式硬件·边缘计算
hweiyu0031 分钟前
Linux 命令:tr
linux·运维·服务器
Trouvaille ~34 分钟前
【Linux】应用层协议设计实战(一):自定义协议与网络计算器
linux·运维·服务器·网络·c++·http·应用层协议
allway240 分钟前
基于华为taishan200服务器、arm架构kunpeng920 cpu的虚拟化实战
linux·运维·服务器
CSCN新手听安40 分钟前
【linux】高级IO,I/O多路转接之poll,接口和原理讲解,poll版本的TCP服务器
linux·运维·服务器·c++·计算机网络·高级io·poll
杜子不疼.42 分钟前
【Linux】教你在 Linux 上搭建 Web 服务器,步骤清晰无门槛
linux·服务器·前端
CSCN新手听安1 小时前
【linux】网络基础(三)TCP服务端网络版本计算器的优化,Json的使用,服务器守护进程化daemon,重谈OSI七层模型
linux·服务器·网络·c++·tcp/ip·json