請先參考”樹梅派 Raspberry Pi 更新韌體 EEPROM“把韌體更新到最新版本,並下載最新版本的 Ubuntu 刷入 USB 中,不知道如何將 OS 刷入 USB 可以參考: “樹梅派使用 balenaEtcher 將 OS 刷入 MicroSD 或 USB 步驟教學“。
Step 1 解壓縮系統核心
需要先解壓縮系統核心,因 Pi 的開機引導程式無法正確讀取壓縮的系統核心檔案,請根據目前操作系統類型執行解壓縮系統核心。
Linux 系統上
zcat vmlinuz> vmlinux
Windows 系統上
請用 7-zip 解壓縮 vmlinuz 內容,並將檔案重新命名由 vmlinuz~ 改成 vmlinux。
Step 2 編輯 config.txt 設定檔
config.txt 標示各Raspberry Pi 版本啟動方式,請更新 [pi4] 內的內容成以下內容:
[pi4]
max_framebuffers=2
dtparam=sd_poll_once
boot_delay
kernel=vmlinux
initramfs initrd.img followkernel
注意:
dtparam=sd_poll_once 參數將會關閉 SD 卡插槽,解決開機後未插入SD卡導致 CPU 攀升的問題,但有需要使用SD卡請將此行註解。
Step 3 建立自動解壓縮腳本
ubuntu 系統更新系統核心檔案會將系統核心再次變成 vmlinuz ,而重開機時無法確讀取系統核心檔而導致無法開機,為解決此問題需建立自動解壓縮腳本。
在啟動分區中創建一個名為 auto_decompress_kernel 的腳本。在 Linux 中可以使用 nano、vi 或 vim 等來達成。在 windows 請刪除副檔名未刪除將無法正常運作,例如刪除附檔名”txt”。
將以下內容添加至檔案中
#!/bin/bash -e
#Set Variables
BTPATH=/boot/firmware
CKPATH=$BTPATH/vmlinuz
DKPATH=$BTPATH/vmlinux
#Check if compression needs to be done.
if [ -e $BTPATH/check.md5 ]; then
if md5sum --status --ignore-missing -c $BTPATH/check.md5; then
echo -e "\e[32mFiles have not changed, Decompression not needed\e[0m"
exit 0
else
echo -e "\e[31mHash failed, kernel will be compressed\e[0m"
fi
fi
#Backup the old decompressed kernel
mv $DKPATH $DKPATH.bak
if [ ! $? == 0 ]; then
echo -e "\e[31mDECOMPRESSED KERNEL BACKUP FAILED!\e[0m"
exit 1
else
echo -e "\e[32mDecompressed kernel backup was successful\e[0m"
fi
#Decompress the new kernel
echo "Decompressing kernel: "$CKPATH"………….."
zcat $CKPATH > $DKPATH
if [ ! $? == 0 ]; then
echo -e "\e[31mKERNEL FAILED TO DECOMPRESS!\e[0m"
exit 1
else
echo -e "\e[32mKernel Decompressed Succesfully\e[0m"
fi
#Hash the new kernel for checking
md5sum $CKPATH $DKPATH > $BTPATH/check.md5
if [ ! $? == 0 ]; then
echo -e "\e[31mMD5 GENERATION FAILED!\e[0m"
else echo -e "\e[32mMD5 generated Succesfully\e[0m"
fi
#Exit
exit 0
Step 4 套用自動解壓縮腳本
將 Step 3 建立的腳本套用使每次安裝軟體包時都會自動解壓縮檔案,為達成此目的需要建立一個執行檔。
注意:
該檔案需在 Ubuntu 文件系統中建立,如果在 Linux 系統上進行此類型操作可以在執行USB開機前就設定好,在 Windows 或 MacOS上則需要在系統第一次開機後立刻設定。
在 /etc/apt/apt.conf.d/ 建立檔案名稱為 999_decompress_rpi_kernel 指令如下:
sudo vi /etc/apt/apt.conf.d/999_decompress_rpi_kernel
999_decompress_rpi_kernel 檔案需添加以下程式碼:
DPkg::Post-Invoke {"/bin/bash /boot/firmware/auto_decompress_kernel"; };
修改檔案權限,使檔案有權限執行:
sudo chmod +x /etc/apt/apt.conf.d/999_decompress_rpi_kernel