Skip to content

Raspberry Pi 4 Ubuntu 從 USB 開機 (無 SD Card)

請先參考”樹梅派 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

參考來源:

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。