I2Cデザインウェアがモジュールとして構築されていない場合、I2Cデザインウェアサポートをどのように無効にしますか?

I2Cデザインウェアがモジュールとして構築されていない場合、I2Cデザインウェアサポートをどのように無効にしますか?

Arch Linuxを実行するAlienware Aurora R7があります。終了すると、カーネルがパニック状態になり、次のような内容がパニックメッセージに表示されます(タイムスタンプを省略)。

BUG: Unable to handle kernel NULL pointer dereference at     (null)
IP: i2c_dw_isr+0x3ef/0x6d0
PGD 0 P4D 0
Oops: 0000 [#1] PREEMPT SMP PTI

さまざまなソースから(12)、これはモジュールに関連しているようですi2c-designware-core。回避策は、対応するモジュールをブラックリストに追加することです。しかし、最近のカーネル(4.10以上のように見える)では、モジュールとしてビルドされていないようです。

# uname -srv                      
Linux 4.15.2-2-ARCH #1 SMP PREEMPT Thu Feb 8 18:54:52 UTC 2018
# zgrep DESIGNWARE /proc/config.gz
CONFIG_I2C_DESIGNWARE_CORE=y
CONFIG_I2C_DESIGNWARE_PLATFORM=y
CONFIG_I2C_DESIGNWARE_SLAVE=y
CONFIG_I2C_DESIGNWARE_PCI=m
CONFIG_I2C_DESIGNWARE_BAYTRAIL=y
CONFIG_SPI_DESIGNWARE=m
CONFIG_SND_DESIGNWARE_I2S=m
CONFIG_SND_DESIGNWARE_PCM=y

だから私はパニック状態でカーネルを再起動させました:

# cat /proc/cmdline
root=UUID=e5018f7e-5838-4a47-b146-fc1614673356 rw initrd=/intel-ucode.img initrd=/initramfs-linux.img panic=10 sysrq_always_enabled=1 printk.devkmsg=on

(奇妙なルートは/proc/cmdlineUEFIから直接起動し、で作成されたエントリを使用するためですefibootmgr。ルートのルートは/bootESPがインストールされている場所です。)

これはタッチパッドのもののようですが、タッチパッドがなくて買わないと思います。この機能を無効にするにはどうすればよいですか?必須ですか?カスタムカーネルの構築

4.10(現在4.14)よりも最新バージョンなので、古いlinux-ltsカーネルをインストールする簡単な方法がないようで、ブラックリスト機能が動作することもあります。


カーネルパラメータとして使用すると、nolapicシャットダウンパニックの問題は解決されますが、起動後数分間システムがハングして使用できなくなります。

ベストアンサー1

カーネルのソースコードを読んだ後、ブラックリストに追加する必要がある関数を見つけました!

ありがとうスティーブンジッタのヒントinitcall_blacklist

initcall_blacklist=dw_i2c_init_driverカーネルのコマンドラインに追加されました。これはカーネル4.15.0で動作します。

この答えを見つけることができる他のすべての人に。以下を編集してこれを行うことができます/etc/default/grub

  1. 端末で実行: sudo -H gedit /etc/default/grub
  2. ブラックリスト文字列をGRUB_CMDLINE_LINUX_DEFAULT:に追加しますGRUB_CMDLINE_LINUX_DEFAULT="… initcall_blacklist=dw_i2c_init_driver"
  3. ファイルを保存してエディタを閉じます。
  4. 端末で実行: sudo update-grub
  5. 再起動してテストしてみてください!

おすすめ記事