[原创]安卓内核驱动编译方法
发表于:
2018-6-1 13:16
16561
先前在论坛发了好几个帖子问关于内核驱动编译的问题,这里说明下我找到的方法,大家可以参考下。
因为先前需要把一个有漏洞的内核驱动编译到内核里去,所以花了不少时间去编译安卓内核驱动,这里介绍下方法,帮助有相关需要的朋友节省点时间。
我的环境:
Ubuntu 18.04
Android 4.4.2
Goldfish 3.4
环境的设置可以参考下我先前的文章:
在参考我的文章前看下这篇文章也会有帮助:
但是如果你只是跟着上面这篇文章做的话可能还会有些问题。我录了一个视频在这里,如果想看的朋友可以看下,就是得忍受我蹩脚的英语。
在开始以前,首先我们需要做一些事情。
下载完goldfish后,去到这个文件夹goldfish/arch/arm/configs/goldfish_armv7_defconfig然后加这几行。
这是为了让内核可以动态加载内核驱动。但是加了这几行后再编译的话就会出问题,所以需要删掉几行设定。
为了让设置清晰点,加这么一行说明下。
设置完这些基本上就ok了。
首先我们要编译的一种是可动态加载的内核驱动。
去到 goldfish/drivers 文件夹创建一个文件夹。就叫helloworld吧。不过其实对于这种动态加载的内核驱动,不一定需要在这个drivers文件夹下面,因为最后只要得到那个ko模块就好了。
在这个文件夹里面,我们创建了Makefile和hello.c文件。
Hello.c文件内容如下。
Makefile文件内容如下。
然后在helloworld文件夹里面执行make就可以了。你可以看到那里出现了”hello.ko”文件。开启你的模拟器,将hello.ko 给push到/data/local/tmp下面,采用如下命令加载写在驱动就可以看到输入和输出了。
第二种驱动,编译到内核里面的驱动。这种驱动不需要自己手动加载,只要内核被加载了,驱动就在里面了。这种驱动的创建也不一定放到goldfish/drivers文件夹下面,不过那样的话设置drivers下面的Makefile就不那么美观了。所以这里还是放在goldfish/drivers下面。同样的helloworld文件夹,然后里面有三个文件,hello.c Kconfig Makefile 这三个。
其中的hello.c和前面的那个一样,不需要改动。
Kconfig内容如下:
第三个文件是Makefile,相对于先前有些许改动。
变成了obj-y表示就是编译进安卓内核里面。
接下来去到drivers下面的Kconfig文件,增加这么一行。
去到drivers下面的Makefile文件,增加这么一行。
在你完成这些以后,去到goldfish文件夹然后打包整个内核。
make goldfish_armv7_defconfig && make -j8
这个时候,开启模拟器你会发现这个模块在启动的时候就被加载了。
整个过程花费了我不少时间,还是需要点耐心。出现问题慢慢搜索就好了。祝玩的开心。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!