link もっと前
   2020年 2月 10日 -
      2020年 2月 10日  
link もっと後

link 未来から過去へ表示(*)
link 過去から未来へ表示

日々

link permalink

link 編集する

Zephyr OS で遊ぼう その 9 - Zephyr 2.2.0 に対応する

Zephyr は開発中なので、ときおり内部構造が変わり、過去と互換性がなくなってしまうことがあります。ボードや SoC の定義も例外ではありません。

前回までの説明では Zephyr 2.1.0 を使用していましたが、2.1.0 から 2.2.0 の間で、ボードの defconfig の書き方が変更されました。具体的に言うと、

  • ボード側: アーキテクチャ CONFIG_RISCV を書かなくて良くなった
  • SoC 側: CONFIG_RISCV を depends on → select に変える必要が生じた

下記のパッチにあるような変更をすると、2.2.0 でも Hoge ボードと Spike SoC の対応が適用できます。

それぞれ 1行ずつしか変更していませんので、すぐわかると思います。

Zephyr の不思議なコンフィグ

Zephyr は Linux と同じ Kconfig を採用していますが、コンフィグの起点に対する考え方がだいぶ違います。Zephyr は最初に cmake で「ボード名(-DBOARD オプション)」を指定します。すなわちコンフィグの起点はボードです。一方の Linux は export ARCH=x86 のようにアーキテクチャを設定の起点にします。

Zephyr 2.1.0 では、アーキテクチャ(CONFIG_RISCV など)、SoC(CONFIG_SOC_RISCV_SIFIVE_FREEDOM など)、ボードの依存関係は下記のようになっていました。

2.1.0 の依存関係
アーキテクチャ(ボードの defconfig が y にする)← アーキテクチャが依存の起点
↑depends on
SoC(ボードの defconfig が y にする)
↑depends on
ボード(ボードの defconfig が y にする)← Zephyr はなぜかボードがコンフィグの起点

依存関係とコンフィグの起点が矛盾しているため menuconfig が異常な動きをします。おそらく ninja menuconfig を弄れば矛盾に気づくと思いますが、Zephyr はなぜかボードが未対応のアーキテクチャや SoC(例えば qemu_riscv32 で CONFIG_ARM を選択できる)を有効にできます。Zephyr 2.1.0 だと 2つ、おかしな設定ができます。

  • qemu_riscv32 ボードで未対応のアーキテクチャ(例えば CONFIG_X86)を選択すると、SoC の選択肢がおかしくなる(X86 だと言っているのに、RISC-V 用の SoC が出てくる)
  • qemu_riscv32 ボードで未対応の SoC(例えば CONFIG_SOC_LITEX_VEXRISCV)を選択すると、ボードの一覧が空になって選べなくなる(これは 2.2.0 でもできる)

実際に ninja menuconfig で、qemu_riscv32 が未対応のアーキテクチャを選ぶと下記のようになります。

Zephyr 2.1.0 の変なコンフィグ
# qemu_riscv32 のデフォルト

    Modules  --->
    Board Selection (QEMU RISCV32 target)  --->
    Board Options  ----
    SoC/CPU/Configuration Selection (SiFive Freedom SOC implementation)  --->
    Hardware Configuration  --->
    RISCV Options  --->
    Architecture (RISCV architecture)  --->
    General Architecture Options  --->
    General Kernel Options  --->
    ...


# ボードが対応していないアーキテクチャを選択すると、SoC が勝手に変わる、ボードは何も選べなくなる

    Modules  --->
    Board Selection  ----
    Board Options  ----
    SoC/CPU/Configuration Selection (LiteX VexRiscv system implementation)  --->    ★なぜか RISC-V 用の SoC が出てくる
    Hardware Configuration  ----
    Architecture (x86 architecture)  --->    ★x86 に変えた
    General Architecture Options  --->
    General Kernel Options  --->
    ...

そもそも x86 が選択可能な時点でおかしいですが、x86 を選択したのに x86 じゃない SoC が選択肢に出てくるなど、かなりおかしな動きです。

中途半端に直った Zephyr 2.2.0

Zephyr 2.2.0 では依存関係は下記のように、少しだけ整理されました。

2.2.0 の依存関係
アーキテクチャ(SoC が強制的に y にする、menuconfig では触れない)
↑select
SoC(ボードの defconfig が y にする)
↑depends on
ボード(ボードの defconfig が y にする)← ここが起点

アーキテクチャを変えることが出来なくなりました。前よりマシですが、やはり変なところは残っていて、未対応の SoC を選択するとボードの選択肢が消えてしまいます。

Zephyr 2.2.0 の変なコンフィグ設定
# qemu_riscv32 のデフォルト

    Modules  --->
    Board Selection (QEMU RISCV32 target)  --->
    Board Options  ----
    SoC/CPU/Configuration Selection (SiFive Freedom SOC implementation)  --->
    Hardware Configuration  --->
    RISCV Options  --->
    ...


# SoC を無理やり未対応のものに変えると、ボードが選べなくなる

    Modules  --->
    Board Selection  ----
    Board Options  ----
    SoC/CPU/Configuration Selection (LiteX VexRiscv system implementation)  --->
    Hardware Configuration  ----
    RISCV Options  --->
    ...

個人的には Zephyr の Kconfig の使い方は変だな、と思います。依存関係があることはわかっているのだから、依存の根本の方から設定(要は、アーキテクチャ → SoC → ボード、の順)したら良いのに、Zephyr はなぜかボードの設定から固定していて、変な動きになっています。

Linux はどうしているかというと、最初に export ARCH=x86 とします。すなわち、アーキテクチャを設定の起点にしています。自然です。特に変な動きもしません。

Zephyr の方が Linux より後発ですが、ビルド周りは退化したように感じます。不思議。

[編集者: すずき]
[更新: 2020年 2月 16日 18:21]

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link もっと前
   2020年 2月 10日 -
      2020年 2月 10日  
link もっと後

管理用メニュー

link 記事を新規作成

合計:  counter total
本日:  counter today

link About www.katsuster.net
RDF ファイル RSS 1.0
QR コード QR コード

最終更新: 3/15 02:33

カレンダー

<2020>
<<<02>>>
------1
2345678
9101112131415
16171819202122
23242526272829

最近のコメント 5件

  • link 13年11月28日
    すずき 「ご指摘ありがとうございます。投稿の古さに...」
    (更新:03/08 17:39)
  • link 13年11月28日
    yut 「古いので、見てもらえるか不明ですので、、...」
    (更新:03/08 13:16)
  • link 13年11月28日
    yut シムズ 「古い投稿に対して、申し訳ありません。\n...」
    (更新:03/08 13:14)
  • link 19年09月01日
    すずき 「私も正直びっくりです。間違って違う製品を...」
    (更新:09/04 23:39)
  • link 19年09月01日
    hdk 「車向けの製品の中でも、車載コンピューター...」
    (更新:09/02 23:20)

最近の記事 3件

link もっとみる
  • link 20年03月10日
    すずき 「[誕生日] 37歳になりました。おめでとう俺、ありがとう俺。30代...」
    (更新:03/15 02:33)
  • link 20年03月14日
    すずき 「[GCC を調べる - その 7 - machine mode] ...」
    (更新:03/15 02:21)
  • link 20年03月06日
    すずき 「[GCC を調べる - その 6 - GCC の regist] ...」
    (更新:03/11 22:47)

こんてんつ

open/close wiki
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 2020年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報