最近了了一些琐碎的事情,颇感欣慰。首先当然是跟又耳哥一起把退役的微波炉给复活了的事。那个微波炉服役十多年,不明不白就歇了,实在可惜。经过又耳哥跟我俩人的一通忙活,又是买电线又是买保险,顺带还买了磁控管这种核心部件,又是量电流又是量电压,终于成功地把它鼓捣好了。而且还发现了买的那个备用磁控管反而是个坏的的事实,把它退回去了。其次就是想了想办法,让访问 ChatGPT 能够稍微更容易一些。正好手里有闲置的设备,再起用一下,效果也相当棒。
再有就是之前在 SD968 上小写了一个程序就搁下了(当然了,其实还改了改设备的启动/锁定画面),最近看到硬盘里制作的全系统映像文件(前些时还有网友要过这个),在琢磨着能不能直接把它当作研究对象,而勿需每次都插真实设备到电脑上然后再 adb 勘察呢?在 WSL 的配合下,结果是可以!
使用的系统是 Windows 10,一开始是在 WSL1 下操作。映像文件所处路径在 E:\Dandy\sd968.img
,在 WSL 里对应的路径是 /mnt/e/Dandy/sd968.img
。首先使用 partx
命令查看映像文件的结构,如下:
1 2 3 4 5 6 7 8 |
○ → partx --show sd968.img NR START END SECTORS SIZE NAME UUID 1 161792 489471 327680 160M 55def1c6-01 2 47104 112639 65536 32M 55def1c6-02 3 112640 161791 49152 24M 55def1c6-03 4 489472 3799039 3309568 1.6G 55def1c6-04 5 489488 684815 195328 95.4M 55def1c6-05 6 684832 3799039 3114208 1.5G 55def1c6-06 |
粗略一扫就可以看出,重点是超过 1GB 的条目。但是超过 1GB 的条目竟然有两个,一个 1.6GB 一个 1.5GB,而系统所在的物理 TF 卡总共容量也才 2GB,这是怎么回事?在这儿老夫还走了一节弯路,因为当时用眼睛从上往下扫描的时候,看到 1.6GB 这一条就没往下看了,直接拿它对应的起始扇区号就去计算挂载偏移去了,结果死活都是挂载失败。后来用 DiskGenius 打开映像文件看了一眼才发现,1.6GB 是 MBR 分区格式下的一个扩展分区,数据其实是在扩展分区内的那个 1.5GB 的分区里。计算便宜要用 1.5GB 分区的起始扇区号 684830
,用它乘以扇区大小即可得出该分区在映像文件内的起始偏移是 512 * 684832 = 350633984
。以此数据来构造挂载该分区的命令行,
1 |
mount -v -o offset=350633984 -o loop -t ext4 /mnt/e/Dandy/sd968.img /mnt/sd968/ |
但是,在执行后总是出现 mount: /mnt/sd968/: mount failed: Operation not permitted.
的错误信息。经过若干盲目尝试后,有那么一丝感觉,WSL1 可能不支持这种目的的操作。于是决定转战 WSL 2。
首先执行了 wsl --set-default-version 2
,然后执行 wsl --install -d Ubuntu-22.04
。安装成功(包括第一次启动时的密码初次设置之类的工作)后进入,当然是先 sudo mkdir /mnt/sd968
了,接着执行 sudo mount -v -o offset=350633984 -o loop -t ext4 /mnt/e/Dandy/sd968.img /mnt/sd968/
就发现上面在 WSL1 里看到的错误信息不见了,代之以 mount: /dev/loop0 mounted on /mnt/sd968.
,挂载就此成功。俺可以方便地查看其中的文件组织了。