
通过网盘分享的文件:海信A2Pro
链接: https://pan.baidu.com/s/1mqOTiOcziVDVPRBFGtoIiA?pwd=afuu 提取码: afuu
--来自百度网盘超级会员v5的分享
工具资源列表:
其他工具(见文章末尾):

简单介绍:
我自己的尝试是先刷入国际版系统,然后解锁BootLoader,最后刷入修补后的boot以实现root,因此该教程按我自己尝试路线进行。
刷机包提供的是国际版固件全量刷机包,如想刷其他国行固件,解锁等教程理论上都适用。
国际版系统我认为的几个好处:广告少,预置乱七八糟软件少,安装器很精简没有杀毒等,低耗电等。
注意:如果手机A2P是二手购买且恢复过出厂设置的,务必在恢复出厂设置后插入一次正常的SIM卡以激活USB(不消耗流量,可以不开数据流量),海信A2Pro手机有USB防护,必须插入一次SIM激活才能连接电脑传数据,否则只支持充电,无法用数据传输、安装驱动、USB调试等功能。
*1973461# ,会跳出一个系统信息(界面),点击调试设置,勾选自动加载USB设备。

cmd并回车
在cmd窗口内输入指令确保已经识别到设备 以重启手机到刷机模式(BootLoader Mode)
adb devices
如果显示未信任并且手机有弹窗选择是否信任计算机,需勾选信任并确认,然后再次执行指令和上图差不多
在cmd窗口内输入指令以重启手机到9008刷机模式(EDL Mode)
adb reboot edl
prog_emmc_firehose_8953_ddr_000460e1.mbnrawprogram_000460e1.xml,第二次弹窗选择patch0.xml
在开机状态下,打开开发者选项,勾选USB调试,勾选OEM解锁
如果想自己根据刷机包的boot来修补以root可以看下面这段,如果用文章内修补后的boot可跳过这段直接到刷入部分
cmd并回车在cmd窗口内输入指令以重启手机到BL模式(BootLoader Mode)(备注:经踩坑测试,发现重启到fastboot会正常开机,只有BootLoader下可以刷机,也就是不存在fastboot)
adb reboot bootloader
# 刷机后仍需要插入SIM卡来激活USB,并且需要重新在弹窗勾选信任计算机
# 等待两秒后,输入指令查看手机是否进入了BootLoader模式
fastboot devices
# 如果列表中有设备则为正常
在新的cmd窗口输入指令以解锁手机
fastboot Hisense unlockOKEY字样即为解锁成功,可关闭该cmd窗口。回到之前的CMD窗口,输入指令来刷入修补后的boot镜像
fastboot flash boot <敲空格后将boot镜像文件直接拖入>
如显示OKEY且没有错误信息,则刷入成功,输入指令重启
fastboot reboot开机后,打开Magisk软件,即可看到安装成功的版本信息

可正常授权root权限


海信的手机(不确定是不是都这样)在恢复出厂设置后需要 插入一次正常的SIM卡以激活USB (不消耗流量,可以不开数据流量),海信A2Pro手机有USB防护,必须插入一次SIM激活才能连接电脑传数据,否则只支持充电,无法用数据传输、安装驱动、USB调试等功能。
在内置的应用商店-应用恢复可以安装找回
如果为了精简系统禁用了应用商店或者单纯不想使用,可以在拨号盘输入 *#*#20019994#*#* 打开预置应用找回设置
刷机后发现墨水屏的天气一栏和主屏幕的时间与天气小组件,无法获取天气,说是要安装,但是安装总会失败,是因为国际版固件没有天气APP,只有Google提供的新闻与天气。在本文提供的资料文件里面已经从国行版固件提取出天气APP了,Chinaweather.apk,直接安装后即可使用,小组件也可以正常获取天气。
国行更新包目前只有卡刷OTA包,我找到一个相对全的Full包 A2T_L1467.6.07.01.00_full.zip,里面有Boot.img与更新的system.new.dat(或许也可以通过这个包9008刷入后,通过修补boot来实现国行固件root)。因此需要两个工具,[解包Bin2Img工具]sdat2img-master.zip该工具可以将更新文件合并到system.img,使用方法:
python sdat2img.py system.transfer.list system.new.dat system.img转换为system.img后,使用工具[提取system.img工具]ext2explore-2.2.71,加载该文件,即可看到内部全部文件。右键文件点击save,可将文件提取到外面。
*#*#4636#*#* ——服务菜单
*1973460# - FTMode
*1973461#或*#*#3647#*#* - 系统信息
*1973462# -操作员测试
*#0000# ——系统信息
*#06# -IMEI本文参考资料:
所以还是决定自己做个教程,顺便留下工具,以后说不定还能回来看看...
(该文章参考酷安各个大佬教程总结而来,其中本篇主要目标为001B,003\001C通用)
针不戳,这次买到两个棒子,查看板号都是001B,据说这个板号支持的频段最全面,同时也是骁龙410的芯片,可以用来折腾了;拆开后发现板载卡座,甚至不需要自己加焊了,运气不错。

准备好软件硬件,开始刷机。先从安卓开始,再到Debian、openwrt,最后再自己编译一个系统慢慢折腾...
下载链接:https://www.123pan.com/s/Dpq0Vv-XAUHd.html提取码:V23y

0、建议关闭杀毒软件,否则多个工具可能会被杀毒拦截
1、安装 [驱动]vivo9008drivers 驱动,这个驱动是为了识别棒子9008;安装 [高通工具]QPST,后续备份QCN用(可选)
2、如果电脑是网吧电脑或者新系统、win7等,建议安装[依赖库]微软常用运行库包 ,有些软件依赖一部分的微软运行库,否则无法正常打开
3、解压 9008分区操作工具、9008全量备份工具 ,并打开 MiKo_Loder Pro/miko.exe 安装 9008全量备份工具 ,安装完成后将 Loader.exe 替换到安装目录中以完成破解,之后每次使用打开 Loader.exe 即可

4、9008分区操作工具 仅需解压即可,解压后的文件夹需要删除中文部分(部分系统会因为中英文报错),解压出文件夹 Qualcomm Premium Tool V2.4 ,无需安装
5、解压 [ADB&Fastboot工具]platform-tools 内的文件到文件夹 tools ,自行新建并重命名为tools,后续adb等操作将以这个为准

6、打开调试工具:进入tools文件夹,并在这个文件夹的上方地址栏,单击编辑,删除全部内容,输入 cmd 并回车,会打开cmd命令行窗口。输入指令 adb 并回车,查看是否会输出帮助日志,如有即正常

方法一:
1、按住棒子上的RST按钮再插入电脑,即可自动进入9008模式
方法二:
1、正常插入棒子到电脑等待一两分钟
2、待完全开机后,电脑会出提示网络设备接入,同时可以在设备管理器看到adb设备


3、回到cmd控制台,输入指令 adb devices 即可查看棒子是否连接正常

4、输入指令 adb reboot edl,棒子会自动重启到9008模式,再次查看设备管理器,即可在端口处发现9008设备

刷机第一步务必要先备份,哪怕网上有很多别人的备份,还是建议自己保留一份全量备份,其中就包含基带等文件。
预计要备份的内容:全量备份、全分区备份、QCN备份,由于QCN备份需要开放901D端口,需要Root后才能进行,因此先折腾安卓系统,将面具刷入后再备份QCN
进入9008后,打开前面安装好并破解完成的 miko,也就是 Loader.exe ,可以新建一个桌面快捷方式,下面统一称为miko

打开miko后,按照下面的顺序进行操作,可进行备份全量包与查看存储信息

既然有备份流程,当然也有恢复流程,如下图

至此,全量备份结束,关闭Miko即可,如果需要进行下面的备份,需要拔掉棒子重新进9008模式。
本部分备份仅需备份modem分区等小分区,用于刷debian或者openwrt时替换基带驱动等,无需备份userdata等大分区
如果有备份全量分区,并且只需要更换系统后插卡使用,仅需要备份Modem分区即可
进入文件夹 Qualcomm Premium Tool V2.4,开始进行破解操作
(音量调小)进入文件夹后,打开 CMD_KEYGEN_CRACKED_by_FACEBOOK破解器,点击GenerateKey生成一个key文件,放到一个位置并记下来。生成完毕后可关闭破解器。

打开 Qualcomm Premium Tool 软件,点左上角Help->Activate ,并选择刚刚生成的key文件,即可激活
激活完成后,按下图顺序执行部分分区备份。如显示Fail无法读取分区,可拔下棒子重新进入9008模式
重复第5、6、7步,将Modem、fsg、modemst1、modemst2分区备份下来即可。


备份完成后,出现这四个文件即为备份完成

modem文件可通过7z解压提取其中文件,也可以用 UltraISO 这个软件直接双击打开,把里面IMAGE文件夹拖出来可作为备用

在刷入其他系统时,如果需要插卡使用,将这个文件夹上传到root目录,并将文件夹内的全部文件移动到/lib/firmware文件夹重启后即可使用基带驱动(可见我博客其他文章 debian openwrt)
进入文件夹 Qualcomm Premium Tool V2.4,开始进行破解操作
(音量调小)进入文件夹后,打开 CMD_KEYGEN_CRACKED_by_FACEBOOK破解器,点击GenerateKey生成一个key文件,放到一个位置并记下来。生成完毕后可关闭破解器。

打开 Qualcomm Premium Tool 软件,点左上角Help->Activate ,并选择刚刚生成的key文件,即可激活
激活完成后,按下图顺序执行全分区备份。如显示Fail无法读取分区,可拔下棒子重新进入9008模式

最后一步选择好备份文件夹后,即可开始备份,预计耗时3-5分钟左右,直到左下角显示backup finish后即可结束,关闭工具

有备份就有恢复,可以按下图恢复所需的分区

注:如果有全量备份和备份modem分区后,该部分可以不用备份
因为在第二个备份中,我们备份了Boot.img文件,而刷入面具只需要修补这个boot镜像即可获取root,因此我们先想办法让面具安装到棒子内。
在环境准备期间,ARDC已经被解压出来,在打开ARDC之前,先打开任务管理器列表是否有 adb.exe 进程存在,如果有,右键停止运行,否则会与ARDC冲突。
重新插入棒子,连接为ADB模式,同时打开ARDC,稍等片刻即可看到棒子的安卓界面。

此时需要解压 安卓apk 压缩包,将 launcher.apk 拖入,即可进行安装。等待几秒后,按鼠标右键也就是返回键,就可以选择默认桌面了,选择刚刚安装好的launcher桌面

可以看出,该系统为安卓4.x的样式,实则确实为安卓4.4.4
接着继续安装es文件管理器与magisk,并将备份好的boot.img分区镜像拖入ARDC窗口。使用es文件管理器可以看到,在Downloads文件夹内存放boot.img

打开magisk,选择安装,安装方式为修补一个文件,并使用es文件管理器的选择器选择boot.img,开始修补。修补完成后,重新打开es文件管理器,找到修补后的boot,由于面具会随机命名后缀,所以手动重命名为 magiskboot.img (可直接使用键盘输入)。点击ARDC软件上方的 ">>",打开拓展功能,在CMD的输入框内,输入指令 adb pull /sdcard/Download/magiskboot.img ./ 并回车,即可将文件输出到ARDC软件根目录。将该文件手动放到 tools 文件夹内后续刷入使用。

此时,还是在CMD输入框内,重新输入指令 adb reboot bootloader 并回车进入fastboot模式。
回到一开始进9008时的CMD窗口,输入 fastboot devices 查看设备是否连接成功,如下图

输入指令,将修补后的boot刷入进去 fastboot flash boot magiskboot.img ,待刷入完成后执行重启 fastboot reboot

执行重启后,回到ARDC软件查看,待显示界面后,右键返回回到launcher桌面,打开面具查看是否安装成功,如下图即为安装成功

在右侧CMD输入框内,输入指令获取su权限:adb shell su ,并在左侧允许shell获取权限

通过权限申请后,开始正式备份QCN。圈子内较多采用星海SVIP软件,但是因为该软件易语言编写,使用卡顿且报毒严重,我这边还是采取QPST备份QCN方式
回到一开始的CMD窗口,执行指令
adb shell su
setprop sys.usb.config diag,adb
即可打开901D端口,同时设备管理器也会出现这个端口名。

在开始菜单找到QFIL并打开

选择901D端口打开

选择上方的Tools->QCN Backup Restore,进入QCB备份恢复的工具。同时在需要备份的位置新建txt文件,更改后缀为 .qcn ,再去工具内选择该文件即可。如需要恢复qcn,需要选择之前备份的qcn文件,点击恢复即可

备份完成后预计文件大小有500KB上下。备份结束后,可以关闭这些软件和cmd窗口,之后就可以尽情的折腾了。
之后刷机等会依次更新,欢迎关注本博客~
]]>终于想升级到win11了,结果是因为眼馋WSLg这个功能,不过既然都到Win11了,顺手也安装一下WSA吧,既然有特性就算不用也得要装(
本篇学习自:https://www.tjsky.net/tutorial/384
由于很晚才升级win11,以至于想用Magisk+GApps的WSA时,却发现Github的项目页面一个醒目的提醒:This repository has been disabled.
查了一下,原来是因为太多人用Github的Action流导致项目被封禁了,看样子云端编译是没辙了。所幸LSposed团队又出了一个项目 MagiskOnWSALocal ,我们可以使用这个项目进行本地编译,只需要有WSL子系统环境或者虚拟机Linux系统都可以编译运行。正好网上也有大佬做了博客,我就根据自己的经验二次整理了一下。
系统环境:
编译环境:



不想自己构建可以去下面的“安装”章节下载本篇文章构建好的
0、 (可选) 打开Github,前往作者团队的项目MagiskOnWSALocal(https://github.com/LSPosed/MagiskOnWSALocal) 并Star,支持作者团队
1、打开虚拟机,打开终端,输入指令sudo apt update来更新软件源,稍后我们要安装几个软件包(保持网络畅通)
2、切换到Home目录,然后安装Git工具并克隆项目,如果网络不好可能会很慢,耐心等待
cd ~
sudo apt install git -y
git clone https://github.com/LSPosed/MagiskOnWSALocal.git
3、等克隆完毕且没有明显报错(报错可能就是网络不好无法继续克隆)后,切换目录到项目内
cd MagiskOnWSALocal4、开始运行一键脚本,自动安装与配置环境
sudo ./scripts/run.sh
5、经过大概20分钟的等待,终端内会显示选项,此时开始自定义安装;如果中途有选择错误,强制退出再重新执行脚本即可
接下来的小标题格式为:菜单选项 | 大致意思 | 推荐选择
5-1、Build Arch | 编译架构 | 默认
用键盘方向键选择X64 (个人电脑一般都是Intel或者AMD,大多数为X64架构,可能也有部分Arm设备,可以自行编译试试看)

5-2、WSA release type | WSA发行类型 | 默认
一般选择retail,零售版,也解释为稳定版;如果想体验预览版,可选择Beta或者Dev通道的版本

5-3、Magisk version | 面具版本通道 | 默认
顾名思义是面具的更新通道,一般来说稳定就好,和手机上刷root用的面具玩法一样

5-4、Install GApps | 安装GApps | 是
如果没有一个好的网络环境也可以不安装,可以使用第三方安装器安装软件

5-5、Which GApps do you want to install? | 安装哪种版本的GApps | OpenGApps
推荐使用OpenGapps,体验过就明白了

5-6(略过)、Variants of gapps | 选择安装什么体积的GApps | 无
此选择目前略过,因为GApps没跟上WSA安卓版本(12)的更新,目前只有Pico量级的能用,默认跳过
5-7、 Remove Amazon Appstore | 移除亚马逊市场 | 否
憨憨亚马逊市场,app真的少,大部分游戏还都是益智游戏,建议选否,不保留

5-8、Root solution | Root解决方案 | Magisk
嗯,就一个面具,就选它,或者你不想root可以选none,这样就可以构建个无root但有GApps的WSA了

5-9、Compress output | 压缩构建包 | 是
如果你是老电脑,建议选否,压缩是一件很吃cpu的事情,虚拟机推荐压缩,方便导出文件,咱这边要分享到社区,所以选择压缩

5-10、Compress format | 压缩格式 | zip
同上述,压缩很吃cpu,7z更吃,tar.xz会好一些,但是在win下需要压缩软件支持,zip适合大众需求,空格选择,回车即确定

6、选择完成后,即可开始构建WSA安装包(会下载一些软件包,需要保持好的网络环境)

7、等待十几分钟,即可构建完毕(包体大概八百多MB)


此处为第一次安装WSA,如果之前有WSA请先卸载再安装,如果之前也是MagiskOnWSA,需要更新的话看下文,本篇文章构建包分享:https://www.123pan.com/s/Dpq0Vv-ORuHd提取码:CcO3
1、将上一步中构建完成的包(或是本文分享的构建包)解压到D盘/WSA文件夹中,文件夹可自行创建,但解压后不可删除,解压路径即为运行路径,我给解压到了D:/Users/xxxx
(一开始没改名,改名时检测被占用,一看果然这个文件夹是WSA的本体,悲,只能等下次更新的时候找机会换掉)

(和我上一次构建的版本一样,就是不知道里面小版本有没有改,本文会放出本次构建的共享链接)
(云盘校验没通过无法秒传,看样子里面小版本可能修改过,也可能只是文件属性变了)
2、进入文件夹,找到run.bat,运行即可(图中为我上一次构建的安装,稍后会讲到更新MagiskOnWSA,那时候再把我自己的包更新了)

3、等待安装完毕,会自动打开Magisk软件与Play商店,也可能只弹出一个,但是只要能运行即可代表安装完成。我参考的那篇教程里面说,Magisk默认是没开Zygisk,需要手动安装LSposed_Zygisk,但是在本文编写的时候,Zygisk就已经内置进Magisk内了

首先,请勿在微软商店内更新WSA,并且记得关掉微软商店的自动更新
更新方法:删除上一次git克隆文件夹,重新拉取代码并重新构建,得到压缩完的构建包后,先关闭WSA(用适用于Androidtm的windows子系统设置),再解压替换文件夹,并再次运行run.bat,用户数据会被保留
(确实会保留,我那小米12的Win11WSA还在(doge))
此处摘抄原文教程(链接在顶部)
安装WSAHelper(https://github.com/LSPosed/WSAHelper/releases/tag/v1.0),重新恢复开始菜单里的APP图标。
]]>还是准备玩esp32加小屏幕了,记录一下开发心得,虽然都做到一半多了,但是为了防止忘记或者是因为习惯性记录,还是准备将新学的给记下来,之前WIFI配网都做好了,那就从蓝牙开始吧...
原文参考链接:https://www.bilibili.com/read/cv15007387
硬件:ESP32
编程语言:Micropython
编译器:Thonny
目标:让esp32模块发出蓝牙信号,手机连接并通过软件发送串口数据,模块接收数据并实现点灯效果
基础测试代码:
from machine import Pin
from time import sleep_ms
import ubluetooth #导入BLE功能模块
ble = ubluetooth.BLE() #创建BLE设备
ble.active(True) #打开BLE
#设置BLE广播数据并开始广播
ble.gap_advertise(100, adv_data = b'\x02\x01\x06\x03\x09\x41\x42')运行后,可以在手机上搜索到一个蓝牙设备名为“AB"
如要修改蓝牙名称,可这样修改:
name = bytes("aabbcc", 'UTF-8')
ble.gap_advertise(100, adv_data = b'\x02\x01\x06\x02\x0A\x08' + bytearray((len(name)+1,0x09))+name)
一个中文占用3字节储存,而广播数据最多只有31字节,除去硬件配置外,命名也要限制一定字数
广播数据格式可参考:https://www.bilibili.com/read/cv15007387
注:由于esp32模块功率很小,发射的蓝牙信号较小,手机经常连接不上,可通过在广播数据格式内修改发射功率调整,对应的数据为x02x0Ax08 ,完整代码为:
name = bytes("aabbcc", 'UTF-8')
print("蓝牙开始广播")
ble.gap_advertise(100, adv_data = b'\x02\x01\x06\x02\x0A\x08' + bytearray((len(name)+1,0x09))+name)蓝牙可连接后,需要让其处理各种事件,如蓝牙断开、连接以及收发等,可参考以下代码
详情:https://www.bilibili.com/read/cv15039837
from machine import Pin
from time import sleep_ms
import ubluetooth #导入BLE功能模块
ble = ubluetooth.BLE() #创建BLE设备
ble.active(True) #打开BLE(此时设备将处于就绪态)
#设置BLE广播数据并开始广播(开始广播后设备将处于广播态)
ble.gap_advertise(100, adv_data = b'\x02\x01\x06\x03\x09\x41\x42')
#定义一个函数,用作蓝牙事件中断
def ble_irq(event, data): # 蓝牙中断函数
if event == 1: #蓝牙已连接(此时蓝牙将处于连接态)
print("BLE 连接成功")
elif event == 2: #蓝牙断开连接(此时蓝牙将从链接态进入就绪态)
print("BLE 断开连接")
ble.gap_advertise(100, adv_data = b'\x02\x01\x06\x03\x09\x41\x42')#再次启动广播
elif event == 3: # 收到新write消息
print("BLE 收到新消息")
ble.irq(ble_irq) #注册蓝牙中断函数有了中断函数后,可以更方便监听到蓝牙状态。接下来就是准备连接手机并交互了
蓝牙服务与特性创建,详情:https://www.bilibili.com/read/cv15049793
通过注册蓝牙服务,可以使用安卓APP nRF Connect或者微信小程序 谷雨蓝牙调试 进行数据传输,其中服务id为9011特性一9012为可读可写,9013为可读与通知,从esp32到手机上的消息就是通过9013 Notify这个权限获取信息的。
完整代码:
from machine import Pin
from time import sleep_ms,sleep
import ubluetooth #导入BLE功能模块
sleep(1)
ble = ubluetooth.BLE() #创建BLE设备
ble.active(True) #打开BLE(此时设备将处于就绪态)
#创建要使用的UUID
SERVER_1_UUID = ubluetooth.UUID(0x9011)
CHAR_A_UUID = ubluetooth.UUID(0x9012)
CHAR_B_UUID = ubluetooth.UUID(0x9013)
#创建特性并设置特性的读写权限
CHAR_A = (CHAR_A_UUID, ubluetooth.FLAG_READ | ubluetooth.FLAG_WRITE | ubluetooth.FLAG_NOTIFY, )
CHAR_B = (CHAR_B_UUID, ubluetooth.FLAG_READ | ubluetooth.FLAG_NOTIFY, )
SERVER_1 = (SERVER_1_UUID, (CHAR_A , CHAR_B, ) , ) #把特性A和特性B放入服务1
SERVICES = (SERVER_1, ) #把服务1放入服务集和中
((char_a, char_b), ) = ble.gatts_register_services(SERVICES) #注册服务到gatts
#设置BLE广播数据并开始广播(开始广播后设备将处于广播态)
name = bytes("aabbcc", 'UTF-8')
print("蓝牙开始广播")
ble.gap_advertise(100, adv_data = b'\x02\x01\x06\x02\x0A\x08' + bytearray((len(name)+1,0x09))+name)
#定义一个函数,用作蓝牙事件中断
def ble_irq(event, data): # 蓝牙中断函数
if event == 1: #蓝牙已连接(此时蓝牙将处于连接态)
print("BLE 连接成功")
elif event == 2: #蓝牙断开连接(此时蓝牙将从链接态进入就绪态)
print("BLE 断开连接")
ble.gap_advertise(100, adv_data = b'\x02\x01\x06\x02\x0A\x08' + bytearray((len(name)+1,0x09))+name)#再次启动广播
elif event == 3: # 收到新write消息
onn_handle, char_handle = data #判断是来自那个特性的消息
buffer = ble.gatts_read(char_handle) #读取接收到的消息
print(char_handle, buffer) #打印消息内容
ble.gatts_notify(0, char_handle, 'Hello') #回复Hello
ble.irq(ble_irq) #注册蓝牙中断函数这段代码运行后,通过蓝牙调试软件连接模块后,监听9012特性,可对其发送数据,同时在thonny终端内也可以看到发送的数据,并且每发送一条数据,都会收到来自模块的Notify通道的”Hello"回复。
上述为读写数据创建特定的uuid,下面是较为常用的两种实际应用:
注册电池服务
#创建电池服务和特性的UUID
BATTERY_SERVER_UUID = ubluetooth.UUID(0x180F)
BATTERY_CHAR_UUID = ubluetooth.UUID(0x2A19)
#创建特性并设置特性的读写权限
BATTERY_CHAR = (BATTERY_CHAR_UUID, ubluetooth.FLAG_READ , )
BATTERY_SERVER = (BATTERY_SERVER_UUID, (BATTERY_CHAR, ) , ) #把电量特性放入电池服务
SERVICES = (BATTERY_SERVER, ) #把电池服务服务放入服务集和中
((battery_char,), ) = ble.gatts_register_services(SERVICES) #注册服务到gatts
ble.gatts_write(battery_char, b'\x50') #设置电池电量为80%注册温湿度服务
#创建环境传感器服务和特性的UUID
ENV_SERVER_UUID = ubluetooth.UUID(0x181A) #环境传感器服务
TEM_CHAR_UUID = ubluetooth.UUID(0x2A6E) #温度特性
HUM_CHAR_UUID = ubluetooth.UUID(0x2A6F) #湿度特性
#创建特性并设置特性的读写权限
TEM_CHAR = (TEM_CHAR_UUID, ubluetooth.FLAG_READ , )
HUM_CHAR = (HUM_CHAR_UUID, ubluetooth.FLAG_READ , )
ENV_SERVER = (ENV_SERVER_UUID, (TEM_CHAR, HUM_CHAR, ) , ) #把温湿度特性放入环境服务
SERVICES = (ENV_SERVER, ) #把环境服务放入服务集和中
((tem_char, hum_char, ), ) = ble.gatts_register_services(SERVICES) #注册服务到gatts
ble.gatts_write(tem_char, b'\x06\x08') #设置温度为20.54度(0x0806 = 2054)
ble.gatts_write(hum_char, b'\x09\x07') #设置湿度为18.01%(0x0709 = 1801)
对于一些常用的功能,蓝牙组织联盟已经为其定义好了UUID,我们在开发产品的时候直接使用即可。
16BitUUID定义文档下载地址:https://btprodspecificationrefs.blob.core.windows.net/assigned-values/16-bit%20UUID%20Numbers%20Document.pdf
最后把上面代码结合一起,就可以愉快用蓝牙点灯了!
使用方法:执行代码后,使用谷雨蓝牙连接,并监听9012服务中的read,发送任意数据,收到回复“hello”,发送“led_on”,led打开,收到回复“led on!”;发送“led_off”,led关闭,收到回复“led off!”
from machine import Pin
from time import sleep_ms,sleep
import ubluetooth #导入BLE功能模块
sleep(1)
ble = ubluetooth.BLE() #创建BLE设备
ble.active(True) #打开BLE(此时设备将处于就绪态)
led = Pin(2, Pin.OUT) #led引脚
#创建可读可写可通知的UUID
SERVER_1_UUID = ubluetooth.UUID(0x9011)
CHAR_A_UUID = ubluetooth.UUID(0x9012)
CHAR_B_UUID = ubluetooth.UUID(0x9013)
#创建特性并设置特性的读写权限
CHAR_A = (CHAR_A_UUID, ubluetooth.FLAG_READ | ubluetooth.FLAG_WRITE | ubluetooth.FLAG_NOTIFY, )
CHAR_B = (CHAR_B_UUID, ubluetooth.FLAG_READ | ubluetooth.FLAG_NOTIFY, )
SERVER_1 = (SERVER_1_UUID, (CHAR_A , CHAR_B, ) , ) #把特性A和特性B放入服务1
SERVICES = (SERVER_1, ) #把服务1放入服务集和中
((char_a, char_b), ) = ble.gatts_register_services(SERVICES) #注册服务到gatts
#设置BLE广播数据并开始广播(开始广播后设备将处于广播态)
name = bytes("aabbcc", 'UTF-8')
print("蓝牙开始广播")
ble.gap_advertise(100, adv_data = b'\x02\x01\x06\x02\x0A\x10' + bytearray((len(name)+1,0x09))+name)
#定义一个函数,用作蓝牙事件中断
def ble_irq(event, data): # 蓝牙中断函数
if event == 1: #蓝牙已连接(此时蓝牙将处于连接态)
print("BLE 连接成功")
elif event == 2: #蓝牙断开连接(此时蓝牙将从链接态进入就绪态)
print("BLE 断开连接")
ble.gap_advertise(100, adv_data = b'\x02\x01\x06\x02\x0A\x08' + bytearray((len(name)+1,0x09))+name)#再次启动广播
elif event == 3: # 收到新write消息
onn_handle, char_handle = data #判断是来自那个特性的消息
buffer = ble.gatts_read(char_handle) #读取接收到的消息
print(char_handle, buffer,str(buffer, 'UTF-8')) #打印消息内容
if str(buffer, 'UTF-8')=="led_on":
led.on()
ble.gatts_notify(0, char_handle, 'led on!')
elif str(buffer, 'UTF-8')=="led_off":
led.off()
ble.gatts_notify(0, char_handle, 'led off!')
else:
ble.gatts_notify(0, char_handle, 'Hello')#回复Hello
ble.irq(ble_irq) #注册蓝牙中断函数
]]>pkg up或者使用apt包管理器:
apt updatepkg install proot-distro 或者
apt install proot-distro查看系统列表:
proot-distro list安装Debian系统:
proot-distro install debian安装debian需要下载五十多MB文件,且尽可能保持在梯子连接情况下下载,否则容易失败超时
遇坑提醒:
此处很可能会遇到报错CANNOT LINK EXECUTABLE "curl": library "libssl.so.1.1" not found: needed by /data/data/com.termux/files/usr/lib/libcurl.so in namespace (default),此处很可能是因为事先安装了openssl造成,暂时未找到快速的解决方法,我是清除数据后重新换源安装的,因为后期大部分工作都是在完整Linux上进行
输入指令即可无缝切换系统:
proot-distro login debian如果觉得切换比较麻烦,可以编写个脚本文件实现快速指令切换:
nano debian.sh
输入 proot-distro login debian
保存并关闭之后可以直接输入./debian.sh,即可切换至debian系统
最后只需要给系统换源,即可当做正常linux系统使用
sudo sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
]]>输入指令,使用apt包管理器安装:
apt install openssh或者使用默认包管理器:
pkg install openssh如果安装较慢,可以先换源后再安装,参考文章 Termux——安卓终端快速入门
sshd注意,每次打开termux时ssh服务不会自启,需要手动输入此指令才可以连接
passwd用户名可随意填写,ip为termux的设备ip地址,需要指定端口8022,此端口为termux特有端口
ssh 用户名@ip –p 8022
]]>好久一段时间没折腾树莓派了,上次为了尝试在树莓派刷入安卓系统再次打开了树莓派官方烧录软件,没想到这次更新的内容还不少...

1.7.2版本下载链接:https://yanhy.lanzouu.com/ik7Cv0368zle
(相较于博客内第一篇文章)
新增64位raspbian下载通道
本次刷入的是64位官方raspbian系统
打开镜像烧录器,选择操作系统 -> raspbian OS(other) -> raspbian OS(64bit),也可根据自行需求更换系统

如果sd卡之前有内容或者刷过其他镜像,可以先清空SD卡,步骤如下:
选择操作系统 -> 擦除 ,再选择目标SD卡,点击 烧录 按钮即可

然后重新根据步骤一选择目标操作系统,并选择要烧录的SD卡即可
此功能为新版本烧录器特有内容,选择镜像与sd卡后,会在左下角显示设置图标


点击设置图标后,会打开一个弹窗(每次加载镜像均为镜像的默认设置),在弹窗内可进行相关初始化设置,以下打钩的为本文推荐修改的配置内容:
(√)开启SSH服务
(√)设置用户名与密码(仅选择密码登陆有效,以下请自行修改)
(√)配置WIFI(尽可能用2.4GHZ的wifi,5GHZwifi不一定支持,默认自动填充电脑连接的wifi)
(√)语言设置(会自动填充电脑内设置,但选项内没有设置语言选项,可能需要进系统后修改)
永久设置(个性化选项,可自行修改)
确认上述步骤设置等配置完成后,点击烧录,等待其下载完成并烧录结束即可(该烧录器会一遍下载一边烧录,速度有所提升)


将烧录好的sd卡插入到树莓派,确保刚刚设置的热点网络已开启,上电自动开机。
本文使用有线网络连接树莓派,并使用USB视频采集卡将树莓派HDMI接口连接至电脑,使用OBS查看树莓派图形输出


此时系统已经启动完毕,用户名也已经改成了之前预设值的用户

本次官方烧录器可能考虑到更多用户的需求以及更低的使用门槛,对烧录器添加更方便的设置选项,总体来说对用户体验优化挺好的。
]]>为了学习linux,很多时候都是选择装个虚拟机,或者买个服务器来练习linux操作。除了使用wsl或者虚拟机之外,还有一个更便携的linux终端,那便是安卓上的Termux...

Termux这个软件,可以说是安卓上的linux虚拟机,又不完全是个虚拟机。据官方文档介绍:
Termux is an Android terminal emulator and Linux environment app that works directly with no rooting or setup required. A minimal base system is installed automatically - additional packages are available using the APT package manager.”
“Termux 是一个Android 终端模拟器和 Linux 环境应用程序,无需 root 或设置即可直接运行。自动安装最小的基本系统 - 使用 APT 包管理器可以使用其他包。”
在安卓系统本身环境下,Termux得到了很好的运行优势,无需额外虚拟化操作即可使用linux操作界面。
在使用过程中,只需要像Debian系一样操作即可,你可以使用pkg安装软件包,也可以更换为apt软件包管理器等等。它可以运行很多Arm及Arm64的项目,比如nodejs、python、java等等。
Termux可以用来运行脚本、编译小型项目、学习linux系统操作而不会轻易影响主系统等。
首先启用科学上网环境,打开Google Play应用商店搜索Termux(该版本较低,可以去F-Droid或者gothub下载),下载安装,安装后打开(期间保持科学网络环境)
也可以去github下载:https://github.com/termux/termux-app/actions/
找到最新构建的版本,选择对应版本下载
打开后会加载几秒钟,随后会进入初始界面(如下图),此时可以关闭科学上网环境


在Termux中输入指令 termux-change-repo 并回车,将会进入需要更换的。库列表
一般换源只需要更换主仓库(Main repository)即可,空格可以选择取消选择要更换的仓库,默认主仓库是被选择状态
选择后直接回车,进入选择镜像源列表。使用“↓”移动并用空格选择到BFSU源,然后回车即可更换并触发update。这个是国内的北京外国语大学开源软件镜像站,在软件更新、安装时速度会快上不少。
在运行update时可能会报错,因为部分软件包可能未收录原因,但也可以正常使用。如果有特殊需要或者强迫症等,可以参考下面的手动换源到其他源。
推荐清华源(复制执行):
sed -i 's@^\(deb.*stable main\)$@#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/termux-packages-24 stable main@' $PREFIX/etc/apt/sources.list
sed -i 's@^\(deb.*games stable\)$@#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/game-packages-24 games stable@' $PREFIX/etc/apt/sources.list.d/game.list
sed -i 's@^\(deb.*science stable\)$@#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/science-packages-24 science stable@' $PREFIX/etc/apt/sources.list.d/science.list
清华源手动修改文件:
执行 apt edit-sources
将文件内第二行deb及后面文件删除
粘贴 deb https://mirrors.tuna.tsinghua.edu.cn/termux/termux-packages-24 stable main
中科大源:
sed -i 's@packages.termux.org@mirrors.ustc.edu.cn/termux@' $PREFIX/etc/apt/sources.list手动更换源后可以输入 pkg up 或者 apt update && apt upgrade来更新软件包,有时候会提示是否安装更新(y/n),推荐选择默认选项,如下图默认选项为N,如果有需要的话可以自行决定。更新过程较长且耗费较多流量,建议wifi下更新

到了这一步,Termux本身已经配置完成了,你可以在termux上练习使用linux操作,也可以在上面安装相关环境来部署一些小项目。
如果手机有root,可以执行sudo权限,需要先安装sudo包:pkg install tsu
脚本编程环境软件包:nodejs、python,推荐使用独立配置环境方法,当然如果没有特殊需求也可以直接使用apt install python或者apt install node,执行后输入y即可安装。经测试,从apt安装的版本中,nodejs版本为14.15.4;python版本为3.9.7
也可以在终端里面安装java环境,可以参考我之前博客写的树莓派安装java教程,同为arm架构,安装过程大同小异。
如果喜欢折腾,甚至可以在termux安装xfce4桌面,然后通过配置vnc来远程连接termux的可视化桌面
当然,也可以在termux配置静态博客hexo,一方面可以当做本地服务器,浏览器访问127.0.0.1即可访问自己的网站;另一方面,也可以在本地折腾好后打包到服务器。
termux可以直接ssh连接到安装linux系统的服务器。连接方式:ssh root@10.111.111.111 其中,root@表示使用root用户连接到服务器。
termux我个人认为并非是独立的虚拟机,还是基于安卓系统操作。因此如果需要termux与系统进行文件交互,并非是难事,创建个软连接即可。(有root权限的用户还可以直接去根目录找termux内系统的/目录)
首先开启termux访问手机存储的权限termux-setup-storage,然后手机会弹窗是否授权termux访问储存权限,点击确认
软链接相对于文件夹的快捷方式,创建在termux的home目录,便于访问,同时也可以用文件管理器去修改文件夹内容。先用文件管理器在储存主目录创建文件夹为share(可自行修改),然后打开终端,输入ln -s /storage/emulated/0/share share即可在home目录创建share文件夹,指向主目录的share文件夹。
同时,授权了储存访问权限后会在home目录生成 storage 文件夹,可以通过这个文件夹访问到几个基本文件夹,如download等

在termux启动时会显示welcome to Termux! 欢迎信息,可以手动编辑nano $PREFIX/etc/motd来修改启动信息
可以使用Termux-ohmyzsh来美化终端,安装sh -c "$(curl -fsSL https://github.com/Cabbagec/termux-ohmyzsh/raw/master/install.sh)" 由于github访问速度不定,可能下载较慢
第一次打开脚本时会列出可调整的颜色、字体,可以随意选择一个,后续要更改颜色与字体,可以输入~/.termux/colors.sh修改颜色或者~/.termux/fonts.sh修改字体
其他美化脚本推荐:bash <(curl -L gitee.com/mo2/linux/raw/2/2)
hexo静态博客特点是无需数据库,只需要在本地使用markdown编写文章后使用hexo框架配合精美的模板即可生成美观的博客页面,适合部署到github等代码托管站。如果有需要,我后续将会出个专门博客的教程。例如下图中,我同学搭建的个人博客站

工具:nodejs软件包、hexo本体、git软件包
安装:
apt install nodejs
apt install git
npm install hexo-cli -g
npm install hexo-deployer-git --save
apt install openssh接下来初始化hexo:
hexo init blog
cd blog
hexo g
hexo s当输入完hexo s后,显示如下图,即可证明hexo框架启动成功,此时可以去打开手机浏览器,输入localhost:4000即可访问自己搭建的第一个网站——hexo博客初始页(如果发现后台很多报错,一方面可能是缺失模块,另一方面可能因为arm架构的设备不能完美支持,只能在本地搭建提供测试等)

如果需要关闭博客,键入Ctrl+c即可停止
vnc用于linux的远程桌面控制比较多。这里简单讲述一下如何对termux进行vnc控制
工具:x11-repo、tigervnc、xfce桌面
安装:
apt install x11-repo
apt install tigervnc
apt install xfce
vncserver输入完vncserver后会提示设置密码,然后确认密码,接着会提问是否要设置只读的密码(其他功能用),一般选择N即可
引入vnc全局变量:export DISPLAY=":1"
先退出vnc进程:vncserver -kill :1
修改配置文件nano .vnc/xstartup在最后一行加入startxfce4,添加后先ctrl+o保存,在回车确认,在ctrl+x退出编辑
启动vnc指令:vncserver
结束vnc指令:vncserver -kill :1
手机下载一个VNCviewer,添加新连接,ip为localhost:5901,名字随意,点击连接即可(如果报警告可以直接无视,继续连接即可)
连接过程会提示输入密码,密码为刚刚设置的vnc密码,连接成功后如下图
如果想要每次启动终端自动启动vnc的话,可以输入nano ~/.bashrc,在最后一行添加vncserver即可
vnc可能会中文显示异常等等,需要手动下载字体之类的,本文不再拓展太多
宝塔面板,这个让网站运营人员耳熟能详的网站管理面板,功能强大,操作简单易管理,还可以一键部署环境,很多人都使用这个管理网站...在termux中安装宝塔面板,性能较低,仅供参考与学习,不适用于正式生存环境
工具:wget软件包,tsu指令软件包,宝塔安装脚本,浏览器,较长时间
执行指令apt install wgetapt install tsuwget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh
如果手机已经root并授权,将会一路执行;如果没有root或者未授权,会显示“are you rooted?”
安装过程较长,由于我手机没有root,所以分享一下在树莓派安装的经验:
执行第三个长指令后,会快速加载安装环境,需要手动输入y才能继续安装。之后要等待很久,安装完会在最后几行显示http://127.0.0.1:8888/xxxx ,其中xxx显示宝塔面板的安全入口,需要把整条网站复制到浏览器才能进入面板;同时会在网址下方显示默认用户名和密码,可以用这个登陆到管理面板
宝塔面板会保持每次打开终端自启动,如果需要更改入口限制开关、账号密码等,可以输入sudo bt(每次只能更改一个东西,再修改需要重新输入指令),然后如下图所示:
一般我个人喜好输入11关闭入口限制,输入8更改默认端口,输入5更改密码,输入6更改用户名,其他保持默认
第一次登陆宝塔网页,会提示要安装环境。推荐使用LNMP环境(L:linux;N:Nginx;M:mysql/MariaDB;P:PHP),也是大部分网站框架常用环境。如果是在正常服务器安装,推荐使用编译安装,但如果在termux内,使用快速安装即可,编译安装会占用大量系统性能、资源,而且termux安装的宝塔并不适合投入正常使用环境中。至于安装版本,一切默认即可,反正后面也可以手动更换版本,而且termux也用不到太多。
在安卓终端里面体验一把真正的Ubuntu系统!(sudo仍需要root权限)
工具:proot-distro软件包(管理子系统)
安装:
apt update
apt install proot-distro 安装完后输入proot-distro list可以查看这个软件包支持安装的系统列表
这里我们安装Ubuntu系统,可以自行选择更改系统,指令如下:proot-distro install ubuntu
等显示出Now run xxxxxxx时便为安装成功,安装时间很短,因为都是同一个内核,无需重新下载完整版Ubuntu(也可以多次下载不同的系统,每次下载或者启动只需要输入列表中系统名称即可)
启动Ubuntu时,只需要输入proot-distro login ubuntu即可启动(如果下载多系统,也可以把Ubuntu替换成其他名字来启动)
在Ubuntu内输入exit即可退回默认操作系统
每次启动系统都需要很长一段指令,因此这里提供一种简化指令方法:
在home目录指令nano ubuntu.sh,然后在里面输入proot-distro login ubuntu,接着ctrl+o保存,ctrl+x退出编辑,再修改文件读写权限chmod -R 777 ./ubuntu.sh,之后就可以通过执行脚本./ubuntu.sh快速进入了!
部分插图内容来自我同学的个人博客:https://jmzdd-jjly.website/ 欢迎大家前往访问!
]]>作为一个11.5寸的大屏幕设备,快要和我电脑屏幕差不多大了,刚开始我重度使用这个pad刷视频、刷酷安等,后面也是使用spacedesk软件来进行电脑屏幕拓展。
在我看来这个设备的主要优势就是屏幕大,用起来观感很爽,其他感知性不强。小新pad的国行系统并没有和其他平板ui一样有很好的平板体验,和大屏手机的ui相差无几,且生态并不好,QQHD版经常未响应卡顿等。
后来将其刷到了国际版,自带谷歌全家桶,基本上是没有对ui深入定制,当大屏手机用还是挺舒服的。直到后面我打算买支笔拿来办公用,才想着把这玩意刷会国行,可能对办公等支持更好一点。
如以下资料文件丢失,可在本人发布的帖子下(如酷安)或者本博客内留言,会及时处理
由于资料过久,网盘曾经清理过,因此下面部分链接失效,补一下nas里面备份过的文件: https://pan.baidu.com/s/1VCXuR_9HN0Cosk-e-5tI1Q?pwd=x48x 提取码: x48x
暂时只补档镜像包相关,其他刷机工具是通用的,可以网上搜索其他工具或者看博客内其他刷机文章,工具可以直接拿来用(毕竟都是高通那些事)
由于本文章是教刷回国行版,所以主要提供国行版刷机包
12.5.057(安卓11)链接:https://pan.baidu.com/s/1cqOjLNQTxtm_Gn_PhaxHUA 提取码:x88j (此版本系统包只能通过下面刷入安卓10后去系统更新app手动升级上去,无法9008)
12.0.341(安卓10)链接:https://pan.baidu.com/s/1su_eCOLC3BIhEcaWe77LkQ 提取码:942r (本教程所用版本,可以9008刷入)
高通usb驱动:链接:https://pan.baidu.com/s/10oanVfv19NoIBaPQJcvTVQ 提取码:5v2o
QPST工具:链接:https://pan.baidu.com/s/1BP1Jm_Eld5OYoHUzqslflA 提取码:h0zc
国际版包也给一个吧,刷入方法相同
安卓10:链接: https://pan.baidu.com/s/1a3cHhYzZzcxORn_sXxCvPA 提取码: r83r(可以9008刷入,方式同本教程)
其他资源:
USB3.0数据线一条
win10电脑(其他系统未测试)
小新pad(电量充足、备份完成)
下载好工具、驱动、系统包后,接入数据线到电脑准备开始刷机。
1、解压QUD.WIN.1.1 Installer-10037.3后打开setup.exe开始安装驱动,安装过程全部默认即可 
2、解压qpst.win.2.7_installer_00488.1后,打开文件夹内的QPST.2.7.488.1.exe安装器,安装完后可以在开始菜单内找到QFIL应用程序,这是QPST高通9008刷机工具(此工具仅英文版且不要误操作,小心变砖) 

3、解压系统包TB-J606F_CN_WIFI_USER_Q00016.0_Q_ZUI_12.0.341_ST_201102_qpst(安卓10)

4、解压后将平板关机,电脑打开设备管理器,然后展开 端口 分支(如果没有先不展开),插上usb数据线后按住音量+键,直到看到Qualcomm HS-USB QDLoader 9008的设备出现为止

5、回到QPST软件,打开后如下图,先点击顶栏的Configuration,再点击FireHose Configuration

6、修改,确保和下图红框一模一样(其他地方不需要修改也不要乱改),修改完点击 OK
变砖警告:注意,一定不能选择 Erase All Before Download!否则你平板的主板底层可能会被清空,导致变砖,只能走售后换主板!无法救砖!

7、回到软件主页面,Select Build Type 选项修改为 Meta Build ,
再点击Select Meta Build 选项里面靠右侧的Load Context...按钮

8、路径选择正确后会显示下图的文件,选中点击打开即可,同时主界面会变成下图二


9、最后点击右上角的 Select Port 选择端口(如果电脑只连接了pad,应该会只有一个端口显示,端口号无需相同)

10、最后确认一遍信息,参考下图(除了端口号、路径不一样,其他应该一样)

11、点击右侧Download Content即可下载固件到pad中(时间较长,如果看到进度条不动了,不是卡住,这软件的进度条就是这样,慢慢等就好)看到 finish Download就是下载成功,平板会自动重启开机

开机完成

**此方法同样适用于国际版(安卓10),或者其他系统版本,需要支持qpst刷入(如果支持一般文件名后缀会标识)
如果想升级到最新版本系统,可以手动下载安装包或者手动更新版本**