摘要: 1 中断概念 参考T6 一句话,中断上半部要求快进快出,耗时操作则可放在中断下半部执行 下半部实现方式: 软中断 tasklet 工作队列 内核定时器,也可以将工作退后一段时间(精准的)执行 2 tasklet tasklet是中断处理下半部最常见的一种方式,驱动程序一般先申请中断,在中断处理函数内 阅读全文
posted @ 2021-08-05 23:59 MHDSG 阅读(101) 评论(0) 推荐(0)
摘要: 1 为什么需要并发控制 ​ 以T10案例代码为例,我们在内核中申请了一片缓冲区,假设此刻有2个及以上进程同时来访问这个内核驱动,而且二者同时执行到了下述代码区,那么此刻内核将会拷贝2个用户空间的数据到一个缓冲区,假设进程A刚好拷贝了一半数据到内核buffer后进程B也拷贝部分数据给内核buffer, 阅读全文
posted @ 2021-08-05 23:58 MHDSG 阅读(77) 评论(0) 推荐(0)
摘要: 1 阻塞与非阻塞 阻塞I/O与非阻塞I/O是设备访问的两种不同模式,驱动程序可以灵活的支持用户空间对设备的这两种访问方式。 阻塞操作:指的是执行设备操作的时候如果不能获得资源,那么就挂起进程直到满足操作条件之后再进行操作。被挂起的进程进而进入休眠状态,被调度器移走,直到能够获取资源后才继续执行 非阻 阅读全文
posted @ 2021-08-05 23:58 MHDSG 阅读(75) 评论(0) 推荐(0)
摘要: 1 linux字符驱动设备开发流程 1.1 流程 封装自己的字符设备结构体类 实现struct file_operations结构体 模块的入口函数 实例化自己的字符设备结构体类(实例化对象),使用kmalloc 初始化通用字符设备(cdev_init) /* 功能:初始化字符设备 参数: @cde 阅读全文
posted @ 2021-08-05 23:57 MHDSG 阅读(103) 评论(0) 推荐(0)
摘要: 1.输入子系统概念 1.1输入设备 输入设备如按键,鼠标,触摸屏,游戏遥感等均是输入设备 如果没有输入子系统的话,那么针对不同的屏幕将会写不同的代码,但其操作模式是一样的,那么将会写很多重复代码.明显比较麻烦 输入子系统的出现就是实现操作与硬件分离,针对不同型号的屏幕采用同一套通用方法 总之一句话, 阅读全文
posted @ 2021-08-05 23:55 MHDSG 阅读(205) 评论(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 阅读(65) 评论(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 阅读(182) 评论(0) 推荐(0)
摘要: 1.中断设备树 1.1概述 在linux内核中通过中断号管理中断,与外设一一对应 中断发生后会有中断回调函数,在linux中通过``函数处理中断 外围设备大部分会产生中断,soc为了方便管理与区分中断,故设计了中断控制器GIC(**Generic Interrupt Controller **),用 阅读全文
posted @ 2021-08-05 23:48 MHDSG 阅读(156) 评论(0) 推荐(0)
摘要: 1.设备树 1.1设备树引入背景 Linux社区的大牛们参考了PowerPC等体系架构中使用的Flattened Device Tree(FDT),也采用了Device Tree结构,许多硬件的细节可以直接透过它传递给Linux,而不再需要在kernel中进行大量的冗余编码 设备树是一种描述硬件的数 阅读全文
posted @ 2021-08-05 23:44 MHDSG 阅读(180) 评论(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 阅读(88) 评论(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 阅读(204) 评论(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 阅读(76) 评论(0) 推荐(0)
摘要: 1. java数组 java数组合法的写法 方式一:int a[] = {1, 2, 3};,直接声明,无需new 方式二:int b[] = new int[3];,需自己开辟 方式三:int[] c = new int[3];,java数组的规范写法 package clc; import ja 阅读全文
posted @ 2021-08-05 23:35 MHDSG 阅读(56) 评论(0) 推荐(0)
摘要: 1.catch异常 1.1概念 异常是导致程序中断运行的一种指令流,如果不对异常进行正确处理,则可能导致程序的中断执行,造成不必要的损失 1.2格式 异常格式 try{ 异常语句; }catch(Exception e){ }finally{ 一定会执行的代码; } 实例 package com.h 阅读全文
posted @ 2021-08-05 23:34 MHDSG 阅读(208) 评论(0) 推荐(0)
摘要: 1.多态性 1.1多态性体现 方法重载与重写 对象多态性 向上转型:程序会自动完成 ​ 父类 父类对象 = 子类实例 向下转型:强制类型转换 ​ 子类 子类对象 = (子类)父类实例 向上转型示例 package com.hanqi.duotai; class A{ public void tell 阅读全文
posted @ 2021-08-05 23:34 MHDSG 阅读(60) 评论(0) 推荐(0)
摘要: 1.Object类 1.1概念 在java中Object类是所有java类的根基类,是所有类的老祖宗 如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类,例如 public class Persion{ } //等价于 public class Persion exte 阅读全文
posted @ 2021-08-05 23:33 MHDSG 阅读(71) 评论(0) 推荐(0)
摘要: 1.String字符串 1.1实例化String对象 直接赋值(推荐使用) 使用关键字new,因为String本身就是个对象 示例 package com.hanqi.string; public class test01 { public static void main(String[] arg 阅读全文
posted @ 2021-08-05 23:32 MHDSG 阅读(39) 评论(0) 推荐(0)
摘要: 1.final关键字 1.1概念 final关键字在java中被称为完结器,表示最终的意思 final能声明类,方法,属性 1.2注意 使用final声明的类不能被继承,类似被打上final标签的类就是太监,不能有子孙后代 使用final声明的方法不能被重写 使用final声明的变量变成常量,常量是 阅读全文
posted @ 2021-08-05 23:31 MHDSG 阅读(158) 评论(0) 推荐(0)
摘要: 1.java引用传递 1.1定义 类似于C中的函数之间传递指针,直接通过指针操作内存 java示例 package com.hanqi.test; class Ref1{ int temp = 10; } public class test01 { public static void main(S 阅读全文
posted @ 2021-08-05 23:30 MHDSG 阅读(49) 评论(0) 推荐(0)
摘要: 1.方法进阶 1.1方法定义 基本同C差不多,只是在方法类型之前多了修饰符如public,private等 返回值同C一样,有啥返回值就定义啥类型方法 1.2方法重载 从此处开始方法将与C存在较大差别 重载定义:方法名相同,但是参数的类型和个数不同,通过传递参数的个数和类型不同来完成不同功能(区分不 阅读全文
posted @ 2021-08-05 23:29 MHDSG 阅读(53) 评论(0) 推荐(0)