阶段一:初始探索与串口连接
1.1 设备信息
| 项目 | 参数 |
|---|---|
| 型号 | ZTE B860AV1.1-T2 |
| SoC | ZX296716 (ARM Cortex-A53, 4核) |
| RAM | 990MB |
| 存储 | 8GB eMMC |
| 系统 | Android 4.4.2 (API 19) |
| 用途 | IPTV 机顶盒 |
1.2 串口连接
硬件连接
设备有串口调试接口,使用 FTDI FT232R USB 转串口适配器连接。
连接命令
bash
# 使用 screen 连接
screen /dev/ttyUSB0 115200
# 退出 screen
# Ctrl+A → K → Y注意事项
- 波特率:115200
- 数据位:8
- 停止位:1
- 校验:无
- Python serial 库有时会有回显问题,推荐使用 screen
1.3 U-boot 环境
进入 U-boot
设备启动时按任意键进入 U-boot 控制台。
U-boot 常用命令
bash
# 正常启动
bootsys
# 进入恢复模式
safe
# 查看环境变量
printenv
# 设置环境变量
setenv bootargs ...
# 保存环境变量
saveenv网络配置(U-boot)
ipaddr=192.168.1.22
serverip=192.168.1.241.4 分区表
完整分区表
| 分区 | 设备 | 块偏移 | 块数 | 大小 | 用途 |
|---|---|---|---|---|---|
| p1 | mmcblk0p1 | 0 | 8192 | 4MB | 未知 |
| p2 | mmcblk0p2 | 8192 | 131072 | 64MB | 未知 |
| p3 | mmcblk0p3 | 139264 | 8192 | 4MB | conf(配置) |
| p4 | mmcblk0p4 | 147456 | 1572864 | 768MB | cache |
| p5 | mmcblk0p5 | 1720320 | 16384 | 8MB | env |
| p6 | mmcblk0p6 | 1736704 | 65536 | 32MB | 未知 |
| p7 | mmcblk0p7 | 1802240 | 65536 | 32MB | 未知 |
| p8 | mmcblk0p8 | 1867776 | 16384 | 8MB | 未知 |
| p9 | mmcblk0p9 | 1884160 | 16384 | 8MB | 未知 |
| p10 | mmcblk0p10 | 1900544 | 65536 | 32MB | boot |
| p11 | mmcblk0p11 | 1966080 | 65536 | 32MB | 未知 |
| p12 | mmcblk0p12 | 2031616 | 65536 | 32MB | 未知 |
| p13 | mmcblk0p13 | 2097152 | 2097152 | 1GB | system |
| p14 | mmcblk0p14 | 4194304 | 10878976 | 5.2GB | data |
分区挂载
/dev/block/system /system ext4 rw
/dev/block/cache /cache ext4 rw
/dev/block/data /data ext4 rw
/dev/block/conf (raw) 4MB
/dev/block/boot (raw) 32MB1.5 Boot.img 结构
二进制布局
偏移 大小 内容
0x0000 96B ZTE header
- magic: 55667788
- mode: "norm"
- version: "V815001 2017-06-14"
0x0060 64B ANDROID! header
- kernel_size: 0x00B0B790 (11,579,536B)
- kernel_addr: 0x40008000
- ramdisk_size: 0x001373E9 (1,274,857B)
- ramdisk_addr: 0x41000000
- page_size: 0x800 (2048)
0x0800 11.3MB Kernel (ARM64, 压缩)
0xB0BF90 208B 填充(零)
0xB0C060 1.27MB Ramdisk (gzip 压缩)
0xC439A0 32KB DTB 0 (设备树)
0xC4B9A0 32KB DTB 1
0xC539A0 32KB DTB 2ANDROID! Header 详解
c
struct android_img_hdr {
char magic[8]; // "ANDROID!"
uint32_t kernel_size; // 0x00B0B790
uint32_t kernel_addr; // 0x40008000
uint32_t ramdisk_size; // 0x001373E9
uint32_t ramdisk_addr; // 0x41000000
uint32_t second_size; // 0x00018140
uint32_t second_addr; // 0x40E00000
uint32_t tags_addr; // 0x40000100
uint32_t page_size; // 0x00000800
// ...
};Bootloader 读取流程
1. 读取 ZTE header (96B) → 确认 magic "55667788"
2. 读取 ANDROID! header → 获取 kernel_size, ramdisk_size
3. 读取 Kernel → 加载到 0x40008000
4. 读取 Ramdisk → 加载到 0x41000000
5. 计算 DTB 位置: ramdisk_start + ceil(ramdisk_size/512) + 1
6. 读取 DTB → 加载到 0x40E00000
7. 设置 bootargs: root=/dev/ram0 rw initrd=0x41000000,ramdisk_size
8. 启动内核1.6 内核启动参数
完整 bootargs
root=/dev/ram0 rw
initrd=0x41000000,0x1373e9
boardtype=0x13
console=ttyS0,115200n8
stmmaceth=chain_mode:1
kgdboc=ttyS0,115200
loglevel=3
swiotlb=0x800
androidboot.hardware=zxic
androidboot.selinux=disabled
boot_revision=0006
LogoDataAddr=0x74000000
WorkMode=0关键参数说明
| 参数 | 值 | 说明 |
|---|---|---|
| root | /dev/ram0 | 根文件系统在 ramdisk |
| initrd | 0x41000000,0x1373e9 | ramdisk 地址和大小 |
| console | ttyS0,115200n8 | 串口控制台 |
| androidboot.selinux | disabled | SELinux 已禁用 |
| WorkMode | 0 | 正常模式(1=恢复模式) |
1.7 文件系统
fstab.zxic
/dev/block/system /system ext4 rw,barrier=1 wait
/dev/block/cache /cache ext4 noatime,nosuid,nodev,barrier=1,data=ordered,nomblk_io_submit,noauto_da_alloc,errors=continue wait,check
/dev/block/data /data ext4 noatime,nosuid,nodev,barrier=1,data=ordered,nomblk_io_submit,noauto_da_alloc,errors=continue wait,check
/dev/block/zram0 none swap defaults zramsize=314572800关键发现
/system分区没有errors=continue(默认 errors=panic)/cache和/data有errors=continue- zram swap 大小:300MB
1.8 初始系统状态
运行中的进程
init — PID 1, 系统初始化
ueventd — 设备事件守护进程
healthd — 健康监控
servicemanager — IPC 服务管理
vold — 存储管理
netd — 网络守护进程
debuggerd — 调试守护进程
surfaceflinger — 显示合成
zygote — Java 虚拟机
media — 媒体服务
drmserver — DRM 服务
installd — 安装守护进程
keystore — 密钥存储
bootanimation — 开机动画
adbd — ADB 守护进程内存使用
总计:990MB
已用:~400MB
空闲:~590MB
CMA:336MB(后来修改为 20MB)阶段一完成:设备基本连接和结构分析