Android开发-从硬件到APP(一) : 单独编内核驱动模块
2014-05-16 23:57
375 查看
Android开发-从硬件到APP(一) : 单独编内核驱动模块
引用请注明出处!!
我的邮箱qinxiaoyu@163.com
本人肉身在山西太原,欢迎各位联系哦!好久没有更新博客了,虽然能找出一大堆的理由:工作太忙,相亲太频繁(不伤肾的相亲真是无趣),还有去考公务猿({企图从一种猿(程序猿)变异成为另一种猿},但是,最根本的原因还是因为,我太懒了~~~。公司里打算做android的东西了,虽然1年半前在深圳就接触过了
android的驱动开发,但是还是非常的水,只会换换驱动什么的。现在公司也不愿意多花钱招人专门做这个,上一个CC2530的项目也在量产,所以,就让我来做android 的开发了。你没看错,是从硬件驱动到App都是我来做。虽然可能做出来的东西很水,但是,也能给初学者摸门路打打基础(虽然我也还是初学者)。
我手头的板子是一块SMDT出的全志A20的开发板(想找板子的可以直接百度他们家),上个礼拜2拿到的代码,然后就是搭建环境什么的常规程式。搭建环境就不细说了,网上的例子多的数不清。而且他们提供了一个已经打包好的64为ubunt12.04的IOS。想想当初搭建瑞星微的RK2818,RK2918的开发环境,各种apt-get isntall 满脸都是泪啊。
不想看废话的直接看这里哦!
我们在搭建好环境,编译过整个的kernel和android文件系统后。做驱动的第一件事就是能够编译模块,也就是常说的.ko文件。.ko文件可以通过insmod加载到android的linux内核中。可以驱动一些我们想要驱动的芯片,上网找了资料弄出了Makefile可以直接单独编译你想编译的文件。
ifneq ($(KERNELRELEASE),) obj-m := qxy_test.o else KDIR := /media/515bab37-4e3a-4b51-b900-cd92d1965d96/a20-420-V12/lichee/linux-3.3 all: make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- clean: rm -f *.ko *.o *.mod.o *.mod.c *.symvers modul* endif
qxy_test.o是这里你要生成的模块的名称。我的源文件名称和模块名称是一样的。
KDIR:= 后面的路径表示你的板子的linux系统文件放在哪里
ARCH=arm CROSS_COMILE=arm-linux-gnueabi-
的意思是你的编译工具是什么的。
这3处地方都改了以后,你就能试试看能不能编译你的模块啦。
关于工具链的问题:
1.如果你将工具链写成了我上面这样,那么必须将这个工具链设置到环境变量中
1> 输入 vim /etc/profile,在profile的最后一行加入
export PATH=$PATH:/home/smdt/external-toolchain/bin 保存
2> 输入 source /etc/profile 使环境变量有效
3> 在执行make就可以编译了。
4> 具体想知道自己的工具链是什么的,可以查看linux-3.3下的makefile得知,一般在”CROSS_COMPILE“后面跟的那个
地址就是编译链的地址。RK2918当时就是这种写法,还有6410的makefile也是这种。全志A20写了更多的shell文件来
简化编译方式。所以它的工具链是卸载linux-3.3下的build.sh里的。在build.sh里的第40行 :
tooldir="$(dirname `pwd`)/out/${LICHEE_PLATFORM}/common/buildroot/external-toolchain"
可以明显的看到,它的工具链是在
/lichee/out/android/common/buildroot/external-toolchain/bin 中。
所以知道自己工具链在哪里的人可以这么写make -C $(KDIR) M=$(PWD) modules
ARCH=arm CROSS_COMPILE
=/home/smdt/lichee/out/android/common/buildroot/external-toolchain/bin/arm-linux-gnueabi-
(这相当于直接指定工具链的路径)!
相关文章推荐
- android平台led开发之内核硬件驱动层
- android平台led开发之内核硬件驱动层(一)
- Android内核开发 Linux Java编程调用内核模块设备驱动
- Android内核开发 Linux C编程调用内核模块设备驱动
- Androidy硬件驱动开发
- 【内核编程】【Makefile】:嵌入式驱动开发时驱动模块于内核版本不匹配的解决
- Android新编译的内核驱动模块不能被init加载原因解决
- android内核字符驱动设备实战之----------硬件抽象层模块编程篇
- Android底层开发之APP音量单独控制
- Android内核驱动开发中的Kconfig文件结构分析(图文)
- Android开发-从硬件到APP(十) : 数据库的读写
- Android底层开发技术实战详解——内核、移植和驱动
- android 单独模块的开发编译(如Calculator)
- Android内核驱动开发中的Kconfig文件结构分析(图文)
- android开发之分享App模块
- Android内核驱动开发中的Kconfig文件结构分析(图文)
- ubuntu11.10下为android模拟器编译内核到为android开发内核模块(.ko文件)全过程纪实
- ubuntu11.10下为android模拟器编译内核到为android开发内核模块(.ko文件)全过程纪实
- Code maturity level options 代码成熟度选项 [*]Prompt for development and/or incomplete code/drivers 显示尚在开发中或尚未完成的代码与驱动.除非你是测试人员或者开发者,否则请勿选择 我是开发者,所以选[*] Loadable module support 可加载模块支持 [*]Enable loadable module support 内核编译配置选项简介 (2.4.20-8
- Android 驱动之旅: 第一章 在Android 内核源代码工程中编写硬件驱动程序