17-Dec-2023の続き。とりあえず(OpenSBIに組み込まれた)U-bootだけ手に入れば良いのですが、duo-buildroot-sdkやIntroductionに書かれた手順だとLinuxカーネルも含んだ一切合切になってしまいます。また、このSDKはビルド用のコマンドをbashの関数の形で定義しているため、何かを探すにしてもfind+grepではなく使用したbuild/milkvsetup.sh等のスクリプトを見るなりsetで表示されたものを読む方が早いです。
Milk-V Duo(64MB)の場合であれば、
- source device/milkv-duo/boardconfig.sh
- source build/milkvsetup.sh
- defconfig cv1800b_milkv_duo_sd
- clean_all
- build_fsbl
これでfip.binは得られます。ただし、clean_allはU-bootとLinuxカーネルに対してmake distcleanを行う点に注意が必要です。milkvsetup.shの
------------------------------------------------------------------------------------------------------- Usage: (1) menuconfig - Use menu to configure your board. ex: $ menuconfig (2) defconfig $CHIP_ARCH - List EVB boards($BOARD) by CHIP_ARCH. ** cv181x ** -> ['cv181x', 'cv1811h', 'cv1811c', 'cv1810c', 'cv1810h', 'cv1812cp', 'cv1812h', 'cv1813h'] ** cv180x ** -> ['cv180x', 'cv1800b', 'cv1800c', 'cv1801b', 'cv1801c', 'cv180zb'] ex: $ defconfig cv183x (3) defconfig $BOARD - Choose EVB board settings. ex: $ defconfig cv1835_wevb_0002a ex: $ defconfig cv1826_wevb_0005a_spinand ex: $ defconfig cv181x_fpga_c906 ------------------------------------------------------------------------------------------------------- |
この表示に釣られてmenuconfig(_uboot)→defconfigの順に実行したくなったとしても、menuconfig(_uboot)はclean_allの後に実行しないと意味がありません。
デフォルトの設定ではU-bootのEFI_LOADERが無効なので、必要な人はmenuconfig_ubootで設定するか、(cv1800b_milkv_duo_sdの場合なら)build/boards/cv180x/cv1800b_milkv_duo_sd/u-boot/cvitek_cv1800b_milkv_duo_sd_defconfigにCONFIG_EFI_LOADER=yを追加してください。
あとはbootriscv64.efiを読んでもらうように指示を出す方法を調べるのと、OpenBSD/riscv64は(arm64も)ブートローダがカーネル用に64MBのメモリを確保するので256MB版のMilk-V Duoを買ってこないといけない問題が残っています。58.4kg(15:00)
04-May-2024補足:Milk-V Duo(256MB)の場合、fip.binを得るには
- source device/milkv-duo256m/boardconfig.sh
- source build/milkvsetup.sh
- defconfig cv1812cp_milkv_duo256m_sd
- clean_all
- build_fsbl
という手順になります(下線の部分が変わります)。CONFIG_EFI_LOADER=yを追加する対象も、build/boards/cv181x/cv1812cp_milkv_duo256m_sd/u-boot/cvitek_cv1812cp_milkv_duo256m_sd_defconfigに変わります。