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

目录

一、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()等函数来控制设备文件了。

       

相关内容

热门资讯

北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...