驱动认知

用户态
App:cp指令,ftp的项目等等这就是App的开发。
App开发需要C的基础和C库,C库讲到文件,进程,进程间通信,线程,网络,界面(GTk)。
C库(是linux标准库一定有):就是Clibary,提供了APP支配内核干活的接口,调用的open,read,write,fork,pthread,socket由此处封装实现,由写的应用程序调用,C库中的各种API调用的是内核态,支配内核干活

内核态
进程,内存,线程,网络,设备驱动不需要上层应用开发者关心,驱动在前面的学习是调用wringpi库实现,接下来的学习就是要自己实现wringpi库,因为wringpi库由厂家提供,可能有可能没有,这样当我们拿到另一种类型的板子时,同样也可以完成开发。

驱动链表:管理所有设备的驱动,添加或查找,添加是发生在我们编写完驱动程序,加载到内核。查找发生在调用驱动程序,由应用层用户空间去open。

驱动插入链表的顺序由设备号检索,就是说主设备号和次设备号除了除了能区分不同种类的设备和不同类型的设备,还能起到将驱动程序创到链表的某个位置。

硬件
linux经典的一句话一切皆文件:包括文件,设备(鼠标,键盘,LED,屏幕,flash,内存,网卡等),普通的IO口,串口等等。
在这里插入图片描述
对于文件,学习到对文件的操作有open ,read,write这几个API,对于这些API是如何区分操作对象是文件还是一些设备,这些设备需不需要有驱动,驱动又在哪个位置这都是我们需要了解的。驱动肯定是要有的。

假设:现在的硬件有pin4,pin5,pin6,这些引脚分别对应于4驱动,5驱动,6驱动,这些驱动需要由我们来开发。
open(“/dev/pin4”,权限)用来调用引脚4的驱动,那么如何找到相关的驱动,有两个东西供我们查找,一是文件名,二是设备号(包含主设备号和次设备号)。
Linux的设备管理是和文件系统紧密结合的,各种设备都以文件的形式存放在/dev目录下,称为设备文件。应用程序可以打开、关闭和读写这些设备文件,完成对设备的操作,就像操作普通的数据文件一样。为了管理这些设备,系统为设备编了号,每个设备号又分为主设备号和次设备号。主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备。

ls -l  查看设备号

在这里插入图片描述
驱动代码的开发无非就是添加驱动和调用驱动。
例如:
用户态调用引脚四open(“/de/pin4”,O_RDWR), 这个open会调用System call interface(这个函数是在内核中的),这个函数会根据设备名找到设备号,然后会调用VFS中的sys_open,sys_open会找到引脚4中的open函数,引脚4中的open函数是对寄存器的操作。用户态进入内核态会发生一次软中断 ,中断号是0x80。

以上是对下图的解释:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/272402.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TreeMap实现排序

TreeMap TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器。当用Iterator遍历TreeMap时,得到的记录是排过序的。 TreeMap取出来的是排序后的键值对。但如果您要按自然顺序或…

图解分布式架构的演进过程!

一、什么是分布式架构分布式系统(distributed system) 是建立在网络之上的软件系统。内聚性:是指每一个数据库分布节点高度自治,有本地的数据库管理系统。透明性:是指每一个数据库分布节点对用户的应用来说都是透明的&…

CSS 布局实例系列(四)如何实现容器中每一行的子容器数量随着浏览器宽度的变化而变化?...

Hello,小朋友们,还记得我是谁吗?对了,我就是~超威~好啦,言归正传,今天的布局实例是: 实现一个浮动布局,红色容器中每一行的蓝色容器数量随着浏览器宽度的变化而变化,就如…

基于框架编写驱动代码

操作驱动的上层代码&#xff08;pin4test&#xff09; #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>void main() {int fd,data;fd open("/dev/pin4",O_RDWR);if(fd<0){printf("open fail…

nacos在windows下安装

1:访问https://github.com/alibaba/nacos/releases下载nacos 2:下载到本地解压 3:点击startup.cmd 启动nacos 4:访问 http://127.0.0.1:8848/nacos 输入账号和密码&#xff0c;nacos/nacos

关于SQL优化这些你了解吗?

背景在当今这个互联网的时代无非要解决两大难题&#xff0c;其一是信息安全&#xff0c;其二就是数据的存储。而信息安全则是在数据存储的基础之上。一个公司从刚开始成立到发展成一个有上百人甚至上千人团队的时候&#xff0c;公司的业务量是呈上升趋势&#xff0c;客户及用户…

图片安全保护(未启动)

图片安全保护&#xff08;未启动&#xff09; 图片安全保护&#xff08;未启动&#xff09;posted on 2016-01-27 22:54 代码35 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/xinglizhenchu/p/5164847.html

微机总线地址,物理地址 ,虚拟地址

总线地址 地址总线 (Address Bus&#xff1b;又称&#xff1a;位址总线) 属于一种电脑总线 &#xff08;一部份&#xff09;&#xff0c;是由CPU 或有DMA 能力的单元&#xff0c;用来沟通这些单元想要存取&#xff08;读取/写入&#xff09;电脑内存元件/地方的实体位址。 自己…

Navicat远程连接linux下mysql服务器1045错误解决办法在这儿

1&#xff1a;首先通过xshell工具或者你熟悉的工具连接远程linux下的服务器 mysql -uroot -p 然后输入密码 2.进行授权 如果想root用户使用password从任何主机连接到mysql服务器的话。 GRANT ALL PRIVILEGES ON *.* TO root% IDENTIFIED BY 你的mysql密码 WITH GRANT O…

内存划分

一、内存分配 一个由C/C编译的程序占用的内存分为以下几个部分 1、栈区&#xff08;stack&#xff09;&#xff1a; 由编译器自动分配释放 &#xff0c;存放函数的参数值&#xff0c;局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区&#xff08;heap&a…

树莓派 博通BCM2835芯片手册

手册提取链接 链接&#xff1a;https://pan.baidu.com/s/1fdmIBNn1Pr1j3-ercNhKJg 提取码&#xff1a;8y1b 驱动的两大利器&#xff1a; 1、电路图:通过电路图找到寄存器 2、芯片手册 树莓派有54个通用IO口(0到53)&#xff0c;所有GPIO口至少有两个可选功能&#xff08;输入输…

MVC实现实现文件流打包成压缩包

MVC实现实现文件流打包成压缩包1、使用压缩类库SharpZipLib SharpZipLib 是一款比较经典实用C#压缩类库SharpZipLib 库特点&#xff1a;功能丰富、稳定 &#xff0c;支持主流 zip、Gzip Tar BZip2 格式2、项目中引用SharpZipLib的官方地址是&#xff1a;http://icsharpcode.git…

Intellij idea 报错:Error : java 不支持发行版本5

idea运行出现了这个错误 解决办法按下图所示&#xff1a;

属性“dataProvider”有多个初始值设定项。(注意:“dataProvider”是“mx.charts.BarChart”的默认属性)。...

1、错误描写叙述 属性“dataProvider”有多个初始值设定项。&#xff08;注意:“dataProvider”是“mx.charts.BarChart”的默认属性&#xff09;。2、错误原因 <?xml version"1.0" encoding"utf-8"?> <s:Application xmlns:fx"http://ns.…

IO口操控代码

我们在编写驱动程序的时候&#xff0c;IO空间的起始地址是0x3f000000,加上GPIO的偏移量0x2000000,所以GPIO的物理地址应该是从0x3f200000开始的&#xff0c;然后在这个基础上进行Linux系统的MMU内存虚拟化管理&#xff0c;映射到虚拟地址上。 底层驱动代码 #include <linu…

C#一些实用的函数

1.DateTime 转为Unix的long的时间戳long orderTime order.AddTime.ToUnixTimeStamp("Milliseconds");long payTime order.StartTime.Value.ToUnixTimeStamp("Milliseconds");2、获取客户端IP/// <summary>/// 获取调用方的IP地址/// </summary&…

Vscode如何新建html文件

1、点击Open Folder&#xff1a; 2、选择目标文件夹&#xff0c;在本地新建一个拓展名为html的文件&#xff1a; 3、在第1行输入!&#xff08;英文状态下&#xff09;&#xff0c;按tab键&#xff0c;新建成功。界面如下图所示&#xff1a;

混合app

cordova run android 把应用发送到手机ionic serve 电脑浏览器调试命令创建&#xff1a;cordova create hello com.example.hello HelloWorldcd hellocordova platform add androidcordova build androidcordova emulate android查询cordova platform lscord…

vscode浏览器打开html

1.点击拓展 2.输入open in browser&#xff0c;选择第一个 3.点击安装

VMware虚拟机克隆CentOS后网卡修改方法

转自:http://www.linuxidc.com/Linux/2015-03/114975.htm 转载于:https://www.cnblogs.com/water-sky/p/5169107.html