内核模块学习
文章平均质量分 74
内核模块深入学习
鸭鸭打瞌睡
这个作者很懒,什么都没留下…
展开
-
10_9_fbbuffer整体框架流程
这个文章只是大概流程,很难讲的细分为两部,第一部分是 整个框架怎么跑的第二部分是 lcd手册的参数 和soc上lcd控制器的参数 和驱动中需要的参数 到底有什么映射关系fbbuffer的思想是 应用空间有图像需要 拷贝到驱动空间 如果是cory_To_usr 效率就很低如果驱动空间能直接映射一块内存(肯定是驱动分配的)到用户空间 mmap 映射到用户空间应用程序直接写这个地址就会快很多了。原创 2023-12-10 20:34:06 · 896 阅读 · 0 评论 -
10_7iic整体框架流程
在内核中 这边把iic整个流程分成了 4层iic_dtiver at24_iic_eeprom 也就是我们的自己的驱动i2c-core.c 核心层i2c/busses/i2c-s3c2410.c 控制器层平台总线驱动层,或者也是图中的设备树。原创 2023-11-27 00:27:37 · 990 阅读 · 0 评论 -
10_6 input输入子系统,流程解析
举个例子在input_hadler这一层 我们看的是evdev.c这个万能驱动 起始还有mousedevhandler mousedev.c鼠标handler 和joydey_handle游戏杆的handler。所以鼠标设备会和 evdev.c匹配 也会和鼠标handler匹配 所以鼠标插入的时候 有个/dev/input/event0 和 /dev/input/mouse0。我们看到handler层的注册的结构体 input_handler evdev_handler。原创 2023-11-19 22:30:04 · 574 阅读 · 0 评论 -
10_4阻塞和非阻塞跟poll和等待队列
那驱动使用 wait_event_interruptible(key_dev->wq_head, key_dev->have_data);再次调用到驱动中的poll,这时候检测到右数据,那么驱动poll,会返回POLL_IN这些掩码。再次调用到驱动中的poll,这时候检测到右数据,那么驱动poll,会返回POLL_IN这些掩码。应用先 poll(pfds, 2, 5000);原创 2023-10-29 15:18:20 · 223 阅读 · 0 评论 -
01.2总线驱动设备设计思想
每个bus下面都有dev和drv两个目录里面的链表把和这个bus相关的 设备与驱动都链接起来 使用bus.match每当有新的drv注册的时候主动调用 当两个名称匹配的时候 bus也提供了probe函数 一般这个函数后面直接指向dev的probe函数。这样写尽管也可以做的驱动对不同设备的兼容,但是耦合度比较高。当目录下面的文件有关系的时候(比如iic总线目录下的多个设备)我们使用key_set把这些目录进行链接。总线:总线是CPU和设备进行信息交互的通道,所有的设备都要连接到总线上。原创 2023-06-24 21:50:00 · 311 阅读 · 0 评论 -
09_使用设备树
查看设备树在sys目录下的 也就是kobj 的一些注册了这个目录下的的各种属性都能cat (kset)同时还有子节点目录 或者文件名 和之前的kobj ktype的文件文件夹 映射类似设备树的原文件 编译成dtb uboot进行加载到指定位置把各种节点转换为 struct device_node 结构体有compitle属性的话 转换为 plantform_device 节点的属性用struct propetry表示。原创 2023-01-22 16:44:35 · 94 阅读 · 0 评论 -
07_plantform平台总线
平台总线其实就是继承 06_自己创建xbus总线 有了更多的玩法和自己创建的xbus总线一样 平台总线也有dev和drv 需要这两个进行匹配之后 进行porbe调用plantform_device 结构体中直觉继承了 struc devicelantform_driver 继承了driverplantform平台总线不用手动注册 上电的时候执行了 platform_bus_init()原创 2023-01-21 15:06:56 · 885 阅读 · 0 评论 -
00_linux 设备驱动模型 2.6以后通用模型
自定义一个总线 叫x-bus在里面增加dev和drv 匹配成功后 调用drv的probe进行基本的设备文件创作和设备节点创作/sys/bus/xbus 自己生成的总线,和IIC这边匹配类似自定义总线dev /sys/bus/xbus/device/zzz自定义总线drv /sys/bus/xbus/drv/zzzbus_register(struct bus_type * bus) //添加新的总线类型 device_register(struct device);原创 2023-01-23 23:50:29 · 1354 阅读 · 0 评论 -
06_平台总线匹配规则,自己搭建总线xbus
自己创建平台总线 /sys/bux/xxx对平台总线加入dev /sys/bus/xxx/dev对平台总线加入drv /sys/bus/xxx/drv两个相匹配的时候 直接调用drv->probe 函数 进行基本的class_create() device_create()等创建设备文件 和设备节点。原创 2023-01-21 12:16:32 · 956 阅读 · 0 评论 -
03_class创建device创建_kobject_uevent发送
根据之前的kobject知道 /sys/目录下的每个文件夹都是一个 kobject的对象使用class_create() 创建 /sys/class/xxx目录 同时返回class对象使用device_create() 创建/sys/class/xxx/yyy目录 和创建/dev/yyy的文件节点 同时返回device对象class和device 都间接继承于kobject 所以kobject是总线、驱动、设备的三种对象的一个基类。原创 2023-01-20 21:08:09 · 544 阅读 · 0 评论 -
02_kset和ktype和kobject相互关系
sys/下面每个目录对应的时一个kobj 有的kobj是key_set结构体的一个变量举个简单的例子:/sys/device/plantform/devices 是一个key_set,因为创建了这个文件夹 同时也有kobject作为它的结构体成员/sys/device/plantform/drivers 是一个key_set,因为创建了这个文件夹 同时也有kobject作为它的结构体成员。原创 2023-01-20 21:11:40 · 110 阅读 · 0 评论 -
01_kobject和ktype创建设备文件和设备目录
设备文件属性指的是 /sys/yyy/xxxyyy:代表这个设备的目录xxx:代表这个驱动设备的各种属性,我们可以直接操控属性来控制这个设备比如之前常见的 echo 5 > /sys/led/brightness 直接操作这个属性来更改led的亮度。原创 2023-01-20 21:07:34 · 642 阅读 · 0 评论 -
00_linux_最简单构建字符设备 2.4版本之前使用
背景:怎么构建一个最简单的字符设备驱动并且可以使用app进行操作大致方法1.写驱动文件(file_operation),构造对应的read write 函数2.分配设备名称(/proc/devices/设备名称)3.注册进内核 使用主次设备号,设备名称 ,insmode 注册后 在/proc/devices/设备名称 就能找到对应设备4.对这个设备进行注册,mknode 命令,生成 /dev/设备文件名称5.应用程序打开。原创 2022-11-27 23:14:29 · 276 阅读 · 0 评论