ジャンル不定の日記です。

U-Bootのデフォルト環境変数を設定した

Orange pi R1をMTDブートさせたい件で、U-Bootのデフォルト環境変数を設定した。

include/configs/sunxi-common.h の CONFIG_EXTRA_ENV_SETTINGS で設定できる。
#define CONFIG_EXTRA_ENV_SETTINGS \
/*
    CONSOLE_ENV_SETTINGS \
    MEM_LAYOUT_ENV_SETTINGS \
    DFU_ALT_INFO_RAM \
    "fdtfile=" FDTFILE "\0" \
    "console=ttyS0,115200\0" \
    SUNXI_MTDIDS_DEFAULT \
    SUNXI_MTDPARTS_DEFAULT \
    "uuid_gpt_esp=" UUID_GPT_ESP "\0" \
    "uuid_gpt_system=" UUID_GPT_SYSTEM "\0" \
    "partitions=" PARTS_DEFAULT "\0" \
    BOOTCMD_SUNXI_COMPAT \
    BOOTENV
*/\
    MEM_LAYOUT_ENV_SETTINGS \
    "fdtfile=" FDTFILE "\0" \
"load_scr=if load mmc 0:1 $scriptaddr /boot.scr;then echo Found boot.scr in mmc;else mtd read nor0 $scriptaddr 0x80000 0x1000;fi;\0"\
"distro_bootcmd=sf probe;run load_scr;source $scriptaddr;\0"

#else /* ifndef CONFIG_SPL_BUILD */
初期設定はまるごとコメントアウトした。
末尾に空行が入らないといけないのと、途中に改行が入るといけないみたいなのでエスケープに注意。
MEM_LAYOUT_ENV_SETTINGS は無いとscriptaddrとかkernel_addr_rとか使えなくなる。
fdtfileもboot.scrで使うので入れた。

初期設定でビルドするとdistro_bootcmdが自動実行されるのでこれを変えた。
SPIフラッシュを有効にして、load_scrを実行して、スクリプトを処理する。
load_scrは長いんで分けたが、SDの第1パーティションに/boot.scrがあればそれをロード。なければSPIフラッシュからオフセット512kBの4kBをロード。
オフセットの512kBまでにU-Boot本体を入れる。boot.scrは4kB。
搭載フラッシュは256B単位で読めるようなんだが、MTDは4kB単位で使うのが基本ぽい?
てな感じで、SPIフラッシュとSDカードの両方で使える感じにした。
boot.scrも共通で使えるようにしたい。init.shも共通にできるかな。

てなわけで、明日boot.scrとinit.shを作り直してSPIフラッシュからブートできるようにしたい。
あとちょっとと思う。