烧写 Android 镜像

对于第一次使用 ICE-EVB 开发板的开发者,需要根据以下几个步骤完成开发板的镜像烧写:

  • 第一步:烧录前准备:安装烧录工具(thead-tools、fastboot)、检查开发板与电脑的串口连接情况
  • 第二步:包括下载镜像文件(ice_images)
  • 第三步:通过 CCT 将 u-boot 烧写开发板的 eMMC 存储器
  • 第四步:使用 u-boot、fastboot 等工具,烧写 Android 镜像
  • 第五步:重启开发板,即可以进入Android

第一步:安装烧写工具

如果已经安装过 thead-toolsfastboot 可以跳过第一步。

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 界面。

results matching ""

    No results matching ""