S905L3A(M401A)拆解, 运行EmuELEC和Armbian
关于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卡槽焊盘, 可以自己加焊.
实物图
底部标识

顶部的配重+散热

PCB正面

CPU S905L 3A

内存

NAND

蓝牙

安卓和相关工具下载
ophub 提供了非常实用的工具合集, 包含刷机工具和各个型号盒子的安卓包, GitHub下载速度也很快
https://github.com/ophub/kernel/releases/tag/tools
运行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
...
图是从网上借的, 就是这个错误界面

这个错误不是因为 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-153942Realtek 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-0202Realtek 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: 5Realtek 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 内置的驱动, 可能对部分硬件兼容性不够好.
总之要多备一些, 如果一个启动出现问题, 换另一个试试, 排除因为存储不兼容导致系统启动失败的问题.
参考
- M401A/311-1a Armbian下RTL8721蓝牙使用 https://bbs.hassbian.com/thread-18366-1-1.html
- M401A/311-1a Armbian 蓝牙, reboot/音乐问题https://bbs.hassbian.com/thread-17392-1-1.html
- 【23年7月更】M401A/CM311等盒子Armbian 系统 RTL8761BTV 蓝牙的正确方式https://github.com/ophub/amlogic-s9xxx-armbian/discussions/1546
- E900V22C运行EmuELEC https://post.smzdm.com/p/a5olm8vl/
- 创维E900V22c刷EmuELEC开启蓝牙及Wifi https://zhuanlan.zhihu.com/p/598094381
- EmuELEC游戏合集(开启自带蓝牙) https://www.aliyundrive.com/s/nXc3T1ryv7D 提取码: 09ke
相关文章:
S905L3A(M401A)拆解, 运行EmuELEC和Armbian
关于S905L3A / S905L3AB S905Lx系列没有公开资料, 猜测是Amlogic用于2B的芯片型号, 最早的 S905LB 是 S905X 的马甲, 而这个 S905L3A/S905L3AB 则是 S905X2 的马甲, 因为在性能评测里这两个U的得分几乎一样. S905L3A/S905L3AB 和 S905X2, S905X3 一样 GPU 是 G31, 相比前一代的…...
stack和queue容器
1 stack 基本概念 概念:stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口 栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为 栈中进入数据称为 — 入栈 push 栈中弹出数据称为 — 出栈 pop 2 stack 常用…...
面向对象基础
文章目录 面向对象基础一.面向对象介绍二.设计对象并使用三.封装四.This关键字五.构造方法六.标准的Javabean类七.对象内存图八.基本数据类型和引用数据类型九.成员和局部 面向对象基础 一.面向对象介绍 面向:拿,找 对象:能干活的东西 面向对象编程:找东西来做对应的事情 …...
spring集成mybatis
1、新建一个javaEE web项目 2、加入相关依赖的坐标 <dependencies><!--数据系列:mybatis,mysgl,druid数据源,junit--><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</grou…...
抽象轻松c语言
目 c语言 c程序 c语言的核心在于语言,语言的作用是进行沟通,人与人之间的信息交换 人与人之间的信息交换是会有信息空白(A表达信息,B接受信息,B对信息的处理会与A所以表达的信息具有差距,这段差距称为信…...
Redis布隆过滤器原理
其实布隆过滤器本质上要解决的问题,就是防止很多没有意义的、恶意的请求穿透Redis(因为Redis中没有数据)直接打入到DB。它是Redis中的一个modules,其实可以理解为一个插件,用来拓展实现额外的功能。 可以简单理解布隆…...
写代码时候的命名规则、命名规范、命名常用词汇
版权声明 这个大部分笔记是观看up主红桃A士的视频记录下来的,因为本人在学习的过程中也经常出现类似的问题,并且觉得Up主的视频讲解很好,做此笔记反复学习,若有侵权请联系删除,此推荐视频地址:【改善丑陋的…...
Linux之iptables防火墙
一.网络安全技术 ①入侵检测系统(Intrusion Detection Systems):特点是不阻断任何网络访问,量化、定位来自内外网络的威胁情况,主要以提供报警和事后监督为主,提供有针对性的指导措施和安全决策依据,类 似于…...
启动服务报错:Command line is too long Shorten command line for xxx or also for Spri
ommand line is too long. Shorten command line for ProjectApprovalApplication or also for Spring Boot default configuration. 启动springboot 项目的时候报错 解决方案: 点击提示中的:default:然后在弹出窗口中选择:JAR xx…...
docker安装elasticsearch、kibana
安装过程中,遇到最大的问题就是在安装kibana的时候发现 一直连接不上 elasticsearch。最后解决的问题就是 我通过 ifconfig en0 | grep inet| awk {print $2} 在mac中找到本机的ip,然后去到kibana容器中 修改 vi config/kibana.yml中的elasticsearch.hos…...
前端 CSS - 如何隐藏右侧的滚动条 -关于出现过多的滚动条导致界面不美观
1、配置 HTML 标签,隐藏右侧的滚动条 CSS 配置:下面两个一起写进进去,适配 IE、火狐、谷歌浏览器 html {/*隐藏滚动条,当IE下溢出,仍然可以滚动*/-ms-overflow-style:none;/*火狐下隐藏滚动条*/overflow:-moz-scroll…...
2.神经网络的实现
创建神经网络类 import numpy # scipy.special包含S函数expit(x) import scipy.special # 打包模块 import pickle# 激活函数 def activation_func(x):return scipy.special.expit(x)# 用于创建、 训练和查询3层神经网络 class neuralNetwork:# 初始化神经网络def __init__(se…...
合宙Air724UG LuatOS-Air LVGL API控件-键盘 (Keyboard)
键盘 (Keyboard) LVGL 可以添加触摸键盘,但是很明显,使用触摸键盘的话必须要使用触摸的输入方式,否则无法驱动键盘。 示例代码 function keyCb(obj, e)-- 默认处理事件lvgl.keyboard_def_event_cb(keyBoard, e)if(e lvgl.EVENT_CANCEL)the…...
pytorch深度学习实践
B站-刘二大人 参考-PyTorch 深度学习实践_错错莫的博客-CSDN博客 线性模型 import numpy as np import matplotlib.pyplot as pltx_data [1.0, 2.0, 3.0] y_data [2.0, 4.0, 6.0]def forward(x):return x * wdef loss(x, y):y_pred forward(x)return (y_pred - y) ** 2# …...
直方图反向投影(Histogram Backprojection)
直方图反向投影(Histogram Backprojection)是一种在计算机视觉中用于对象检测和图像分割的技术。它的原理基于图像的颜色分布,允许我们在一幅图像中找到与给定对象颜色分布相匹配的区域。这个技术常常用于图像中的目标跟踪、物体识别和图像分…...
day32 泛型 数据结构 List
一、泛型 概述 JDK1.5同时推出了两个和集合相关的特性:增强for循环,泛型 泛型可以修饰泛型类中的属性,方法返回值,方法参数, 构造函数的参数 Java提供的泛型类/接口 Collection, List, Set,Iterator 等 …...
DW-AHB Central DMAC
文章目录 AHB Central DMAC —— Design Ware AHB Central DMAC —— Design Ware AHB(Adavenced High-performace BUS) Central DMAC(Direct Memory Access Controller) : 一个高性能总线系统。 作用:在嵌入式系统种连接高速设备,如处理器内存&#x…...
JavaScript设计模式(四)——策略模式、代理模式、观察者模式
个人简介 👀个人主页: 前端杂货铺 🙋♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…...
JS画布的基本使用
直线 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title></title> <style> #myname{ border: 1px solid red; /* background: linear-gradient(to righ…...
c++ set/multiset
set/multiset 集合,一个单个,一个多个(multi)。两个库都是"set"。 https://blog.csdn.net/fckbb/article/details/130917681 对象创建 set(const Pred& compPred(),const A& alA()):创建空集合。set(const set& x):…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...
通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...
离线语音识别方案分析
随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...
