妄想日記 by 妄想エンジン


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 で使えるようになりました。

めでたしめでたし。

ツイート
|top |アフィリエイト |windowsネタ |料理メモ |コンタクト |twitter |
さわやかなエロスを目指す--妄想エンジン ©1996-2022
コンテンツ配信