水平有限,中间可能有各种错误,欢迎拍砖指正。 大家最关心的一个问题是,平板电脑或手机要是安装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./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:///Boot_Android_from_SdCard |
|