驱动函数的架构与思想

~听说驱动这东西研究深了会发现一种架构的美

Linux把所有的设备都看成文件(如LED、蜂鸣器、I2C、LCD、触摸屏等等设备)
文件是什么?
很简单,就是存在于我们文件管理器目录里的数据集合

为什么Linux要把所有的设备看成文件呢?
因为对于文件只有两个操作:读和写。
对于设备,无论是led还是网络也无非是对它读和写。

对于文件的操作一般就有几个函数?
open() //打开文件
read() //读取文件内容
write() //写入文件内容
ioctl() //管理文件
close() //关闭文件

目前理解:做驱动,尤其是字符类驱动这块的,就是做好open(),write(),ioctrl()等几个函数,然后等着上层去调用!

我们写的驱动函数怎么挂接到Linux系统上呢?
下面需要我们明白一个概念:设备文件(或者叫做设备节点):设备文件是连接上层应用和底层驱动的桥梁。
Linux文件系统里面,肯定有个目录叫做/dev(里面的所有文件是设备文件,不是普通文件)设备文件里面什么也没有,但包含两个信息:主设备号次设备号
主设备号:用来区分不同类的设备,比如LED,串口,网络等。。。
次设备号:用来区分同类设备里的不同的硬件,比如板子有四个串口,这四个串口主设备号相同,此设备号却不相同。
也就是说所有的设备,只要做好了驱动,都要在这个目录里生成一个文件(例如我们要对led操作,就要用open这个函数打开设备文件/dev/leds),即必须注册到系统,注册以后Linux才能找到它。

如何将写好的驱动函数注册进系统呢?
Linux为解决这个问题,专门做了一个函数,就是为注册而生的(register——chrdev())
这个注册函数具体定义如下:
Int register_chrdev(unsigned int major,const char name,struct file_operationsfops);
Major:主设备号
name:设备文件名字
file_operations:函数指针,实际我们做的5个驱动函数就是存在里面的。(驱动函数就是直接操作硬件的程序)

系统如何通过设备号对应硬件:
当我们调用系统open时,找到要找的文件、设备号,再根据设备号就可以找到对应封装号的驱动函数了,再通过调用驱动函数就可以对硬件进行操作了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值