水平有限,中间可能有各类错误,欢迎指正见谅。
你们最关心的一个问题是,平板笔记本或手机要是安装Linux,驱动的问题如何解决?我们晓得Linux的驱动是要加载在内核里的,但是驱动和内核要匹配才会加载。倘若我们能提取安卓的Linux内核和驱动模块如何安装linux,它们肯定是匹配的,为何不能用于其它Linux系统呢?
于是我就去试了试,结果发觉是可以用的。之前自己直接编译的触摸屏驱动用不了,声音、wifi、键鼠、屏幕休眠都正常linux 驱动sd卡源码下载,视频也可以软解。这样,自己不用编译驱动和内核,我们只是提取内核和驱动,之后安装到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
ddif=/dev/nandbof=/sdcard/boot.img
3.分离内核
获得boot分区镜像后,还要做的一件事就是分离内核。由于安卓的boot镜像由三部份组成:header,kernel和ramdisk,我们须要的只是kernel。
里面的事情都是安卓下的终端应用里或则用adb进行的操作,下边的必须在笔记本上进行操作。须要下载一个工具:
解压后:
cdtool
./split_bootimg.pl../boot.img
之后你还能看见一个boot.img-kernel的文件,将它转换成可以从卡上引导的镜像:
mkimage-Aarm-Olinux-Tkernel-Cnone-a0xe0xn"Linux2.6"-dboot.img-kerneluImage
注意:
可能一些驱动在ramdisk上面,分离内核以后有个boot.img-ramdisk.gz的文件,两次解压,就可以看见上面有一些安卓启动的脚本,还有一个/system/目录,这个目录下也可能有驱动,假如有就一并提取下来。
最后放上全志系列芯片在SD卡上安装和启动安卓的教程,里面的这个分离安卓内核的工具和过程都来始于此(这个分离的工具是通用的,从ubuntu官方下载的ubuntutouch的各类boot镜像也能用它分离):
4.在linux中的使用
提取完内核和驱动,并且如何来用它们呢?
4.1有源代码的情况
我是在有相应的源码并且源码上面有大部份驱动的情况下使用的。自行编译后的内核和模块才能启动SD卡上的系统,步入Linux桌面,并且触摸屏用不了。
这样的话,我直接替换掉原先SD卡上的内核linux 驱动sd卡源码下载,把/lib/modules/下编译的驱动模块目录拷一份,重新命名为安卓的Linux内核的版本名,再把相应的驱动模块用安卓下获得的模块替换掉。这样做完后,还要在/etc/modules上面调整好启动时须要加载的模块,这个直接在安卓下lsmod,把必要的模块都加上就可以了。最后启动SD卡上的Linux桌面,哈哈手机linux操作系统,触摸屏驱动就可以使用了。
4.2无源代码的情况
假如没有源代码,如何办?
倘若从SD卡启动Linux系统,能正常使用lcd和鼠标键盘,就可以自动插入驱动模块来解决:
insmod安卓模块目录/模块名.ko
然而关键的部份,例如说lcd显示的驱动,不能在启动的时侯就加载,这个就比较麻烦一点。
我没有碰到过,而且假如在启动脚本里,例如rc.local,用insmod命令挂载,应该是可以实现的。
Linux的内核的modules手动加载虽然限制好多,总之你能看见它在“/lib/modules/版本号”目录下有一堆module.*的文件,哪些modules.order、modules.dep、modules.builtin啦,它们定义模块的启动次序、依赖关系、是不是内建在内核里等。大约是为安全吧。假如在能保证安全的前提下解除这种限制,以insmod的形式实现安卓模块的加载,那就哪些问题都没有了!
刚听到原先安卓的启动过程就完全是用insmod加载驱动的。
5.使用方式总结
建立一个可从平板启动的microSD卡,替换内核而且自己在启动脚本insmod各个驱动。
问题:
1.启动过程稍有变慢。(不排除内核和模块编译优化的差别,我用linaro那种配置文件编译下来的各个模块都比安卓下的模块要小好多。);
2.外置的nand读不了;
3.[已解决]网路问题,必须是root账户能够访问网路。这是安卓的内核在用户权限上的限制,根据下边方式做完重启就可以解决:
之前声音、视频哪些能用,可能是由于linaro这个镜像原本就把linaro这个用户添加到了相应的用户组。
主要待解决的事项:背光色温调节。