大华乐橙sn1(海思hi3798c)刷机

2,474次阅读
没有评论

共计 4774 个字符,预计需要花费 12 分钟才能阅读完成。

简介

乐橙 sn1 不是什么矿机,配置如下:

  • CPU: hi3798cv200 四核 A53
  • RAM: 2G DDR3
  • eMMC: 4G EMMC5.0
  • 网络:RTL8211F 千兆 phy
  • 外设:原生 SATA+USB3.0、UHS SD 卡槽、QCA9377 SDIO 双频网卡、HDMI、ALC5662 IIS codec,四个 LED 灯,板上还有一个 I2C 的 RTC 时钟

拆机图详见:https://www.mydigit.cn/forum.php?mod=viewthread&tid=139874

Linaro 与海思推出的 96boards-poplar 开发板同样采用 hi3798c 方案,而且海思已经将此 SoC 的部分驱动代码提交给 Linux 主线内核,所以 sn1 可以使用这两种内核。

poplar 提供的内核版本是 4.9,带有海思多媒体部分以及 Mali GPU 的驱动,不过由于缺乏相关开发资料,并且如果用作 NAS 或者 Linux SBC 的话也不需要这部分功能,因此推荐使用 5.4 主线内核,在 build-imou-sn1 里面 release 的固件也都是 5.4 内核的。

对于上述两种内核,我从海思的另一份 3.18 安卓内核中移植了 SATA 寄存器配置的相关代码,现在可以在以上两种内核中使用原生 SATA。

ath10k 开源驱动目前对 SDIO 接口的 QCA9377 支持有限,存在问题,暂时不能驱动。
5.10 主线内核已经可以正常使用 QCA9377 无线网卡,目前的支持情况如下表:

内核类型 SATA/USB3.0 GPU 多媒体(VPU、FB、AIAO 等) QCA9377(WiFi)
poplar-4.9 支持 支持 支持(无开发资料) 不支持
mainline-5.10 支持 暂不支持 不支持 支持

现在已经适配了 Ubuntu、Debian 以及 Archlinuxarm,机器的用途是 NAS 或 Linux SBC,去除了 GPU 和多媒体部分的驱动。如果需要做电视盒子或者播放器的话的请自行研究安卓固件。


刷机步骤

  • 准备工作:需要接上 TTL 接口。可以手工焊接,或者用 1.25mm 的 4p 端子线(可以去 X 宝的优信电子买,运费便宜)。
    串口波特率为 115200
大华乐橙 sn1(海思 hi3798c)刷机

TTL

  1. 找一个 4G 以上的 U 盘,格式化成 FAT32 文件系统,需要在 Windows 里格式化,并且将分配单元大小设置成 8192 字节
大华乐橙 sn1(海思 hi3798c)刷机

FAT32

  1. 如果需要备份原厂固件,先按 恩山 的教程刷入安卓 root 包,然后插上 U 盘,设法进入控制台(可以接上 TTL 串口或者使用安卓虚拟终端),用 dd 将 emmc 的全部内容备份到 U 盘:
    如果不需要备份,那么可以跳过这一步

dd if=/dev/mmcblk0 of=<U 盘挂载点 >/emmc.dd bs=1M conv=fsync
  1. 下载预编译的 bootloader:https://github.com/hanwckf/bl-hi3798c/releases/latest
  2. 解压 bl-release.tar.xz,将fastboot.binl-loader.bin放进 U 盘的根目录
  3. 将板子关机,把 U 盘插到 USB2.0 接口上,接上 TTL 串口,按住 LED 灯旁边的微动开关后接上电源
  4. 上电后,bootrom 会尝试从 U 盘读取加载 fastboot.bin,在倒计时结束前按下任意键终止启动,一切顺利的话会成功进入 u -boot 控制台,TTL 输出如下:
    注意:bootrom 会挑 U 盘,如果你的 U 盘不认的话请换一个

Bootrom start
Boot Media: eMMC

Entry usb bootstrap

Usb disk(1):
Decrypt auxiliary code ...OK

lsadc voltage min: 000000FE, max: 000000FF, aver: 000000FE, index: 00000000

Entry boot auxiliary code

Auxiliary code - v1.00
DDR code - V1.1.2 20160205
Build: Mar 24 2016 - 17:09:44

Reg Version:  v1.5.1\
Reg Time:     2017/03/11 14:01:21
Reg Name:     hi3798cv2dmb_hi3798cv200_DDR3-1866_2GB_8bitx4_4layers.reg

Boot auxiliary code success
Bootrom success

LOADER:  Built 2020/04/18 21:15:00+0800 Commit-id 0e5acec1
LOADER:  Switched to aarch64 mode
LOADER:  Entering ARM TRUSTED FIRMWARE
LOADER:  CPU0 executes at 0x0200e000

NOTICE:  Booting Trusted Firmware
NOTICE:  BL1: v2.2():0e5acec1
NOTICE:  BL1: Built : 21:14:56, Apr 18 2020
NOTICE:  BL1: Booting BL2
NOTICE:  BL2: v2.2():0e5acec1
NOTICE:  BL2: Built : 21:14:58, Apr 18 2020
NOTICE:  BL1: Booting BL31
NOTICE:  BL31: v2.2():0e5acec1
NOTICE:  BL31: Built : 21:15:00, Apr 18 2020


U-Boot 2018.01-rc2 (Apr 18 2020 - 21:14:39 +0800)poplar

Model: HiSilicon Poplar Development Board
BOARD: Hisilicon HI3798cv200 Poplar
DRAM:  1.9 GiB
MMC:   Hisilicon DWMMC: 0
In:    serial_pl01x
Out:   serial_pl01x
Err:   serial_pl01x
Net:   Net:  configured
No such device: mdio0
No such device: mdio0
No such device: mdio1
gmac1
Hit any key to stop autoboot:  0 
poplar# 
  1. 在 U -boot 控制台中依次输入以下命令,将 l-loader.bin 写进 emmc 中:

usb start
fatload usb 0:1 0x30000000 l-loader.bin
mmc write 0x30000200 0x1 0xf7f

预期得到的输出:

poplar# usb start
starting USB...
USB0:   USB EHCI 1.00
scanning bus 0 for devices... 2 USB Device(s) found
       scanning usb for storage devices... 1 Storage Device(s) found
       scanning usb for ethernet devices... 0 Ethernet Device(s) found
poplar# fatload usb 0:1 0x30000000 l-loader.bin
reading l-loader.bin
2031616 bytes read in 66 ms (29.4 MiB/s)
poplar# mmc write 0x30000200 0x1 0xf7f
MMC write: dev # 0, block # 1, count 3967 ... 3967 blocks written: OK
  1. 输入 reset 复位,这次不要按住微动开关。在倒计时结束前按任意键再次进入 u -boot 控制台,此时进入的是 emmc 里面的 u -boot
  2. 输入以下命令恢复默认环境变量:

env default -a
saveenv
  1. u-boot 部署完成,直接断电
  2. build-imou-sn1 下载你喜欢的 Linux 发行版,使用 balenaEtcher 或其它工具写入 U 盘
  3. 板子插好网线,U 盘插入 USB2.0 接口后上电启动。u-boot 会首先尝试从 U 盘启动进入恢复系统,目前使用的恢复系统均为 alpine
  4. 通过 ssh 或者 TTL 串口登陆 alpine 恢复系统。默认主机名是imou-sn1,root 密码是admin

ssh root@imou-sn1
  1. 在 alpine 恢复系统中执行 emmc-install.sh,将固件写入 emmc
    刷写过程中,硬盘灯会变成红色,刷写完成后变为白色

imou-sn1:~# emmc-install.sh 
flash emmc mbr...
1+0 records in
1+0 records out
512 bytes copied, 0.00471775 s, 109 kB/s
flash emmc ext4 fs...
 848MiB 0:00:39 [21.5MiB/s] [==========================>] 100%            
0+6782 records in
0+6782 records out
889192448 bytes (889 MB, 848 MiB) copied, 62.0352 s, 14.3 MB/s
flash done, please poweroff now then unplug USB drive!
  1. 写入完成后,执行 poweroff 将机器关机,拔出 U 盘后再上电,刷机步骤完成
大华乐橙 sn1(海思 hi3798c)刷机
1

注意事项

  • Archlinuxarm 在进去系统后需要执行以下两步操作初始化 pacman 密钥环:

pacman-key --init
pacman-key --populate archlinuxarm
  • u-boot 默认的启动顺序为 usb -> mmc0,如果在USB2.0 接口上插入了 u -boot 能够识别系统的 U 盘,那就会从 U 盘启动。如果要修改默认启动顺序,可以修改 u -boot 环境变量 boot_targets
    例如,在 u -boot 控制台中修改:

setenv boot_targets "mmc0 usb"
saveenv
  • 在 u -boot 中设置 ethaddr 环境变量可以修改 mac 地址,例如:

setenv ethaddr "96:00:3f:29:ee:20"
saveenv
  • 在 Linux 系统中可以使用 fw_printenvfw_setenv查看或修改 u -boot 环境变量
  • 如果需要恢复原来备份的安卓镜像,只需启动到 U 盘恢复系统,用 dd 将原先备份的镜像写回 emmc 即可
    注意:原厂安卓固件中,emmc 是/dev/mmcblk0,而在 Linux 系统中是/dev/mmcblk1

dd if=/path/to/emmc.dd of=/dev/mmcblk1 bs=1M conv=fsync
  • 如果要刷入 build-imou-sn1 里面的其它 Linux 发行版,只需要从 步骤 11开始操作即可。不需要接 TTL,可以用 ssh 登陆 alpine 恢复系统
  • LED 灯控制

# sata-white 默认的 trigger 是 disk-activity,可以修改为 none 以禁用
echo none > /sys/class/leds/sata-white/trigger

# 打开所有 LED
echo 1 > /sys/class/leds/pwr-red/brightness
echo 1 > /sys/class/leds/pwr-white/brightness
echo 1 > /sys/class/leds/sata-red/brightness
echo 1 > /sys/class/leds/sata-white/brightness

# 关闭所有 LED
echo 0 > /sys/class/leds/pwr-red/brightness
echo 0 > /sys/class/leds/pwr-white/brightness
echo 0 > /sys/class/leds/sata-red/brightness
echo 0 > /sys/class/leds/sata-white/brightness

作者:libgcc
链接:https://www.jianshu.com/p/695fa3b0dab5
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

正文完
 0
whatangel
版权声明:本站原创文章,由 whatangel 于2021-11-18发表,共计4774字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
验证码