linux设备驱动程序的基本概念,2. Linux设备驱动程序-概念

963aeba78e54438fb758de45bafdf9dc.png

u-boot的任务是启动内核. 内核的任务是启动应用程序. 该应用程序将涉及许多文件和硬件操作,但不会直接操作硬件. 设备驱动程序将完成硬件特定的操作;归档,点亮,获取键值.

Linux系统将设备分为三类:

是指一次只能读取和写入一个字节的设备. 它无法随机读取设备内存中的某些数据. 读取数据必须有序. 字符设备是面向流的设备. 常见的字符设备包括鼠标,键盘,串行端口,控制台和LED设备.

47d820723ded42b8023b48e9fb846d1a.png

是指可以从设备上任何位置读取一定长度的数据的设备. 块设备包括硬盘,磁盘,U盘和SD卡.

[每个字符设备或块设备都对应/ dev目录中的设备文件. Linux用户程序使用驱动程序文件来操作字符设备并通过设备文件(或设备节点)阻止设备. )

网络设备可以是硬件设备,例如网卡;但它也可以是纯软件设备,例如回送接口(lo). 网络接口负责发送和接收数据包.

0ffd09ab7d9b4c180ee8949de54d2ad4.gif

668e15d191faf3e4d14d5367e92dc458.png

设备分类

以led操作为例进行描述.

1-372-png_6_0_0_104_561_645_334_892.5_1263-931-0-404-931.jpg

如果需要在应用程序中打开指示灯,则需要打开功能. 内核中的驱动程序中还有一个相应的led_open函数. led_open函数用于初始化led的pin功能. 要读取led灯的状态,内核中的驱动程序还具有led_read函数. 这是内核中应用程序和驱动程序之间最简单的(并非唯一)对应.

那么应用程序中的打开和读取功能最终如何在驱动程序中调用led_open和led_readlinux 驱动,中间是什么?

7ea2483ea17a952ce1e0563b93f829dd.png

resized-Linux.jpg

int main()

{

int fd1 fd2;

int val=1;

fd1 = open(“/dev/led”,O_RDWR); //打开led

write(fd1, &val, 4);

fd2 = open(“hello.txt”,O_RDWR); //打开文本

write(fd2, &val, 4);

}

上面的应用程序主要实现用于打开和打开文本文件的相同功能. 但是,打开和打开文本文件的行为明显不同. 那么谁来实现这些不同的行为呢?

对于LED灯,有一个led_open驱动器. 对于闪存设备上存在的文本文件,也有针对它们的驱动程序. system_open和system_read最终将基于不同的打开文件找到不同的基础驱动程序,然后调用驱动程序中的硬件操作功能(例如led_open)以在特定的硬件设备上实现操作.

关于如何在system_open中找到led_openlinux 驱动,您可以参考: 解释如何在底层驱动程序中调用应用程序层的open函数到xxx_open函数.

841e79e59749532e1fc8d3e5f420c7da.png

开放系统调用过程

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/ruanjian/article-203724-1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值