安卓通过 adb 将 TF(SD)卡用作内置存储

手上有个 360 N6,平时当备用机,存点音乐视频什么的,存储空间不太够,于是乎买了张 TF 卡插上。(其实应该去看看紫光的超级 SIM 卡能不能用的,深圳联通公众号上也发可以参加预存话费赠卡的活动了)

我的第一部智能手机买的是黑莓 Priv,插卡之后会提示格式化成外置的便携式存储(可以拔出来在不同设备,比如电脑上交换数据)还是内置存储(不能用在其它机器上),并且使用非常正常。

好了问题来了,N6 插卡之后只能格式化成外置存储(?),这就很蛋疼,插卡的意义似乎就不大。后面发现其实可以用 adb 开启,虽然好像还是有点问题。

But how?

可以用 sm 来做到。

首先连续多次点按设置->系统->关于手机->版本号,打开开发者选项,然后在开发者选项中打开 USB 调试。此时可以把手机连接到电脑上了。

我正在使用 Android Studio,安装过 Android SDK,可以直接在 C:\Users\domain\AppData\Local\Android\Sdk\platform-tools 中找到 adb 工具。没有也没关系,从 SDK平台工具版本说明 | Android 开发者 | Android Developers 可以下载到独立的工具包。

已经有了 platform-tools 之后,进入该目录,按住 Shift 再点击鼠标右键可以在该目录打开 PowerShell。此时运行:

PS C:\Users\domain\AppData\Local\Android\Sdk\platform-tools> .\adb.exe devices
List of devices attached
* daemon not running; starting now at tcp:5037
* daemon started successfully
1f95707d        unauthorized

显示未授权,此时手机上应该会弹窗是否允许电脑进行调试(以及一个密钥),允许后再次执行:

PS C:\Users\domain\AppData\Local\Android\Sdk\platform-tools> .\adb.exe devices
List of devices attached
1f95707d        device

此时可以:

PS C:\Users\domain\AppData\Local\Android\Sdk\platform-tools> .\adb.exe shell
QK1707:/ $

有了手机的 Shell 了,尝试 sm 工具查看存储:

QK1707:/ $ sm list-disks
disk:179,64

如果手机允许:

QK1707:/ $ sm has-adoptable
true

反之则可能需要尝试 sm set-force-adoptable true。接下来 就可以:

QK1707:/ $ sm partition disk:179,64 private

来将存储卡格式化为内置存储。如果执行:

QK1707:/ $ sm partition disk:179,64 mixed 30

可以将部分空间格式化为内置存储,另一部分(30%)作为便携式存储。

此时可以在设置中看到存储卡已经被设置为内置存储了。发现容量显示有问题,而且迁移也有点问题。网友分享格机后,安装应用不要打开马上迁移就没有问题。决定这几天格机再试一下。

引用:
android – How to turn a portable SD card into internal storage via ADB command? – Stack Overflow
透過ADB方式開啟與配置Adoptable Storage空間(免root) @ 老梁’s blog :: 隨意窩 Xuite日誌
360N7Lite免root安装应用到内存卡的方法及其它玩机教程-更新自动安装到内存卡_360社区

PowerShell Get-FileHash

Get-FileHash
   [-Path] <String[]>
   [[-Algorithm] <String>]
   [<CommonParameters>]
PS D:\Downloads> Get-FileHash .\cn_windows_10_enterprise_ltsc_2019_x64_dvd_9c09ff24.iso -Algorithm SHA1 | Format-List   

Algorithm : SHA1
Hash      : 24B59706D5EDED392423936C82BA5A83596B50CC
Path      : D:\Downloads\cn_windows_10_enterprise_ltsc_2019_x64_dvd_9c09ff24.iso

支持的算法:
SHA1, SHA256, SHA384, SHA512, MD5。

引用:
Get-FileHash

K2P 路由器刷固件

现在应该已经没有什么货了,还在卖的不是旧就是价格已经不值得买了。写这篇…就当纪念一下吧。

相关链接可以参考一下:

不漏油的路由器不是好矿机——矿渣路由器盘点_值客原创_什么值得买
一个垃圾佬的2019年终总结——盘点这一年好玩的矿渣_值客原创_什么值得买
捡矿渣一时爽,一直捡一直爽——年度矿渣盘点_值客原创_什么值得买

配置应该是 MT7621A,RAM 128M,Flash 16M,全千兆网口,没有 USB 接口。

按照惯例,先刷入 Breed。先到 Boot and Recovery Environment for Embedded Devices (BREED) 准备好 breed-mt7621-phicomm-k2p.bin

由于没有后门开 SSH,对于部分版本的固件,恩山上有个比较简单的方法就是用 phitools 的激活 Telnet 工具(有空再研究下原理好了),也可以用其它方法开启。例如,K2/K2P/K3/K3C 新版固件 Telnet 激活工具 – 斐讯无线路由器以及其它斐迅网络设备 – 恩山无线论坛

开启Telnet之后,将事先准备好的Breed传入。先md5sum验证bin文件是否损坏。然后刷入。

root@K2P:/tmp# md5sum breed-mt7621-phicomm-k2p.bin
root@K2P:/tmp# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 01000000 00010000 "ALL"
mtd1: 00030000 00010000 "Bootloader"
mtd2: 00010000 00010000 "Config"
mtd3: 00010000 00010000 "Factory"
mtd4: 00050000 00010000 "permanent_config"
mtd5: 00f60000 00010000 "firmware"
mtd6: 00c48b96 00010000 "rootfs"
mtd7: 00200000 00010000 "rootfs_data"
root@K2P:/tmp# mtd -r write /tmp/breed-mt7621-phicomm-k2p.bin Bootloader

静待重启。重启后应该能正常进系统。直插 LAN1 接口,按住 RESET(别急着放开,建议拿个东西垫着不然可能有点痛),插上电源线。此时访问 192.168.1.1 应该能进入 Breed Web 控制台。

同样,备份->恢复出厂设置->更新固件即可。

Newifi3 路由器刷固件

通常称为新路由3,CPU 是 MT7621A,内存 512MB,32MB Flash,1 个 USB3.0 口,全千兆网口。经常被拿来和 K2P 比较,新3的无线算是一个比较大的槽点吧,其它应该还好(除了漏油)。

整了一台来学习 OpenWRT。现在好像存货量还很大,价格还不错。

到手先刷入 Breed。这是一个 BootLoader,刷入后,你就能在 Breed 中刷入固件了。这样通常能保证路由器不会变砖,即使刷了错的固件。有关 Breed 的更多信息,可以跳转恩山上 hackpascal 的帖子AR/QCA/MTK Breed,功能强大的多线程 Bootloader – OPENWRT专版 – 恩山无线论坛了解。

备份一个方便自己下载。来源:新路由3 (Newifi D2) 免拆机免解锁刷 Breed 教程 – newifi无线路由器及网络设备 – 恩山无线论坛

为了刷入这个解锁文件,按照上面帖子教程操作即可。主要步骤就是:

  • 开启 SSH,这样就可以在命令行中任意控制路由器了。解锁管理界面后访问http://192.168.99.1/newifi/ifiwen_hss.html(后门?),显示 success 就 OK。
  • 把解压得到的 newifi-d2-jail-break.ko 传到路由器中。你可以有无数种方法来做到这一点,包括但不限于直接 SFTP,启动一个文件服务器(比如 HTTP Server)给路由器下载之类的方法。
  • SSH 中,切换至你刚传入文件的所在文件夹,执行 insmod newifi-d2-jail-break.ko 即可。静待路由器重启。

此时应该准备一份你想要刷入的固件。网线只插入 LAN1,连接电脑,按住 reset(新三建议用取卡针,别急着放开)然后连接电源线。闪灯后不久应该就能在电脑上通过 192.168.1.1 来访问 Breed 的 Web 控制台了。

这个时候可以随意烧写你想要的固件了。备份->恢复出厂设置->更新固件,选择你想要的固件即可。

Node.js http-server

体验应该要好得多。如果你想把它当作一个简单的控制台上的 HTTP Server,可以先使用 npm 安装:

npm install --global http-server

然后就可以使用了:

http-server [path] [options]

使用 -p--port 来指定端口;使用 -a 来绑定地址;使用 -d 来指定目录。更多选项可以看文档。

你也可以直接:

npx http-server [path] [options]

引用:
http-server – npm
http-party/http-server: a simple zero-configuration command-line http server
The npm Blog — Introducing npx: an npm package runner

Python SimpleHTTPServer

这篇并不是在讨论 Python HTTP servers 的各种用法,而是记录给某些懒人们用的如何启动 SimpleHTTPServer。

正如其名,它只是个简单实现,因为安全等因素,你不应该把它用于生产环境。

如果你正在使用 Python2,那么你应该:

python -m SimpleHTTPServer 8000

如果你正在使用 Python3,那么:

python -m http.server 8000 --bind 127.0.0.1

从 3.4 开始,引入了参数 --bind;从 3.6 开始,参数 --bind 支持 IPv6。

从 3.7 开始,可以使用 --directory 来指定目录。

引用:
SimpleHTTPServer — Simple HTTP request handler
http.server — HTTP servers

CMake 指定源码目录和构建目录

在 CMake 3.13 或更新的版本中,可以使用:

cmake -S . -B build -G "Unix Makefiles"

来指定当前目录为源码目录,构建二进制文件到 build 文件夹中。

对于 CMake 3.13 之前的版本,需要给定没有写在文档中的参数:

cmake -H. -Bbuild -G "Unix Makefiles"

(参数和目录之间没有空格)

引用:
configuration – Getting CMake to build out of source without wrapping scripts – Stack Overflow