Linux驱动开发—最详细应用程序调用驱动程序解析

这篇具有很好参考价值的文章主要介绍了Linux驱动开发—最详细应用程序调用驱动程序解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Linux下应用程序调用驱动程序流程

  • Linux下进行驱动开发,完全将驱动程序与应用程序隔开,中间通过C标准库函数以及系统调用完成驱动层和应用层的数据交换。
  • 驱动加载成功以后会在“/dev”目录下生成一个相应的文件,应用程序通过对“/dev/xxx” (xxx 是具体的驱动文件名字) 的文件进行相应的操作即可实现对硬件的操作。
  • 用户空间不能直接对内核进行操作,因此必须使用一个叫做 “系统调用”的方法 来实现从用户空间“陷入” 到内核空间,这样才能实现对底层驱动的操作
  • 每一个系统调用,在驱动中都有与之对应的一个驱动函数,在 Linux 内核文件 include/linux/fs.h 中有个叫做 file_operations 的结构体,此结构体就是 Linux 内核驱动操作函数集合

linux应用程序调用驱动程序,嵌入式技术文章,驱动开发,linux,运维,嵌入式硬件

大致流程

linux应用程序调用驱动程序,嵌入式技术文章,驱动开发,linux,运维,嵌入式硬件文章来源地址https://www.toymoban.com/news/detail-574072.html

  1. 加载一个驱动模块,产生一个设备文件,有唯一对应的inode结构体
  2. 应用层调用open函数打开设备文件,对于上层open调用到内核时会发生一次软中断,从用户空间进入到内核空间
  3. open会调用到sys_open(内核函数),sys_open根据文件的地址,找到设备文件对应的struct inode结构体描述的信息,可以知道接下来要操作的设备类型(字符设备还是块设备),还会分配一个struct file结构体
  4. 根据struct inode结构体里面记录的主设备号和次设备号,在驱动链表(管理所有设备的驱动)里面,根据找到字符设备驱动
  5. 每个字符设备都有一个struct cdev结构体。此结构体描述了字符设备所有信息,其中最重要的一项就是字符设备的操作函数接口
  6. 找到struct cdev结构体后,linux内核就会将struct cdev结构体所在的内存空间首地址记录在struct inode结构体i_cdev成员中,将struct cdev结构体中的记录的函数操作接口地址记录struct file结构体的f_ops成员中
  7. 执行xxx_open驱动函数

知识补充

  1. 在Linux文件系统中,每个文件都用一个struct inode结构体来描述,这个结构体记录了这个文件的所有信息,例如文件类型,访问权限等。
  2. 在linux操作系统中,每个驱动程序应用层的/dev目录或者其他如/sys目录下都会有一个文件与之对应
  3. 在linux操作系统中, 每个驱动程序都有一个设备号
  4. 在linux操作系统中,每打开一次文件,Linux操作系统会在VFS层分配一个struct file结构体来描述打开的文件

到了这里,关于Linux驱动开发—最详细应用程序调用驱动程序解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【IMX6ULL驱动开发学习】04.应用程序和驱动程序数据传输和交互的4种方式:非阻塞、阻塞、POLL、异步通知

    目录 一、数据传输 1.1 APP和驱动  1.2 驱动和硬件 二、APP使用驱动的4种方式 2.1 非阻塞(查询) 2.2 阻塞(休眠+唤醒) 2.3 POLL(休眠+唤醒+超时时间) 2.3.1 POLL机制流程 2.3.2 POLL执行流程 2.3.3 POLL应用和驱动编程  2.4 异步通知 2.4.1 异步通知流程 2.4.1 异步通知应用和驱动编程

    2024年02月06日
    浏览(42)
  • 【IMX6ULL驱动开发学习】04.应用程序和驱动程序数据传输和交互的4种方式:非阻塞、阻塞、POLL、异步通知 一、数据传输

    目录 一、数据传输 1.1 APP和驱动  1.2 驱动和硬件 二、APP使用驱动的4种方式 2.1 非阻塞(查询) 2.2 阻塞(休眠+唤醒) 2.3 POLL(休眠+唤醒+超时时间) 2.3.1 POLL机制流程 2.3.2 POLL执行流程 2.3.3 POLL应用和驱动编程  2.4 异步通知 2.4.1 异步通知流程 2.4.1 异步通知应用和驱动编程

    2024年02月13日
    浏览(36)
  • Linux应用程序开发:进程的一些事儿

      进程是一个动态过程,而非静态文件,它是程序的一次运行过程,当应用程序被加载到内存中运行之后它就称为了一个进程,当程序运行结束后也就意味着进程终止,这就是进程的一个生命周期。   Linux 系统下进程通常存在 6 种不同的状态,分为:就绪态、运行态、僵

    2023年04月24日
    浏览(32)
  • 使用 Visual Studio 2022 开发 Linux C++ 应用程序

    前置条件: Windows上需要先安装 WSL2,方法见: Install WSL | Microsoft Docs 在 WSL2 中依次执行如下命令,进行安装如下必需软件: Visual Studio 2022 引入了用于 Linux C++ 开发的本机 WSL2 工具集,可以构建和调试 Linux C++ 代码,并提供了非常好的 Linux 文件系统性能、GUI 支持和完整的系统

    2024年02月05日
    浏览(103)
  • RK3568平台开发系列讲解(Linux系统篇)Linux 应用程序的安全

    🚀返回专栏总目录 沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇让我们如何写出尽可能安全的应用程序。

    2023年04月16日
    浏览(34)
  • Linux设备模型统一:桥接硬件多样性与应用程序开发的关键

    在Linux的宏大世界中,各种各样的硬件设备如星辰般繁多。从常见的USB设备到复杂的网络接口卡,从嵌入式设备到强大的服务器,Linux需要在这些差异极大的硬件上运行。这就引出了一个问题:Linux是如何统一这些不同硬件的设备模型的呢?本文将探讨Linux是如何针对不同的硬

    2024年04月10日
    浏览(36)
  • 驱动与应用程序通信

    本文讲述的是 Windows操作系统下驱动程序与应用程序之间的通信 ,说简单点就是相互发送数据。 在应用程序中,可以通过 CreateFile 来打开设备,然后通过 DeviceIoControl 来向驱动发送或接收数据;而驱动程序则需要通过 创建控制设备对象 ,并 创建符号链接 ,通过 分发函数 来

    2024年02月06日
    浏览(82)
  • LCD驱动程序——Framebuffer应用编程

    在 Linux 系统中通过 Framebuffer 驱动程序来控制 LCD。 Frame 是帧的意思 , buffer 是缓冲的意思 ,这意味着 Framebuffer 就是一块内存,里面保存着一帧图像。Framebuffer 中保存着一帧图像的每一个像素颜色值,假设 LCD 的分辨率是 1024x768,每一个像素的颜色用 32 位来表示,那么 Frame

    2024年02月06日
    浏览(26)
  • 第五章 I/O管理 五、输入/输出应用程序接口&设备驱动程序接口

    目录 一、应用程序接口 二、阻塞和非阻塞I/O 阻塞I/O: 非阻塞I/O: 三、设备驱动程序 以前的统一接口不适用了,现在改为了几种不同的接口 阻塞I/O: 应用程序发出I/O系统调用,进程需转为阻塞态等待。 eg:字符设备接口―一从键盘读一个字符get 非阻塞I/O: 应用程序发出I/O系统调

    2024年02月07日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包