新千葉 ガーベージ・コレクション

FPGA マガジンやインターフェースで書けなかったこと等をちょぼちょぼ書いてます。@ryos36

sdcard をつくる bbclass

fsl ではわざわざ classes の下に image_types_fsl.bbclass なるものをつくってイメージを作っている。ラズベリーもそう。これは ROOTFS_SIZE を知りたいかららしい。IMAGE_CMD_sdcard は rootfs の延長で呼ばれるので ROOTFS_SIZE が変数としてわかる。deploy ではわからない。

python でどうやっているかというと、

runimagecmd () {
        # Image generation code for image type ${type}
        # The base_size gets calculated:
        #  - initial size determined by `du -ks` of the IMAGE_ROOTFS
        #  - then multiplied by the IMAGE_OVERHEAD_FACTOR
        #  - tested against IMAGE_ROOTFS_SIZE
        #  - round up ROOTFS_SIZE to IMAGE_ROOTFS_ALIGNMENT
        ROOTFS_SIZE=`du -ks ${IMAGE_ROOTFS} | awk '{base_size = $1 * ${IMAGE_OVERHEAD_FACTOR}; base_size = ((base_size > ${IMAGE_ROOTFS_SIZE} ? base_size : ${IMAGE_ROOTFS_SIZE}) + ${IMAGE_ROOTFS_EXTRA_SPACE}); if (base_size != int(base_size)) base_size = int(base_size + 1); base_size = base_size + ${IMAGE_ROOTFS_ALIGNMENT} - 1; base_size -= base_size % ${IMAGE_ROOTFS_ALIGNMENT}; print base_size }'`

と du を読んでいる。ありゃまー。でもこれって、そんなことする必要はないじゃないか。よくよく考えたら。どのイメージを使うかはどうなっているのだ?

#   ${SDCARD_ROOTFS}    - the rootfs image to incorporate
#   ${IMAGE_BOOTLOADER} - bootloader to use {u-boot, barebox}

SDCARD_ROOTFS というのが deploy ディレクトリにあることを前提にしている。サイズわかるじゃん。
でもって、どっかで指定する。以前は自分のレシピの中で

SDCARD_ROOTFS = "${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ext4"

みたいにしていた。

ついでに書くと、deploy の中では ROOTFS_SIZE が使えないけど、DEPLOYDIR は使える。rootfs では ROOTFS_SIZE が使えて DEPLOYDIR は使えないので、DEPLOY_DIR_IMAGE を使っている。汚い。

どっちにしろ SDCARD_ROOTFS を使うのだから、ファイルサイズをとってくればいいのだ。これで deploy の中でできる。du 使う必要がない。

同じような疑問を持った人がいたんだね。
http://permalink.gmane.org/gmane.linux.embedded.yocto.general/11550

と思っていたら、IMAGE_NAME もわからないのか。シンボリックリンクの名前はわからないでもないし、du の -L でも追えるなぁ。しかし、core-image-minimal にしたら core-image-minimal に、、、という具合にならない。汚いけど、classes で対応するしかなさそう。むむむむ。