FreeBSD 13.1 で pt3 を使う

いろいろあって、今まで録画サーバは FreeBSD 12.3-RELEASE を使っていたのだが、そろそろEOLになっちゃうので、13.1 にアップグレードすることに。 で、なにも考えずに更新かけてもよかったのだが、録画サーバなので録画できなくなったら困る。ということで、まずは 12.3 の上の bhyve に 13.1 をインストールして 少なくとも pt3 のドライバが make できるか試してみることにした。

結果から書くと、一行だけソースを変更すれば make は通り、実際に動くことも確認できました。 以下、その記録。 書いておかないと忘れちゃうからね。

ということで、適当なディレクトリに git clone https://github.com/Piro77/fbsdpt3 して、ドライバを展開。 make する際にカーネルのソースも必要となります。 で、make するとエラーが。

> make machine -> /usr/src/sys/amd64/include x86 -> /usr/src/sys/x86/include awk -f /usr/src/sys/tools/makeobjops.awk /usr/src/sys/kern/bus_if.m -h awk -f /usr/src/sys/tools/makeobjops.awk /usr/src/sys/kern/device_if.m -h awk -f /usr/src/sys/tools/makeobjops.awk /usr/src/sys/dev/pci/pci_if.m -h touch opt_global.h Warning: Object directory not changed from original /usr/home/takemon/tmp/fbsdpt3 cc -O2 -pipe -fno-strict-aliasing -Werror -D_KERNEL -DKLD_MODULE -nostdinc -include /usr/home/takemon/tmp/fbsdpt3/opt_global.h -I. -I/usr/src/sys -I/usr/src/sys/contrib/ck/include -fno-common -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fdebug-prefix-map=./machine=/usr/src/sys/amd64/include -fdebug-prefix-map=./x86=/usr/src/sys/x86/include -MD -MF.depend.ptx.o -MTptx.o -mcmodel=kernel -mno-red-zone -mno-mmx -mno-sse -msoft-float -fno-asynchronous-unwind-tables -ffreestanding -fwrapv -fstack-protector -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wcast-qual -Wundef -Wno-pointer-sign -D__printf__=__freebsd_kprintf__ -Wmissing-include-dirs -fdiagnostics-show-option -Wno-unknown-pragmas -Wno-error=tautological-compare -Wno-error=empty-body -Wno-error=parentheses-equality -Wno-error=unused-function -Wno-error=pointer-sign -Wno-error=shift-negative-value -Wno-address-of-packed-member -Wno-error=unused-but-set-variable -Wno-format-zero-length -mno-aes -mno-avx -std=iso9899:1999 -c ptx.c -o ptx.o ptx.c:304:7: error: implicit declaration of function 'lock_initialized' is invalid in C99 [-Werror,-Wimplicit-function-declaration] if (mtx_initialized(&s->lock)) { ^ /usr/src/sys/sys/mutex.h:469:28: note: expanded from macro 'mtx_initialized' #define mtx_initialized(m) lock_initialized(&(m)->lock_object) ^ ptx.c:329:6: error: implicit declaration of function 'lock_initialized' is invalid in C99 [-Werror,-Wimplicit-function-declaration] if (mtx_initialized(&scp->lock)) { ^ /usr/src/sys/sys/mutex.h:469:28: note: expanded from macro 'mtx_initialized' #define mtx_initialized(m) lock_initialized(&(m)->lock_object) ^ 2 errors generated. *** Error code 1

Stop. make: stopped in /usr/home/takemon/tmp/fbsdpt3

あれれ?このソース、そのままで12.3ではmakeできてたんだけどなー。 ということで、エラーメッセージをにらめっこして、lock_initialized()が定義されていないって怒られていることに気が付きます。 これはどこじゃ、とさがしたら、/usr/include/sys/lock.h で定義されていました。 ということで、ptx.h に追加してあげればおっけーです。12から13に変わったときにこの辺が変更になったのかな?
> diff -u ptx.h.orig ptx.h --- ptx.h.orig 2022-10-21 15:27:51.520811000 +0900 +++ ptx.h 2022-10-21 15:24:58.101804000 +0900 @@ -4,6 +4,7 @@

#include <sys/bus.h> #include <sys/types.h> +#include <sys/lock.h> #include <sys/mutex.h> #include <sys/module.h> #include <sys/kernel.h>

こんなかんじ。 あとは普通にmake して make install で使えるようになりました。

めでたしめでたし。

タグ: FreeBSD PT3