本文作者:泓銘
簡介
ICE EVB 是基於平頭哥 RISCV 架構的 C910 CPU 的 ICE 高性能 SoC 開發板。
ICE 是一款通用智能數字 SoC 芯片,主要集了一個雙核RISCV 64位 C910 處理器, 一個 GPU 和 DPU 單元。同時提供了高速接口以及通用外設接口,用於與主控設備間的數據和命令交互。
- 內嵌平頭哥雙核 [email protected]
- 支持 DDR4 up to 2400Mbps
- 支持 GMAC 接口
- 支持 GPU,支持 3D
- 支持 RGB888 LCD 顯示,最大支持 1080P
開發板燒寫鏡像方式
ICE EVB 開發板可以使用 Linux、安卓系統,拿到的開發板出廠會燒寫默認系統,當要更新或更換系統的時候,就需要進行鏡像的燒寫。
燒寫開發板系統,大致分為以下三種情況:
- 板載系統正常,升級內核鏡像、rootfs 鏡像
- 板載系統正常,只更新內核、或更改設備樹配置
- 開發板無法啟動,燒寫 u-boot 鏡像
通常情況下,開發者只需要燒寫、更新內核和 rootfs 鏡像。從 eMMC 啟動的方式,u-boot 鏡像使用 eMMC 的 Boot Area Partition,一般情況不會被內核鏡像和文件系統的用戶數據破壞。
PC 環境準備
在 Windows 環境下燒寫鏡像、應用開發的時候,需要用到一些工具和依賴環境,推薦開發者使用 Windows 7 或 WIndows 10 環境開發。本文檔以 Windows 10 環境為例說明。
- 下載、安裝通用工具
-
- 下載串口終端工具 PuTTY,或使用其他串口工具也可
從官網下載:https://www.putty.org/ ,根據實際電腦系統下載
32位版本:(https://the.earth.li/~sgtatham/putty/latest/w32/putty-0.74-installer.msi)
64位版本:(https://the.earth.li/~sgtatham/putty/latest/w64/putty-64bit-0.74-installer.msi) - 解壓縮工具可下載 7-zip
https://www.7-zip.org/download.html
根據實際電腦系統下載 32位版本或 64位版本。
- 下載串口終端工具 PuTTY,或使用其他串口工具也可
- 下載 CCT_V0.95 工具,解壓
https://yoc.docs.t-head.cn/tools/CCT_V0.95.zip - 下載 fastboot 工具,解壓
https://developer.android.google.cn/studio/releases/platform-tools - Python3 環境 (可選)
官網:https://www.python.org/downloads/
根據需要下載相應版本,推薦使用 3.x版本。 - 安裝 pip (可選)
下載:https://bootstrap.pypa.io/get-pip.py
執行安裝:python3 get-pip.py
- 安裝 thead-tools (可選)
通過 pip 命令來安裝 thead-tools 到你的系統中,thead-tools 支持 python2.7+、python3.6+。
sudo pip install thead-tools # 如果使用官方地址下載過慢,可使用國內清華鏡像源加速 sudo pip install -i https://pypi.tuna.tsinghua.edu.cn/simple thead-tools
通過 thead-tools 命令可以燒寫 u-boot 鏡像,通過命令 thead cct --help
查使用說明:
> 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
鏡像介紹
訪問 http://mirrors.aliyun.com/thead/images/riscv64-ice/ice_images.zip 下載最新鏡像並解壓到電腦上,如 D:\
下:
需要用到的是如下四個文件:
- ice_ck910_imgwriter_asci_v5.bin: CCT 燒寫 u-boot鏡像工具
- u-boot-with-spl.bin: uboot 引導鏡像文件
- boot.ext4: /boot 分區文件系統,ext4格式,包含 fw_jump.bin、uImage、hw.dtb
- debian-rootfs.ext4: Debian 基礎根文件系統鏡像,ext4 格式
- boot/: boot.ext4 鏡像中的文件,直接更新內核、dtb 時候可以使用
燒寫 boot 分區鏡像
1.按照如下系統連接圖連接好開發板:
2.串口終端工具配置
PuTTY是一款集成虛擬終端、系統控制檯和網絡文件傳輸為一體的自由及開放源代碼的程序,它支持多種網絡協議。
啟動 PuTTY,進行串口參數設置。
- 按照實際電腦系統情況,在 Serial line 設置串口號,Speed 設為 115200。
- 將 Flow control 設置為 None ,注意,此步驟一定要設置正確,否則會造成串口終端無法輸入。
- 保存配置,下次啟動直接在Saved Sessions 中點擊相應配置即可連接。
- 啟動 PuTTY 串口終端。
3.開發板開機後進入 u-boot,當 Console 串口出下提示時,按任鍵即可進行命令模式。
Warning: ethernet@3fffc0000 (eth0) using random MAC address - a6:7d:bc:02:7d:4d eth0: ethernet@3fffc0000 Hit any key to stop autoboot: 3 <--- 出現此信息時按任意鍵進入u-boot
4.u-boot 環境配置
u-boot 配置命令列表如下(通過串口終端,在開發板上執行):
# 恢復默認值 env default -a # 配置 eMMC 分區 setenv uuid_rootfs "80a5a8e9-c744-491a-93c1-4f4194fd690b" setenv partitions "name=table,size=2031KB" setenv partitions "$partitions;name=boot,size=60MiB,type=boot" setenv partitions "$partitions;name=root,size=-,type=linux,uuid=$uuid_rootfs" 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,可檢驗網絡是否正常 saveenv # 將配置保存到 eMMC, 下次啟動時無需再配置 # 開啟fastboot模式 fastboot udp
※ printenv
: 可查看 u-boot 環境變量
5.燒寫 boot 分區
在電腦上使用 fastboot
命令完成鏡像燒寫,192.168.1.100
是開發板的運行 u-boot 時配置的 IP 地址,使用 fastboot
命令前確認電腦與開發板在同一個子網。
為方便操作,可將 fastboot.exe、AdbWinApi.dll
兩個文件拷貝到解壓後的 ice_images 目錄,啟動 windows 的 cmd 終端,如解壓到D盤,進入 D:\ice_images 目錄(下載目錄根據實際電腦目錄填寫)
cd D:\ice_images fastboot.exe -s udp:192.168.1.100 flash boot boot.ext4
6.調整分區空間
重啟開發板進入系統,執行 resize2fs
命令調整分區空間:
cd /boot resize2fs /dev/mmcblk1p2 # 調整後分區 root@thead-910:/boot# df -h Filesystem Size Used Avail Use% Mounted on ...(省略) /dev/mmcblk1p2 56M 14M 41M 25% /boot
燒寫 rootfs 分區鏡像
- 1 ~ 4:與《燒寫 boot 分區鏡像》 一致。
- 5.燒寫 rootfs 鏡像 ICE-EVB 開發板提供三種根文件系統鏡像,開發者可以根據自己的需要選擇下載:
鏡像 | 下載地址 | 大小 |
基本鏡像(debian-base) | http://mirrors.aliyun.com/thead/images/riscv64-ice/debian-rootfs.ext4.gz | 59MB |
開發鏡像 (debian-dev) | http://mirrors.aliyun.com/thead/images/riscv64-ice/debian-dev-rootfs.ext4.gz | 197MB |
xfce 桌面(debian-desktop) | http://mirrors.aliyun.com/thead/images/riscv64-ice/debian-desktop-rootfs.ext4.gz | 517MB |
解壓 gz 文件,可下載安裝開源數據壓縮程序 7-Zip,根據實際電腦情況下載 32位 (https://www.7-zip.org/a/7z1900.exe) 或 64位 (https://www.7-zip.org/a/7z1900-x64.exe) 版本。
選項一:燒寫基本系統鏡像
在下載的 ice_images 中默認提供 debian-rootfs.ext4
鏡像,使用 fastboot
命令燒寫:
fastboot.exe -s udp:192.168.1.100 -S 5M flash root debian-rootfs.ext4
選項二:燒寫開發者鏡像
下載文件並解壓得到 debian-dev-rootfs.ext4
鏡像,再用 fastboot
命令燒寫:
fastboot.exe -s udp:192.168.1.100 -S 5M flash root debian-dev-rootfs.ext4
選項三:燒寫 xFce 桌面系統鏡像
下載文件並解壓得到 debian-desktop-rootfs.ext4
鏡像,再用 fastboot
命令燒寫:
fastboot.exe -s udp:192.168.1.100 -S 5M flash root debian-desktop-rootfs.ext4
- 6.調整分區空間
重啟開發板進入系統,執行resize2fs
命令調整分區空間:
resize2fs /dev/mmcblk1p3 # 調整後分區 root@thead-910:/boot# df -h Filesystem Size Used Avail Use% Mounted on /dev/root 3.6G 421M 3.0G 13% / ...(省略)
更新內核、dtb 配置
如果只更新內核、更改設備樹配置,可以直接對操作 /boot
下文件進行更新。
- 確保開發板正確聯網,在開發板 Console 執行
ifconfig
查看開發板 IP 地址:
root@thead-910:~# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.1 inet6 fe80::2a0:a0ff:fea0:a0a1 prefixlen 64 scopeid 0x20<link> ether 00:a0:a0:a0:a0:a1 txqueuelen 1000 (Ethernet) RX packets 48 bytes 12429 (12.1 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 50 bytes 7348 (7.1 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 device interrupt 7 base 0xa000 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
※ 配置開發板 IP 地址,可執行 dhclient
自動獲取 IP 地址,或對 /etc/network/interfaces
進行配置。
- 確保開發板上已經配置好登錄密碼或已經上傳公鑰
# 更改密碼 root@thead-910:~# passwd New password: Retype new password: passwd: password updated successfully
- scp 上傳 uImage 文件,在 PC 上操作:
scp uImage [email protected]:/boot/.
注意: 如果上傳內核鏡像文件錯誤,會造成系統無法啟動,此時需要參考上面步驟,重新燒寫 boot 分區鏡像文件。
- 更改設備樹 dtb 配置
# 安裝 dtc 工具 apt update apt install device-tree-compiler # 修改設備樹配置 cd /boot dtc -I dtb -O dts hw.dtb > hw.dts # 使用 vi 或其他 editor 修改 hw.dts 配置 # 修改後生成新的 dtb dtc -I dts -O dtb hw.dts > hw.dtb sync
- 開發板重啟
root@thead-910:~# sync root@thead-910:~# reboot
燒寫 u-boot 鏡像
當開發板上 u-boot 鏡像異常,造成無法啟動,俗稱“變磚”的時候,就需要通過串口,先將引導程序載入到內存,正常引導後,再將固件鏡像燒寫到 eMMC 上。通過使用CCT 工具或 python 環境下的 thead 命令可自動完成以上操作,將 u-boot 鏡像燒寫到 eMMC 的Boot Area Partition 分區。
按照如下CCT燒寫連接圖連接好開發板:
使用 CCT 工具燒寫 u-boot 鏡像
- CCT 連接配置
CCT 軟件運行界面如下圖所示,首先配置 CCT 的參數,其中:
• Port 配置的是 CCT 燒寫串口:根據實際電腦情況設置相應串口 Port
• Mem R.W Speed 是鏡像傳輸協議速度:使用默認值
- 連接設備
操作步驟:
EVB 開發板上電 -> 確認勾選 always,點擊 Connect Device —> 按 EVB 開發板上 系統復位鍵 ,復位開發板,出現 "Connect device success." 即表示連接成功,進入下一步鏡像燒寫步驟
- 配置燒寫目標參數連接成功之後,需要配置鏡像燒寫參數,配置方法如下圖所示:
-
- Image Writer: 設置 ImageWriter 固件文件
- Image File: 設置將要燒寫到 EVB 板的鏡像文件
- Target Device: 鏡像燒寫的目標設備(常見選擇為“OutsideEmmcFlash-0”,意為 eMMC 的 boot0 區域)
- Addr: 鏡像燒寫到存儲設備的偏移值。 (FYI,圖中文件名為示意文件名,具體視產品項目而定)
- 燒寫 u-boot
點擊用戶界面上的 "Download" 按鈕,鏡像就會開始自動下載與燒寫。完成後,在完成之後,在用戶界面的日誌窗口中,將會出現 “Verify data success.” 的內容提示,表示鏡像完成了燒寫。
使用 python 環境下的 thead 工具燒寫 u-boot 鏡像 (可選)
- 查看系統環境和串口
通過 thead-tools 燒寫 u-boot 時需要使用開發板的 CCT 燒寫串口,通過命令thead cct uart
命令看到電腦上安裝的串口列表,並確認電腦上串口與開發板串的對應關係:
> thead cct uart uart device list: /dev/ttyUSB0 - USB-Serial Controller
如果出現上面狀態,說明 thead 工具安裝正常,串口設備連接正常。
- 查找開發板存儲器列表
通過命令:thead cct -u /dev/ttyUSB0 list
可以查看開發板支持的燒寫存儲器列表,如下:
> 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 ..........
信息後再開啟開發板電源。
如果未出現上述打印信息,先確認連線和開發板電源狀態,同時電腦是接有多個串口,請更新另一個串口再次嘗試。
- 燒寫 u-boot
通過命令:thead cct -u /dev/ttyUSB0 download -f u-boot-with-spl.bin -d emmc0
將 u-boot 鏡像燒寫到 eMMC 的 Boot Area Partition 分區,燒寫過程信息如下:
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.
後燒寫成功。
啟動登錄 Linux 系統
完成 Linux 鏡像燒寫後,重新啟動 ICE EVB 開發板,開發板 Console 串口顯示如下:
[ OK ] Started Serial Getty on hvc0. [ OK ] Started Serial Getty on ttyS0. [ OK ] Reached target Login Prompts. [ OK ] Started System Logging Service. [ OK ] Finished Remove Stale Onli…ext4 Metadata Check Snapshots. [ OK ] Reached target Multi-User System. [ OK ] Reached target Graphical Interface. Starting Update UTMP about System Runlevel Changes... [ OK ] Finished Update UTMP about System Runlevel Changes. Debian GNU/Linux bullseye/sid thead-910 ttyS0 thead-910 login: [ 94.362252] random: crng init done [ 94.365674] random: 6 urandom warning(s) missed due to ratelimiting thead-910 login:
登錄用戶名 root
,初始無密碼,開發者可根據需要更改密碼。