# 前情提要 ![image](https://hackmd.io/_uploads/H1fjJG7cJl.png) OpenBMC 官方已明確表示,**樹莓派不再支援 openbmc_project,而我手邊也缺乏適當的 BMC 開發板(如 AST2600、AST2700 或 Romulus)**。雖然可以使用 bitbake-getvar 命令查看 .bb 檔案中的參數,但要確定該參數在整個專案中被哪些檔案更改過,仍需自行查找。目前,我主要面臨 License 問題,以及需要調整映像檔的分區。我希望透過在樹莓派上構建 BMC,學習 Redfish 的原理以及 bmcweb 內部的服務機制。 # 硬體設備 | 物品名稱 | 數量 | 備註 | |----------|------|------| | 小米無線路由器 | 1 台 | - | | 樹莓派 | 1 台 | - | | Linux Server (Ubuntu 24.04) | 1 台 | cpu:E5-268014核28緒 ram 32G| | SD 卡 | 1 張 | 32GB | | 讀卡機 | 1 個 | - | | PL2303HX 下載線 | 1 條 | USB 轉 TTL RS232 模組,可觀察板子開機情況| :::warning 樹梅派和server必須接到路由器上面,樹梅派會由路由器主動分配IP。待會說明為什麼? ::: # 讀取 SD 卡 將 SD 卡放進讀卡機,並插到電腦上,執行以下指令查看設備名稱: ```shell $ lsblk ``` 輸出: ```shell NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 1 29.2G 0 disk ├─sda1 8:1 1 60M 0 part └─sda2 8:2 1 228M 0 part nvme0n1 259:0 0 953.9G 0 disk ├─nvme0n1p1 259:1 0 1.1G 0 part ├─nvme0n1p2 259:2 0 2G 0 part └─nvme0n1p3 259:3 0 950.8G 0 part ``` :::info 你會看到名稱為 sdx 的裝置,其容量與 SD 卡相符,請務必記住這個名稱,後續操作會用到。 ::: # 創建 Docker 環境 :::danger 請先 確保 Docker 已安裝,如果尚未安裝,可以在網路上查找安裝指南,或參考這篇 [Docker 筆記](https://hackmd.io/@a0979552111/SJLRM6-Wke)。 📌 特別注意! 請務必完成文中 「如何使 Docker 無需使用 sudo」 的設定,以避免後續權限問題。 ::: ```shell $ git clone https://github.com/macchen-yu/RPI_BMC.git $ cd RPI_BMC $ git clone https://github.com/macchen-yu/rpi_openbmc.git openbmc ``` 修改rpi_image底下 `docker_install.sh`、`docker_run.sh`、`docker_attach.sh` 文件中的參數: ```shell ########################################################## # Define user configuration variables USER="user" # Username for the container PASSWD=0 # Password (0 is likely a placeholder, update as needed) docker_images_name="rpi_bmc:latest" # Name and tag for the Docker image (lowercase only) docker_container_name="rpi4_bmc" # Name for the Docker container (lowercase only) docker_workspace_path="/home/$USER/RPI4_BMC" # Workspace path inside the container device_path="/dev/sda" ########################################################## ``` :::success `USER` 和 `PASSWD` 可自行設定,**但 `device_path` 必須改為 SD 卡的設備名稱**。此腳本可以在docker 自動新增用戶 ::: 執行安裝腳本: ```shell $ sudo sh docker_install.sh ``` > 看到這行 <font color="#F1BE0D">-e [WARNING] Device /dev/sda not detected, please check if the device is connected!</font> 沒接上SD卡、沒讀到,或者腳本裡變數寫錯,容器仍然可以執行。不過,燒錄SD卡時需要在容器和主機之間切換,這樣會比較麻煩 > **[選做]** 退出容器終端、刪除容器,然後插上SD卡或更改容器名稱,最後重新啟動容器。 >```shell > docker ps -a > ``` > 你可以看到目前正在運行的容器,注意 `NAMES` 欄位,其中會顯示 `rpi4_image` 這個容器名稱。 ```shell! ctrl+D 退出容器終端 $ cd ~/RPI_BMC $ sudo chown -R `whoami`:`whoami` ./ $ docker rm -f rpi_bmc #刪除image $ sudo sh docker_install.sh ``` # 在 Docker 內構建 RPi-4B bmc 鏡像 ```shell= # 在docker終端 $ cd ~/RPI4_BMC/openbmc $ TEMPLATECONF=meta-evb/meta-evb-raspberrypi/conf/templates/default . openbmc-env ../bmcrpi_build $ bitbake obmc-phosphor-image ``` :::danger 如果bitbake 有問題 可以先刪掉bmcrpi_build 重新來 ::: > 可以參考底下連結 了解bitbake [yocto(二)——bitbake工作流程](https://blog.csdn.net/zz2633105/article/details/122336873?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166356857816782428697613%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166356857816782428697613&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~baidu_landing_v2~default-5-122336873-null-null.nonecase&utm_term=bitbake&spm=1018.2226.3001.4450) [bitbake官方文檔](https://docs.yoctoproject.org/bitbake/2.10/index.html) [bitbake 常見命令介紹](https://hackmd.io/@a0979552111/HJScuuBmkg) # 將 RPi-4B 鏡像燒錄至 SD 卡 ```shell $ TEMPLATECONF=meta-evb/meta-evb-raspberrypi/conf/templates/default . openbmc-env $ sudo dd if=./tmp/deploy/images/raspberrypi4-64/core-image-minimal-raspberrypi4-64.rootfs-20250208081932.rpi-sdimg of=/dev/sda status=progress ``` :::info `core-image-minimal-raspberrypi4-64.rootfs-20250208081932.rpi-sdimg` 這個檔案名稱每次編譯都不同,請根據實際 `.rpi-sdimg` 檔案名稱進行修改。 ::: # uart 接線圖 > 會用到gpio gpio 6、8、10 三支腳 | UART 接線圖 | Raspberry Pi GPIO | |------------|------------------| | ![UART 接線圖](https://hackmd.io/_uploads/S1ofhZQckx.png) | ![Raspberry Pi GPIO](https://hackmd.io/_uploads/Sk2GTZmcyg.png) | :star: 接線方式 | Raspberry Pi GPIO (Pin) | UART 訊號 | 裝置端 (Pin) | |-------------------------|----------|--------------| | GPIO 14 (Pin 8) | TXD | RXD | | GPIO 15 (Pin 10) | RXD | TXD | | GND (Pin 6) | GND | GND | # 插入SD卡開機 :::success 這邊會有一長串訊息 ::: ![開機畫面](https://hackmd.io/_uploads/BydMPWQqye.png) ### 輸入帳號與密碼 ``` 帳號: root 密碼: 0penBmc ``` ![登入畫面](https://hackmd.io/_uploads/Hy67PbX5kx.png) ## 登入 bmcweb 在樹莓派終端機輸入以下指令查詢 IP 位址: ```shell root@raspberrypi4-64:~# ip a ``` 範例輸出結果: ``` 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: end0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq qlen 1000 link/ether d8:3a:dd:49:4a:57 brd ff:ff:ff:ff:ff:ff inet 192.168.31.20/24 brd 192.168.31.255 scope global dynamic end0 valid_lft 42798sec preferred_lft 42798sec inet6 fe80::da3a:ddff:fe49:4a57/64 scope link valid_lft forever preferred_lft forever ``` :::success 從上述訊息可得知,樹莓派的 IP 為 `192.168.31.20`,請將 IP 更換為您的實際 IP。 ::: ### 登入 Web 介面 在瀏覽器中輸入以下網址: ```shell https://192.168.31.16 ``` ![Web 登入畫面](https://hackmd.io/_uploads/B1VLvW79kl.png) 再次輸入帳號與密碼: ``` 帳號: root 密碼: 0penBmc ``` ![Web 介面](https://hackmd.io/_uploads/BJO1dWQ9Jg.png)