linux驱动认知

 Linux分为用户空间、内核空间和硬件

1.用户空间

用户空间包含了c库,c库包含很多API比如:open() read() write() fork() pthread() socket()等等,c库提供的API调用内核态,支配内核干活。(提供了app支配内核干活的接口)

2.内核空间

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

 主次设备号:

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

 内核空间有一个驱动链表,会去管理所有设备的驱动,可以进行添加和查找

  • 添加驱动 就是编写完驱动程序,加载到内核
  • 查找 发生在调用驱动程序,由应用层用户空间去open

驱动插入链表的顺序由设备号检索

驱动代码的开发一般也就是添加驱动和调用驱动

调用驱动:

        如调用open函数:open("/dev/pin4", O_RDWR)    以可读可写的方式打开引脚4

上层调用open内核会发生什么事情:

对于内核来说,上层调用open函数会触发一次软中断,中断号是0x80,意思是发生了系统调用,用户空间会进入到内核空间

        然后这个open会调用内核里的sys_call函数,sys_call会根据设备名去找出该设备号,然后sys_call会调用VFS(虚拟文件系统)的sys_open函数,sys_open会去内核的驱动链表里面,根据设备名和设备号 找到引脚4的驱动函数,然后调用驱动函数里的open函数,然后就进行寄存器的操作。

3.硬件

Linux之中,一切皆文件 

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值