驱动开发经验

驱动开发

一、 驱动开发框架

驱动框架:
0、声明实现入口函数(module_init、module_exit)
1、申请设备号(register_chrdev)
2、创建设备节点(class_create、device_create)
3、硬件初始化
ioremap地址映射
中断申请
4、实现文件IO接口

二、中断

中断分上下两个部分:
中断的下半部分:
1、softirq:软中断,处理级别比较高,在内核机制中,需要修改内核源码功能
2、tasklet:实际上就是内部调用了softirq
3、workqueue:工作队列

三、iic

I2C(IIC)属于两线式串行总线,串行时钟线(SCL)和串行数据线(SDA)
由飞利浦公司开发用于微控制器(MCU)和外围设备(从设备)进行通信的一种总线
属于一主多从(一个主设备(Master),多个从设备(Slave))的总线结构
总线上的每个设备都有一个特定的设备地址,以区分同一I2C总线上的其他设备。

I在这里插入图片描述

ii2主要有四个部分:起始信号、停止信号、应答信号、以及数据有效性。

起始信号:
在这里插入图片描述

停止信号:
在这里插入图片描述
数据有效性:
在这里插入图片描述
IIC子系统
将设备添加到设备树:
硬件信息-----device设备----添加到设备树

模板:

	在内核 arch/arm/boot/dts/exynos4.dtsi
	        i2c_5: i2c@138B0000 {
                		#address-cells = <1>;
                		#size-cells = <0>;
               		compatible = "samsung,s3c2440-i2c";
                		reg = <0x138B0000 0x100>;
                		interrupts = <0 63 0>;
                		clocks = <&clock 322>;
                		clock-names = "i2c";
                		status = "disabled";
        		};
        				i2c@13860000 {
                			#address-cells = <1>;
                			#size-cells = <0>;
                			samsung,i2c-sda-delay = <100>;
                			samsung,i2c-max-bus-freq = <20000>;
                			pinctrl-0 = <&i2c0_bus>;
                			pinctrl-names = "default";
                			status = "okay";

                			s5m8767_pmic@66 {
                        			compatible = "samsung,s5m8767-pmic";
                        			reg = <0x66>;
			}
		}

总结

驱动开发首先确定驱动框架(声明出入口,注册设备,创建设备节点、初始化硬件信息、),主要对要操作的设备地址进行查找,各种通信协议,设备树中没有的需要自己将设备信息添加至设备树。IIC通信注意数据有效性,时钟信号SCL为高电平期间,数据线SDA上的数据必须保持稳定,只有在时钟线SCL上的信号为低电平期间,数据线SDA上的高电平或低电平状态才允许变化。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
0.基础的基础 |-学习WIN64驱动开发硬件准备 |-配置驱动开发环境 ------------------------------ 1.驱动级HelloWorld |-配置驱动测试环境 |-编译和加载内核HelloWorld ------------------------------ 2.内核编程基础 |-WIN64内核编程的基本规则 |-驱动程序与应用程序通信 |-内核里使用内存 |-内核里操作字符串 |-内核里操作文件 |-内核里操作注册表 |-内核里操作进线程 |-驱动里的其它常用代码 ------------------------------ 3.内核HOOK与UNHOOK |-系统调用、WOW64与兼容模式 |-编程实现突破WIN7的PatchGuard |-系统服务描述表结构详解 |-SSDT HOOK和UNHOOK |-SHADOW SSDT HOOK和UNHOOK |-INLINE HOOK和UNHOOK ------------------------------ 4.无HOOK监控技术 |-无HOOK监控进线程启动和退出 |-无HOOK监控模块加载 |-无HOOK监控注册表操作 |-无HOOK监控文件操作 |-无HOOK监控进线程句柄操作 |-使用对象回调监视文件访问 |-无HOOK监控网络访问 |-无HOOK监视修改时间 ------------------------------ 5.零散内容 |-驱动里实现内嵌汇编 |-DKOM隐藏进程+保护进程 |-枚举和隐藏内核模块 |-强制结束进程 |-强制读写进程内存 |-枚举消息钩子 |-强制解锁文件 |-初步探索PE32+格式文件 ------------------------------ 6.用户态HOOK与UNHOOK |-RING3注射DLL到系统进程 |-RING3的INLINE HOOK和UNHOOK |-RING3的EAT HOOK和IAT HOOK ------------------------------ 7.反回调 |-枚举与删除创建进线程回调 |-枚举与删除加载映像回调 |-枚举与删除注册表回调 |-枚举与对抗MiniFilter |-枚举与删除对象回调

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值