Android开发-从硬件到APP(一) : 单独编内核驱动模块

来源:互联网 发布:网络语言吃鸡什么意思 编辑:程序博客网 时间:2024/04/28 10:16

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.oelseKDIR := /media/515bab37-4e3a-4b51-b900-cd92d1965d96/a20-420-V12/lichee/linux-3.3all: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- 

(这相当于直接指定工具链的路径)!












0 0