Try   HackMD

OpenBMC on Raspberry Pi

tags: system

Download OpenBMC

可以由 GitHub 或是 Gerrit 下載,如果要參與開發則要在 Gerrit 上。

# Github
git clone git@github.com:openbmc/openbmc.git
cd ./openbmc

Generate Default Configuration

Yocto 需要 local.conf 這個編譯設定檔才能知道需要編譯的套件、目標、系統參數等,為了方便可以先產生專案提供的範例,再依需求修改。

TEMPLATECONF=meta-evb/meta-evb-raspberrypi/conf . openbmc-env

執行後就會產生 build 資料夾並進到裡面,而預設的範例設定檔就會出現在 build/conf/local.conf

Modify local.conf

  • MACHINE 代表型號,可以參考 meta-raspberrypi/conf/machine
  • GPU_MEM 代表要預留給 GPU 的 Memory 大小,單位是 MB,這個值過大會佔用運算效能,在這邊應該很少有機會使用 GPU,所以先給個最小值 16 MB。

以 Raspberry Pi 2 為例,可以修改成以下內容。

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 來達成。

Download Layers and Compile

build 資料夾裡使用 bitbake 一邊下載一邊編譯,此專案預設有使用 ccache,只有第一次需要花較多時間,之後進行小修改都可以很快速的完成編譯。

bitbake obmc-phosphor-image

Write to SD Card

這裡只要用 dd 對 SD 卡的 device file 寫入即可,通常是 /dev/sda/dev/sdb ,但所有儲存裝置都有可能以這個名稱出現,一旦寫入 device 所有內容包含分割表都會被洗掉,要特別小心。另外寫入時間有點久是正常的,dd 是一小塊一小塊區域寫入指定位置的,這裡一樣以 Raspberry Pi 2 為例。

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
不是很確定的話,可以使用 lsblk 確認。

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
如果不幸錯誤寫入錯誤到系統硬碟的話,電腦可能會無法開機,資料也都救不回來,必須非常謹慎。

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

TEMPLATECONF=meta-evb/meta-evb-raspberrypi/conf . openbmc-env
bitbake obmc-phosphor-image

Troubleshoot