随笔分类 -  Linux驱动

摘要:1 container_of宏 1.1 简介 已知某结构体成员的地址,根据成员的地址去找出结构体的地址 1.2 API #include <linux/kernel.h> /** * container_of - cast a member of a structure out to the con 阅读全文
posted @ 2021-08-06 00:01 MHDSG 阅读(133) 评论(0) 推荐(0)
摘要:1 copy_to_user与copy_from_user 详见1.4 2 netlink 2.1 netlink简介 netlink socket是一种linux特有的socket,用与实现用户进程与内核进程之间通信的一种特殊的进程之间通信方式(IPC),也是网络应用程序与内核通信的最常用的接口 阅读全文
posted @ 2021-08-06 00:00 MHDSG 阅读(272) 评论(0) 推荐(0)
摘要:1 中断概念 参考T6 一句话,中断上半部要求快进快出,耗时操作则可放在中断下半部执行 下半部实现方式: 软中断 tasklet 工作队列 内核定时器,也可以将工作退后一段时间(精准的)执行 2 tasklet tasklet是中断处理下半部最常见的一种方式,驱动程序一般先申请中断,在中断处理函数内 阅读全文
posted @ 2021-08-05 23:59 MHDSG 阅读(112) 评论(0) 推荐(0)
摘要:1 为什么需要并发控制 ​ 以T10案例代码为例,我们在内核中申请了一片缓冲区,假设此刻有2个及以上进程同时来访问这个内核驱动,而且二者同时执行到了下述代码区,那么此刻内核将会拷贝2个用户空间的数据到一个缓冲区,假设进程A刚好拷贝了一半数据到内核buffer后进程B也拷贝部分数据给内核buffer, 阅读全文
posted @ 2021-08-05 23:58 MHDSG 阅读(91) 评论(0) 推荐(0)
摘要:1 阻塞与非阻塞 阻塞I/O与非阻塞I/O是设备访问的两种不同模式,驱动程序可以灵活的支持用户空间对设备的这两种访问方式。 阻塞操作:指的是执行设备操作的时候如果不能获得资源,那么就挂起进程直到满足操作条件之后再进行操作。被挂起的进程进而进入休眠状态,被调度器移走,直到能够获取资源后才继续执行 非阻 阅读全文
posted @ 2021-08-05 23:58 MHDSG 阅读(78) 评论(0) 推荐(0)
摘要:1 linux字符驱动设备开发流程 1.1 流程 封装自己的字符设备结构体类 实现struct file_operations结构体 模块的入口函数 实例化自己的字符设备结构体类(实例化对象),使用kmalloc 初始化通用字符设备(cdev_init) /* 功能:初始化字符设备 参数: @cde 阅读全文
posted @ 2021-08-05 23:57 MHDSG 阅读(111) 评论(0) 推荐(0)
摘要:1.输入子系统概念 1.1输入设备 输入设备如按键,鼠标,触摸屏,游戏遥感等均是输入设备 如果没有输入子系统的话,那么针对不同的屏幕将会写不同的代码,但其操作模式是一样的,那么将会写很多重复代码.明显比较麻烦 输入子系统的出现就是实现操作与硬件分离,针对不同型号的屏幕采用同一套通用方法 总之一句话, 阅读全文
posted @ 2021-08-05 23:55 MHDSG 阅读(233) 评论(0) 推荐(0)
摘要:1.回顾 1.1字符设备驱动开发步骤 首先要实现模块加载(xxx_init())与卸载函数(xx_exit())函数 之后申请设备号(register_chrdev_region()) 注册字符设备驱动,cdev_alloc(),cdev_init(),cdev_add() 使用udev/mdev机 阅读全文
posted @ 2021-08-05 23:54 MHDSG 阅读(73) 评论(0) 推荐(0)
摘要:1.设备驱动模型 1.1由来 在之前的字符设备驱动编程模型里面主要有以下几步 1.首先要实现入口函数xxx_init()和卸载函数xxx_exit() 2.申请设备号register_chrdev 3.创建设备节点,如class_create,device_create 4.硬件部分初始化,如io资 阅读全文
posted @ 2021-08-05 23:53 MHDSG 阅读(192) 评论(0) 推荐(0)
摘要:1.中断设备树 1.1概述 在linux内核中通过中断号管理中断,与外设一一对应 中断发生后会有中断回调函数,在linux中通过``函数处理中断 外围设备大部分会产生中断,soc为了方便管理与区分中断,故设计了中断控制器GIC(**Generic Interrupt Controller **),用 阅读全文
posted @ 2021-08-05 23:48 MHDSG 阅读(176) 评论(0) 推荐(0)
摘要:1.设备树 1.1设备树引入背景 Linux社区的大牛们参考了PowerPC等体系架构中使用的Flattened Device Tree(FDT),也采用了Device Tree结构,许多硬件的细节可以直接透过它传递给Linux,而不再需要在kernel中进行大量的冗余编码 设备树是一种描述硬件的数 阅读全文
posted @ 2021-08-05 23:44 MHDSG 阅读(195) 评论(0) 推荐(0)
摘要:1.驱动分类 1.1字符设备 1.1.1特点 数据为字符流,数据从寄存器产生 传输数据少而快 如LCD屏,keyboard,IIC等 1.1.2上层调用方式 上层应用以文件描述符形式打开驱动,如open,read,write 上层每调用某函数,在驱动层面都有相应接口函数,如上层open对于底层xxx 阅读全文
posted @ 2021-08-05 23:43 MHDSG 阅读(101) 评论(0) 推荐(0)
摘要:1.ko模块传参 1.1概念 之前在装载驱动时候使用insmod hello_driver.ko指令,实际上该指令可以传递参数 传参示例insmod hello_driver.ko myname="makabaka" val=22 通过传参可以向驱动里面传入参数,驱动可对参数做相应处理,这点类似函数 阅读全文
posted @ 2021-08-05 23:39 MHDSG 阅读(206) 评论(0) 推荐(0)
摘要:1.驱动代码 1.1头文件 #include <linux/init.h> #include <linux/module.h> 1.2装载与卸载函数声明 当生成的.ko文件被装载的时候,内核会调用module_init函数,向系统申请资源 当生成的.ko文件被卸载的时候,内核会调用module_ex 阅读全文
posted @ 2021-08-05 23:38 MHDSG 阅读(88) 评论(0) 推荐(0)
摘要:1.Linux系统框图 1.1整体架构 架构图 我们在编写上层应用程序的时候,会调用到各种函数,这些函数由标志C库提供.而C库就通过系统调用接口进而进入内核调用系统函数 linux系统通过虚拟文件系统将不同设备映射成文件(一切皆文件),存在于/dev目录下.既然是文件,那么就可以用open打开.例如 阅读全文
posted @ 2021-08-03 08:48 MHDSG 阅读(127) 评论(0) 推荐(0)