烧写 Android 镜像
对于第一次使用 ICE-EVB 开发板的开发者,需要根据以下几个步骤完成开发板的镜像烧写:
- 第一步:烧录前准备:安装烧录工具(thead-tools、fastboot)、检查开发板与电脑的串口连接情况
- 第二步:包括下载镜像文件(ice_images)
- 第三步:通过 CCT 将 u-boot 烧写开发板的 eMMC 存储器
- 第四步:使用 u-boot、fastboot 等工具,烧写 Android 镜像
- 第五步:重启开发板,即可以进入Android
第一步:安装烧写工具
如果已经安装过 thead-tools
与 fastboot
可以跳过第一步。
thead-tools
通过 pip 命令来安装 yoctools 到你的系统中,yoctools 支持 python2.7+、python3.6+,建议使用 python2 作为默认 python。
sudo pip install thead-tools
# 如果使用官方地址下载过慢,可使用国内清华镜像源加速
sudo pip install -i https://pypi.tuna.tsinghua.edu.cn/simple thead-tools
如果未找到 pip
命令,请先安装 pythonp-pip,如:sudo apt install python-pip
。
thead-tools 使用
通过 thead-tools 命令可以烧写 uboot,更详细的 thead-tools 使用说明可以参见:thead-tools 使用说明,通过命令: thead cct --help
查使用说明:
root@linux > thead cct --help
Usage: thead cct <uart|list|download> [param]
Options:
-h, --help show this help message and exit
-u UART CCT serial port device
-f FILE
-o OFFSET Device start address
-b BLOCK, --block=BLOCK
-d DEVICE, --device=DEVICE
Device name
-c, --compress
-D, --debug Enable debbug trace info
安装 fastboot
发行版可通过包管理器安装 fastboot 工具,如 ubuntu下通过sudo apt install fastboot
安装,或者从官网下载二进制文件,下载地址:https://developer.android.com/studio/releases/platform-tools 。
第二步:下载镜像
wget "https://yoc.docs.t-head.cn/tools/android_images.tar.bz2"
tar xf android_images.tar.bz2
cd android_images
ls -l
需要用到的,是如下五个文件:
-rw-r--r-- 1 root root 23975004 Jan 13 14:24 boot.ext4
-rw-r--r-- 1 root root 683602236 Jan 13 14:19 system.img
-rw-r--r-- 1 root root 487692 Jan 5 10:04 userdata.img
-rw-r--r-- 1 root root 26996812 Jan 13 14:19 vendor.img
-rw-r--r-- 1 root root 599192 Dec 20 16:39 u-boot-with-spl.bin
- u-boot-with-spl.bin: uboot 引导镜像文件
- boot.ext4: boot 分区文件系统,ext4格式,包含 fw_jump.bin、uImage、ice_evb_c910.dtb
- system.img: Android 系统分区,ext4 格式
- userdata.img: Android 用户分区,ext4 格式
- vendor.img: Android 供应商分区,ext4 格式
第三步:烧写 uboot
查看电脑串口
参考 开发板接线 完成开发板的串口连接,通过 CCT 烧写 uboot 需要使用开发板的 CCT 烧写串口,通过命令thead cct uart
命令看到电脑上安装的串口列表,并确认电脑上串口与开发板串的对应关系:
root@linux > thead cct uart
uart device list:
/dev/ttyUSB0 - USB-Serial Controller
/dev/ttyUSB1 - USB-Serial Controller
查找开发板存储器列表
通过命令:thead cct -u /dev/ttyUSB0 list
可以查看开发板支持的烧写存储器列表,如下:
root@linux > thead cct -u /dev/ttyUSB0 list
Wait .....................
CCT Version: 2
memory device list:
dev = ram0 , size = 256.0KB
dev = emmc0 , size = 2.0MB
dev = emmc1 , size = 2.0MB
dev = emmc2 , size = 3.7GB
注意:使用该命令时,先确定串口的连接是否正确,运行命令前先关闭开发板电源后再运行该命令,等到出现Wait ..........
信息后再开启开发板电源,正常情况下电源开启后在1秒内会出现如下信息:
CCT Version: 2
memory device list:
dev = ram0 , size = 256.0KB
dev = emmc0 , size = 2.0MB
dev = emmc1 , size = 2.0MB
dev = emmc2 , size = 3.7GB
如果未出现上述打印信息,同时电脑是接有多个串口,请更新另一个串再尝试一次,如:thead cct -u /dev/ttyUSB1 list
。如果所有串口都尝试后均未出现上述打印机信息,请检查串口与开发板的连接是否符合,详细连接参见:开发板接线。
烧写 uboot
通过命令:thead cct -u /dev/ttyUSB0 download -f u-boot-with-spl.bin -d emmc0
将 uboot 烧写到 eMMC 的 0号分区,烧写过程信息如下:
CCT Version: 2
Send file 'u-boot-with-spl.bin' to 21:0 ...
Writing at 0x00009800... (3%)
待打印File u-boot-with-spl.bin download success.
后,烧写成功后,可以通过开发板的 Console 串口看到正确的启动信息:
U-Boot 2020.01-g6cc5d59b0d (Dec 20 2020 - 08:37:37 +0000)
CPU: rv64imafdcvsu
Model: T-HEAD c910 ice
DRAM: 4 GiB
GPU ChipDate is:0x20151217
GPU Frequency is:500000KHz
NPU ChipDate is:0x20190514
DPU ChipDate is:0x20161213
MMC: mmc0@3fffb0000: 0
Loading Environment from MMC... OK
In: serial@3fff73000
Out: serial@3fff73000
Err: serial@3fff73000
Net:
Warning: ethernet@3fffc0000 (eth0) using random MAC address - e6:e2:ea:7a:30:ce
eth0: ethernet@3fffc0000
Hit any key to stop autoboot: 1
第四步:烧写 Android 镜像
开发板 uboot 配置
开发板重新开机后进入 uboot 命令模式,当串口出现如下提示时,按任键即可进行命令模式。
Warning: ethernet@3fffc0000 (eth0) using random MAC address - a6:7d:bc:02:7d:4d
eth0: ethernet@3fffc0000
Hit any key to stop autoboot: 3
通过 gpt
命令配置 eMMC 分区大小,命令如下:
# 恢复默认值
env default -a
# 配置 eMMC 分区
setenv partitions "name=sparse,size=2031kb"
setenv partitions "$partitions;name=bootpart,size=60MiB"
setenv partitions "$partitions;name=system,size=1500MiB"
setenv partitions "$partitions;name=vendor,size=100MiB"
setenv partitions "$partitions;name=cache,size=256MiB"
setenv partitions "$partitions;name=userdata,size=-"
gpt write mmc 0 $partitions
# 配置网络
# !!!!!!!!!!!!!!!!!!!! 特别注意 !!!!!!!!!!!!!!!!!!!!!!!!
# 如果网络中接入多块 ICE-EVB 开发板,每块开发板的 ethaddr 要唯一
setenv ethaddr 00:a0:a0:a0:a0:a1 # 如果网络中接入多块 ICE-EVB 开发板,ethaddr 要唯一
setenv ipaddr 192.168.1.100 # 开发板 IP 地址
setenv netmask 255.255.255.0
ping 192.168.1.1 # ping 主机的IP,检验网络是否正常
# 配置内核启动参数 bootargs
setenv bootargs "console=ttyS0,115200"
setenv bootargs "$bootargs root=PARTUUID=$uuid_rootfs rootfstype=ext4"
setenv bootargs "$bootargs earlycon=sbi rdinit=/init security=selinux"
setenv bootargs "$bootargs crashkernel=256M-:128M c910_mmu_v1 printk.devkmsg=on"
setenv bootargs "$bootargs androidboot.selinux=permissive"
setenv bootargs "$bootargs androidboot.hardware=ranchu"
setenv bootargs "$bootargs androidboot.super_partition"
# 配置 bootcmd
setenv bootcmd "ext4load mmc 0:2 $opensbi_addr fw_jump.bin"
setenv bootcmd "$bootcmd;ext4load mmc 0:2 $dtb_addr ice_evb_c910.dtb"
setenv bootcmd "$bootcmd;ext4load mmc 0:2 $kernel_addr uImage"
setenv bootcmd "$bootcmd;ext4load mmc 0:2 0x02000000 ramdisk.img"
setenv bootcmd "$bootcmd;bootm $kernel_addr - $dtb_addr"
# 环境变量保存到 eMMC 中
saveenv # 将配置保存到 eMMC,下次启动时无需再配置
# 开启fastboot模式
fastboot udp
烧写镜像
在电脑上使用使用 fastboot 命令完成镜像烧写,192.168.1.100 是开发板的运行 u-boot 时配置的 IP 地址,使用 fastboot 命令前确认电脑与开发板在同一个子网。可在板子上使用 ping 192.168.1.1
检查网络情况。
# PC 烧写镜像
fastboot -s udp:192.168.1.100 flash bootpart boot.ext4
fastboot -s udp:192.168.1.100 flash system system.img
fastboot -s udp:192.168.1.100 flash vendor vendor.img
fastboot -s udp:192.168.1.100 flash userdata userdata.img
第五步:重启进入Android
复位 ICE-EVB 开发板,自动进入 Android 界面。