# OpenBMC on Raspberry Pi ###### tags: `system` [TOC] ## Download OpenBMC 可以由 [GitHub](https://github.com/openbmc/openbmc) 或是 [Gerrit](https://gerrit.openbmc-project.xyz/) 下載,如果要參與開發則要在 [Gerrit](https://gerrit.openbmc-project.xyz/) 上。 ```shell # Github git clone git@github.com:openbmc/openbmc.git cd ./openbmc ``` ## Generate Default Configuration Yocto 需要 `local.conf` 這個編譯設定檔才能知道需要編譯的套件、目標、系統參數等,為了方便可以先產生專案提供的範例,再依需求修改。 ```shell TEMPLATECONF=meta-evb/meta-evb-raspberrypi/conf . openbmc-env ``` 執行後就會產生 `build` 資料夾並進到裡面,而預設的範例設定檔就會出現在 `build/conf/local.conf`。 ## Modify `local.conf` * `MACHINE` 代表型號,可以參考 [`meta-raspberrypi/conf/machine`](https://github.com/openbmc/openbmc/tree/master/meta-raspberrypi/conf/machine) * `GPU_MEM` 代表要預留給 GPU 的 Memory 大小,單位是 MB,這個值過大會佔用運算效能,在這邊應該很少有機會使用 GPU,所以先給個最小值 16 MB。 * [Raspberry Pi 官方說明](https://www.raspberrypi.com/documentation/computers/config_txt.html#gpu_mem) 以 Raspberry Pi 2 為例,可以修改成以下內容。 ```shell= MACHINE ??= "raspberrypi2" DISTRO ?= "openbmc-phosphor" PACKAGE_CLASSES ?= "package_ipk" SANITY_TESTED_DISTROS:append ?= " *" EXTRA_IMAGE_FEATURES ?= "debug-tweaks" USER_CLASSES ?= "buildstats image-prelink" PATCHRESOLVE = "noop" BB_DISKMON_DIRS ??= "\ STOPTASKS,${TMPDIR},1G,100K \ STOPTASKS,${DL_DIR},1G,100K \ STOPTASKS,${SSTATE_DIR},1G,100K \ STOPTASKS,/tmp,100M,100K \ ABORT,${TMPDIR},100M,1K \ ABORT,${DL_DIR},100M,1K \ ABORT,${SSTATE_DIR},100M,1K \ ABORT,/tmp,10M,1K" CONF_VERSION = "2" GPU_MEM = "16" DISTRO_FEATURES:append = " systemd" VIRTUAL-RUNTIME_init_manager = "systemd" DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit" VIRTUAL-RUNTIME_initscripts = "" IMAGE_FSTYPES += " rpi-sdimg" IMAGE_INSTALL:append = " ipmitool phosphor-webui" # Set the root password to '0penBmc' INHERIT += "extrausers" EXTRA_USERS_PARAMS = "usermod -p '\$1\$UGMqyqdG\$FZiylVFmRRfl9Z0Ue8G7e/' root;" require conf/machine/include/obmc-bsp-common.inc require conf/machine/include/obmc-evb-common.inc ``` ## Modify Flash Size 預設的 flash 大小只有 32 KB,不足以塞進這麼多套件,所以建議調整 flash 大小,目前必須修改 source code 來達成。 * [How can I add python tools in image now? #3590](https://github.com/openbmc/openbmc/issues/3590) ## Download Layers and Compile 在 `build` 資料夾裡使用 `bitbake` 一邊下載一邊編譯,此專案預設有使用 `ccache`,只有第一次需要花較多時間,之後進行小修改都可以很快速的完成編譯。 ```shell bitbake obmc-phosphor-image ``` ## Write to SD Card 這裡只要用 `dd` 對 SD 卡的 device file 寫入即可,通常是 `/dev/sda`、`/dev/sdb` ...,但所有儲存裝置都有可能以這個名稱出現,一旦寫入 device 所有內容包含分割表都會被洗掉,要特別小心。另外寫入時間有點久是正常的,`dd` 是一小塊一小塊區域寫入指定位置的,這裡一樣以 Raspberry Pi 2 為例。 :::info :bulb: 不是很確定的話,可以使用 `lsblk` 確認。 ::: :::danger :warning: 如果不幸錯誤寫入錯誤到系統硬碟的話,電腦可能會無法開機,資料也都救不回來,必須非常謹慎。 ::: ```shell sudo dd if=./tmp/deploy/images/raspberrypi2/obmc-phosphor-image-raspberrypi2.rpi-sdimg of=/dev/sdX sync ``` ## Boot and Connect 接上網路線及電源線後即可開機並自動取得 IP,預設有開啟 Port 22 跟 443,應該是可以透過 SSH 或是網頁 HTTPS 登入,帳號是 root,密碼是 0panBmc (開頭是數字 0,不是英文 O)。 ## Build Next Time 下次開機會發現在 `build` 資料夾直接用 `bitbake` 編譯會找不到路徑,原因是 `bitbake` 是在設定編譯環境時 export 到環境變數的,所以必須回到 repository 根目錄要再次設定環境,此時不會蓋掉原本存在的 `local.conf`。 ```shell TEMPLATECONF=meta-evb/meta-evb-raspberrypi/conf . openbmc-env bitbake obmc-phosphor-image ``` ## Troubleshoot * [Yocto 版本更新問題](https://low-level.wiki/yocto/honister-upgrade.html)