トップ «前の日記(2022-10-16) 最新 次の日記(2022-10-21)» 編集

Orz日記 by Akio Morita

ToDo:

  • 15 SAD Fit[]回りの障害事例の解析
  • 10 smart pointer版PEGクラスの再実装(Left Recursionまわり)
2006|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|06|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|07|08|09|10|11|12|
2013|01|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|06|07|08|10|12|
2016|01|02|03|05|06|08|10|11|
2017|01|02|03|04|05|06|07|09|10|11|12|
2018|01|02|03|04|06|07|08|09|10|11|12|
2019|01|03|04|05|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|

2022-10-19 [長年日記]

_ [FreeBSD]net/aquantia-atlantic-kmod ビルド出来ない

packages build cluster上でもビルドできない模様だが、手元の環境だと

  • stable/13-n252735-67d863df083 (1301507) OK
  • stable/13-n252805-a8925e0e578f (1301508) NG

で、直接の原因は/usr/include/sys/systm.h(/usr/src/sys/sys/systm.h)の変更で pauseマクロだったものを関数ポインタを拾えるようにstatic inline関数に置き換えた結果、/usr/include/unistd.hの int pause(void) APIと定義衝突している

aq_hw.c @ L35#include<unistd.h>を外せば、コンパイル自体は出来るが、生成されたコードは未検証

あとで、コンパイル可能な環境で、アセンブラ出力が変わるか調べてみるか?cc -sで吐き出すaq_hw.cのアセンブラコードは、unistd.hインクルードの有無で変わらない模様

https://cgit.freebsd.org/src/commit/sys/sys/systm.h?h=stable/13&id=fe9e99ff9c9d9028dccb1bb1537af46beabcb691

2022/10/21追記

unistd.hのインクルードを外す修正で問題なく動作することを確認した

当方では、net/aquantia-atlantic-kmod/Makefile.localに以下のコードを置いて対処した

post-patch:
        @${REINPLACE_CMD} -e 's|^\(#include <unistd.h>.*\)|//\1|' ${WRKSRC}/aq_hw.c

13.1-STABLEでの注意点は、1301508から1301509の間にABI変更があり、1301508環境でビルドしたモジュールを1301509なカーネルに読み込むと、aq0を認識する所までは問題ない進むが、通信を開始するとpanicする

この状態になってしまうと、コンソールでloader menuにアクセスする必要があるので、リモート運用だと注意が必要

更新手順としては次のようなパターンが考えられる。

  • 事前にドライバのソースをローカルストレージに設置し、モジュールロードを外した状態で再起動を行い、portsを再インストール・通信動作の確認後にもとの設定に戻す
  • 別の1301509環境で作成した aquantia-atlantic-kmodパッケージを対象環境に持ち込み、installkernel後にパッケージを入れ替え再起動する

特に後者の手順(別途、ビルド環境が必要だが)だとリモート更新できるが、失敗するとコンソールに走るハメになる

遠隔地の場合はZFS-BEを活用してpanicからの再起動時に旧環境から起動するように仕込むなどの準備が必要


カテゴリー: Admin | Emacs | EPICS | Fortran | FreeBSD | GCC | hgsubversion | IPv6 | KEKB | LHC | Lisp | LLVM | MADX | Ryzen | SAD | samba | tDiary | unix | WWW | YaSAI | お仕事 | イベント | 出張 | 宴会 | 数学 | 艦これ | 買いもの | 追記 | 雑記