0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使樹莓派 4B 支持 UEFI

openEuler ? 來源:openEuler ? 作者:openEuler ? 2022-09-07 11:26 ? 次閱讀

混合部署的從核啟停依賴 UEFI 第三方固件支持 PSCI 標準實現(xiàn),本文介紹如何使樹莓派 4B 支持 UEFI,并可通過 SD 卡或網(wǎng)絡(luò)啟動 openEuler Embedded。

使用 openEuler Embedded UEFI+GRUB 的樹莓派鏡像

openEuler Embedded 的樹莓派鏡像集成了基于樹梅派 4B 的混合部署環(huán)境依賴,因此建議直接使用 openEuler Embedded UEFI+GRUB 的樹莓派鏡像,該鏡像對齊 tiny 鏡像的軟件包配置,并集成 openssh 支持網(wǎng)絡(luò)登錄、混合部署 mcs 依賴庫及混合部署 mcs 預留內(nèi)存 mcsmem dtoverlay。

構(gòu)建樹梅派 openeuler-image-uefi 鏡像和燒錄

分支支持要求:openEuler-22.09 及之后的主線 master 分支。

環(huán)境準備流程參考前期發(fā)布的《openEuler Embedded 對樹莓派 4B 的支持》內(nèi)構(gòu)建指導部分。

構(gòu)建命令示例:

su openeulersource /usr1/openeuler/src/yocto-meta-openeuler/scripts/compile.sh raspberrypi4-64 /usr1/openeuler/src/build/build-raspberrypi4-64/bitbake openeuler-image-uefi

構(gòu)建鏡像生成示例:

openeuler-image-uefi-raspberrypi4-64-*.rootfs.rpi-sdimg

將 openeuler-image-uefi-raspberrypi4-64-*.rpi-sdimg 燒錄到 SD 卡。

openEuler 燒錄參考《openEuler Embedded 對樹莓派 4B 的支持》內(nèi)鏡像使用方法部分。

openeuler-image-uefi 啟動使用指導

「步驟 1」:燒錄后首次啟動需修改 UEFI 配置,啟動階段按 ESC 進入 UEFI,按下圖操作解鎖 3G 內(nèi)存限制并關(guān)閉 ACPI 選用 DEVICETREE,保存重啟后再操作步驟 2。

68e70468-2dd1-11ed-ba43-dac502259ad0.png

68fa847a-2dd1-11ed-ba43-dac502259ad0.png

6911cf7c-2dd1-11ed-ba43-dac502259ad0.png

6927d448-2dd1-11ed-ba43-dac502259ad0.png

693a7792-2dd1-11ed-ba43-dac502259ad0.png

「步驟 2」:更改 boot order 或手動選擇 SD 卡啟動,如下,最后選擇 Commit Changes and Exit。

69521c76-2dd1-11ed-ba43-dac502259ad0.png

6963cc64-2dd1-11ed-ba43-dac502259ad0.png

699330f8-2dd1-11ed-ba43-dac502259ad0.png

69a326fc-2dd1-11ed-ba43-dac502259ad0.png

「步驟 3」:啟動

69bc736e-2dd1-11ed-ba43-dac502259ad0.png

「注意:」

此 UEFI 版本的固件默認使用 3G 內(nèi)存 limit,可以在 UEFI 菜單中關(guān)閉 3G limit,否則系統(tǒng)啟動后你看到的內(nèi)存只有 3G(參考官方配置說明:https://github.com/pftf/RPi4/ )。

該版本 UEFI+ACPI 部署方法有缺陷(HDMI 驅(qū)動異常),首次使用必須進入 UEFI 菜單,使用 DEVICETREE 模式。

手動刷新固件使樹莓派 4B 支持 UEFI 引導

環(huán)境/工具準備

編譯工具鏈:可用 openEuler Embedded 的交叉編譯工具鏈,參考https://docs.openeuler.org/zh/docs/22.03_LTS/docs/Embedded/SDK 應(yīng)用開發(fā).html。

設(shè)備:建議樹莓派 4B 的出廠配置,包括樹莓派 4B 基礎(chǔ)套件和 SD 卡。

openEuler Embedded 標準鏡像 + UEFI 固件下載和刷新方法

1 將 openEuler Embedded 樹莓派鏡像燒錄到 SD 卡

如何獲得 openEuler Embedded 樹莓派鏡像,參考前期發(fā)布的《openEuler Embedded 對樹莓派 4B 的支持》。

# 假設(shè)鏡像名 openeuler-image-raspberrypi4-64.rootfs.rpi-sdimg,SD卡識別為/dev/sda (linux環(huán)境)sudo dd bs=4M if=openeuler-image-raspberrypi4-64.rootfs.rpi-sdimg of=/dev/sda

燒錄完成后,將 SD 卡(boot 盤)根目錄的 kernel8.img 文件壓縮成 Image.gz:

# boot分區(qū)可能已經(jīng)滿了,移出kernel8.img再操作mv SDbootVolumes/kernel8.img /tmp/Imagegzip -c /tmp/Image > SDbootVolumes/Image.gz

2 下載樹莓派 UEFI 固件

以 v1.33 版本為例,通過https://github.com/pftf/RPi4/releases/download/v1.33/RPi4_UEFI_Firmware_v1.33.zip下載樹莓派 UEFI 固件,下載固件后解壓,將除了bcm2711-rpi-4-b.dtb之外的所有文件拷貝到 SD 卡(boot 盤)根目錄(覆蓋之前的文件):

# 備份bcm2711-rpi-4-b.dtbcp SDbootVolumes/bcm2711-rpi-4-b.dtb /bakdir/bcm2711-rpi-4-b.dtbcp -rf /xxx/RPi4_UEFI_Firmware_v1.33/* SDbootVolumes/# 恢復使用備份的openEuler Embedded的dtbcp /bakdir/bcm2711-rpi-4-b.dtb SDbootVolumes/

「注意:」

3G 內(nèi)存解鎖和關(guān)閉 ACPI 使能 DEVICETREE 請參考上述“openeuler-image-uefi 啟動使用指導”章節(jié)

kernel8.img 不再需要,請務(wù)必刪除,否則將影響啟動。

3 制作 grub 并選擇啟動方式

SD 卡啟動參考本文章節(jié):樹莓派 UEFI 之手動制作 grub 并通過 SD 卡啟動 openEuler Embedded

網(wǎng)絡(luò)卡啟動參考本文章節(jié):樹莓派 UEFI 之手動制作 grub 并通過網(wǎng)絡(luò)啟動 openEuler Embedded

樹莓派 UEFI 之手動制作 grub 并通過 SD 卡啟動 openEuler Embedded

grub 準備(編譯+制作 grub 啟動組件)

「grub 源碼獲取」

下載地址:https://github.com/coreos/grub/releases/tag/grub-2.02

「grub 組件編譯」

解壓源碼包并進入根目錄,準備開始構(gòu)建 arm64-efi(交叉編譯)的 grub 庫,注意此時交叉編譯工具已經(jīng)配置完畢,按如下步驟執(zhí)行:

./autogen.sh./configure --prefix=/xxx/grub-2.02/build --with-platform=efi --disable-werror --target=aarch64-openeuler-linux-gnumake

構(gòu)建成功后,在當前目錄會生成對應(yīng)的二進制和 grub 組件依賴庫,其中 grub-core 即制作 grub-efi 需要的工具庫,grub-mkimage 即制作板子 grub.efi 引導的 host-tool。

「制作引導程序」

接下來制作板子引導 grub 程序,下例輸出名為 bootaa64.efi,生成后請放置到 SD 卡 boot 分區(qū)的對應(yīng)目錄(/EFI/BOOT/bootaa64.efi):

./grub-mkimage -d ./grub-core -O arm64-efi -o bootaa64.efi -p '' ls grub-core/*.mod | cut -d "." -f 1mkdir -p SDbootVolumes/EFI/BOOTcp ./bootaa64.efi SDbootVolumes/EFI/BOOT/

「說明:」

xxxxx 目錄中請不要帶“.”,否則請適配上述語法。

「制作引導配置文件」

最后,編輯 grub.cfg 配置文件,grub.cfg 配置文件同 bootaa64.efi 放在一起(/EFI/BOOT/grub.cfg),就緒后在 UEFI 菜單中選擇 SD 卡啟動即可。grub.cfg 示例內(nèi)容如下(后面是 cmdline 內(nèi)容,linux gz 壓縮的內(nèi)核,使用 SD 卡分區(qū),不需要 initrd):

insmod gzioset timeout=0
menuentry 'Start OpenEuler' {echo "openEuler test."linux /Image.gz coherent_pool=1M 8250.nr_uarts=1 snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1 bcm2708_fb.fbwidth=1824 bcm2708_fb.fbheight=984 bcm2708_fb.fbswap=1 smsc95xx.macaddr=E401E2:E2 vc_mem.mem_base=0x3ec00000 vc_mem.mem_size=0x40000000  dwc_otg.lpm_enable=0 console=tty1 console=ttyS0,115200 console=ttyAMA0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait}

「說明:」

上述內(nèi)容需配合 openEuler Embedded 構(gòu)建的樹莓派鏡像,并在 UEFI 非 ACPI(DEVICETREE)下使用,dtb 使用 openEuler Embedded 鏡像中的內(nèi)容。其中 Image.gz 即內(nèi)核 Image 的 gzip 壓縮,可通過gzip -c kernel8.img > Image.gz獲得(若使用 openEuler Embedded 鏡像),kernel8.img 不再需要,請務(wù)必刪除,否則將影響啟動。

樹莓派 UEFI 之手動制作 grub 并通過網(wǎng)絡(luò)啟動 openEuler Embedded

1 準備 PXE 部署服務(wù)器

以 ubunutu 14.04 為例,dhcp 中指定的 filename 就是 grub 的 efi 引導文件名。

假設(shè)服務(wù)器網(wǎng)段為 192.168.10.x,服務(wù)器 IP 為 192.168.10.1,網(wǎng)卡 eth0 用于 dhcp 服務(wù),初始化服務(wù)器 IP 示例:

sudo ifconfig eth0 192.168.10.1 up

2 使能 DHCP 服務(wù)

安裝 DHCP 軟件:

sudo apt-get install isc-dhcp-server

編輯/etc/dhcp/dhcpd.conf 文件,例如:

allow booting;allow bootp;option domain-name "example.org";default-lease-time 600;max-lease-time 7200;ddns-update-style none;
subnet 192.168.10.0 netmask 255.255.255.0 {range 192.168.10.100 192.168.10.200;filename "mygrub.efi"; #默認下載的grub文件名,和3中制作的efi引導程序名字需匹配option routers 192.168.10.1;next-server 192.168.10.1; #tftp服務(wù)器IP,PXE必須,HTTPBOOT可選option broadcast-address 192.168.10.255;}

配置 DHCP 服務(wù)網(wǎng)絡(luò)接口,編輯文件/etc/default/isc-dhcp-server增加/修改字段:

INTERFACES=”eth0” #dhcp使用的網(wǎng)卡

啟動 DHCP 服務(wù):

sudo /etc/init.d/isc-dhcp-server restart

3 使能 TFTP 服務(wù)

安裝 TFTP 服務(wù)器軟件:

sudo apt-get install tftpd-hpa

配置 TFTP 服務(wù),編輯/etc/default/tftpd-hpa文件,例如:

TFTP_USERNAME="tftp"TFTP_ADDRESS=":69"TFTP_DIRECTORY="/var/lib/tftpboot/"TFTP_OPTIONS="--secure -l -c -s"

啟動 TFTP 服務(wù):

sudo /etc/init.d/tftpd-hpa restart

4 grub 準備(編譯+制作 grub 啟動組件)

「grub 源碼獲取」

下載地址:https://github.com/coreos/grub/releases/tag/grub-2.02

「grub 組件編譯」

解壓源碼包并進入根目錄,準備開始構(gòu)建 arm64-efi(交叉編譯)的 grub 庫,注意此時交叉編譯工具已經(jīng)配置完畢,按如下步驟執(zhí)行:

./autogen.sh./configure --prefix=/xxx/grub-2.02/build --with-platform=efi --disable-werror --target=aarch64-openeuler-linux-gnumake

構(gòu)建成功后,在當前目錄會生成對應(yīng)的二進制和 grub 組件依賴庫,其中,grub-core 即制作 grub-efi 需要的工具庫,grub-mkimage 即制作板子 grub.efi 引導的 host-tool。

「制作引導程序」

接下來制作板子引導 grub 程序,下例輸出名為 mygrub.efi:

./grub-mkimage -d ./grub-core -O arm64-efi -o mygrub.efi -p '' ls grub-core/*.mod | cut -d "." -f 1

「說明:」

xxxxx 目錄中請不要帶“.“,否則請適配上述語法。

「制作引導配置文件」

最后,編輯 grub.cfg 配置文件,grub.cfg 配置文件放在 tftp 的根目錄(/var/lib/tftpboot/grub.cfg),就緒后在 UEFI 菜單中選擇 IPV4 網(wǎng)絡(luò)啟動即可,grub.cfg 示例內(nèi)容如下(Image.gz 后面是 cmdline 內(nèi)容,linux gz 壓縮的內(nèi)核,initrd 文件系統(tǒng)):

insmod gzioset timeout=0
menuentry 'Start OpenEuler' {echo "openEuler test."linux /Image.gz coherent_pool=1M 8250.nr_uarts=1 snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1 bcm2708_fb.fbwidth=1824 bcm2708_fb.fbheight=984 bcm2708_fb.fbswap=1 smsc95xx.macaddr=E401E2:E2 vc_mem.mem_base=0x3ec00000 vc_mem.mem_size=0x40000000  dwc_otg.lpm_enable=0 console=tty1 console=ttyS0,115200 console=ttyAMA0,115200initrd /initrd.cpio.gz}

附:網(wǎng)絡(luò)啟動時內(nèi)核 Image.gz 和文件系統(tǒng) initrd 的來源說明

文件系統(tǒng)例子

若使用網(wǎng)絡(luò)啟動,可使用 openEuler Embedded 構(gòu)建的標準樹梅派鏡像構(gòu)建過程中的 rootfs 并手動打包,也可使用 openEuler Embedded 發(fā)布的 qemu-aarch64 參考文件系統(tǒng) (https://repo.openeuler.org/openEuler-22.03-LTS/embedded_img/arm64/aarch64-std/openeuler-image-qemu-aarch64-20220331025547.rootfs.cpio.gz)

手動打包 rootfs 例子(預先需準備 openEuler Embedded 樹梅派已構(gòu)建完成的環(huán)境):

# 假設(shè)已經(jīng)處于構(gòu)建build目錄cd tmp/work/raspberrypi4_64-openeuler-linux/openeuler-image/1.0-r0/rootfs/find . | cpio -H newc -o | gzip -n9c > ../initrd.cpio.gz# 生成在上層目錄的initrd.cpio.gz即為所需文件系統(tǒng)

「說明:」

配置文件系統(tǒng)/etc/inittab 時注意 getty 登錄時串口重定向要配置正確,否則可能沒有打印。(樹莓派 4B 硬件串口 PL011 對應(yīng),引腳 14TXD 和 15RXD)

內(nèi)核例子

若使用網(wǎng)絡(luò)啟動,可使用 openEuler Embedded 構(gòu)建的標準樹梅派鏡像中的 kernel8.img,格式即 Image,然后通過 gzip 壓縮為 Image.gz 格式。

內(nèi)核單獨編譯例子(openEuler)

參考 openEuler 樹莓派交叉編譯內(nèi)核 :https://gitee.com/openeuler/raspberrypi/blob/master/documents/交叉編譯內(nèi)核.md

「注意:」

若使用上述 UEFI+ACPI 部署方法,必須在 config 中開啟 ACPI 系列功能支持。在make menuconfig ARCH=arm64菜單中,選中 ACPI 默認系列支持。建議在 UEFI 中關(guān)閉 ACPI 選用 DEVICETREE(參考 openeuler-image-uefi 啟動使用指導相關(guān)配置)。

編譯生成的 Image,在上述 efi 配置下,grub.cfg 的 Linux 格式需使用 gz 命令壓縮成 Image.gz。

操作說明

將上述內(nèi)核和文件系統(tǒng),放在 tftp 服務(wù)目錄(/var/lib/tftpboot)下即可進行網(wǎng)絡(luò)啟動。

網(wǎng)絡(luò)啟動基本流程如下:

DHCP 服務(wù)器給單板分配 IP

單板啟動 UEFI 選擇 PXE 啟動

PXE 根據(jù) DHCP 的 filename 和 tftp 服務(wù)器地址,從 tftp 服務(wù)器下載 mygrub.efi

進入 grub 引導程序,根據(jù) grub.cfg 配置,從對應(yīng) tftp 目錄下載文件系統(tǒng)和內(nèi)核并加載啟動

其中,使用的 ACPI 資源表/DTB 是 UEFI 固件初始化好的(引導內(nèi)核前已放在對應(yīng)內(nèi)存),不過 cmdline/bootargs 可通過 grub.cfg 進行配置,在加載內(nèi)核時,grub 會傳遞給 UEFI 并上報給系統(tǒng)。

69c70ea0-2dd1-11ed-ba43-dac502259ad0.png

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 軟件
    +關(guān)注

    關(guān)注

    69

    文章

    4944

    瀏覽量

    87488
  • ACPI
    +關(guān)注

    關(guān)注

    1

    文章

    11

    瀏覽量

    8955
  • 鏡像
    +關(guān)注

    關(guān)注

    0

    文章

    164

    瀏覽量

    10723
  • 樹莓派
    +關(guān)注

    關(guān)注

    116

    文章

    1707

    瀏覽量

    105632

原文標題:Embedded SIG | 樹莓派的UEFI支持和網(wǎng)絡(luò)啟動

文章出處:【微信號:openEulercommunity,微信公眾號:openEuler】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    樹莓4B支持的操作系統(tǒng)有哪些?

    樹莓常見的型號有哪幾種?樹莓4B支持的操作系統(tǒng)有哪些?
    發(fā)表于 10-13 07:01

    樹莓4B進行開機測試

    1、準備工作 在本文中,我們對樹莓4B進行開機測試,默認TF卡中已經(jīng)燒寫了Raspbian操作系統(tǒng)。在進行開機測試時,需要的準備的配件有:樹莓
    發(fā)表于 10-29 09:19

    樹莓4B有什么特色

    目錄1、前言2、樹莓4B有什么特色?3、樹莓新手準備4、燒錄Raspbian Buster系
    發(fā)表于 11-11 07:40

    樹莓4B安裝及使用

    實驗一樹莓4B安裝及使用目錄實驗一 樹莓4B安裝及使用... 1目錄... 1一、
    發(fā)表于 12-13 06:12

    Embedded SIG | 樹莓UEFI支持和網(wǎng)絡(luò)啟動

    混合部署的從核啟停依賴 UEFI 第三方固件支持 PSCI 標準實現(xiàn),本文介紹如何使樹莓 4B
    發(fā)表于 09-07 15:22

    樹莓入門(五)—— 樹莓4B之初體驗

    1、準備工作 在本文中,我們對樹莓4B進行開機測試,默認TF卡中已經(jīng)燒寫了Raspbian操作系統(tǒng)。在進行開機測試時,需要的準備的配件有:樹莓
    發(fā)表于 10-22 10:06 ?13次下載
    <b class='flag-5'>樹莓</b><b class='flag-5'>派</b>入門(五)—— <b class='flag-5'>樹莓</b><b class='flag-5'>派</b><b class='flag-5'>4B</b>之初體驗

    樹莓4b原理圖下載

    樹莓4b原理圖下載
    發(fā)表于 12-13 11:18 ?124次下載

    樹莓4B原理圖

    樹莓4B原理圖
    發(fā)表于 02-01 14:42 ?59次下載

    樹莓4b學習筆記

    ,那時候使用的還是老版的3b。時間一晃,轉(zhuǎn)眼就6年了,在家閑著無事,想著用樹莓做一些視覺開發(fā)的項目(因為便宜、好上手),然而,淘寶一搜,好家伙,這款19年上市的4b價格漲價太多,5
    的頭像 發(fā)表于 07-04 11:25 ?7146次閱讀
    <b class='flag-5'>樹莓</b><b class='flag-5'>派</b><b class='flag-5'>4b</b>學習筆記

    rk3568和樹莓4b性能比較

    的性能比較。 一、硬件參數(shù)比較 在硬件參數(shù)方面,rk3568采用RK3568主控芯片,支持雙通道DDR3/DDR4大容量內(nèi)存,最大支持8GB,集成G5233 GPU,最高支持
    的頭像 發(fā)表于 08-15 17:05 ?3937次閱讀

    樹莓4B的性能特點及應(yīng)用

    樹莓4B簡介 樹莓4B是一款基于ARM架構(gòu)的單板計算機,其搭載了四核Cortex-A72 C
    的頭像 發(fā)表于 08-30 16:54 ?1802次閱讀

    樹莓4b相當于什么CPU

    樹莓4B作為一款基于ARM架構(gòu)的單板計算機,自其發(fā)布以來就因其高性價比、豐富的接口和強大的擴展性而備受關(guān)注。在探討樹莓
    的頭像 發(fā)表于 08-30 16:59 ?1459次閱讀

    樹莓4b和什么性能計算機相當

    樹莓4B與何種性能的計算機相當,這個問題涉及到多個方面的比較,包括處理器性能、內(nèi)存大小、接口豐富度以及應(yīng)用場景等。以下是從這些方面進行的綜合分析: 1. 處理器性能 樹莓
    的頭像 發(fā)表于 08-30 17:01 ?986次閱讀

    樹莓4b支持多大的sd卡

    4B支持的SD卡類型 樹莓4B支持的SD卡類型主
    的頭像 發(fā)表于 08-30 17:02 ?1166次閱讀

    樹莓4B的WiFi配置過程

    樹莓4B的WiFi配置過程是一個相對直接且靈活的任務(wù),可以通過多種方式完成,包括使用圖形用戶界面(GUI)、終端命令以及修改配置文件等。以下介紹樹莓
    的頭像 發(fā)表于 08-30 17:10 ?1843次閱讀