当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 16 篇帖子 ]  前往页数 1, 2  下一页
作者 内容
1 楼 
 文章标题 : 提取安卓的Linux内核和驱动
帖子发表于 : 2013-10-25 0:42 

注册: 2008-09-12 12:32
帖子: 261
送出感谢: 2
接收感谢: 13
水平有限,中间可能有各种错误,欢迎拍砖指正。

大家最关心的一个问题是,平板电脑或手机要是安装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


最后由 felonwan 编辑于 2013-10-29 22:08,总共编辑了 10 次

页首
 用户资料  
 
2 楼 
 文章标题 : Re: 提取安卓Linux内核和驱动
帖子发表于 : 2013-10-25 0:42 

注册: 2008-09-12 12:32
帖子: 261
送出感谢: 2
接收感谢: 13
提取完内核和驱动,但是怎么来用它们呢?

有源代码的情况

我是在有相应的源码而且源码里面有大部分驱动的情况下使用的。自行编译后的内核和模块就能启动SD卡上的系统,进入Linux桌面,但是触摸屏用不了。
这样的话,我直接替换掉原来SD卡上的内核,把/lib/modules/下编译的驱动模块目录拷一份,重新命名为安卓的Linux内核的版本名,再把相应的驱动模块用安卓下获得的模块替换掉。这样做完后,还要在/etc/modules里面调整好启动时需要加载的模块,这个直接在安卓下lsmod,把必要的模块都加上就可以了。最后启动SD卡上的Linux桌面,哈哈,触摸屏驱动就可以使用了。


如果没有源代码,怎么办?

如果从SD卡启动Linux系统,能正常使用lcd和键盘鼠标,就可以手动插入驱动模块来解决:
代码:
insmod 安卓模块目录/模块名.ko


但是关键的部分,比如说lcd显示的驱动,不能在启动的时候就加载,这个就比较麻烦一点。
我没有遇到过,但是如果在启动脚本里,比如rc.local,用insmod命令挂载,应当是可以实现的。

Linux的内核的modules自动加载似乎限制很多,反正你能看到它在“/lib/modules/版本号”目录下有一堆module.*的文件,什么modules.order、modules.dep、modules.builtin啦,它们定义模块的启动顺序、依赖关系、是不是内建在内核里等。大概是为安全吧。如果在能保证安全的前提下解除这些限制,以insmod的方式实现安卓模块的加载,那就什么问题都没有了!

:em05 刚看到原来安卓的启动过程就完全是用insmod加载驱动的。


使用方法总结
构建一个可从平板启动的microSD卡,替换内核并且自己在启动脚本insmod各个驱动。



问题:
1. 启动过程稍有变慢。(不排除内核和模块编译优化的差异,我用linaro那个配置文件编译出来的各个模块都比安卓下的模块要小很多。);
2. 内置的nand读不了;
3. [已解决] 网络问题,必须是root帐户才能访问网络。这是安卓的内核在用户权限上的限制,按照下面方法做完重启就可以解决:
代码:
http://archlinuxarm.org/forum/viewtopic.php?f=9&t=4611

之前声音、视频什么能用,可能是因为linaro这个镜像本来就把linaro这个用户添加到了相应的用户组。



主要待解决的事项:
背光亮度调节。


最后由 felonwan 编辑于 2013-10-29 22:11,总共编辑了 8 次

页首
 用户资料  
 
3 楼 
 文章标题 : Re: 提取安卓的Linux内核和驱动
帖子发表于 : 2013-10-25 13:04 
头像

注册: 2008-04-26 12:41
帖子: 11001
送出感谢: 11
接收感谢: 38
直接提取就可以用? :em09


_________________
[新手必读]wubi安装常见问题(FAQ)
[分享]装双系统的同学必看——Windows与Linux系统共享交换分区的方法
kde下唯美的暗黑内透主题(无需编译)
无穷老机上的Trinity Desktop Environment


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 提取安卓的Linux内核和驱动
帖子发表于 : 2013-10-25 13:17 

注册: 2008-09-12 12:32
帖子: 261
送出感谢: 2
接收感谢: 13
photor 写道:
直接提取就可以用? :em09


可以的,我的能用。
内核替换为提取出来的内核,那么驱动采用“insmod 驱动模块名”的方式加载就可以用了。


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 提取安卓的Linux内核和驱动
帖子发表于 : 2013-10-29 20:27 

注册: 2013-10-10 0:03
帖子: 8
系统: ubuntu1204
送出感谢: 0 次
接收感谢: 0 次
楼主,为啥我的安卓手机系统/system/vendor下,没有modules文件,还有firmware文件也没有


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 提取安卓的Linux内核和驱动
帖子发表于 : 2013-10-29 21:49 

注册: 2008-09-12 12:32
帖子: 261
送出感谢: 2
接收感谢: 13
adqiy 写道:
楼主,为啥我的安卓手机系统/system/vendor下,没有modules文件,还有firmware文件也没有


哈哈,你手机是啥的?

如果不在这里面,大概就在安卓的Linux内核或ramdisk镜像里了。
安卓内核里的驱动你就不用管它,启动系统里自己就加载了。
在ramdisk镜像里面也有一个/system/vendor目录,里面可能有放驱动。


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 提取安卓的Linux内核和驱动
帖子发表于 : 2013-10-31 17:19 

注册: 2013-10-10 0:03
帖子: 8
系统: ubuntu1204
送出感谢: 0 次
接收感谢: 0 次
felonwan 写道:
adqiy 写道:
楼主,为啥我的安卓手机系统/system/vendor下,没有modules文件,还有firmware文件也没有


哈哈,你手机是啥的?

如果不在这里面,大概就在安卓的Linux内核或ramdisk镜像里了。
安卓内核里的驱动你就不用管它,启动系统里自己就加载了。
在ramdisk镜像里面也有一个/system/vendor目录,里面可能有放驱动。

哦……我的是华为8813q……那我这镜像里找找……谢谢……有不懂的再问你 :em06


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 提取安卓的Linux内核和驱动
帖子发表于 : 2014-09-19 23:20 
头像

注册: 2012-07-17 18:12
帖子: 50
系统: XP + ubutntu12.4
送出感谢: 7
接收感谢: 0 次
http://www.emui.com/plugin.php?id=hwdow ... ail&mid=32
是华为荣耀3c 联通版,官方给了源代码,您看看这是啥东西?我可以下载android L的源码一起编译固件吗?
鄙人小白,正在linux 学习中


页首
 用户资料  
 
9 楼 
 文章标题 : Re: 提取安卓的Linux内核和驱动
帖子发表于 : 2014-10-01 15:05 

注册: 2008-09-12 12:32
帖子: 261
送出感谢: 2
接收感谢: 13
nokia5320 写道:
http://www.emui.com/plugin.php?id=hwdownload&mod=detail&mid=32
是华为荣耀3c 联通版,官方给了源代码,您看看这是啥东西?我可以下载android L的源码一起编译固件吗?
鄙人小白,正在linux 学习中


版本: H30-U10,JellyBean,kernel-3.4.5

应该是内核源码吧,能不能一起编我不知道,你可以试试。


页首
 用户资料  
 
10 楼 
 文章标题 : Re: 提取安卓的Linux内核和驱动
帖子发表于 : 2015-07-06 21:52 

注册: 2015-07-06 21:07
帖子: 1
系统: ubuntu15.04
送出感谢: 0 次
接收感谢: 0 次
楼至我有一个问题,我的手机F160硬件配置只有屏幕材质与F260不同,cpu都是高通8960 显卡也一样,,我刷了260的4cm11发现屏幕在显示开机动画前黑屏,但是有震动有声音,我想可能是显示驱动问题 ,所以现在我想移植f260 的cm12,有内核源码,该如何修改,如何配置 ?也有4.1的官方源码。
谢谢,如果不嫌能不能告诉你的联系方式或加QQ1135799109 :em01


页首
 用户资料  
 
11 楼 
 文章标题 : Re: 提取安卓的Linux内核和驱动
帖子发表于 : 2015-10-25 12:12 

注册: 2009-10-11 16:51
帖子: 1
送出感谢: 0 次
接收感谢: 0 次
felonwan,
请问你是如何制作SD 卡启动的?
我看了全志的链接,分区和bootloader弄不成,是否可以写个详细点的制作启动盘的教程

谢谢


页首
 用户资料  
 
12 楼 
 文章标题 : Re: 提取安卓的Linux内核和驱动
帖子发表于 : 2016-05-16 16:02 

注册: 2016-04-19 21:36
帖子: 2
系统: win10
送出感谢: 0 次
接收感谢: 0 次
楼主能否写个

nVidia Shield Android TV 装UBUNTU的教程,在外网看了个没看明白,http://forum.xda-developers.com/shield-tv/general/ubuntu-utopic-nvidia-shield-tv-t3150352


页首
 用户资料  
 
13 楼 
 文章标题 : Re: 提取安卓的Linux内核和驱动
帖子发表于 : 2016-05-24 14:57 

注册: 2015-07-11 17:02
帖子: 13
系统: ubuntu1404
送出感谢: 0 次
接收感谢: 1
确实,android也是linux,驱动的话,如果芯片都是同系列的,那直接提取ko文件是可以的,但是不同的内核版本有可能出现不兼容的情况,最好还是直接用源码编译的驱动最好。PS:提取so库不错,编程用的


_________________
just for fun


页首
 用户资料  
 
14 楼 
 文章标题 : Re: 提取安卓的Linux内核和驱动
帖子发表于 : 2016-11-02 20:54 

注册: 2016-09-07 15:53
帖子: 3
系统: win7
送出感谢: 0 次
接收感谢: 0 次
felonwan, 你好,我正好有这个需求,可以留个联系方式么?QQ48176827


页首
 用户资料  
 
15 楼 
 文章标题 : Re: 提取安卓的Linux内核和驱动
帖子发表于 : 2016-11-04 23:00 
头像

注册: 2007-03-02 17:36
帖子: 7290
送出感谢: 3
接收感谢: 101
Mark之~


_________________
虽然世上没有完美的东西,但这并不影响我们追求完美,因为只有偏执狂才TMD能成功。
10.04新手入门——笨兔兔讲述自己的故事


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 16 篇帖子 ]  前往页数 1, 2  下一页

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译