4.10. KMM ファームウェアのサポート

カーネルモジュールは、ファイルシステムからファームウェアファイルをロードする必要がある場合があります。KMM は、ModuleLoader イメージからノードのファイルシステムへのファームウェアファイルのコピーをサポートしています。

modprobe コマンドを実行してカーネルモジュールを挿入する前に、.spec.moduleLoader.container.modprobe.firmwarePath の内容がノードの /var/lib/firmware パスにコピーされます。

Pod の終了時に modprobe -r コマンドを実行してカーネルモジュールをアンロードする前に、すべてのファイルと空のディレクトリーがその場所から削除されます。

4.10.1. ノードでのルックアップパスの設定

OpenShift Container Platform ノードでは、ファームウェアのデフォルトのルックアップパスのセットに /var/lib/firmware パスが含まれません。

手順

  1. Machine Config Operator を使用して、/var/lib/firmware パスを含む MachineConfig カスタムリソース (CR) を作成します。

    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineConfig
    metadata:
      labels:
        machineconfiguration.openshift.io/role: worker 1
      name: 99-worker-kernel-args-firmware-path
    spec:
      kernelArguments:
        - 'firmware_class.path=/var/lib/firmware'
    1
    必要に応じてラベルを設定できます。単一ノードの OpenShift の場合は、control-pane または master オブジェクトのいずれかを使用します。
  2. MachineConfig CR を適用すると、ノードが自動的に再起動されます。

4.10.2. ModuleLoader イメージのビルド

手順

  • カーネルモジュール自体をビルドするだけでなく、バイナリーファームウェアをビルダーイメージに含めます。

    FROM registry.redhat.io/ubi8/ubi-minimal as builder
    
    # Build the kmod
    
    RUN ["mkdir", "/firmware"]
    RUN ["curl", "-o", "/firmware/firmware.bin", "https://artifacts.example.com/firmware.bin"]
    
    FROM registry.redhat.io/ubi8/ubi-minimal
    
    # Copy the kmod, install modprobe, run depmod
    
    COPY --from=builder /firmware /firmware

4.10.3. モジュールリソースのチューニング

手順

  • Module カスタムリソース (CR) で .spec.moduleLoader.container.modprobe.firmwarePath を設定します。

    apiVersion: kmm.sigs.x-k8s.io/v1beta1
    kind: Module
    metadata:
      name: my-kmod
    spec:
      moduleLoader:
        container:
          modprobe:
            moduleName: my-kmod  # Required
    
            firmwarePath: /firmware 1
    1
    オプション: /firmware/* をノード上の /var/lib/firmware/ にコピーします。