番外篇:linux硬件驱动程序开发简介

源码地址:http://download.csdn.net/detail/yongyu_it/9535181


0、linux内核编译

linux内核编译分3个步骤:

0.1)添加交叉编译工具:export PATH=$PATH:/home/yong/dev/android-2.3/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin。android源代码为我们提供了一个交叉编译工具arm-eabi-gcc。对于2.3版本源码而言位于android-2.3/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin,对于6.0版本的源码而言位于android-6.0/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin。

0.2)根据CPU架构修改Makefile文件(即修改ARCH和CROSS_COMPILE值)。执行make goldfish_defconfig(CUP架构版本不同,文件可能不同。例如arm V7对应的文件是goldfish_armv7_defconfig)。

0.3)执行make

1、硬件驱动程序代码结构

*假设linux内核源码(2.6.29版)的根目录是goldfish,要开发的驱动程序名是freg

goldfish--|

                 |--drivers--|

                                   |--freg--|

                                                |--freg.h

                                                |--freg.c

                                                |--Kconfig    //编译选项配置文件

                                                |--Makefile  //编译脚本


2、编写驱动源码(源代码见附件)

这份源代码(freg.h & freg.c)实现的是:为一个虚拟寄存器(单个字节长度)向用户空间提供三种访问接口。proc文件系统接口,devfs文件系统接口,传统设备文件文件系统接口。

3、编写编译配置文件和编译脚本(源代码见附件)

注意:驱动程序可以以三种方式编译:直接内建在内核中,编译成内核模块,不编译到内核中。

4、编译硬件驱动到内核

经历上面2、3步骤之后,源码开发部分就完成了。接下来是编译驱动到内核,分5个步骤

4.1)修改内核Kconfig文件。因为在0.2步骤里面设置了Makefile文件的CPU架构相关参数,所以这一步也要到对应的目录下修改KConfig文件。以arm架构为例,需要设置arch/arm下的KConfig文件

4.2)修改drivers/Kconfig文件

4.3)修改内核Makefile文件(即drivers/Makefile文件)

4.4)执行make menuconfig修改配置Device Drivers (Enter) --> Fake Register Driver (Y或者M) --> Esc and Save

4.5)执行make

5、验证

用编译好的linux内核作为android系统的内核,用模拟器启动,然后用adb shell验证proc文件系统接口和devfs文件系统接口。




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 |-枚举与删除对象回调
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值