S905L3A(M401A)拆解, 运行EmuELEC和Armbian

原创 淹不死的狗  2023-11-29 10:15:41  阅读 304 次 评论 0 条
摘要:

关于S905L3A / S905L3ABS905Lx系列没有公开资料, 猜测是Amlogic用于2B的芯片型号, 最早的 S905LB 是 S905X 的马甲, 而这个 S905L3A/S905L3AB 则是 S905X2 的马甲, 因为在性能评测里这两个U的得分几乎一样.S905L3A/S905L3AB 和 S905X2, S905X3 一样 GPU 是 G31, 相比前一代的 MALI450 性能提升明显.同型号的电视盒子中出现的CPU型号还有 S905L3, S905L3B, 这两个和 S

关于S905L3A / S905L3AB

S905Lx系列没有公开资料, 猜测是Amlogic用于2B的芯片型号, 最早的 S905LB 是 S905X 的马甲, 而这个 S905L3A/S905L3AB 则是 S905X2 的马甲, 因为在性能评测里这两个U的得分几乎一样.
S905L3A/S905L3AB 和 S905X2, S905X3 一样 GPU 是 G31, 相比前一代的 MALI450 性能提升明显.

同型号的电视盒子中出现的CPU型号还有 S905L3, S905L3B, 这两个和 S905L3A/S905L3AB 是不一样的. S905L3A安兔兔跑分正常在4.5W分以上, 而905L3, 905L3B只能跑2.5w左右.

如果为了玩 EmuELEC 买电视盒子, 建议买商品介绍里明确写了 S905L3A/S905L3AB 的, 因为即使是同一个型号也分多个版本, CPU是不一定的, 现在没有哪个型号的盒子, 用的CPU一定是S905L3A/S905L3AB.

如果是用于运行Armbian, 则哪个型号都可以.

M401A

我买的是一个M401A的盒子, 带蓝牙不带WIFI, 没有TF卡槽. 市面上S905L3A的盒子没有带卡槽的, E900V22C和E900V22D这两个型号虽然没卡槽, 但是PCB带了TF卡槽焊盘, 可以自己加焊.

实物图

底部标识

S905L3A(M401A)拆解, 运行EmuELEC和Armbian 操作系统 第1张

PCB正面

S905L3A(M401A)拆解, 运行EmuELEC和Armbian 操作系统 第2张

CPU S905L 3A

S905L3A(M401A)拆解, 运行EmuELEC和Armbian 操作系统 第3张

内存

S905L3A(M401A)拆解, 运行EmuELEC和Armbian 操作系统 第4张

NAND

S905L3A(M401A)拆解, 运行EmuELEC和Armbian 操作系统 第5张


蓝牙

S905L3A(M401A)拆解, 运行EmuELEC和Armbian 操作系统 第6张

安卓和相关工具下载

    ophub 提供了非常实用的工具合集, 包含刷机工具和各个型号盒子的安卓包, GitHub下载速度也很快
    https://github.com/ophub/kernel/releases/tag/tools
    Aidan 的系列ATV固件
    https://aidanrom.com/

运行EmuELEC

盒子安装的安卓9, 已经Root过的, 所以不需要再刷机了. 从GitHub下载了最新的 EmuElEC 4.9, 在 Ubuntu 里用 Disk Image Writer 写入到一个 64G 的U盘. 这里不一定要用U盘, 用移动硬盘也可以.
将EMUELEC分区中 device_trees 目录下的 g12a_s905x2_2g.dtb 复制到根目录下, 改名为 dtb.img

插上U盘, 在安卓中运行 Reboot To LibreElEC 后, 盒子重启就会自动从U盘启动.

第一次启动时, U盘中的系统在初始化时有一些问题, 文件没有释放全, 扩容倒是扩成功了, 重启后也能进EmuELEC界面, 功能都是好的, 但是没法运行游戏. 在系统启动阶段会报一些这样的错

Failed to mount: tmp-cores.mount
Failed to mount: tmp-database.mount

S905L3A(M401A)拆解, 运行EmuELEC和Armbian 操作系统 第7张

这个错误不是因为 EMMC 慢, 是因为文件不全. U盘本身没问题, 猜测原因是供电不足, 因为另一个USB口同时插了键盘.

改dtb文件是没用的, 解决办法就是... 重做一个U盘, 重新再启动初始化一遍. 建议在初始化时最好只插U盘, 另一个USB口不要插东西.

在启动阶段会报一个 tmp-shell 错误, 但是似乎对运行没影响.

运行游戏

游戏基本上都能直接运行, 不需要单独设置引擎.

性能提升比较明显的有以下游戏:

    FBNeo
        ESP Ra.De 长空超少年, 纵版射击游戏, 在 R3300L 上有明显失帧破音, 在 M401A 上运行流畅
        Gunlock/Layer Section 在 R3300L 上有明显的失帧破音, 在 M401A 上运行90%流畅, 除了个别场景还会有一些卡顿
    Dreamcast
        Soulcalibur刀魂在 R3300L 上能凑合玩, 卡顿明显, 在 M401A 上除了开场卡顿, 游戏过程中还是很流畅的

而对于 Dreamcast 的另一些游戏, 例如 Dead or Alive 2, 斑鸠, 依然是很卡.
开启蓝牙
RTL8761

M401A 盒子自带的蓝牙是 RTL8761, 开启蓝牙的命令

rtk_hciattach -n -s 115200 ttyS1 rtk_h5 &

M401A的蓝牙是 RTL8761b, 在EmuELEC默认安装下, 直接运行上面的命令会报错

Realtek Bluetooth :Couldnt open extra config /opt/rtk_btconfig.txt, No such file or directory
Realtek Bluetooth :Couldnt access customer BT MAC file /storage/.config/btaddr
Realtek Bluetooth ERROR: Can't access Config file: /lib/firmware/rtlbt/rtl8761b_config, No such file or directory
Realtek Bluetooth ERROR: Read Config file error, use eFuse settings
Realtek Bluetooth ERROR: Can't access firmware /lib/firmware/rtlbt/rtl8761b_fw, No such file or directory
Realtek Bluetooth ERROR: Read Bluetooth firmware error

Realtek Bluetooth ERROR: Can't initialize device 2, No such file or directory

而这两个文件实际上存在于 /usr/lib/kernel-overlays/base/lib/firmware/rtl_bt/ 目录下

ll /usr/lib/kernel-overlays/base/lib/firmware/rtl_bt/
total 908
drwxrwxr-x    2 root     root           844 Nov 19  2022 ./
drwxrwxr-x   26 root     root          6442 Nov 20  2022 ../
-rw-rw-r--    1 root     root         38764 Nov 19  2022 rtl8192ee_fw.bin
-rw-rw-r--    1 root     root         37904 Nov 19  2022 rtl8192eu_fw.bin
-rw-rw-r--    1 root     root         24548 Nov 19  2022 rtl8723a_fw.bin
-rw-rw-r--    1 root     root         45048 Nov 19  2022 rtl8723b_fw.bin
-rw-rw-r--    1 root     root            64 Nov 19  2022 rtl8723bs_config-OBDA0623.bin
-rw-rw-r--    1 root     root            64 Nov 19  2022 rtl8723bs_config-OBDA8723.bin
lrwxrwxrwx    1 root     root            29 Nov 19  2022 rtl8723bs_config.bin -> rtl8723bs_config-OBDA8723.bin
-rw-rw-r--    1 root     root         52116 Nov 19  2022 rtl8723bs_fw.bin
-rw-rw-r--    1 root     root            10 Nov 19  2022 rtl8723d_config.bin
-rw-rw-r--    1 root     root         52080 Nov 19  2022 rtl8723d_fw.bin
-rw-rw-r--    1 root     root         74488 Nov 19  2022 rtl8761a_fw.bin
-rw-rw-r--    1 root     root            25 Nov 19  2022 rtl8761b_config.bin
-rw-rw-r--    1 root     root         37740 Nov 19  2022 rtl8761b_fw.bin
-rw-rw-r--    1 root     root             6 Nov 19  2022 rtl8761bu_config.bin

-rw-rw-r--    1 root     root         42088 Nov 19  2022 rtl8761bu_fw.bin

需要建立软链

ln -s /usr/lib/kernel-overlays/base/lib/firmware/rtl_bt/rtl8761b_fw.bin /lib/firmware/rtlbt/rtl8761b_fw

ln -s /usr/lib/kernel-overlays/base/lib/firmware/rtl_bt/rtl8761b_config.bin /lib/firmware/rtlbt/rtl8761b_config

再运行就正常了

EMUELEC:~ # rtk_hciattach -n -s 115200 ttyS1 rtk_h5 &
[1] 7426
EMUELEC:~ # Realtek Bluetooth :Realtek Bluetooth init uart with init speed:115200, type:HCI UART H5
Realtek Bluetooth :Realtek hciattach version 3.1.dced3af.20210423-153942
 
Realtek Bluetooth :Use epoll
Realtek Bluetooth WARN: OP_H5_SYNC Transmission timeout
Realtek Bluetooth :[SYNC] Get SYNC Resp Pkt
Realtek Bluetooth :[CONFIG] Get SYNC pkt
Realtek Bluetooth :[CONFIG] Get SYNC pkt
Realtek Bluetooth :[CONFIG] Get CONFG pkt
Realtek Bluetooth ERROR: receive packets in active state
...
Realtek Bluetooth :Load FW /lib/firmware/rtlbt/rtl8761b_fw OK, size 37740
Realtek Bluetooth :rtb_get_fw_project_id: opcode 0, len 1, data 14
Realtek Bluetooth :FW version 0x0d9a2883, Patch num 2
Realtek Bluetooth :Chip id 0x0001
Realtek Bluetooth :Chip id 0x0002
Realtek Bluetooth :Patch length 0x5ba4
Realtek Bluetooth :Start offset 0x00003780
Realtek Bluetooth :Svn version:    24105
Realtek Bluetooth :Coexistence: BTCOEX_20190327-0202
 
Realtek Bluetooth :FW  exists, Config file  exists
Realtek Bluetooth :Total len 23485 for fwc
Realtek Bluetooth :baudrate in change speed command: 0x02 0x80 0x92 0x04
Realtek Bluetooth :Receive cmd complete event of command: fc17
Realtek Bluetooth :Received cc of vendor change baud
Realtek Bluetooth :Final speed 1500000
Realtek Bluetooth :end_idx: 93, lp_len: 49, additional pkts: 5
 
Realtek Bluetooth :Start downloading...
Realtek Bluetooth :Send additional packet 94
Realtek Bluetooth :Send additional packet 95
Realtek Bluetooth :Send additional packet 96
Realtek Bluetooth :Send additional packet 97
Realtek Bluetooth :Last packet 226
Realtek Bluetooth :Send last pkt
Realtek Bluetooth :Enable host hw flow control
Realtek Bluetooth :h5_hci_reset: Issue hci reset cmd
Realtek Bluetooth :Receive cmd complete event of command: 0c03
Realtek Bluetooth :Received cc of hci reset cmd
Realtek Bluetooth :Init Process finished
Realtek Bluetooth :Realtek Bluetooth post process

Realtek Bluetooth :Device setup complete

在系统中存在一个 rtkbt-firmware-aml.service 服务, 文件位于 /usr/lib/systemd/system/rtkbt-firmware-aml.service 内容如下

[Unit]
Description=Attach /dev/ttyS1 to BlueZ stack using rtk_h5 type
Wants=bluetooth.service
Before=bluetooth.service
After=dev-ttyS1.device
 
[Service]
Type=simple
ExecStartPre=/usr/sbin/rfkill unblock bluetooth
ExecStart=/usr/bin/rtk_hciattach -n -s 115200 /dev/ttyS1 rtk_h5

ExecStopPost=/usr/sbin/rfkill block bluetooth

所以添加完软链后, 也可以通过systemctl start rtkbt-firmware-aml启动蓝牙

启动蓝牙后, 在ES上通过菜单搜索依然无法找到蓝牙设备, 需要运行一个游戏, 进入RA界面, 在Settings里通过Bluetooth设置

    RTL8761 Bluetooth Support https://github.com/EmuELEC/EmuELEC/issues/698
    蓝牙启用方法参考 https://tieba.baidu.com/p/8063516479
    蓝牙启用方法参考 https://www.right.com.cn/forum/thread-8295899-1-1.html

UWE5621DS

311-1AS盒子内置双频WIFI+蓝牙, 芯片为 UWE5621DS, 开启方式

insmod /usr/lib/kernel-overlays/base/lib/modules/4.9.269/uwe5631-aml/uwe5621_bsp_sdio.ko
insmod /usr/lib/kernel-overlays/base/lib/modules/4.9.269/uwe5631-aml/sprdbt_tty.ko

insmod /usr/lib/kernel-overlays/base/lib/modules/4.9.269/uwe5631-aml/sprdwl_ng.ko

这时候通过 ifconfig 就能看到 wlan0 网口了. 如果不行, 可以替换成这个dtb重启后再试一下

https://github.com/KryptonLee/e900v22c-CoreELEC/raw/main/common-files/e900v22c.dtb

启用 wlan0

ifconfig wlan0 up

启动蓝牙

systemctl start sprd_sdio-firmware-aml.service

运行 Armbian

从 ophub 的 GitHub 仓库下载 Armbian 镜像 https://github.com/ophub/amlogic-s9xxx-armbian/releases

我选择的是 Armbian_23.08.0_amlogic_s905l3a_jammy_5.15.127_server_2023.08.19, 解压后用 Disk Image Writer 直接写入移动硬盘.

接上硬盘, 在盒子安卓系统中运行 Reboot_to_libreelec 就会重启到 Armbian 了.

这个镜像的网络正常, 但是默认没有加载蓝牙.
在 Android, EmuELEC 和 Armbian 这三个系统之间切换的问题

    没有加外置存储, 开机会直接运行安卓.
    在安卓中运行 Reboot to LibreELEC, 可以进入 EmuELEC
    运行过EmuELEC的盒子, 即使在安卓中运行 Reboot to LibreELEC, 也无法从 USB 启动 Armbian,

解决方法是: 在 EmuELEC 的 ssh 里面, 通过 fw_setenv 命令删除变量 bootfromsd

fw_setenv bootfromsd
# 再运行 fw_printenv 确认 bootfromsd 变量已经删除
fw_printenv

# 关机

关机后插上Armbian的U盘或移动硬盘, 重启进入安卓中运行reboot_to_libreelec, 就能进入Armbian了.
U盘,移动硬盘的兼容性

不单单是 M401A, 其它型号的盒子也是, 都会挑硬盘, 挑U盘, 挑TF卡. 在PC上明明工作正常的移动硬盘, 在盒子上就会反复断开连接, 或者初始化失败.
大半的原因是供电, 因为盒子的供电都会差一些, 另外的原因是盒子 UBOOT 内置的驱动, 可能对部分硬件兼容性不够好.

总之要多备一些, 如果一个启动出现问题, 换另一个试试, 排除因为存储不兼容导致系统启动失败的问题.

本文地址:https://tugouli.exiu.org/3664.html
版权声明:本文为原创文章,版权归 淹不死的狗 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?