目次: 自宅サーバー
Linux Kernelのlongtermバージョンが代替わりしてからしばらく経ちますが、更新をサボりにサボっていました。重い腰を上げて自宅サーバーのLinux 6.1をLinux 6.6に更新したところ、起動しなくなりました。悲しい。
Linux 6.1に戻せば起動しますからHWの故障などではないです。Kernelコンフィグが悪さをしていそうで、ドライバの有無を色々疑ったんですが、結果的にはCONFIG_UNIXがtristate(設定値にy/n/mを取れる)からbool(設定値にy/nを取れる)が原因でした。こんな経緯で起動しなくなったと思われます。
CONFIG_UNIX=mにできなくなったことなんて知りませんでした。気づけたのはmake oldconfigのおかげです。
# make oldconfig .config:917:warning: symbol value 'm' invalid for UNIX ★★エラーが出ている★★ * * Restart config... * * * Configure standard kernel features (expert users) * Configure standard kernel features (expert users) (EXPERT) [N/y/?] n Load all symbols for debugging/ksymoops (KALLSYMS) [Y/?] y Test the basic functions and performance of kallsyms (KALLSYMS_SELFTEST) [N/y/?] (NEW)
私がいつもやっている手順ですと
こんな感じなので、最初はCONFIG_UNIX=mに対するエラーに全く気づいていませんでした。もしmake oldconfigが存在しなかったら迷宮入りしていたと思います。
せっかくなので仕様が変更されたポイントを調べます。git annotateでnet/unix/Kconfigを見て、変更のもとになったコミットを調べます。コミットログは下記です。
commit 97154bcf4d1b7cabefec8a72cff5fbb91d5afb7b Author: Alexander Mikhalitsyn <alexander@mihalicyn.com> Date: Thu Jun 8 22:26:28 2023 +0200 af_unix: Kconfig: make CONFIG_UNIX bool Let's make CONFIG_UNIX a bool instead of a tristate. We've decided to do that during discussion about SCM_PIDFD patchset [1]. [1] https://lore.kernel.org/lkml/20230524081933.44dc8bea@kernel.org/ ...以下略...
このコミットが本線に取り込まれたのはLinux 6.5みたいです。
$ cd linux $ git log v6.4...v6.5 | grep 97154bcf4d1b7 commit 97154bcf4d1b7cabefec8a72cff5fbb91d5afb7b
ちなみにLinux 6.1の次のLongterm kernelはLinux 6.6ですから、今日でなくてもいつか私はこの問題にハマる運命だったと言えましょう……。
目次: 射的
JTSA Unlimitedの大会に参加しました。去年は選手登録をし忘れる痛恨のミスで参加できませんでしたが、今年は忘れずに登録&参加できました。
「木」ステージだけ全然ダメダメでしたが全体的に良い調子だったためか、結果は76.75秒で自己ベストを更新しました。実は大会で自己ベストが出る人は練習不足である説もありますが、そもそもガチ勢じゃないしあまり気にしても仕方ないでしょう。
練習会の記録を見ても80秒を切るか切らないか……程度でフラフラしていてあまり早くなっている感じはしません。来月からはLimitedが始まるのでゆるゆると続けていくとしましょう。
目次: Yocto
Yoctoのメモです。なおYoctoのバージョンはScarthgap(5.0.1)とします。他のバージョンだと当てはまらない場合があります。
買ったのに使ってないZybo Z7-20を使おうと思い立ったものの、XilinxのARMコアでLinuxを動かすときはPetaLinuxというYoctoの改造ツールを使うらしいです。ベースとなったYoctoもbitbakeコマンドを実行する程度の知識しかないのでPetaLinuxと並行してYoctoも調べたいと思います。
YoctoのQuick Build(Yocto Project Quick Build - The Yocto Project)なるドキュメントによればビルド方法はたったこれだけです。
$ source oe-init-build-env $ bitbake core-image-sato
正常に動いているうちは良いですが、まともに動かなくてデバッグするときはYoctoの超複雑なシステムが災いをもたらします。bitbakeって何?どこを見たら良いの?全くわかりません。
次回からYoctoを破壊&直しながら、Yoctoを構成する要素を調べていこうと思います。
目次: Yocto
Yocto Scarthgap(5.0.1)のメモです。Yoctoの使い方は以下の2手でした。
$ source oe-init-build-env $ bitbake core-image-sato
今回は最初のsource oe-init-build-envを調べます。Yoctoのドキュメント(Source Directory Structure - The Yocto Projectの4.1.10 oe-init-build-env)によると、OpenEmbeddedのビルド環境をセットアップし、ビルドディレクトリを作成するスクリプトです。
コードを読んで依存関係を調べるのは時間が掛かるし辛いので、簡易的な調査手法として全ファイルを消してエラーを観察し、エラーの原因となるファイルを復活させて次ステップに進める手法で調べます。調べた結果oe-init-build-envを実行するには、
が必要です。2つ目のoe-setup-builddirスクリプトによりビルドディレクトリが作成されます。次回はビルドディレクトリはどこから来るのか?を紹介します。
目次: Yocto
Yocto Scarthgap(5.0.1)のメモです。Yoctoの使い方は以下の2手でした。
$ source oe-init-build-env $ bitbake core-image-sato
テンプレートディレクトリを元にしてビルドディレクトリ(正確にはbuild/confディレクトリ)を作成します。Yoctoのドキュメント(Creating a Custom Template Configuration Directory - The Yocto Project)によると、テンプレートディレクトリのパスはTEMPLATECONF環境変数で指定できるとあります。
もし何も設定しないと.templateconfファイル内に書かれた設定をデフォルトの設定として使います。内容はこんな感じです。
$ less .templateconf # Template settings TEMPLATECONF=${TEMPLATECONF:-meta-poky/conf/templates/default}
テンプレートディレクトリの中にあるファイルはこんな感じ。
$ ls meta-poky/conf/templates/default/ bblayers.conf.sample conf-summary.txt local.conf.sample.extended conf-notes.txt local.conf.sample site.conf.sample
テンプレートファイルからビルドディレクトリを作成する際は、単なるコピーではなく##OEROOT##のような変数をパスに展開した内容がコピーされます。下記はOEROOTの展開例です。
$ diff -u meta-poky/conf/templates/default/bblayers.conf.sample build/conf/bblayers.conf
--- meta-poky/conf/templates/default/bblayers.conf.sample 2024-05-30 13:17:58.926938821 +0900
+++ build/conf/bblayers.conf 2024-05-31 14:58:51.741378271 +0900
@@ -6,7 +6,7 @@
BBFILES ?= ""
BBLAYERS ?= " \
- ##OEROOT##/meta \
- ##OEROOT##/meta-poky \
- ##OEROOT##/meta-yocto-bsp \
+ /home/katsuhiro/share/projects/oss/poky/meta \
+ /home/katsuhiro/share/projects/oss/poky/meta-poky \
+ /home/katsuhiro/share/projects/oss/poky/meta-yocto-bsp \
"
ぱっと見だとテンプレートディレクトリの場所はどこでも良さそうですがそんなことはありません。テンプレートがpoky/meta-poky/conf/templates/defaultだとしたら、
poky/meta-poky/conf/templates/ の2つ上のディレクトリの下のconf/layer.confすなわち、 poky/meta-poky/conf/layer.conf が必要です。
一言で言えばテンプレートがあるディレクトリの2つ上(Yoctoを例にすればmeta-poky)にconf/layer.confが存在しないエラーですが、そんな制約知らんわー……。
ちなみにテンプレートディレクトリを作成する場合は手で作成するのではなく、bitbake-layers save-build-confコマンドを使用するそうです(ドキュメント参照)。
セットアップディレクトリによって、ビルドディレクトリbuildが生成され、BBPATHとBUILDDIRがビルドディレクトリを指すようになります。ビルドディレクトリ下には、テンプレートディレクトリからbuild/confディレクトリが生成されます。ファイルの中身を見ると、
#### build/conf/bblayers.conf # POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf # changes incompatibly POKY_BBLAYERS_CONF_VERSION = "2" BBPATH = "${TOPDIR}" BBFILES ?= "" BBLAYERS ?= " \ /home/katsuhiro/share/projects/oss/poky/meta \ /home/katsuhiro/share/projects/oss/poky/meta-poky \ /home/katsuhiro/share/projects/oss/poky/meta-yocto-bsp \ " #### build/conf/conf-notes.txt ### Shell environment set up for builds. ### You can now run 'bitbake <target>' Common targets are: core-image-minimal core-image-full-cmdline core-image-sato core-image-weston meta-toolchain meta-ide-support You can also run generated qemu images with a command like 'runqemu qemux86-64'. Other commonly useful commands are: - 'devtool' and 'recipetool' handle common recipe tasks - 'bitbake-layers' handles common layer tasks - 'oe-pkgdata-util' handles common target package tasks #### build/conf/conf-summary.txt This is the default build configuration for the Poky reference distribution. #### build/conf/local.conf (設定項目がたくさんある、ここでは省略) #### build/conf/templateconf.cfg meta-poky/conf/templates/default
セットアップスクリプトの時点でもシステムの複雑さの片鱗が見え隠れしています。まともにコードで追うのを諦めて正解でした。そんなことしていたら日が暮れてしまいます。今回登場したファイル、ディレクトリは、
こんなもんでしょうか。次回はいよいよbitbakeに突入です。
< | 2024 | > | ||||
<< | < | 05 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | - | - | 1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 | - |
合計:
本日: