14-May-2024
[進捗ダメです]

OpenBSD/riscv64がMilk-V Duo(256MB)で起動したとはいえ、src/sys/arch/riscv64/conf/GENERICをいじってsdhc(4)を認識できてもその先には進まない…動くかどうかを知りたければgpio/reset/clock周りをきちんと実装せよということなのですが、結構大変なんですよね。

一旦置いといて、他のことしようかな。57.2kg(22:15)

09-May-2024
[はじめてのRISC-Vボード(3)]

29-Apr-2024の続き。duo-buildroot-sdkにあるmilkv-duo256m-v1.1.0-2024-0410.img(.zip)を起動してログを取ってみました。折角なので、CONFIG_EFI_LOADER=yにしてビルドしたfip.binを使って、OpenBSD/riscv64を動かした際のログも取ってみました。俺たちの戦いはこれからだ!って感じですね…やるにしても、やらないにしても。

とりあえず、何かで使うかもしれないのでcv1812cp_milkv_duo256m_sd.dtbとそれをテキストにしたものを置いときます(おまけ:cv1800b_milkv_duo_sd.dtbそのテキスト化)。57.0kg(22:55)

06-May-2024
[LinuxのLiveCDを作っちゃみたんですが]

最初に書いておきます。Debian系とRedHat系で全然違うので、検索してたどり着いたページに何が書かれているかをしっかり確認してください。とりあえず、RedHat系の方がお手軽なのでそっちの流儀で説明しますが…mkisofs用の作業用ディレクトリをwork/とすると、その下のディレクトリ構造とファイルの配置をこうします。

work
|-- LiveOS
|   `-- squashfs.img
|-- boot
|   |-- initrd.img
|   `-- vmlinuz
`-- isolinux
    |-- isolinux.bin
    |-- isolinux.cfg
    `-- ldlinux.c32

LiveOS/squashfs.imgのディレクトリ名/ファイル名は固定されていること、ldlinux.c32をisolinux/に配置する必要がある点に注意が必要です。また、isolinux.cfgのCDLABELで指定される名称はmkisofs -Vで指定する名称と一致している必要があります(CDLABELの名称については参考にしたブータブルLinuxISOを手作りするでも触れられています)。

でも一番重要なのはvmlinuzとinitrd.imgで、RedHatの流儀で作る以上はRedHat系distroの物を使う必要がある、ということです。これを書いている時点だとCentOS-stream 9にあるものを使うのが早いです(squashfs.img以外はすべてここで揃います)。

ISOイメージの作成は mkisofs -o output.iso -R -J -V linux -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table work で。

NostrでumbrelOSのISOイメージは無いのか、という話があったので挑んでいたのですがなかなかの難問でした。提供されているのがUSBメモリ向けのディスクイメージ、しかもGPT形式のパーティションかつEFI boot専用の物しかないのです。HDDエミュレーションのEl Torito(ISO9660)を作っても起動しようがないので、インストール用データの格納された区画をsquashfsで固めてLiveCDにするしかないかなって。

umbrelOSはDebian系distroではあるんですが、CentOS-streamのvmlinuz+initrdでもインストーラを起動させてVirtualBoxの仮想マシンにインストールするところまではできています。

t20240506.png

とはいえ、インストールした後にどうやって使うかがまったく分からないので困っています。あと、VirtualBoxはEFI boot可能なので問題にはなりませんが、EFI bootできないマシンでインストール後にどうやって起動できるようにするかという問題も解決していません。57.7kg(10:55)

07-May-2024補足:vmlinuzとinitrd.imgを拝借したCentOS 9-streamはkernel-5.14.0-437.el9、umbrelOS(Debian-12)はkernel-6.1.0-20を使用しています。カーネルのバージョンが異なるために/usr/lib/modulesにあるカーネルモジュールを使えない以上、initrd.imgに入っているモジュールだけで動いているのでしょうが…インストール用メディアに格納されたファイルをインストール先のディスクに展開する程度ならなんとなく動いていても、それを超えるような用途だと問題が発生しそうな気がします。

それ以前に、EFI boot対応のPCエミュレータならumbrelOSのインストール用USBメモリイメージを(圧縮を解いてから)仮想HDDとして接続してしまえば良いだけなので、ISO化する必要は無いはずです。随分と馬鹿なことをやったもんだ、と今更ながら思っています。

04-May-2024
[LuckFox Pico Plusなるものを]

Milk-V Duo(64M)とそんなに変わらない時期に買っていたのですが、これを動かすのはなかなか難しいですね。とりあえずSDKに入っているU-bootだけをmicroSDに入れて動かすのも、一苦労です。

何となく分かった点をまとめると、

./build.sh lunchではeMMC向けの設定を使う
自分は4. BoardConfig_IPC/BoardConfig-EMMC-Ubuntu-RV1103_Luckfox_Pico_Plus-IPC.mk (EMMC/Ubuntu/RV1103_Luckfox_Pico_Plus/IPC)を選びました
./build.sh ubootでU-bootを作成する
これによりidblock.img, uboot.imgが得られるものの(次に続きます)
./build.sh envでenv.imgも作成する
env.imgを用意しないとmicroSDから起動できないという問題があります
ディスクイメージの作成
面倒なのでスクリプトにしちゃいましたが、sd_parts=mmcblk0:16K@512(env),512K@32K(idblock),4M(uboot)に従ってdd if=env.bin of=/dev/sd1c bs=512 seek=1にはならない点に注意が必要です

とりあえず、build.shで得られた物を書き込んで作ったmicroSDで起動して、こんな感じRockPi S(RK3306)向けのディスクイメージの作成ではenv.imgを使っていないのですが、mainlineではなくRockChipが味付けしたU-bootを使っているが故にこうなっているのかもしれません。

OpenBSDをこれで動かすことは…その前にmainline U-bootをRV1103に対応させる方が先という気がしますねえ(できるのか?)。57.5kg(16:50)

05-May-2024補足:./build.sh lunchで設定するボード別の設定はproject/cfg/BoardConfig_IPC/BoardConfig-*.mkに収められており、./build.sh envで作成する区画情報(ということにしておきます)はこのファイルにあるexport RK_PARTITION_CMD_IN_ENVの内容が反映されるようです。

./build.sh ubootでU-bootを作成する際はボードの設定に関わらず、sysdrv/source/uboot/u-boot/configs/rv1106_defconfigを参照しています。これにCONFIG_EFI_LOADER=yを追加してみましたが、他にも色々設定しないとEFI loaderが有効にならないように見えるんですよね…簡単に煮炊きして食えるような代物ではなさそうです。