Linux的驱动认知

Linux分为用户空间、内核空间和硬件在这里插入图片描述


  一:用户空间/用户态

用户态由C与C库构成 

  • 用户可以在此进行APP的开发,比如ftp、cp项目等
  • C库提供了app支配内核干活的接口,调用的open,read,write,fork,pthread,socket由此处封装实现,由写的应用程序调用,C库中的各种API调用的是内核态,支配内核干活

二:内核态/内核空间 

 内核态可以体现在进程,内存,线程,网络上

一个设备标识有文件名与设备号,设备号分为主设备号与次设备号

主次设备号:

        Linux的设备管理是和文件系统紧密结合的,各种设备都以文件的形式存放在/dev目录下,称为设备文件。应用程序可以打开、关闭和读写这些设备文件,完成对设备的操作,就像操作普通的数据文件一样。为了管理这些设备,系统为设备编了号,每个设备号又分为主设备号和次设备号。主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备。

  • 驱动链表:管理所有设备的驱动,可以进行添加和查找
    • 添加驱动就是编写完驱动程序,加载到内核
    • 查找发生在调用驱动程序,由应用层用户空间去open
    • 驱动链表的顺序由设备号检索
  • 驱动的开发
    • 驱动添加
      • 需要添加设备名,设备号,设备驱动函数
    • 调用驱动
      • 操作寄存器来驱动IO口

三:硬件 

Linux之中,一切皆文件 

包括文件,设备(鼠标,键盘,led,屏幕,flash,内存,网卡),IO口,串口

这些都需要驱动程序来进行调用,上层只需要通过open,read,write函数来操作,而操作的对象是文件还是设备,这就需要驱动程序的运行

比如:用户态调用引脚四open(“/de/pin4”,O_RDWR), 用户态进入内核态会发生一次软中断 ,中断号是0x80。这个open会调用sys_call(这个函数是在内核中的),这个函数会根据设备名找到设备号,然后会调用VFS中的sys_open,sys_open会找到引脚4中的open函数(设备驱动函数),引脚4中的open函数其实是对寄存器的操作,通过操作寄存器来驱动IO口

 最后一步中讲到对寄存器的操作,这就像单片机的程序 sbit PIN4 = P1^4;PIN4= 1;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值