『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 28726|回复: 88

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

  [复制链接]

105

主题

2954

帖子

1万

积分

超级版主

智能家居&单板滑雪痴迷爱好者

Rank: 8Rank: 8

积分
12103
金钱
9084
HASS币
460

教程狂人突出贡献

发表于 2022-8-15 10:11:52 | 显示全部楼层 |阅读模式
本帖最后由 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安装使用问题讨论求助咨询。。。


评分

参与人数 4金钱 +47 HASS币 +20 收起 理由
tomjoan + 1 膜拜大神!
dscao + 16 感谢楼主分享!
Roger + 20 + 20 赠人玫瑰,手留余香!
jjcs + 10 在下对你的景仰犹如滔滔长江之水,连绵不绝.

查看全部评分

回复

使用道具 举报

1

主题

64

帖子

910

积分

高级会员

Rank: 4

积分
910
金钱
846
HASS币
0
发表于 2022-8-15 10:30:09 | 显示全部楼层
折腾, 牛
折腾得明白, 大牛
折腾完了无私分享, 超级大牛
回复

使用道具 举报

46

主题

1654

帖子

6676

积分

论坛元老

Rank: 8Rank: 8

积分
6676
金钱
5012
HASS币
40
发表于 2022-8-15 10:35:46 | 显示全部楼层

折腾, 牛
折腾得明白, 大牛
折腾完了无私分享, 超级大牛
折腾精神永存,感恩感谢论坛每一位愿意分享和帮助过我的大佬,论坛有你更精彩
回复

使用道具 举报

70

主题

596

帖子

3409

积分

论坛元老

Rank: 8Rank: 8

积分
3409
金钱
2813
HASS币
0
发表于 2022-8-15 10:50:42 | 显示全部楼层
本帖最后由 lrving163 于 2022-8-15 10:55 编辑

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

使用道具 举报

6

主题

287

帖子

4147

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4147
金钱
3855
HASS币
0
发表于 2022-8-15 13:38:05 | 显示全部楼层
折腾, 牛
折腾得明白, 大牛
折腾完了无私分享, 超级大牛
回复

使用道具 举报

0

主题

608

帖子

2516

积分

金牌会员

Rank: 6Rank: 6

积分
2516
金钱
1908
HASS币
0
发表于 2022-8-15 13:40:54 | 显示全部楼层

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

使用道具 举报

6

主题

170

帖子

2214

积分

金牌会员

Rank: 6Rank: 6

积分
2214
金钱
2044
HASS币
20
发表于 2022-8-15 14:00:22 | 显示全部楼层
dtb 文件哪有比较全的? 原始系统内复制出来的dtb反编译后能不能再编译成armbian适用的版本呢
回复

使用道具 举报

10

主题

1331

帖子

4246

积分

论坛元老

Rank: 8Rank: 8

积分
4246
金钱
2915
HASS币
0
发表于 2022-8-15 14:47:19 | 显示全部楼层
折腾, 牛
折腾得明白, 大牛
折腾完了无私分享, 超级大牛
回复

使用道具 举报

105

主题

2954

帖子

1万

积分

超级版主

智能家居&单板滑雪痴迷爱好者

Rank: 8Rank: 8

积分
12103
金钱
9084
HASS币
460

教程狂人突出贡献

 楼主| 发表于 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被破坏了,开机就会自动进入线刷模式,直接刷即可。
回复

使用道具 举报

80

主题

388

帖子

1680

积分

金牌会员

Rank: 6Rank: 6

积分
1680
金钱
1292
HASS币
0
发表于 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,其实问题也不大。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-23 12:03 , Processed in 0.302281 second(s), 33 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表