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):…...

多线程与高并发——并发编程(4)
文章目录 四、阻塞队列1 基础概念1.1 生产者消费者概念1.2 JUC阻塞队列的存取方法2 ArrayBlockingQueue2.1 ArrayBlockingQueue的基本使用2.2 生产者方法实现原理2.2.1 ArrayBlockingQueue的常见属性2.2.2 add方法2.2.3 offer方法2.2.4 offer(time,unit)方法2.2.5 put方法2.3 消…...

设计模式之建造者模式
文章目录 盖房项目需求传统方式解决盖房需求传统方式的问题分析建造者模式概述是建造者模式的四个角色建造者模式原理类图建造者模式的注意事项和细节 盖房项目需求 需要建房子:这一过程为打桩、砌墙、封顶房子有各种各样的,比如普通房,高楼…...

源码编译安装opencv4.6.0,别的版本也行
1.下载opencv4.6.0 系统: ubuntu 1804 64位点我下载opencv 4.6.0 https://codeload.github.com/opencv/opencv/zip/refs/tags/4.6.0 指令下载 推荐: wget -O opencv.zip https://github.com/opencv/opencv/archive/4.6.0.zip wget -O opencv_contrib.zip https://github.com/…...

【MongoDB】Springboot中MongoDB简单使用
1. docker安装MongoDB 拉取镜像 docker pull mongo创建容器 docker run -di --name mongo-service --restartalways -p 27017:27017 -v ~/data/mongodata:/data mongo2. 导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactI…...

Python 面试:单元测试unit testing 使用pytest
1. 对于函数进行单元测试 calc.py def add(x, y):"""Add Function"""return x ydef subtract(x, y):"""Subtract Function"""return x - ydef multiply(x, y):"""Multiply Function""…...

螺旋矩阵、旋转矩阵、矩阵Z字打印
螺旋矩阵 #include <iostream> #include <vector> void display(std::vector<std::vector<int>>&nums){for(int i 0; i < nums.size(); i){for(int j 0; j < nums[0].size(); j){std::cout<<nums[i][j]<< ;}std::cout<<…...

Seaborn绘制热力图的子图
Seaborn绘制热力图的子图 提示:如何绘制三张子图 绘制的时候,会出现如下问题 (1)如何绘制1*3的子图 (2)三个显示条,如何只显示最后一个 提示:下面就展示详细步骤 Seaborn绘制热力…...

C++二级题目4
小白鼠再排队 不会 多余的数 #include<iostream> #include<string.h> #include<stdio.h> #include<iomanip> #include<cmath> #include<bits/stdc.h> int a[2000][2000]; int b[2000]; char c[2000]; long long n; using namespace std; i…...

Tomcat 部署时 war 和 war exploded区别
在 Tomcat 调试部署的时候,我们通常会看到有下面 2 个选项。 是选择war还是war exploded 这里首先看一下他们两个的区别: war 模式:将WEB工程以包的形式上传到服务器 ;war exploded 模式:将WEB工程以当前文件夹的位置…...

Delphi IdTcpServer IdTcpClient 传输简单文本
Delphi IdTcpServer IdTcpClient 传输简单文本 已经很久敲代码了,想找一段直接Delphi11 TCP简单文本传输,费劲!FStringStream 、FStrStream : FStringStream:TStringStream.Create(,TEncoding.UTF8); 已经很久敲代码了,…...