小米ai音箱系统简单分析

小米ai音箱系统简单分析

deny
2019-04-23 / 7 评论 / 1,196 阅读 / 正在检测是否收录...

前言

这是一篇关于小米ai音箱(以下简称小爱音箱)的系统分析,为什么会涉及这一话题?这期间详细说的话难以说明白,总结来说就是为了将小爱同学接入homeassistant(有关详情请百度,以下简称hass)。如果你了解hass后并且也打算倒腾倒腾,或者说想看看大神们是怎么玩hass的话,这里也推荐一个网站 hassbian
小爱音箱内部电路板是有两个版本的,黑色的电路板和绿色的电路板;而黑色是能够修改系统文件的,绿色则不能;(不幸的是我手里头的小爱音箱就是绿色的,也一直靠着一套“生命维持系统”才能实现开机自启和守护进程等功能;)所以为了达到修改系统文件的目的,对小爱音箱的系统进行了大致的分析。

正文

通过ssh连接上小爱音箱,用户名为root,无密码。(前提是开启了ssh,参考文章
使用df命令查看分区挂载情况:

root@mico:~# df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/mtdblock4           31.9M     31.9M         0 100% /
tmpfs                   121.2M      1.1M    120.2M   1% /tmp
tmpfs                   512.0K         0    512.0K   0% /dev
/dev/ubi0_0             136.5M     31.8M    100.0M  24% /data

根目录可用空间居然为0,遂查看/etc/fstab文件,可里面也啥都没有;
多番查找后发现了/proc/mounts文件:

root@mico:~# cat /proc/mounts
/dev/mtdblock4 / squashfs ro,noatime 0 0
proc /proc proc rw,nosuid,nodev,noexec,noatime 0 0
sysfs /sys sysfs rw,nosuid,nodev,noexec,noatime 0 0
tmpfs /tmp tmpfs rw,nosuid,nodev,noatime 0 0
tmpfs /dev tmpfs rw,nosuid,relatime,size=512k,mode=755 0 0
devpts /dev/pts devpts rw,nosuid,noexec,relatime,mode=600,ptmxmode=000 0 0
debugfs /sys/kernel/debug debugfs rw,noatime 0 0
pstore /sys/fs/pstore pstore rw,relatime 0 0
/dev/ubi0_0 /data ubifs rw,relatime 0 0

可以看出根目录是squashfs文件系统,挂载属性为只读。
因为文件系统是squashfs的缘故,所以就算挂载属性是读写也是无法对系统文件进行修改的。
直接修改是无法实现了,也只能想办法“曲线救国”了;于是乎想到了刷机。
下面就不再详述过程,只记录大概;
1.44.4刷机包官方版下载地址:https://bigota.miwifi.com/xiaoqiang/rom/s12a/mico_all_f86a5_1.44.4.bin
查看刷机包内文件:/bin/miso -c <刷机包文件> [-f 指定文件]

root@mico:/data# /bin/miso -c mico_all_f86a5_1.44.4.bin
model:3
file type:0
Segment 0: Offset 0x30
Filename mico_version
Flash addr = 0xffffffff, length = 0x201, partition = 65535
Segment 1: Offset 0x280
Filename root.squashfs
Flash addr = 0xffffffff, length = 0x1f53899, partition = 65535
Segment 2: Offset 0x1f53b60
Filename boot.img
Flash addr = 0xffffffff, length = 0x4a6abe, partition = 65535
Segment 3: Offset 0x23fa660
Filename u-boot.bin.usb.bl2
Flash addr = 0xffffffff, length = 0xc000, partition = 65535
Segment 4: Offset 0x24066a0
Filename u-boot.bin.usb.tpl
Flash addr = 0xffffffff, length = 0x81c00, partition = 65535
Segment 5: Offset 0x24882e0
Filename dtb.img
Flash addr = 0xffffffff, length = 0x9c40, partition = 65535

刷机包解包命令:/bin/miso -r -x <刷机包文件> [-f 指定文件]

root@mico:/data/rootfs# miso -r -x mico_all_f86a5_1.44.4.bin
root@mico:/data/rootfs# ls
boot.img  dtb.img  mico_all_f86a5_1.44.4.bin  root.squashfs  u-boot.bin.usb.tpl  mico_version  u-boot.bin.usb.bl2

nand闪存分区情况:

root@mico:~# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00200000 00020000 "bootloader"  #uboot
mtd1: 00800000 00020000 "tpl"
mtd2: 00800000 00020000 "boot0"       #系统0的kernel boot.img文件刷入分区
mtd3: 00800000 00020000 "boot1"       #系统1的kernel boot.img文件刷入分区
mtd4: 02000000 00020000 "system0"     #系统0的rootfs root.squashfs文件刷入分区
mtd5: 02000000 00020000 "system1"     #系统1的rootfs root.squashfs文件刷入分区
mtd6: 0a000000 00020000 "data"

查看当前的启动系统:

fw_env -g boot_part

切换系统:

fw_env -s boot_part <boot0或boot1>

root.squashfs里面就是根目录文件系统,可以通过unsquashfs命令将其解包,再用mksquashfs命令打包后便可以刷入到小爱音箱的system分区。(这俩命令小爱音箱里都没有,要另外的Linux系统安装后操作)
具体命令:

unsquashfs root.squashfs #解包后会出现一个名为squashfs-root的文件夹,可以对里面的文件进行修改
mksquashfs squashfs-root <输出文件名> -comp xz -all-root #输出文件名自定义,如果是文件已经存在,请先删除!
mtd write <打包后的文件> </dev/mtd4或者/dev/mtd5> #将打包后的文件通过该命令刷入系统,注意刷入的文件的版本号与被刷入的系统的版本号一致性;

其他发现&补充说明

/etc/ssl/certs 文件夹下存放这各个证书签发机构的证书,想要劫持https流量的可以从这里下手。
/usr/bin 目录下有很多有意思的命令,可以去分析分析

系统更新命令 : /bin/ota #这是一个shell脚本文件
对这个文件一路分析下去就能知道系统的刷机机制了。

结束

至此已经能够实现通过刷机的方式修改系统文件了,但是还有一些点我可能没有描述的那么详细,所以在你没有经过具体分析和详细了解其中刷机机制前,请谨慎刷机。
不过也是为了方便进行刷机,也打算开一个repo,将这些操作写成脚本方便大家。
github地址:https://github.com/denymz/mi_aispeaker

0

评论 (7)

取消
  1. 头像
    qfhbsaronb
    Windows 10 · Google Chrome

    2025年10月新盘 做第一批吃螃蟹的人coinsrore.com
    新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com
    新车首发,新的一年,只带想赚米的人coinsrore.com
    新盘 上车集合 留下 我要发发 立马进裙coinsrore.com
    做了几十年的项目 我总结了最好的一个盘(纯干货)coinsrore.com
    新车上路,只带前10个人coinsrore.com
    新盘首开 新盘首开 征召客户!!!coinsrore.com
    新项目准备上线,寻找志同道合 的合作伙伴coinsrore.com
    新车即将上线 真正的项目,期待你的参与coinsrore.com
    新盘新项目,不再等待,现在就是最佳上车机会!coinsrore.com
    新盘新盘 这个月刚上新盘 新车第一个吃螃蟹!coinsrore.com

    回复
  2. 头像
    kmitgnslik
    Windows 10 · Google Chrome

    2025年10月新盘 做第一批吃螃蟹的人coinsrore.com

    回复
  3. 头像
    lpyrgbjhwn
    Windows 10 · Google Chrome

    新盘 上车集合 留下 我要发发 立马进裙

    回复
  4. 头像
    guvhfqbnpa
    Windows 10 · Google Chrome

    真棒!

    回复
  5. 头像
    马克
    Windows 7 · Google Chrome

    博主,可以提取固件刷到京东mini上面吗?

    回复
    1. 头像
      deny 作者
      Windows 10 · Google Chrome
      @ 马克

      正常来说是不行的

      回复
      1. 头像
        张三疯
        Windows 7 · Google Chrome
        @ deny

        博主,能修改小爱同学屏幕的显示方向么?

        回复