燒寫 eMMC
啟動模式
eMMC 一般都是直接焊在主板上,有些雖然是可插拔的,但沒有專用的讀卡器,因此需要使用板載燒寫的方式來更新固件,即板上跑一個小系統(tǒng),負責從主機或其它存儲介質(zhì)讀取固件,再燒寫到 eMMC 上。
取決于 eMMC 現(xiàn)存的內(nèi)容,開發(fā)板有兩種特殊的啟動模式: Rockusb 模式 和 Maskrom 模式。
通常只需要進入 Rockusb 模式 即可升級現(xiàn)有的 Android 或 Ubuntu 系統(tǒng)。這種方式升級方式一般適用于 RK 固件或分區(qū)映像。
Maskrom 模式 則是系統(tǒng)未能識別到合法的啟動設備而進入的模式。燒寫原始固件到 eMMC 必須要進入該模式。
Rockusb 模式
開發(fā)板啟動后,CPU 如果在 eMMC 中找到有效的 IDB (IDentity Block),它將從 eMMC 讀取并加載 bootloader,并將執(zhí)行控制權交給它。
如果 bootloader 檢測到 Recovery 按鈕按下并且 USB 已連接,它就會進入 Rockusb 模式,等待來自主機的命令。
進入 Rockusb 模式 的準備工作:
5V2A 電源適配器。
連接電源適配器和開發(fā)板的 Micro USB 線。
用來連接電腦 PC 以及開發(fā)板的公對公 USB 線。
eMMC 。
操作步驟:
將所有 USB 線(包括 Micro USB 線和公對公 USB 線)拔出開發(fā)板,以保持開發(fā)板斷電。
安裝好 eMMC,拔出 SD 卡。
使用公對公 USB 線將主機的 USB 端口與開發(fā)板的雙層 USB 端口中靠近電路板的 OTG 端口相連:
按住開發(fā)板上的 RECOVERY 按鍵。
將 Micro USB 線插入到開發(fā)板中,讓開發(fā)板上電。
等待大概 3 秒左右松開 RECOVERY 按鍵。
Maskrom 模式
如果開發(fā)板上電后遇到以下情況之一:
eMMC 內(nèi)容為空。
eMMC 上的 bootloader 損壞。
將 eMMC 數(shù)據(jù)/時鐘引腳接地,eMMC讀取數(shù)據(jù)失敗。
CPU 在 eMMC 中就會找不到有效的 IDB (IDentity Block),轉而執(zhí)行一段小型的 ROM 代碼,等待主機通過 USB 上傳 bootloader 來初始化 DDR 內(nèi)存并進入升級狀態(tài)。這種模式稱為 Maskrom 模式 。
強制進入 MaskRom 模式 涉及到硬件操作,具有一定的風險,因此操作上需要非常謹慎。
進入 Maskrom 模式 的準備工作:
5V2A 電源適配器。
用來連接電源適配器和開發(fā)板的 Micro USB 線。
連接電腦 PC 和開發(fā)板的公對公 USB 線。
用于將 eMMC 時鐘引腳短接到地的金屬鑷子。
eMMC 。
操作步驟:
將所有 USB 線(包括 Micro USB 線和公對公 USB 線)拔出開發(fā)板,以保持開發(fā)板斷電。
安裝好 eMMC,拔出 SD 卡。
使用公對公 USB 線將主機的 USB 端口與開發(fā)板的雙層 USB 端口中靠近電路板的 OTG 端口相連:
找到開發(fā)板上預留的 eMMC 的 CLK 引腳和 GND 腳,見下圖:
用金屬鑷子短接 eMMC 的 CLK 和 GND 焊盤,并保持短接良好。
將 Micro USB 線插入到開發(fā)板中,讓開發(fā)板上電。
保持住一秒后松開鑷子。
下載固件
固件下載頁面
固件說明:固件分為 原始固件 與 RK 固件 ,已經(jīng)分類到不同的文件夾中,固件命名的日期最新則為最新的固件,其穩(wěn)定性更好,請根據(jù)你所需要的固件類型選擇正確的燒寫工具。
Linux(GPT)固件:官方云盤提供的 Linux 固件中,其中包括 Ubuntu,Buildroot,Debian 等 Linux 系統(tǒng),帶 GPT 字樣為 GPT 分區(qū)格式固件,統(tǒng)稱為 Linux(GPT) 固件,按照 編譯 Linux固件(GPT) 編譯出來的固件也為 Linux(GPT) 固件。
燒寫工具
請根據(jù)所用主機的操作系統(tǒng)選擇相應的燒寫 eMMC 工具:
燒寫 eMMC
圖形界面燒寫工具:
AndroidTool (Windows)
命令行燒寫工具:
upgrade_tool (Linux)
rkdeveloptool (Linux)
提示:AndroidTool 和 upgrade_tool 均支持燒寫 原始固件 與 RK 固件,而 rkdeveloptool 僅支持燒寫 原始固件。
燒寫須知
不同固件之間使用的燒寫工具和燒寫方法不一樣的,請按照下面的表格進行燒寫。
AndroidTool
AndroidTool 是 Windows 下用來燒寫原始固件、RK 固件和分區(qū)映像到 eMMC 的工具。
使用 AndroidTool 之前, 應先安裝 Rockusb 驅(qū)動,然后再安裝運行 AndroidTool。
安裝 Rockusb 驅(qū)動
下載 DriverAssistanthttps://pan.baidu.com/s/1migPY1U#list/path=%2FPublic%2FDevBoard%2FROC-RK3328-CC%2FTools%2FRKTools%2Fwindows&parentPath=%2FPublic%2FDevBoard%2FROC-RK3328-CC, 解壓后運行里面的 DriverInstall.exe:
點擊 “驅(qū)動安裝” 按鈕安裝驅(qū)動;如果想卸載驅(qū)動,則點擊 “驅(qū)動卸載” 按鈕。
若設備處于 Rockusb 模式 或 Maskrom 模式,在設備管理器中會出現(xiàn) “Rockusb Device”:
這表示驅(qū)動安裝成功。
安裝 AndroidTool
燒寫工具選擇與下載:
燒寫原始固件:AndroidTool_v2.39
燒寫 RK Android7.1 固件:AndroidTool_v2.38
燒寫 RK Android8.1 固件:AndroidTool_v2.58
燒寫 RK Linux(GPT) 固件:AndroidTool_v2.58
下載并解壓后運行里面的 AndroidTool.exe:
若設備處于 Rockusb 模式,狀態(tài)行將顯示 “發(fā)現(xiàn)一個LOADER設備”。
若設備處于 Maskrom 模式,狀態(tài)行將顯示 “發(fā)現(xiàn)一個MASKROM設備”。
燒寫原始固件
原始固件需要從 eMMC 的偏移地址為 0 的位置開始燒寫。但在 Rockusb 模式 下無法做到這點,因為所有 LBA 寫入操作會偏移 0x2000 個扇區(qū)(即 LBA0 對應于存儲設備上第 0x2000 個扇區(qū))。因此,開發(fā)板必須強制進入 Maskrom 模式 才能燒寫原始固件。
使用 AndroidTool_v2.39 燒寫原始固件到 eMMC 的步驟如下:
強制設備進入 Maskrom 模式。
運行 AndroidTool。
打開 “下載鏡像” 制表頁。
保持表格的第一行不變, 使用默認的 “Loader” 文件。
點擊第二行右側的空白單元格,在彈出的文件對話框里打開原始固件文件。
點擊 “執(zhí)行” 按鈕開始燒寫。
燒寫 RK 固件
使用 AndroidTool 燒寫 RK 固件 到 eMMC 的步驟如下:
強制設備進入 Rockusb 模式 或 Maskrom 模式。
運行 AndroidTool。
打開 “升級固件” 制表頁。
點擊 “固件” 按鈕, 在彈出的文件對話框里打開RK 固件文件。
固件版本號、loader 版本號和芯片信息會從固件中讀取并顯示。
點擊 “升級” 按鈕燒錄。
然后燒寫不同的固件或者出現(xiàn)燒寫失敗,請按照 燒寫須知 先擦除后升級。
燒寫分區(qū)映像
取決開發(fā)板原有的固件,燒寫 分區(qū)映像 到 eMMC 會有所不同。
原始固件
使用 AndroidTool_v2.39 燒寫 分區(qū)映像 到 eMMC 的步驟如下:
強制設備進入 Rockusb 模式 或 Maskrom 模式。
運行 AndroidTool。
打開 “下載鏡像” 制表頁。
保持表格第一行不變。
鼠標右鍵點擊其它行,在彈出菜單中選擇 “刪除項” ,重復直至刪除第一行除外的所有行。
鼠標右鍵點擊表格,在彈出菜單中選擇 “添加項” 以便添加分區(qū)映像:
選中第一個單元格上的復選框。
填入 parameter.txt 中該分區(qū)的起始扇區(qū)作為燒寫地址(如果是 Maskrom 模式 則須再加上 0x2000)。
單擊右側空白單元格,在彈出的文件對話框里打開對應的分區(qū)映像文件。
點擊 “執(zhí)行” 按鈕燒錄。
注意:
您可以通過重復步驟 6 將多個分區(qū)映像燒寫到閃存。
通過取消選中地址單元格前面的復選框,可以跳過此分區(qū)的燒寫。
在 Maskrom 模式 中, parameter.txt 中分區(qū)的起始扇區(qū)必須再加上 0x2000 作為燒寫地址。參見《分區(qū)偏移量》一章以便使用腳本獲取該地址。
RK 固件
使用 Androidtool_2.38 燒寫 Android7.1 RK 固件時使用默認配置即可;
使用 Androidtool_2.58 燒寫 Android8.1 RK 固件使用 rk3328-Android81.cfg 配置,右擊空白部分,點擊導入配置,選擇對應的配置文件。
使用 Androidtool_2.58 燒寫 Linux(GPT)分區(qū) RK 固件使用默認配置即可。
使用 AndroidTool 燒寫 分區(qū)映像 到 eMMC 的步驟如下:
切換至”下載鏡像”頁。
勾選需要燒錄的分區(qū),可以多選。
確保映像文件的路徑正確,需要的話,點路徑右邊的空白表格單元格來重新選擇。
點擊”執(zhí)行”按鈕開始升級,升級結束后設備會自動重啟。
upgrade_tool
upgrade_tool 是 Linux 下用來燒寫原始固件、RK 固件和分區(qū)映像到 eMMC 的工具,是 Rockchip 提供的閉源命令行工具。
安裝 upgrade_tool
工具選擇與下載:
燒寫原始固件或者 Android7.1 :upgrade_tool_v1.24
燒寫 Linux(GPT) RK 固件或者 Android8.1 :upgrade_tool_v1.34
下載 upgrade_tool,并安裝到 Linux 系統(tǒng)上:
unzip Linux_Upgrade_Tool_v1.24.zip cd Linux_UpgradeTool_v1.24 sudo mv upgrade_tool /usr/local/bin sudo chown root:root /usr/local/bin/upgrade_tool sudo chmod 0755 /usr/local/bin/upgrade_tool
然后根據(jù)此處的說明去添加 udev 規(guī)則。這是為了讓普通用戶有權限燒寫 Rockchip 設備。如果跳過這步,那么所有的燒寫命令均需在前面加 sudo 才能成功執(zhí)行。
燒寫原始固件
原始固件需要從 eMMC 的偏移地址為 0 的位置開始燒寫。但在 Rockusb 模式 下所有 LBA 寫入操作會偏移 0x2000 個扇區(qū)(即 LBA0 對應于存儲設備上的第 0x2000 個扇區(qū))。因此,開發(fā)板必須強制進入 Maskrom 模式 才能燒寫原始固件。
使用 upgrade_tool 燒寫原始固件到 eMMC 的步驟如下:
強制設備進入 Maskrom 模式。
運行以下命令:
upgrade_tool db out/u-boot/rk3328_loader_ddr786_v1.06.243.bin upgrade_tool wl 0x0 out/system.img upgrade_tool rd # 重置并啟動設備
其中:
rk3328_loader_ddr786_v1.06.243.bin 是編譯 U-Boot 時復制進去的 loader 文件,也直接到此處下載 rk3328_loader_xxx.bin 文件。
system.img 是打包后的原始固件,也可以是官網(wǎng)上下載并解壓后的原始固件文件。
燒寫 RK 固件
使用 upgrade_tool 燒寫 RK 固件到 eMMC 的步驟如下:
原固件與需要燒寫的固件為同一固件只需進入Rockusb 模式,不同固件燒寫需要進入 Maskrom 模式。
使用 upgrade_tool 燒寫 RK 固件:
upgrade_tool uf path/update.img
然后燒寫不同的固件或者出現(xiàn)燒寫失敗,請按照 燒寫須知 先擦除后升級。
upgrade_tool ef path/update.img # 擦除閃存
燒寫分區(qū)映像
取決開發(fā)板原有的固件,燒寫分區(qū)映像到 eMMC 的指令會有所不同。
原始固件
如果開發(fā)板原有系統(tǒng)是原始固件,那么很可能使用了 GPT 分區(qū)方案。每個分區(qū)的預定義偏移量和大小可以在 SDK 里的 build/partitions.sh 中找到,可以參考《分區(qū)偏移量》一章。
使用 upgrade_tool 燒寫 分區(qū)映像的步驟如下:
強制設備進入 Maskrom 模式
使用 upgrade_tool 燒寫分區(qū)映像:
upgrade_tool db out/u-boot/rk3328_loader_ddr786_v1.06.243.bin upgrade_tool wl 0x40 out/u-boot/idbloader.img upgrade_tool wl 0x4000 out/u-boot/uboot.img upgrade_tool wl 0x6000 out/u-boot/trust.img upgrade_tool wl 0x8000 out/boot.img upgrade_tool wl 0x40000 out/linaro-rootfs.img upgrade_tool rd # 重置并啟動設備
RK 固件
如果開發(fā)板原有系統(tǒng)是 RK 固件,那么它使用 parameter 文件作為分區(qū)方案,這樣就可直接使用分區(qū)名稱來燒寫分區(qū)映像:
強制設備進入 Rockusb 模式。
使用 upgrade_tool 燒寫分區(qū)映像:
Android7.1 使用以下方式:
upgrade_tool di -b boot.img upgrade_tool di -k kernel.img upgrade_tool di -s system.img upgrade_tool di -r recovery.img upgrade_tool di -m misc.img upgrade_tool di resource resource.img upgrade_tool di -p parameter # 燒寫 parameter upgrade_tool ul bootloader.bin # 燒寫 bootloader
Android8.1 使用以下方式:
sudo upgrade_tool ul bootloader.bin # 燒寫 bootloader sudo upgrade_tool di -p paramater # 燒寫 parameter sudo upgrade_tool di -uboot uboot.img sudo upgrade_tool di -trust trust.img sudo upgrade_tool di -m misc.img sudo upgrade_tool di -baseparameter baseparameter.img sudo upgrade_tool di -b boot.img sudo upgrade_tool di -k kernel.img sudo upgrade_tool di -resource resource.img sudo upgrade_tool di -r recovery.img sudo upgrade_tool di -s system.img sudo upgrade_tool di -vendor vendor.img sudo upgrade_tool di -oem oem.img
Linux(GPT) 使用以下方式:
upgrade_tool ul $LOADER upgrade_tool di -p $PARAMETER upgrade_tool di -uboot $UBOOT upgrade_tool di -trust $TRUST upgrade_tool di -b $BOOT upgrade_tool di -r $RECOVERY upgrade_tool di -m $MISC upgrade_tool di -oem $OEM upgrade_tool di -userdata $USERDATA upgrade_tool di -rootfs $ROOTFS
注意:
-b 是 boot 分區(qū)的預定義縮寫。如果沒有縮寫可用,請改為分區(qū)名稱,例如上述例子中的 resource。
可根據(jù) 《參數(shù)文件格式》 這份文檔的說明自定義內(nèi)核參數(shù)和分區(qū)布局。分區(qū)布局更改后,必須先重新燒寫該 parameter 文件,方可重新燒寫受影響的相應分區(qū)。
常見問題
如果由于閃存問題而出現(xiàn)錯誤,可以嘗試使用低格或擦除閃存:
upgrade_tool lf # 低格閃存 upgrade_tool ef # 擦除閃存
rkdeveloptool
rkdeveloptool 是 Linux 下用來燒寫原始固件和分區(qū)映像到 eMMC 的工具。它不支持燒寫 RK 固件。
rkdeveloptool 是由 Rockchip 開發(fā)的命令行燒寫工具,是閉源工具 upgrade_tool 的開源替代品。在日常使用中,一般都能取代 upgrade_tool。
安裝 rkdeveloptool
首先是下載、編譯和安裝 rkdeveloptool:
#install libusb and libudev sudo apt-get install pkg-config libusb-1.0 libudev-dev libusb-1.0-0-dev dh-autoreconf # clone source and make git clone https://github.com/rockchip-linux/rkdeveloptool cd rkdeveloptool autoreconf -i ./configure make sudo make install
然后根據(jù)此處的說明去添加 udev 規(guī)則。這是為了讓普通用戶有權限燒寫 Rockchip 設備。如果跳過這步,則所有的燒寫命令均需在前面加 sudo 才能成功執(zhí)行。
燒寫原始固件
原始固件需要從 eMMC 的偏移地址為 0 的位置開始燒寫。但在 Rockusb 模式 下所有 LBA 寫入操作會偏移 0x2000 個扇區(qū)(即 LBA0 對應于存儲設備上的第 0x2000 個扇區(qū))。因此,開發(fā)板必須強制進入 Maskrom 模式 才能燒寫原始固件。
使用 rkdeveloptool 燒寫原始固件到 eMMC 的步驟如下:
強制設備進入 Maskrom 模式。
運行以下命令:
rkdeveloptool db out/u-boot/rk3328_loader_ddr786_v1.06.243.bin rkdeveloptool wl 0x0 out/system.img rkdeveloptool rd # 重置并啟動設備
其中:
rk3328_loader_ddr786_v1.06.243.bin 是編譯 U-boot 時復制進去的 loader 文件,也直接到此處下載 rk3328_loader_xxx.bin 文件。
system.img 是打包后的原始固件,也可以是官網(wǎng)上下載并解壓后的原始固件文件。
燒寫分區(qū)映像
以下的說明僅適用于開發(fā)板原有系統(tǒng)是原始固件時的分區(qū)映像燒寫。每個分區(qū)的預定義偏移量和大小可以在 SDK 里的 build/partitions.sh 中找到,可以參考《分區(qū)偏移量》一章。
使用 rkdeveloptool 燒寫分區(qū)映像的步驟如下:
強制設備進入 Maskrom 模式。
運行以下命令:
rkdeveloptool db out/u-boot/rk3328_loader_ddr786_v1.06.243.bin rkdeveloptool wl 0x40 out/u-boot/idbloader.img rkdeveloptool wl 0x4000 out/u-boot/uboot.img rkdeveloptool wl 0x6000 out/u-boot/trust.img rkdeveloptool wl 0x8000 out/boot.img rkdeveloptool wl 0x40000 out/linaro-rootfs.img rkdeveloptool rd # 重置并啟動設備
udev
創(chuàng)建 /etc/udev/rules.d/99-rk-rockusb.rules,并插入以下內(nèi)容1。 如有必要,用實際 Linux 組替換 users 組:
SUBSYSTEM!="usb", GOTO="end_rules" # RK3036 ATTRS{idVendor}=="2207", ATTRS{idProduct}=="301a", MODE="0666", GROUP="users" # RK3229 ATTRS{idVendor}=="2207", ATTRS{idProduct}=="320b", MODE="0666", GROUP="users" # RK3288 ATTRS{idVendor}=="2207", ATTRS{idProduct}=="320a", MODE="0666", GROUP="users" # RK3328 ATTRS{idVendor}=="2207", ATTRS{idProduct}=="320c", MODE="0666", GROUP="users" # RK3368 ATTRS{idVendor}=="2207", ATTRS{idProduct}=="330a", MODE="0666", GROUP="users" # RK3399 ATTRS{idVendor}=="2207", ATTRS{idProduct}=="330c", MODE="0666", GROUP="users" LABEL="end_rules"
重新加載 udev 規(guī)則:
sudo udevadm control --reload-rules sudo udevadm trigger
分區(qū)偏移量
GPT 分區(qū)
如果使用原始固件,那么系統(tǒng)很可能使用了 GPT 分區(qū)方案。每個分區(qū)的預定義偏移量和大小可以在 SDK 里的 build/partitions.sh 中找到。
分區(qū)映像的偏移量可以通過以下命令獲得(假設位于 Firefly Linux SDK 的目錄中):
(. build/partitions.sh ; set | grep _START | while read line; do start=${line%=*}; printf "%-10s 0x%08x " ${start%_START*} ${!start}; done )
會得到:
ATF 0x00006000 BOOT 0x00008000 LOADER1 0x00000040 LOADER2 0x00004000 RESERVED1 0x00001f80 RESERVED2 0x00002000 ROOTFS 0x00040000 SYSTEM 0x00000000
parameter
如果使用 RK 固件,那么系統(tǒng)是使用 parameter.txt 文件來定義分區(qū)方案,該文件的格式參見文檔《參數(shù)文件格式》 。
這里有一個 Linux 下的 Bash 腳本能列出 parameter.txt 中的分區(qū)偏移量:
#!/bin/sh PARAMETER_FILE="$1" [ -f "$PARAMETER_FILE" ] || { echo "Usage: $0 "; exit 1; } show_table() { echo "$1" echo "--------" printf "%-20s %-10s %s " "NAME" "OFFSET" "LENGTH" for PARTITION in `cat ${PARAMETER_FILE} | grep '^CMDLINE' | sed 's/ //g' | sed 's/.*:(0x.*[^)])).*/1/' | sed 's/,/ /g'`; do NAME=`echo ${PARTITION} | sed 's/(.*)((.*))/2/'` START=`echo ${PARTITION} | sed 's/.*@(.*)(.*)/1/'` LENGTH=`echo ${PARTITION} | sed 's/(.*)@.*/1/'` START=$((START + $2)) printf "%-20s 0x%08x %s " $NAME $START $LENGTH done } show_table "Rockusb Mode" 0 echo show_table "Maskrom Mode" 0x2000
將這個腳本保存為 /usr/local/bin/show_rk_parameter.sh ,然后添加腳本的執(zhí)行權限。
下面是一個顯示 RK3328 Android SDK 中定義的分區(qū)偏移量的例子:
$ show_rk_parameter.sh device/rockchip/rk3328/parameter.txt Rockusb Mode -------- NAME OFFSET LENGTH uboot 0x00002000 0x00002000 trust 0x00004000 0x00004000 misc 0x00008000 0x00002000 baseparamer 0x0000a000 0x00000800 resource 0x0000a800 0x00007800 kernel 0x00012000 0x00010000 boot 0x00022000 0x00010000 recovery 0x00032000 0x00010000 backup 0x00042000 0x00020000 cache 0x00062000 0x00040000 metadata 0x000a2000 0x00008000 kpanic 0x000aa000 0x00002000 system 0x000ac000 0x00300000 userdata 0x003ac000 - Maskrom Mode -------- NAME OFFSET LENGTH uboot 0x00004000 0x00002000 trust 0x00006000 0x00004000 misc 0x0000a000 0x00002000 baseparamer 0x0000c000 0x00000800 resource 0x0000c800 0x00007800 kernel 0x00014000 0x00010000 boot 0x00024000 0x00010000 recovery 0x00034000 0x00010000 backup 0x00044000 0x00020000 cache 0x00064000 0x00040000 metadata 0x000a4000 0x00008000 kpanic 0x000ac000 0x00002000 system 0x000ae000 0x00300000 userdata 0x003ae000 -
-
嵌入式主板
+關注
關注
7文章
6083瀏覽量
35115 -
安卓
+關注
關注
5文章
2113瀏覽量
56905 -
可制造性設計
+關注
關注
10文章
2064瀏覽量
15430 -
Firefly
+關注
關注
2文章
538瀏覽量
6951 -
華秋DFM
+關注
關注
20文章
3492瀏覽量
4305 -
RK3328
+關注
關注
1文章
55瀏覽量
2918
發(fā)布評論請先 登錄
相關推薦
評論