amlogic-s9xxx-armbian icon indicating copy to clipboard operation
amlogic-s9xxx-armbian copied to clipboard

感谢ophub大佬!分享一些关于晶晨amlogic盒子刷Armbian的奇怪但很可能有用的知识

Open xcray opened this issue 2 years ago • 2 comments

这段时间折腾魔百盒,花了不少时间找各种文章看,也踩了不少坑,感觉有必要总结一下,对于还在迷茫的同学应该可以有些帮助。错误之处请大家指正!

  1. 首先,大写的“乱”字!不但是盒子硬件乱(同一个型号有多个版本而且没有文档说明的硬件)、软件乱(不同的安卓线刷包卡刷包差异很大、armbian版本众多),而且最坑人的是文章乱,很多文章作者自己根本没搞清楚、可能到处找教程各种试偶然刷成功了写个教程,却丢失或隐瞒了重要信息甚至写作时记忆错乱。。。反正是坑人没商量。 最恶心的是大量质量低劣的所谓教程,作者还当作独家秘笈遮遮掩掩的不说,甚至有的还想靠它赚钱。。。

由于乱,所以对于绝大多数想刷机的同学来说也就只能“试”,但是试的过程中如果能加上思考和分析,肯定可以避免一些坑。

  1. 关于镜像,对于同样的armbian系统版本和内核版本的镜像,99%以上的内容都是相同的。区别主要是对于启动的配置信息。所以可以随便下载,并且无论哪个镜像,直接启动安装的成功率都不高,大多数情况下都需要调整设置。甚至用于allwinner、rockchip的镜像,和amlogic的镜像也没有多大区别,因为内核和各种二进制文件对于arm都是通用的(现在主流是64位的是armv8),就像微软的windows可以同时用于intel和amd一样。

  2. 第一个关键点是dtb文件,这东西类似于x86平台上bios(cmos)中的硬件配置信息。这个没选对的话启动成功的可能性都很小。dtb和内核版本相关,一般都是随着内核编译的(或者说内核源码包含dtb的源码)。不过一般都可以跨版本使用,有一定的后向前向兼容性。网上现成的dtb有时候不太好用,所以玩这些东西迟早要学会自己编辑源码自己编译。

  3. 第二个关键,也是最大的坑,就是u-boot。和常见的x86电脑不同,armbian启动靠的就是这个(已经是嵌入式Linux事实上的标准了)。 这东西和内核的关系很密切,而且是整个armbian安装过程中最难最坑人的地方,必须选对才行。 先不展开,记住主要用的较新的可分为两种:完整版(大多数文章作者包括ophub大佬有时不太准确地称之为主线)和不完整版(也叫overload)。 从版本新旧上来说,更正确一点的说法:主线指的是比较新的版本、非主线是很旧的版本(具体分界点在哪儿我也不知道);主线又分为完整版和不完整版(参考那个著名的e900v22c教程)。

  4. 第三个关键,内核。版本众多,更新快。这里分成两大类:

  • 5.10+(也就是5.10及以上的版本,但不包含5.15);现在最新的已经到了5.19.1;
  • 5.9-,也就是5.9及以下版本,包括5.15;现在流行的最低版本是5.4。 安卓也是拿linux改的,但内核版本都比较低,好像没超过4.x? 为啥5.15这么另类?我也不知道,这得问那个有才但脾气不好的Linus。(O大指点,这里的5.15内核原来是f大修改过的,不用新版-主线-uboot就可以启动的)

内核和u-boot的关系,笼统地说,5.10+内核必须用主线uboot引导。换个说法,旧版uboot无法用于引导5.10+内核。反过来,旧版uboot只能用于引导5.9-内核;而主线uboot则可以用于引导4.16+版本的内核(不确定,也许是5.10+)。

  1. armbian能顺利启动,内核和uboot的组合正确是必要条件(当然正确的dtb也是必要条件)。和内核可以适用于大多数arm不同,uboot和具体机型(硬件)又紧密相关,同一个cpu的都很少能互换,甚至两个同型号的盒子都不能通用。

  2. 还得回来说uboot。看过第4点估计就有人有疑问了:既然主线uboot那么好,干脆就只用主线不就好啦?道理上是没错,但前提是你得先能够找到正确的好用的主线uboot! 不像内核是完全开源的,好找,即使找不到逼急了自己编译都行。而uboot则不一样,只有一部分是开源的,晶晨把着很关键的一部分死活不开源(这一点allwinner和rockchip值得表扬)。所以amlogic盒子找到好用的主线uboot,尤其是完整版主线uboot,那么可以说人品爆棚,成功也就剩下具体的安装动作了。 好用的完整版主线u-boot属于可遇而不可求的珍品,除非有大神正好使用和你一样的盒子并且制作了这个珍品,抑或你自己就是大神自己会制作(可别不学好小家子气,放出来让大家共享)。 有这个珍品的情况下,启动过程简洁而迅速:

完整主线uboot=>任意4.16+内核

没有好用的完整版主线u-boot的情况下,写入emmc时不写bootloader就成了明智的选择(无奈的选择)。 但是5.10+内核又必须由主线uboot引导,怎么办?答案就是overload机制,就是把不完整版主线uboot文件拷贝到boot分区,改名为u-boot.ext(U盘)或u-boot.emmc(emmc)。

启动过程:

安卓uboot=>不完整版主线uboot(又叫overload)=>5.10+内核; 5.10+内核必须由主线uboot引导;有的uboot搭配高版本内核有开机拿不到IP的问题;

安卓uboot=>5.9-内核(包括5.15); 有时会不认网卡、内存只能认一半(好像5.15.60解决了这一顽疾);如果没有问题,这应该是没有主线(无论完整版还是不完整版)的情况下的最佳方案。 如果有问题,那么解决方法就是加上overload,即:

安卓uboot=>不完整版主线uboot(又叫overload)=>4.16+~5.9-(含5.15)内核;

换个角度:完整版主线uboot是利用dd命令写入到emmc的bootloader区域(开头部分)的;而不完整版主线uboot是存放在boot分区文件系统里的u-boot.emmc(emmc)或u-boot.ext(U盘)的、用cp/mv命令拷贝改名的文件。 什么?文件也可以用dd命令?您是大神!不过我得问问到底是啥好吃的让您给撑成这样?

  1. 理论说完了,具体该怎么干呢?我的建议是只能试着挑选,过程中如果有TTL会更加直观、高效:
  • 先拿U盘试,用5.15内核,不要overload,通过修改uEnv.txt然后重启挨个试出最合适的dtb。
  • 确定合适dtb后,再逐个测试uboot; 把候选uboot逐个改名为u-boot.ext、重启,观察TTL。直到找出启动最顺畅最没问题的那个。 这一步可以用5.10+内核,也可以用5.9-内核。
  • 如果没有合适的主线u-boot,那就老老实实用5.9/5.15内核吧。
  • 如果现成的不合适,编辑/etc/amlogic_model_database.conf,加一行,把选出来的dtb和不完整版主线uboot写上; 完整版那儿写NA。
  • 写入emmc,选自己知道正确的编号。因为指明了没有完整版uboot,所以不会写入bootloader。不放心的话加no。
  • 如果前面发现了不认网卡、内存少一半的情况(5.15.60好像没这个问题了),在emmc的启动分区添加u-boot.emmc(overload)。
  1. 完整版主线uboot怎么试? 只能冒着变砖的风险写入emmc的bootloader区域,把emmc内原有的版本较低的安卓uboot覆盖掉。 不成功便成仁,大不了重新线刷救砖而已。

xcray avatar Aug 15 '22 02:08 xcray

https://github.com/ophub/amlogic-s9xxx-armbian/blob/0a26ba12968ec675f7556c4cd0e703f0e4e15db5/build-armbian/common-files/rootfs/usr/sbin/armbian-install#L90-L93

5.10及以后的内核上游做了调整,和之前的引导方式不同了。5.15原版也一样,f大加了TEXT_OFFSET补丁,采用了原来的方式。

u-boot在5.4/5.15下不需要,对于安装列表里己知的设备自己复制也可以,但未知设备会因为选择错误而无法启动。(仅限于复制,不要改名,改了名字就没这个文件了,在更新5.10/5.18/5.19等内核时会因为缺失而无法生成u-boot.emmc,无法启动)

ophub avatar Aug 15 '22 02:08 ophub

哦,5.15原来是f大修改过的,怪我之前不了解。

另外,看来那个e900v22c教程属实该更新了

xcray avatar Aug 15 '22 02:08 xcray

最可恨的就是有些不完整版主线uboot(overload)在u盘上启动没问题,写到emmc就起不来!如果用ttl观察,很可能是不认emmc。 这个问题的可恨之处在于无法事先发现。 如果出现了这种情况,也不用重新线刷,把含有系统的u盘插上重新开机,还是可以起来的,甚至很可能起来后根系统还是emmc。这时候把内核切换到5.9-就可以了。 即便起来后根系统不是emmc而是u盘,也可以修复emmc的boot分区(还是换内核),而不用再完整地写一遍emmc。头和模块啥时候替换都行,或者重启后再切换一下内核。

xcray avatar Aug 19 '22 14:08 xcray