1.驱动程序概念介绍

u-boot的任务是启动内核内核的任务是启动应用程序 ,应用程序会涉及很多文件和硬件操作(当然不会直接操作硬件),比如读写文件,点灯、获取按键值。

比如对于控制led灯的用户程序与驱动程序,最简单的实现方法是:

应用程序中需要打开led灯,就需要open函数,在内核中的驱动程序中也有对应的led_open函数,这个led_open函数就是用来负责初始化led的引脚功能,应用程序中要调用read函数读取led灯的状态,内核中的驱动程序也有led_read函数。这是应用程序与内核中驱动程序一种最简单的对应方式.

  那么应用程序中的open、read函数最终怎样调用到驱动程序中的led_open、led_read呢,中间有哪些东西?

在linux中共有4层软件,如下图:

应用程序:就是被调用的那些库函数,例如open、read、write... ...

C库(系统调用):其中的其实就是实现open、read这些函数来调用swi val 指令进入内核(函数不同val值都会不同)

内核: 内核根据swi后面不同的值去调用VFS中的system_open/system_read/ system_write等异常处理函数 找到相应的驱动程序(VFS:virtual file system 虚拟文件系统)

例如:

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驱动程序。对于文本文件存在于flash设备上,也有对于的驱动程序。system_open、system_read最终会根据打开的不同文件,找到底层的不同驱动程序,然后调用驱动程序中的硬件操作函数,比如led_open来实现对具体硬件设备的操作。

  这就是整个的字符设备驱动程序框架。

例如LED,如下图:

在应用层应用程序中有open、read、write

同样,在驱动程序中也对应有led_open、led_read、led_write

剩下的就是驱动框架了。

下一节开始讲解驱动框架,然后写出led驱动程序

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Youngxj

让访客自动加自己为QQ好友代码

1794
来自专栏林德熙的博客

WPF 开发自动删除软件

我在写一个测试的工具,需要在用户的电脑使用,但是需要在运行之后 3 天内删除。这个功能是因为我是金鱼但是自己忘记删除了,但是可能需要多次使用,所以就需要让软件自...

911
来自专栏hbbliyong

IDEA更换主题

更换IDEA主题只需要3步 1. 下载主题 在主题网站上IDEA Color Themes 上浏览喜欢的主题并下载该主题。(如果网址有变更,google IDE...

4479
来自专栏ZKEASOFT

在Linux安装ASP.Net Core的运行时(Runtime)

在部署的时候,如果您不想在您的Linux服务器上安装.Net Core SDK,您可以只安装Runtime,接下来我们看看该如何安装运行时Runtime。

3067
来自专栏小巫技术博客

A006-AndroidManifest.xml解析

https://blog.csdn.net/wwj_748/article/details/47402673

1046
来自专栏机器学习实践二三事

pip安装报错'not a supported wheel on this platform'

这个错误很常见,解决方法是改名,首先要获得在你的机器的平台上的合法名称: import pip pip.pep425tags.get_supporte...

2517
来自专栏菩提树下的杨过

"org.jboss.netty.internal.LoggerConfigurator".DESCRIBED is already registered 的解决办法

今天在jboss 6.2 EAP上部署一个项目时,报以下错误: org.jboss.msc.service.DuplicateServiceException:...

22110
来自专栏深度学习之tensorflow实战篇

Hadoop查看所有JOB以及如何Kill指定用户的所有Job

如何kill掉制定用户的所有job,有没有现成的命令?我看了一下hadoop job命令的提示,没有这样的命令。 其实实现kill指定用户的job也非常简单,本...

2956
来自专栏Youngxj

网站访客IP统计程序源码分享

5763
来自专栏帘卷西风的专栏

linux编译zlib库的动态库so

转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog) 

1051

扫码关注云+社区