提取安卓的Linux内核和驱动

2013-10-25 0:42 from—http://forum.ubuntu.org.cn/viewtopic.php?t=450939

大家最关心的一个问题是,平板电脑或手机要是安装Linux,驱动的问题怎么解决?
我们知道Linux的驱动是要加载在内核里的,而且驱动和内核要匹配才能加载。
如果我们能提取安卓的Linux内核和驱动模块,它们肯定是匹配的,为什么不能用于其它Linux系统呢?

于是我就去试了试,结果发现是可以用的。之前自己直接编译的触摸屏驱动用不了,声音、wifi、键鼠、屏幕休眠都正常,视频也可以软解。
这样,自己不用编译驱动和内核,我们只是提取内核和驱动,然后安装到microSD卡上,就能从卡上启动Linux或者安卓系统了。
(当然,要是各种驱动的问题都能解决,系统用着感觉好,不妨再改改u-boot并用dd命令把相应的镜像写入到内置存储里面)

1. 提取驱动
驱动提取很好办,在/system/vendor/modules里面,那一堆.ko文件就是。另外可能还需要固件,在/system/vendor/firmware里面。

代码:
cp -r /system/vendor/modules /sdcard/

2. 提取内核
提取内核稍微麻烦一点,首先要获取Android的boot分区镜像,这可以在android下做,或者直接从固件包里提取。前者是通用的,只需要找到你的nand分区里哪个是boot分区就好了。假设boot分区是nandb

代码:
dd if=/dev/nandb of=/sdcard/boot.img

获得boot分区镜像后,还要做的一件事就是分离内核。因为安卓的boot镜像由三部分组成:header,kernel和ramdisk,我们需要的只是kernel。
上面的事情都是安卓下的终端应用里或者用adb进行的操作,下面的必须在电脑上进行操作。
需要下载一个工具:

代码:
http://dl.linux-sunxi.org/users/arete74/tools.tar.gz

解压后:

代码:
cd tool
./split_bootimg.pl ../boot.img

然后你就能看到一个boot.img-kernel的文件,将它转换成可以从卡上引导的镜像:

代码:
mkimage -A arm -O linux -T kernel -C none -a 0x40008000 -e 0x40008000 -n “Linux 2.6” -d boot.img-kernel uImage

注意:
可能一些驱动在ramdisk里面,分离内核之后有个boot.img-ramdisk.gz的文件,两次解压,就可以看到里面有一些安卓启动的脚本,还有一个/system/目录,这个目录下也可能有驱动,如果有就一并提取出来。

最后放上全志系列芯片在SD卡上安装和启动安卓的教程,上面的这个分离安卓内核的工具和过程都来源于此(这个分离的工具是通用的,从ubuntu官方下载的ubuntu touch的各种boot镜像也能用它分离):
http://linux-sunxi.org/Boot_Android_from_SdCard

上一篇
下一篇