1
mengzx 2017-03-27 07:56:15 +08:00 via Android
可以看看 aokp 这些 rom 使用,如果一定要自己编译我也不知道,就是感觉编译这些是不是太费时间了
|
2
Shura 2017-03-27 08:03:48 +08:00 via Android
麒麟 soc 的手机最好就不要折腾了,官方开源不完整,很难移植的。至于 m7 因为 soc 是骁龙 600 ,相同 soc 的很容易移植的。
|
3
nxn1987 2017-03-27 08:13:39 +08:00 1
移植最大的问题是驱动,官方开源 kernel 但是不开源驱动的,所以基本上无解。
大厂的 SoC 开源相对规范一些,再加上民间大神多,很多坑都有人解决,所以第三方 ROM 比较活跃。 |
4
HackerOO7 2017-03-27 08:18:10 +08:00 via Android
麒麟 CPU ,不用考虑拉,外部连分泄露的代码都没。 HAL 都层搞不了
|
5
paranoiagu 2017-03-27 08:20:12 +08:00 via Android
最大的问题是麒麟似乎没人搞,资料也少。
华为官方有 7.1ROM 吗?有的话,直接用华为自己的内核试试看。 总的来说,不简单。 |
6
phantastar OP @mengzx 嗯嗯谢谢
|
7
crysislinux 2017-03-27 09:31:59 +08:00
不如换个手机算了。。
|
8
phantastar OP @paranoiagu 上面有人提到说驱动不开源。请问按您的意思,是不是驱动可以用华为现成的(或者说制作不含驱动的 rom )
|
9
phantastar OP @nxn1987 我现在在想一个问题:有没有办法将华为官方的驱动合并入 aosp ,还望您给出一些意见
|
10
phantastar OP @Shura 嗯嗯我在考虑联系官方
|
11
phantastar OP @HackerOO7 简直要哭了
|
12
phantastar OP @crysislinux 其实这个问题有点像是:如何为一部国产手机制作 rom (又名:菜鸟的成长)(括弧笑)
|
13
gam2046 2017-03-27 09:45:06 +08:00
个人感觉比较吭的 都是和驱动相关的,比如第三方 ROM 里 人民群众喜闻乐见的相机不能用啦, WiFi 不正常啦之类的。你这直接说不含驱动的 ROM ,那就没啥意义了,手机上所有硬件都不能用,那为啥不去买个功能机算了。至于驱动从官方其他系统系统中移植的可行性不太懂,但是参考 Windows 的情况,可能会出现与系统不适配的情况(类比, XP 的显卡驱动丢到 Win10 上 很可能也是用不了的)。
综上,楼主的华为可能成为学费机,比较切实可行的方案时,出掉手中的华为回口血,然后重新买个自己喜欢的(比如说亲儿子系列) |
14
badec 2017-03-27 09:51:29 +08:00
华为 emui5 已经很贴近原生了,有什么真的很不便的问题吗? lz 的描述只有换一部手机才能解决
|
15
qdk0901 2017-03-27 09:56:18 +08:00
kernel 不升级,一些驱动能重用。
但是原有的 hal 库在新版本上就有可能用不了了 |
16
besto 2017-03-27 10:21:54 +08:00
一台好电脑,最好装 Linux 。
没有底层的库还是不要指望了。 |
17
phantastar OP @gam2046 嗯嗯感谢,我想完美移植,看来难度不小
|
18
ovear 2017-03-27 10:30:05 +08:00 via Android
小版本还好,大版本的系统架构可能都不一样,驱动也有很大几率不通用。)比如说 2.3 到 4.0 的触摸屏驱动,就是完全不同的架构。
更大的问题是,如果驱动是在内核里面的。。。而那个内核又不支持你所需的版本。。那就基本残废了 |
19
d7101120120 2017-03-27 10:34:34 +08:00 via Android
如果是不喜欢 emui 的图标之类的可以装一个 nova launcher
|
20
mozartgho 2017-03-27 11:20:22 +08:00
64 位 Linux , 50G 空闲硬盘是必须的。可以看 CM 的 wiki ,另外需要设备厂商开放 Device Tree ,否则没法适配
|
21
jyf 2017-03-27 11:24:25 +08:00
@phantastar 应该可以的 就我了解 ubuntu phone 底层就用的 android 的那一套 但是内核的模块要直接用估计做的工作要多许多
|
23
shanjinwei 2017-03-27 12:24:19 +08:00 via Android
这个的工作量相当于重新开发
|
24
Cabana 2017-03-27 12:39:24 +08:00 via Android
首先你得找一台编译服务器😂
|
25
kmahyyg 2017-03-27 12:41:50 +08:00 via Android
device tree + vendor files ,基本就这两个
github 搜索 android_device_厂商_设备代号,可以有 device tree 。 The muppets 里集合了大多数厂商的 vendor 文件,仍在 github. |
26
mozartgho 2017-03-27 12:44:52 +08:00
|
27
phantastar OP @ovear 嗯嗯,我私信了一位 XDA 的华为 ROM 作者,希望能得到一些帮助
|
28
phantastar OP @d7101120120 我想完全照着 pixel 的 ROM 来移植,完完全全的原生安卓那种感觉,目前还不考虑换设备这个问题,我想费费脑筋去解决这个的适配问题
|
29
phantastar OP @mozartgho 嗯嗯我去 CM 那边瞅瞅
|
30
phantastar OP @besto 我完成 repo sync 后大概占用 50+G ,我在考虑顺便换硬盘了
|
31
phantastar OP @shanjinwei 感谢,我可能有点初生牛犊不怕虎,想下手试试😊
|
32
phantastar OP @Cabana 笔记本 i5 H 版也可以做 Jack 服务器的吧,谷歌官方对服务器的事儿简直就是一笔带过,我要哭了🌚
|
33
phantastar OP @kmahyyg 嗯嗯我查了一下这个 muppets ,很厉害。但是没有 mate8 ,我用您说的语法查询找到了 mate8 国际版的 vendor 和 kernel 。我在想是否有方法能自己去扒取那些没有现成资料的设备的 tree 还有 vendorfiles
|
34
phantastar OP @mozartgho 本来想买 240G SSD 的😰,你这么说的话这下完蛋了😣
|
35
phantastar OP @badec 嗯,其实我就是自己矫情想搞一搞事情,钻研学习一下😂
|
36
besto 2017-03-27 14:14:55 +08:00
@phantastar 至少编译 4 小时。另外 4G 内存基本一定会有 OOM 的问题。
|
37
phantastar OP @besto 嗯嗯,编译之前请问都存在哪些必要步骤?似乎网上没有太详细的教程
|
38
RobertYang 2017-03-27 14:58:03 +08:00 via Android
@mozartgho 一台机器一个版本 200GB 可用空间完全足够
|
39
RobertYang 2017-03-27 14:59:56 +08:00 via Android
@besto 4 小时够编译两台了,还是笔记本。。。
|
40
besto 2017-03-27 15:03:30 +08:00
@RobertYang 最新 Android ,用笔记本 2 小时能编完?
|
41
RobertYang 2017-03-27 15:05:52 +08:00 via Android
@besto 怎么不能,而且还是用的高通 llvm ,跑的还慢
|
42
besto 2017-03-27 15:11:57 +08:00 1
@phantastar
第一步没有任何难度,拿到 AOSP 之后,先编译那个能在模拟器上跑的,检查 android 的编译环境,该装的装好,内存不够, jack server 大小调调好。先保证默认那个能在模拟器上跑的能搞起来。 第二步就比较麻烦了,假设没有 kernel 和任何厂家 native 的代码,那么最好能拿到 kernel image+dtb 的组合,能 root 现有机器,把所有的 binary 都拿出来,做的好的厂家,所有自己的东西会放 /vendor ,不好的,随便放,那就麻烦了。不管怎么样, hal 层的 so 必须得有尤其是 gralloc ,另外请分析一下 init.xxxx.rc ,看看里面有没有什么必须要启动的 service ,一并移植了。 第三步,是如何烧进去,自己查教程。。。注意分区表 以上只能说有可能起来, wifi/bt 很可能不可用(这些说不定有 firmware 啥的),如果有 key 签名啥的,很可能就是起不来的。 |
43
besto 2017-03-27 15:15:11 +08:00
@RobertYang 32 核 E5-2450 +48G 内存,全 SSD ,编译一遍用时也得 40 分钟,你确定是原始 Android ,干净的还没有 ccache ?
|
44
RobertYang 2017-03-27 15:21:22 +08:00 via Android
@besto make clean 之后 2 小时 12 分钟, lineageos cm14.1 ,可能没清 ccache ,晚上我全清了再试下咯
|
45
xingda920813 2017-03-27 15:26:27 +08:00
@kmahyyg
CyanogenMod, LineageOS 某一款设备的维护者是怎么制作或取得 device, vendor 和 kernel 的? 换句话说, 如果一款设备比较冷门, Github 上搜不到(也没有维护者), 我怎么自己制作 device 和 vendor? |
46
xingda920813 2017-03-27 15:28:37 +08:00
|
47
besto 2017-03-27 15:29:31 +08:00
@RobertYang 我只能说你得笔记本很强大 :-) 当然系统里可能有些精简。 ccache 倒是不会节约太多时间的。
|
48
RobertYang 2017-03-27 15:32:04 +08:00 via Android
@besto i7 6700HQ 在 Win 下面开的 Ubuntu 虚拟机,给分了 8G 内存过去,当然是在 SSD 下面,没你说的那么夸张
|
49
besto 2017-03-27 15:41:35 +08:00 1
@xingda920813 并没有,因为懂这个的,基本都是做 rom 的,或是 vendor 自己的人。
|
50
phantastar OP @besto 这位先生不知道能不能微信或者 telegram 与你联系,您指出了大致方向,不过我觉得有些细碎的东西可能还要与你后续联系。
我微信:jack6551 Telegram:https://t.me/androidopensourceproject 群主是我 |
51
CuminLo 2017-03-27 16:13:53 +08:00
赶紧收藏。
一直想自己移植,但是技术太差。 希望群主能出了教程之类的,让我们小白也搞搞其他机器的移植。 |
52
honeycomb 2017-03-27 16:14:22 +08:00 via Android
@besto 4.3 正式发布的时候,为了开当时还只是隐藏着的 appops 编译过, 4G 内存的虚拟机还勉强够用。
|
54
besto 2017-03-27 16:16:50 +08:00
@phantastar 你可以继续提问,聊天工具上讲实话很难说清楚。说实话坑非常之多,并不是非常推荐自己移植这个。
|
55
uleh 2017-03-27 16:23:43 +08:00
1. 移植驱动
2. 根据硬件不同,部分 HAL 可能需要改 3. 1 和 2 搞定,基本就 OK 了。 Framework 再往上可能会有点小问题,但应该不会很多 |
57
kmahyyg 2017-03-27 17:23:04 +08:00 via Android 1
@besto 膜拜大神
@xingda920813 vendor 的话有个专门的 extract-files.sh 可以提取, tree 来自于 kernel+driver ,这个就只能借助官方开源的部分来自己改。 自己在 16G ram +300gb ssd 的 linode 跑过 rr , ccache 100g , e3-1275 v3 *8 ,耗时 1.5h |
58
kmahyyg 2017-03-27 17:26:31 +08:00 via Android
@besto 搭车问个问题,按照 RR 和 Lineageos+aosp 的 wiki 部署安装编译环境,然后编译 RR 的官方支持机型,私有库齐全,最终提示 build successfully ,但是下载回来的 zip 包里的 system.new.dat 是坏的,这个问题在哪里?
我的编译环境安装脚本:(newbie) https://bitbucket.org/kmahyyg/android-build-env |
59
phantastar OP @besto 好的感谢,我的硬盘被 repo 同步的东西塞满了,这月末薪水下来换上硬盘就干。到时候还要麻烦先生您予以指导。
|
60
phantastar OP @uleh 嗯嗯感谢,我暂时没有了硬盘空间,这段时间要睡饱饱,等待月末搞起😆
|
61
Inkroot 2017-03-27 18:26:59 +08:00
赶紧收藏,自己也想移植 Rom 来着。。。
|
62
paranoiagu 2017-03-27 19:10:44 +08:00 via Android
@phantastar 其实我也不会。驱动肯定是在内核中的。总之我觉得几乎不可能。需要了解的内容太多了。
|
63
paranoiagu 2017-03-27 19:12:22 +08:00 via Android
@mozartgho 不需要 500g , 120g 妥妥的够了。又不是要编译几十个机型。
|
64
feikaras 2017-03-27 20:26:56 +08:00
三个字总结,买手机。
|
65
abmin521 2017-03-27 20:34:50 +08:00 1
我只知道最后一个 HTC 是大部分都开源 kernel 的
PS 根据维基上面说的 5.0/5.0.1/5.0.2(Lollipop)基于 Linux Kernel 3.4.0 但是 htc one x 用了 3.1 的 kernel 也用上了 Android5.1 还是一句话坑多,不是靠这个吃饭的,感觉没必要 |
66
Flygoat 2017-03-27 20:41:38 +08:00 2
解释一下,关于驱动部分, AOSP 也必须使用部分可以从 Stock ROM 提取出的闭源二进制驱动或 Firmware ,位于 AOSP 源码的 vendor 目录下。但大都以库的形式存在,比如 LibRIL.so 这些的。 HAL 层会引用这些库。但是这些库定义的东西目前除了逆向工程和部分厂商开放的文档( Qualcomm 把自家的 RIL 文档全部开放了, Github 里修改过的 kickstart , QCRIL 满天飞)之外没有办法获取。特别是针对这些小众 SoC 。所以,除非获得菊厂的支持,以一己之力搞这个,洗洗睡吧。我在有类似设备有 Qualcomm 文档的情况下花了快半年才给我的三星国内定制版平板上了 AOSP 。
|
67
Flygoat 2017-03-27 20:42:43 +08:00
关于 Kernel 的话 Android 版本间的 Fallback 变化其实不大,照着官方的 Changelist 打打 Patch 就好了。
|
68
Flygoat 2017-03-27 20:53:08 +08:00
另外找了一下麒麟 950 和 balong720 baseband 连公开的 datasheet 都没有。这个难度。。。。。
|
69
phantastar OP @Flygoat 嗯嗯感谢,我还没有放弃。请问您的意思是不是说 aosp 和华为官方 vendor 的库对接需要手动调整?
|
70
Flygoat 2017-03-27 21:10:50 +08:00
@phantastar #69 不是手动调整的问题,是从头开始写一个 HAL 层
|
71
phantastar OP @Flygoat HAL 层重写可以使用 Python 吗?还是强制 Java or 汇编?
|
72
phantastar OP @Flygoat 逆向工程是不是意味着要去读机器码?
|
73
Flygoat 2017-03-27 21:16:57 +08:00
@phantastar #72 意味着很可能需要拆机器找引脚定义读 SPI 。最轻的情况是要去逆向原机器里的二进制。读机器是肯定的。
|
74
fashioncj 2017-03-27 21:21:46 +08:00 2
补充几点, jack-server 4G 内存或者 8G 内存基本都会 oom ,需要调整最大 heap ,最好用全局变量。
默认编译线程是核心数 X2 最好。 repo 下载的时候可以直接取出,不要获取之前的变化。能大幅度减少空间。 vendor 的话用已有固件或者手机, extract 脚本运行就好。 |
75
kokutou 2017-03-27 21:33:05 +08:00
|
76
Flygoat 2017-03-27 21:42:16 +08:00
@phantastar #71 Java 混 C 。。。。。当然估计手机里放个 Python 环境也不是不可以但是怎么 Include 这些库。。。
|
77
phantastar OP @fashioncj 感谢, repo 不要获取之前的变化是不是说 repo sync 加--current-branch 或者应该是什么?
extract 脚本是不是要自己写😂 |
78
phantastar OP @Flygoat 那我去搞定 Java 还有 C 好了😰
|
79
phantastar OP @kokutou 嗯嗯好哒,我去作者咨询一下,十分感谢!
|
80
Flygoat 2017-03-27 22:12:15 +08:00 1
@phantastar #77
直接 repo init 的时候 -b 就好了,刚刚看到有人作了不完美的 CM13 ,应该难度会小很多,主要问题会集中在 RIL 。 |
82
kmahyyg 2017-03-27 22:35:42 +08:00 via Android
@phantastar repo sync 一般默认就行,偶尔需要--no-clone-bundle
|
83
phantastar OP @Flygoat 嗯嗯十分感谢,我心里有点踏实了,后面如果遇到一些零碎问题麻烦还请您多指教😊
|
84
phantastar OP @kmahyyg 嗯嗯谢谢, clone bundle 是做什么的我不知道,我最近一次 repo 加入了这个命令。另外大家可能还在睡觉,上面还有一位叫 besto 的先生也很专业,你可以看看他是否在线
|
85
besto 2017-03-28 10:29:54 +08:00 1
@phantastar Android 标准 hal 层必须是 C/C++,广义 hal 层可以用任何可以跑的语言,前提是搞的定权限问题。
|
86
besto 2017-03-28 10:33:22 +08:00 1
@phantastar AOSP 是开源的。我们的一切假定前提是,没有任何 vendor 的支持(有 datasheet 也没啥意义),那么只要保证 vendor 没有过度修改 AOSP 内和 HAL 对接的相关 code 。
|
87
fashioncj 2017-03-28 10:38:24 +08:00 1
|
89
phantastar OP @besto #85 嗯嗯感谢,权限问题如果解决起来比较难的话,我还是去熟悉一下 C/C++比较明智。
|
90
phantastar OP @besto #86 怨我之前 AOSP 官网看得一知半解,请问您的意思是不是 AOSP 交给 vendor 后他们可以修改和 HAL 对接的相关 code 以适配自己的硬件?
|
92
phantastar OP @fashioncj 十分感谢,我去找一找这个文件
|
93
phantastar OP 刚刚下单了 intel 540s M.2 SSD ,到货后即刻重装 Ubuntu !(我是英特尔 SSD 的死忠粉丝,之前买到一块服务器拆下来的 Intel S3500 480G ,一查居然还有 3 年质保😂)
|
94
besto 2017-03-28 11:59:44 +08:00
@kmahyyg 我这边 vendor 还是可以产生普通的 system.img(Android 7.0) 并没有在 AOSP 里做什么修改,只增加了一些编译脚本和 mk 。这块我不是非常了解,帮你问一下吧。
|
95
besto 2017-03-28 12:06:10 +08:00 1
@phantastar Android 的 code 相对混乱。 Android 其实分为 2 部分, AOSP/GMS 还有 partner 可以拿到的 developer branch 。不和 Google 签订协议,也可以拿到 AOSP 的 code ,你想改啥就该啥。如果和 Google 签订 AOSP 的协议,需要过 CTS 认证(理论上不通过 CTS 认证,并且是 Goolgle 认为你过了,不可以称自己为 Android 设备),严格意义上,不可以改任何 google 的 code ,即使是 BUG ,但厂家仍旧可以通过在编译前打 patch 。再进一步可以签订 GMS 的协议,附加在 AOSP 的协议之上,这个包主要会有 Google Play 等那一堆东西,同时需要过 GTS 的测试。
|
96
besto 2017-03-28 12:14:41 +08:00 1
@kmahyyg 做 OTA 的同事告诉我,默认就有 system.img 那个 system.new.dat 是 block ota 的东西,要么你再看看?
|
97
phantastar OP @besto #95 嗯嗯感谢。我有一问题不解,根据上面诸多内容的汇总,我现在知道移植 AOSP 需要做至少两个工作: 1.提取 vendor 目录中的驱动库。 2.重写 HAL 层。那问题来了,重写 HAL 层所需的软件工具是什么?麒麟官方的 SDK 吗?
|
98
phantastar OP @besto 另外: 1.华为官方开源的安卓 6.0kernel 是不是需要改写(需要什么样的工具😨)?因为我想适配安卓 7.1 。
2.移植驱动的话,又该用什么工具呢? |
99
besto 2017-03-28 15:17:58 +08:00 1
@phantastar 说句不太好听的啊,但凡需要重写 HAL 的,绝对搞不定。所以,官方支持到哪个版本,就扒哪个版本的库,可以碰碰运气能不能用。
|