I.MX6ULL内核开发3:linux内核设计字符设备原理(简单版)
创始人
2024-05-25 00:20:13
0

目录

一、Linux哲学

二、如何把字符设备抽象成文件

三、硬件层原理

四、驱动层原理

五、文件系统原理


一、Linux哲学

一切皆文件

二、如何把字符设备抽象成文件

open函数,在文件系统中找到指定文件的操作接口,绑定到进程task_struct->file_struct->fd_array[]->file_operations

思路:

把底层寄存器配置操作放在文件操作接口里面,新建一个文件绑定该文件操作接口,应用程序通过操作指定文件来设置寄存器。

三、硬件层原理

基本接口实现

  • 查原理图,数据手册,确定底层需要配置的寄存器
  • 类似裸机开发
  • 实现一个文件的底层操作接口,这是文件的基本特征

struct file_operations

/home/geralt/linux_driver/kernel/ebf_linux_kernel_6ull_depth1/include/linux/fs.h

四、驱动层原理

把file_operations文件操作接口注册到内核,内核通过主次设备号来登记记录它(这是因为文件操作接口是我们自己构建出来的,内核并不知道)

  • 构造驱动基本对象,struct cdev,里面记录具体的file_operations

cdev_init()

  • 两个hash表(避免不同的设备出现冲突)

        chrdevs:登记设备号

        _register_chrdev_region()

        cdev map->probe:保存驱动基本对象struct cdev

        cdev_add()

五、文件系统原理

mknod指令+主从设备号

  • 构建一个新的设备文件(系统层完成)
  • 通过主次设备号在cdev_map中找到cdev->file_operations
  • 把cdev->file_operations绑定到新的设备文件中

到这里,应用程序就可以使用open()、write()、read()等函数来控制设备文件了。

       

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...