Skip to content

阶段一:初始探索与串口连接

🕒 Published at:

阶段一:初始探索与串口连接 ​

1.1 设备信息 ​

项目参数
型号ZTE B860AV1.1-T2
SoCZX296716 (ARM Cortex-A53, 4核)
RAM990MB
存储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.24

1.4 分区表 ​

完整分区表 ​

分区设备块偏移块数大小用途
p1mmcblk0p1081924MB未知
p2mmcblk0p2819213107264MB未知
p3mmcblk0p313926481924MBconf(配置)
p4mmcblk0p41474561572864768MBcache
p5mmcblk0p51720320163848MBenv
p6mmcblk0p617367046553632MB未知
p7mmcblk0p718022406553632MB未知
p8mmcblk0p81867776163848MB未知
p9mmcblk0p91884160163848MB未知
p10mmcblk0p1019005446553632MBboot
p11mmcblk0p1119660806553632MB未知
p12mmcblk0p1220316166553632MB未知
p13mmcblk0p13209715220971521GBsystem
p14mmcblk0p144194304108789765.2GBdata

分区挂载 ​

/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)             32MB

1.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 2

ANDROID! 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
initrd0x41000000,0x1373e9ramdisk 地址和大小
consolettyS0,115200n8串口控制台
androidboot.selinuxdisabledSELinux 已禁用
WorkMode0正常模式(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)

阶段一完成:设备基本连接和结构分析