将韦东山视频的代码在高通平台上移植,所有的代码参考韦东山一期驱动部分以及二期驱动,代码的扩充也是根据韦东山老师视频里的思路逐步的深入,由浅入深
平台:MSM8917 32位
内核版本:3.18.31
操作系统:ubuntu12.04
Android版本:7.1.2
1 驱动的编译
1.a 直接编译到内核
修改Makefile,在Makefile里添加(假设源文件名为foo)
obj-y += foo.o
然后编译出bootimage,烧录bootimage,重启机器进行验证
make bootimage -j4
adb reboot bootloader
fastboot flash boot bootimage
1.b 编译成模块
同样修改Makefile,在Makefile里添加(假设源文件名为foo)
obj-m += foo.o
可以直接编译bootimage
make bootimage -j4
编译boogimage的同时会编译modules,生成的modules一般在/system/lib/modules目录下
其它编译方法见另一篇文章
2 log的查看
添加的log,可以开机识别adb后,用
adb shell dmesg
或者
adb shell dmesg > d:\1\dmesg01.txt (打印到文件里查看)
或者
adb shell cat /dev/kmsg (实时打印log)
或者连接串口线,通过串口工具查看
3 应用程序编译
3.a在android源代码里编译
编写代码
编写Android.mk
示例(假设编译的源文件名为foo.c,编译出的模块名为foo)
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SHARED_LIBRARIES := libcutils liblog (链接的共享库)
LOCAL_INCLUDES += $(LOCAL_PATH)
LOCAL_SRC_FILES +=foo.c
LOCAL_MODULE:= foo
include $(BUILD_EXECUTABLE)
在android根目录(android源码必须全编译过)
source build/envsetup.sh
lunch工程
mmm Android.mk所在的目录
生成的bin文件一般在目录下 out/target/product/工程/system/bin/
3.b 通过arm-linux-gcc静态编译(必须静态编译)
原则:下载的工具链,可以编译,编译出的程序可以执行就可以了
下载工具链
下载网址
https://www.veryarm.com/arm-none-linux-gnueabi-gcc
编写代码
编译源代码
arm-linux-gcc -o foo foo.c -static
4 可执行文件的验证
push可执行文件到机器进行验证
adb root
adb remount
adb mkdir /data/my
adb push foo /data/my/foo
adb shell chmod 777 /data/my/foo
adb shell /data/my/foo
文章列表
【韦东山驱动代码移植高通平台之一】驱动代码的结构
【韦东山驱动代码移植高通平台之二】创建了一个简单的字符设备驱动
【韦东山驱动代码移植高通平台之三】自动创建设备节点
【韦东山驱动代码移植高通平台之四】创建多个设备节点
【韦东山驱动代码移植高通平台之五】读取按键值
【韦东山驱动代码移植高通平台之六】中断读取按键值
【韦东山驱动代码移植高通平台之七】通过poll机制读取按键值
【韦东山驱动代码移植高通平台之八】通过异步通知读取按键值
【韦东山驱动代码移植高通平台之九】通过ioctl返回值读取按键值
【韦东山驱动代码移植高通平台之十】ioctl通过指针返回按键值
【韦东山驱动代码移植高通平台之十一】 通过input子系统上报按键值
【韦东山驱动代码移植高通平台之十二】通过tasklet上报键值
【韦东山驱动代码移植高通平台之十三】通过工作队列上报键值
【韦东山驱动代码移植高通平台之十四】通过定时器上报键值
【韦东山驱动代码移植高通平台之十五】互斥量
【韦东山驱动代码移植高通平台之十六】信号量
【韦东山驱动代码移植高通平台之十七】原子变量
【韦东山驱动代码移植高通平台之十八】平台设备驱动模型
【韦东山驱动代码移植高通平台之十九】平台设备通过device tree实现
【韦东山驱动代码移植高通平台之二十】结构体的使用
【韦东山驱动代码移植高通平台之二十一】proc节点的创建
【韦东山驱动代码移植高通平台之二十二】sysfs节点的创建
【驱动代码移植高通平台之二十三】高通平台i2c设备驱动