XCray 发表于 2022-8-15 10:11:52

【经验总结】简单粗暴:晶晨amlogic盒子刷Armbian最省心的姿势

本帖最后由 XCray 于 2022-9-20 07:24 编辑

整理提纯,注意这不是给电脑白痴的操作指导,而是一个思路,其中有任何不明白的必须先搞明白再说:0. 认识自己的硬件,起码要搞清楚soc型号,cpu、gpu分别是啥;安卓底包最好是有adb、root;搞清楚自己的盒子如何从U盘启动(不是安卓的卡刷);1. 从ophub仓库下载最贴近自己硬件的镜像,主要依据就是soc;选择最新的5.15内核的镜像(其它镜像等自己玩明白了再说);2. 将镜像烧写至U盘,推荐带独立供电的移动硬盘、硬盘座,易驱线比较容易出问题不推荐;烧写工具推荐rufus;编辑boot分区下的uEnv.txt文件,选择合适的dtb(不知道哪个合适就通过编辑这个文件逐次重启测试);3. 从U盘启动,测试出最适合自己盒子的dtb,标准是启动顺畅无报错或很少报错、不能有kernel panic这种严重错误。对于s905l3a、s905x2、s905y2这几种soc,建议先试u200那个,其次e900v22c,然后是其它g12a。free命令查看内存是否正确识别,如果只认出1G或一半,说明dtb有问题,换其它的(镜像里的或网上找,我自己也上传过优化版的);ifconfig命令查看网络是否正常,很多盒子都会出现开机网不通必须拔插网线的问题,已经有解决方案,找我的帖子看;有的盒子上单靠修改dtb无法解决网络问题,比如我手上的m401a就是这样,必须再加上合适的u-boot做chainload(ophub用的是overload一词)。至于哪个u-boot合适,只能自己试,把相应的u-boot**.bin文件复制为u-boot.ext、重启。4. 确定最合适的dtb和u-boot overload(chainload)之后,先不要急于写入emmc。在U盘上进行必要的修改,先打造一个U盘启动的基本无问题的系统。 - 回到安卓系统,搞明白安卓的分区布局(方法https://github.com/ophub/amlogic-s9xxx-armbian/issues/517)。如果这个没搞对,写入emmc大概率会出现各种奇怪问题,系统启动运行稳定性很差。 - 修改/usr/sbin/armbian-install脚本(还是参考上面那个链接)以匹配安卓分区布局,主要是避开必须保留的分区(这些分区被破坏将影响正常启动稳定运行); - 内存、网络问题已排除;5. 修改/etc/amlogic_model_database.conf、/etc/ophub-release文件,指定正确的dtb和overload u-boot;在这俩文件中去掉mainline u-boot或者armbian-install运行时后面加no参数写入emmc,避免写入bootloader;(也可以都做)6. 执行poweroff、关电、拔U盘、重新开机。其它的慢慢玩吧。~~~~~~~~~~~~~基础欠缺的就不要玩了,这东西不适合你,除了问题你也不知道怎么判断,甚至求助你都不知道怎么把问题说清楚!我从2022-07-21至今发的几个相关帖子都值得仔细阅读,包括回复。以下原帖内容为细节:这段时间折腾魔百盒,花了不少时间找各种文章看,也踩了不少坑,感觉有必要总结一下,对于还在迷茫的同学应该可以有些帮助。错误之处请大家指正!
-0- 首先,大写的“乱”字!不但是盒子硬件乱(同一个型号有多个版本而且没有文档说明的硬件)、软件乱(不同的安卓线刷包卡刷包差异很大、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,armbian官方论坛的英文帖子用的是更为准确的chainload一词)。从版本新旧上来说,更正确一点的说法:主线指的是比较新的版本、非主线是很旧的版本(具体分界点在哪儿我也不知道);主线又分为完整版和不完整版(参考那个著名的e900v22c教程)。
-4- 第三个关键,内核。版本众多,更新快。这里分成两大类:
[*]5.10+(也就是5.10及以上的版本,但不包含5.15);现在最新的已经到了5.19.1;
[*]5.9-,也就是5.9及以下版本,包括5.15;现在流行的最低版本是5.4。
安卓也是拿linux改的,但内核版本都比较低,好像没超过4.x?
为啥5.15这么另类?ophub大佬澄清:这套armbian里的5.15内核是f大专门修改过的,打了text_offset,目的就是和5.4一样不需要主线uboot也可以启动(那个教程里的第3种启动方式)。
内核和u-boot的关系,笼统地说,5.10+内核必须用主线uboot引导。换个说法,旧版uboot无法用于引导5.10+内核。反过来,旧版uboot只能用于引导5.9-内核;而主线uboot则可以用于引导4.16+版本的内核。
-5- armbian能顺利启动,内核和uboot的组合正确是必要条件(当然正确的dtb也是必要条件)。和内核可以适用于大多数arm不同,uboot和具体机型(硬件)又紧密相关,同一个cpu的都很少能互换,甚至两个同型号的盒子都不能通用。
-6- 还得回来说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命令?您是大神!不过我得问问到底是啥好吃的让您给撑成这样?
-7- 理论说完了,具体该怎么干呢?我的建议是只能试着挑选,过程中如果有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)。

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

-8- 完整版主线uboot怎么试?
只能冒着变砖的风险写入emmc的bootloader区域,把emmc内原有的版本较低的安卓uboot覆盖掉。
不成功便成仁,大不了重新线刷救砖而已。

另:本贴下欢迎各种armbian安装使用问题讨论求助咨询。。。


ericinbj 发表于 2022-8-15 10:30:09

折腾, 牛
折腾得明白, 大牛
折腾完了无私分享, 超级大牛

jjcs 发表于 2022-8-15 10:35:46


折腾, 牛
折腾得明白, 大牛
折腾完了无私分享, 超级大牛

lrving163 发表于 2022-8-15 10:50:42

本帖最后由 lrving163 于 2022-8-15 10:55 编辑

的确很不错的文章。也很热心的人。支持下。前些时间看了你的文章开始折腾点时间,发现不是cpu一样就可以,加上我的版本也是最新的多2+8,就算成功也没什么用。也尽管我不怕刷成砖(砖了就换,大把),现在直接刷成免费的盒子使用,速度也可以。

Roger 发表于 2022-8-15 13:38:05

折腾, 牛
折腾得明白, 大牛
折腾完了无私分享, 超级大牛

Ari 发表于 2022-8-15 13:40:54


折腾, 牛
折腾得明白, 大牛
折腾完了无私分享, 超级大牛

linoul 发表于 2022-8-15 14:00:22

dtb 文件哪有比较全的? 原始系统内复制出来的dtb反编译后能不能再编译成armbian适用的版本呢

隔壁的王叔叔 发表于 2022-8-15 14:47:19

折腾, 牛
折腾得明白, 大牛
折腾完了无私分享, 超级大牛

XCray 发表于 2022-8-15 14:51:03

本帖最后由 XCray 于 2022-9-22 09:17 编辑

linoul 发表于 2022-8-15 14:00
dtb 文件哪有比较全的? 原始系统内复制出来的dtb反编译后能不能再编译成armbian适用的版本呢 ...
内核升级包、绝大多数armbian镜像里都有大量的dtb可供选择。内核源码包里有相应的dtb源码dts。

原始系统?你说的是安卓吧?安卓的dtb肯定不能拿到armbian直接用,反编译后直接再编译估计也会有问题(我没这么尝试过),但是可以参考反编译安卓dtb的结果自己编辑dts源码后编译使用。
~~~~~~~~~~
顺便说个没人说过的秘笈:
有些盒子很难进入线刷模式、短接也大不好使。但是,如果bootloader被破坏了,开机就会自动进入线刷模式,直接刷即可。

ciasdmxhxjjpd@c 发表于 2022-8-15 16:41:25

这折腾的有点累啊!arm64 内核就选 5.4 吧,又不是不能用?省的折腾。内核越高,系统越卡吧?
我目前用的是 5.4.170,感觉很顺畅。https://github.com/0neday/Phicomm-N1-pure-openwrt

另,dtb文件,不像内核那样还有 vermagic 限制,同一设备,不同内核,基本上都是通用的。

u-boot, 我也想过要自己编译,奈何,找不到源码,用官方自带的u-boot,其实问题也不大。

页: [1] 2 3 4 5 6 7 8 9
查看完整版本: 【经验总结】简单粗暴:晶晨amlogic盒子刷Armbian最省心的姿势