03 2023 档案

摘要:struct inode Linux中一切皆文件,当我们在Linux中创建一个文件时,就会在相应的文件系统创建一个inode与之对应,文件实体和文件的inode是一一对应的,创建好一个inode会存在存储器中,第一次open就会将inode在内存中有一个备份,同一个文件被多次打开并不会产生多个ino 阅读全文
posted @ 2023-03-31 22:33 流水灯 阅读(413) 评论(0) 推荐(1) 编辑
摘要:inode和block概述 文件是存储在硬盘上的,硬盘的最小存储单位叫做扇区sector,每个扇区存储512字节。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个块block。这种由多个扇区组成的块,是文件存取的最小单位。块的大小,最常见的是4 阅读全文
posted @ 2023-03-29 23:00 流水灯 阅读(177) 评论(0) 推荐(0) 编辑
摘要:设备号设计原则 一般一个主设备号的一段连续子设备号共用一个驱动,称为cdev实例,所以有主设备号和子设备号之分 struct cdev { struct kobject kobj; struct module *owner; const struct file_operations *ops; st 阅读全文
posted @ 2023-03-17 22:53 流水灯 阅读(109) 评论(0) 推荐(0) 编辑
摘要:为什么要用INPUT子系统 不采用input子系统,如果自己实现按键字符驱动,需要自己申请设备号,注册字符设备,实现file_operations接口,创建设备节点,实现阻塞、非阻塞、复用IO、异步通知,INPUT 子系统还统一定义了不同输入设备上报数据的格式。 在输入设备中会有以下几个问题: a. 阅读全文
posted @ 2023-03-16 23:18 流水灯 阅读(858) 评论(0) 推荐(0) 编辑
摘要:struct bus_type { const char *name; ...... struct subsys_private *p; }; struct class { const char *name; struct module *owner; ...... struct subsys_pr 阅读全文
posted @ 2023-03-16 22:51 流水灯 阅读(103) 评论(0) 推荐(0) 编辑
摘要:每个设备都有一个 uevent 属性文件,里面有设备号和设备名,此文要讲的是 uevent 事件,非 uevent 属性文件 kobject有事件需要上报时,会发送uevent事件,可以通过两个途径把事件上报到用户空间:一种是通过kmod模块,直接调用用户空间的可执行文件;另一种是通过netlink 阅读全文
posted @ 2023-03-12 19:33 流水灯 阅读(873) 评论(0) 推荐(0) 编辑
摘要:一个驱动可以支持多个设备;一个设备只能绑定一个驱动 platform总线上有设备链表和驱动链表,注册设备会遍历总线上的驱动链表找寻与之匹配的驱动,注册驱动会遍历总线上的设备链表找寻与之匹配的设备 匹配调用过程 注册设备: device_add ... bus_probe_device device_ 阅读全文
posted @ 2023-03-11 23:31 流水灯 阅读(79) 评论(0) 推荐(0) 编辑
摘要:platform_device 的创建 主要有两种方式 (1)在内核初始化时通过device_node转换为platform_device,这种是最新的实现方式,基于设备树,在内核初始化时将设备树中的节点转化为platform_device; of_platform_default_populate 阅读全文
posted @ 2023-03-11 23:19 流水灯 阅读(46) 评论(0) 推荐(0) 编辑
摘要:kernel_init(); kernel_init_freeable(); do_basic_setup(); driver_init(); platform_bus_init(); platform总线的注册就是在 /sys 文件下建立对应的文件夹和属性文件,并为全局变量 platform_bu 阅读全文
posted @ 2023-03-11 20:19 流水灯 阅读(50) 评论(0) 推荐(0) 编辑
摘要:list_head,这是linux中通用的链表形式,双向循环链表,功能强大,实现简单优雅。可如果您认为list_head就是链表的极致,应该在linux链表界一统天下,那可就错了。据我所知,linux内核代码中至少还有两种链表能占有一席之地。一种就是hlist,一种就是本节要介绍的klist。虽然三 阅读全文
posted @ 2023-03-11 17:01 流水灯 阅读(185) 评论(0) 推荐(0) 编辑
摘要:1、前言 对于任何一个指针来说,必然有三种情况:一种是有效指针,一种是NULL,也就是空指针,一种是错误指针,也就是无效指针,在Linux内核中,所谓的错误指针就是指其已经到达了内核空间的最后一个page,例如,对于32bit的系统来说,内核空间最后地址为0xFFFF FFFF,那么最后一个page 阅读全文
posted @ 2023-03-10 22:34 流水灯 阅读(1010) 评论(0) 推荐(0) 编辑
摘要:kobject /sys 下的文件夹,比如 "dev"、"kernel" 是通过 kobject_create_and_add 创建 一个 struct kobject 类型变量,对应 /sys 内的一个文件夹,"dev" 是 kobject 的名字,也是文件夹的名字 创建 "block" 和 "c 阅读全文
posted @ 2023-03-05 19:40 流水灯 阅读(543) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示