2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

geom_flashmapをいじった

Last updated at Posted at 2025-12-15

自分の12STABLEをベースにしたソースツリーのgeom_flashmapをいじりました。

実はこれはレビューに入れたのですが、ロシアのコミッターのMichael Zhilinと意見が合わなくAbandanしたものです。

Michaelとは仲がよくAsiaBSDConで日本に来た時などときどき会っていました。

まずどのような修正かというとdtsに明示的にrootfsの位置を書かずu-bootのヘッダーから位置を推測して、確認して設定するというものです。OpenWRT方面では同じような機構があります。

従来のFreeBSDでは以下のようにdtsに書く必要があります。

                        partition@50000 {
                                label = "kernel";
                                reg = <0x50000 0x140000>;
                        };
                        partition@150000 {
                                label = "rootfs";
                                reg = <0x190000 0xe50000>;
                        };

これの何が問題かというと、kernelコンフィグレーションを変えてkernelサイズが変わるとrootfsの位置が変わってしまい、それに合わせてdtsを修正する必要があります。

私は、AsiaBSDCon 2019で話した、reupgradeというu-bootの操作をせずFreeBSDの操作でリモートでflashの更新をしています。

このためrootfsの位置が変わったのにdtsを書き換えていないと、rootfsが見えなくなりFreeBSDが起動しなくなり、u-bootの操作でflashを更新する必要があります。かなり致命的な状態になります。

もう100回以上はreupgradeをしているとおもいますが、これ以外の問題は起きていません。

自分のパッチで以下のようにOpenWRTと同じように書けるようになりました。

                        partition@50000 {
                                compatible = "openwrt,uimage", "denx,uimage";
                                openwrt,padding = <32>;
                                label = "firmware";
                                reg = <0x50000 0xf90000>;
                        };

dmesgはこのようになります。

このパッチはもともとgeom_mapにrayが入れたと思われる同様の処理をベースに作ったように記憶しています。geom_mapはhintsベースのパーティションマップのモジュールです。

レビューでMichaelが言うにはこのような処理はslicerでやるべきということだったのですが、geom_map同様の処理なのでrayはなんでダメなのと言っていました。

また、今回チェックしたのがFON2601Eでu-bootヘッダーにパディングがある特殊なパターンだったのでそれの対応も入れました。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?