2022/09/11(日)hpt27xxがない

FreeBSD 12.1 から 13.1 に freebsd-update してみた。
ディスクが見えなくなった。
調べた結果、hpt27xx ドライバがないのが原因らしい。
過去にカーネルに組み込まなくなったのでモジュールを読み込むように、という情報はあったが、ドライバが消える、という話は知らない。
ASMedia チップの SATAカードを買うか、と思いつつ確認。

man 4 hpt27xx は FreeBSD13向けにもあるんだよなぁ。
ソースは?
sys/dev/hpt27xx
あるんだよなぁ。

memstick.img の内容を見てみる。ドライバはないな。

ビルドしたら生えそうじゃない?

その前に。
/user/src を下手にいじると freebsd-update が動かなくなるっぽい。
しかしながら freebsd-update は、 /usr/src/sys/conf/newvers.sh ファイルを常にアップデートします。
[(access failed) https://docs.freebsd.org/en/books/handbook/cutting-edge/#freebsdupdate-security-patches]
別ディレクトリに src を取得。
# mkdir /usr/src.build
# cd /usr/src.build
# git clone -o freebsd --depth 1 --no-single-branch https://git.freebsd.org/src.git .
# git checkout freebsd/releng/13.1
なんでドライバがなかったのかコードをチラ見。
sys/conf/kern.opts.mk をみると、ベンダーからバイナリが提供されているドライバをビルドしないオプションが追加されているらしい。
man 5 src.conf にも何か書いてある。
KCSAN_ENABLED は知らん。多分今回は関係ない。
.if ${MK_SOURCELESS_HOST} != "no" && empty(KCSAN_ENABLED)
_hpt27xx=       hpt27xx
.endif
いつからあるのか、いつから有効になったのかわからないが、この指定を上書いてやればよさそう。
make に変数定義のオプションを付けて実行。
# make -DSOURCELESS_HOST -j4 buildkernel
<...>
%file /usr/obj/usr/src.build/amd64.amd64/sys/GENERIC/modules/usr/src.build/sys/modules/hpt27xx/hpt27xx.ko 
/usr/obj/usr/src.build/amd64.amd64/sys/GENERIC/modules/usr/src.build/sys/modules/hpt27xx/hpt27xx.ko: ELF 64-bit LSB relocatable, x86-64, version 1 (FreeBSD), BuildID[sha1]=c1644a27be0f617b756e6cb6193f1fa9792ff87d, not stripped
出来た!
こいつを /boot/kernel/ 以下にコピー。

起動時に読み込ませる。
%cat /boot/loader.conf                                                                                                                           [/usr/src.build]
kern.geom.label.disk_ident.enable="0"
kern.geom.label.gptid.enable="0"
hpt27xx_load="YES"        [color:#aa0000:<----これ]
zfs_load="YES"
デバイスが生えた!
%devinfo
nexus0
<...略...>
  acpi0
    pcib0
      pci0
        hostb0
        pcib1
          pci1
            hpt27xx0
<...以下略...>
ディスクが見えた!
うぇーーい!
%sudo camcontrol devlist
<TOSHIBA THNSNJ128GCSU JURA0101>   at scbus2 target 0 lun 0 (pass0,ada0)
<PLEXTOR PX-64M5M 1.02>            at scbus3 target 0 lun 0 (pass1,ada1)
<AHCI SGPIO Enclosure 2.00 0001>   at scbus6 target 0 lun 0 (pass2,ses0)
<HPT DISK 0_0 4.00>                at scbus7 target 0 lun 0 (pass3,da0)
<HPT DISK 0_1 4.00>                at scbus7 target 1 lun 0 (pass4,da1)
<HPT DISK 0_2 4.00>                at scbus7 target 2 lun 0 (pass5,da2)
<HPT DISK 0_3 4.00>                at scbus7 target 3 lun 0 (pass6,da3)
<HPT DISK 0_4 4.00>                at scbus7 target 4 lun 0 (pass7,da4)
<HPT DISK 0_5 4.00>                at scbus7 target 5 lun 0 (pass8,da5)
<TOSHIBA TransMemory-Mx PMAP>      at scbus8 target 0 lun 0 (da6,pass9)
%zpool status -x
all pools are healthy
freebsd-update のたびにこれやるの忘れるなぁ。
High Point 2千番台のカードは製品寿命を終わらせたそうなので買い換えるのが吉みたい。