专栏首页Linux驱动1.驱动程序概念介绍

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 条评论
登录 后参与评论

相关文章

  • 37.Linux驱动调试-根据oops的栈信息,确定函数调用过程

    在上章里,我们分析了oops的PC值在哪个函数出错的 本章便通过栈信息来分析函数调用过程 1.上章的oops栈信息如下图所示: ? 9fe0: 代表最初的栈顶S...

    张诺谦
  • 36.Linux驱动调试-根据oops定位错误代码行

    1.当驱动有误时,比如,访问的内存地址是非法的,便会打印一大串的oops出来 1.1以LED驱动为例 将open()函数里的ioremap()屏蔽掉,直接使用物...

    张诺谦
  • 25.QT-模型视图

    在Qt中,不管模型以什么结构组织数据,都必须为每个数据提供不同的索引值,使得视图能通过索引值访问模型中的具体数据

    张诺谦
  • 29-文件对象基础操作

    凯茜的老爸
  • CentOS6.3 x86_64 mininstall 安装扫描之王nmap

    CentOS6.3 x86_64 mininstall 安装扫描之王nmap 1,安装 [root@bogon ~]# yum -y install n...

    三杯水Plus
  • 解决使用innobackupex备份mysql产生returned OS error 124

    这个是指mysql进程超出了打开最多的文件数量,检查下mysql数据文件data目录下的文件总数。

    bboysoul
  • 向datagrid中加横向 纵向的合计 (在datatable中实现,datatable间倒数据)

    如果实现?? protected System.Web.UI.WebControls.DataGrid DataGrid1; /// <summary>...

    阿新
  • 使用sqlite3 模块操作sqlite3数据库

    Python内置了sqlite3模块,可以操作流行的嵌入式数据库sqlite3。如果看了我前面的使用 pymysql 操作MySQL数据库这篇文章就更简单了。因...

    乐百川
  • 解决使用innobackupex备份mysql产生returned OS error 124

    这个是指mysql进程超出了打开最多的文件数量,检查下mysql数据文件data目录下的文件总数。

    bboysoul
  • 没有3D建模的基础,只用thingjs就能搞定可视化开发

    没有3D建模的基础,对于制作3D场景要了解的知识也不明白,如何搭建3D可视化场景?咋整?什么都不会的我们该如何以最简单的方式搭建3D场景来完成我们的目标呢?当然...

    要不要吃火锅

扫码关注云+社区

领取腾讯云代金券