
私はIntel I219-Vネットワークアダプタを搭載したシステムにFreeBSD(11.0-RELEASE-p1)をインストールしました。このFreeBSDバージョンにはem v7.6.1があります。 (私の考えでは...おそらくEEPROMチェックサムエラーですか?読み続けてください...)このネットワークチップセットをサポートしていないので、v7.6.2アップデートバージョンを見つけました。インテルのウェブサイトから。
Readmeに従って次のようにインストールしました。
- 圧縮解除/圧縮解除
make
make install
if_em_load="YES"
/boot/loader.confに追加ifconfig_em0="DHCP"
/etc/rc.confに追加
再起動後も、次のメッセージが表示されますdmesg.boot
。
module_register: cannot register pci/em from kernel; already loaded from if_em.ko
Module pci/em failed to register: 17
...
em0: <Intel (R) PRO/1000 Network Connection 7.6.1-k> mem 0xdf300000-0xdf31ffff irq 16 at device 31.6 on pci0
em0: Using an MSI interrupt
em0: The EEPROM Checksum Is Not Valid
device_attach: em0 attach returned 5
そして、システムはアダプタを認識しません。
ここで注目すべき2つのことは、後でもう一度説明する間違ったチェックサムとv7.6.2をインストールしただけでv.7.6.1がロードされるという事実です。
各バージョンの場所を見つけようとしています。
$ strings /boot/kernel/if_em.ko
...
7.6.1-k
...
$ strings /boot/modules/if_em.ko
...
7.6.2
...
だからif_em_load="YES"
ロード中古いemドライバは/boot/kernelにあります。man kldload
そこにいるように見えるので驚くべきことではありませんが、/boot/defaults/loader.confにはmodule_path="/boot/modules"
。
v7.6.2を直接ロードすると、kldload /boot/modules/if_em.ko
次の出力が得られます。
em0: <Intel (R) PRO/1000 Network Connection 7.6.1-k> mem 0xdf300000-0xdf31ffff irq 16 at device 31.6 on pci0
em0: Using an MSI interrupt
em0: The EEPROM Checksum Is Not Valid
device_attach: em0 attach returned 5
em0: <Intel (R) PRO/1000 Network Connection 7.6.2> mem 0xdf300000-0xdf31ffff irq 16 at device 31.6 on pci0
em0: Using an MSI interrupt
em0: The EEPROM Checksum Is Not Valid
device_attach: em0 attach returned 5
したがって、まだEEPROMチェックサムの問題がありますが、もう1つの質問は、なぜkldload
v7.6.2(明示的に指すファイル)の前にv7.6.1をロードしようとするのですか?
最後に、パッチが必要なチェックサムチェックを無視し、ドライバコードに「EEPROMチェックサム無効」という文字列がある2つの場所がある場合は、何が起こるかを調べることにしましif_em.c
たif_lem.c
。
このように
--- if_em.c 2017-05-16 01:44:07.189792000 -0700
+++ if_em_patch.c 2017-05-16 01:44:28.885779000 -0700
@@ -730,10 +730,10 @@
** if it fails a second time its a real issue.
*/
if (e1000_validate_nvm_checksum(hw) < 0) {
- device_printf(dev,
+ /*device_printf(dev,
"The EEPROM Checksum Is Not Valid\n");
error = EIO;
- goto err_late;
+ goto err_late;*/
}
}
このように
--- if_lem.c 2017-05-16 01:39:27.605399000 -0700
+++ if_lem_patch.c 2017-05-16 01:44:47.661294000 -0700
@@ -641,10 +641,10 @@
** if it fails a second time its a real issue.
*/
if (e1000_validate_nvm_checksum(&adapter->hw) < 0) {
- device_printf(dev,
+ /*device_printf(dev,
"The EEPROM Checksum Is Not Valid\n");
error = EIO;
- goto err_hw_init;
+ goto err_hw_init;*/
}
}
make; make install; restart
dmesg.boot に v7.6.1 が提供されますが、実行すると次kldunload if_em; kldload /boot/modules/if_em.ko
の出力が表示されます。
em0: <Intel (R) PRO/1000 Network Connection 7.6.1-k> mem 0xdf300000-0xdf31ffff irq 16 at device 31.6 on pci0
em0: Using an MSI interrupt
em0: The EEPROM Checksum Is Not Valid
device_attach: em0 attach returned 5
em0: <Intel (R) PRO/1000 Network Connection 7.6.2> mem 0xdf300000-0xdf31ffff irq 16 at device 31.6 on pci0
em0: Using an MSI interrupt
em0: Ethernet address: xx:xx:xx:xx:xx:xx
効果がある! IPを取得でき、dhclient em0
すべてping 8.8.8.8
が正常です。
私の質問は次のとおりです。
- EEPROMチェックサムが間違っているのはなぜですか?私はファームウェアやその他の問題を引き起こす可能性のある何もしませんでした。私が見つけたすべての答えのように、「統合アダプタでは機能しません」という免責事項から始めることなく、この問題を解決するにはどうすればよいですか?これ)?
- v7.6.2ロードを使用するように明示的に指示しましたが、カーネルがv7.6.1をロードし続けるのはなぜですか
kldload /boot/modules/if_em.ko
? module_path="/boot/modules"
/boot/defaults/loader.confで起動時にカーネルがv7.6.1をロードするのはなぜですか?どうしてただv7.6.2をロードしていますか? /boot/kernel/if_em.koを削除する必要がありますか?何か間違っているようです。
私はFreeBSDを実行することを選択すると、すべてのハードウェアとソフトウェアが動作する「面白い」を持っていることを知っています(そしてそれは本当に面白いです)。しかし、これは少し多いようです。
編集:11.0-RELEASE-p9にアップデートした後もネットワーク接続が維持され、同じ問題がまだ存在し、変更はありません。
答え1
em0:EEPROMチェックサムが正しくありません。
EEPROMに書き込む場合、チェックサムはファームウェアによって異なります。私はあなたが自分で解決策を見つけたと確信しています。これらの免責条項は過去にさかのぼるようですibautil
。このレポートはSupermicroマザーボードの成功について報告します。内蔵ネットワークカード誰と一緒にインテルD975XBX2。
ダウンロードします最新バージョンそして、私のアダプタをリストできることを確認してください。もしそうなら、PXE設定をリセットすることを恐れません。しかし、YMMV。
無効なチェックサムに対して推奨される修正方法は、次のコマンドを使用してPXEデフォルト設定をリセットすることです。
bootutil -nic=1 -defcfg
- または -
bootutil -all -defcfg
これらのオプションは以下にあります。bootutil.txt
モジュールパス
module_path
システムに実際にどのように設定されているかを確認する必要があります。を使用してこれを行うことができますkenv
。
# kenv module_path
/boot/kernel;/boot/modules
以下を使用して確認することもできます。KLDの設定これは解決策を暗示することもあります。
# kldconfig -r
/boot/kernel;/boot/modules
module_path
ファイルが見つかる順序と場所を決定します.ko
。デフォルト設定はシステム/ブート/共通/module.c。またはmodule_path
から削除すると、/boot/defaults/loader.conf
理解しやすくなります。カンファレンス/73535実装されました。私もこれのために混乱しました。
で変更できますkldconfig
。
/boot/kernel
システムによって更新され、FreeBSDベースシステムの一部であるため、そのままにしておくのが最善です。一方、パスの順序を変更すると、予期しないことが発生する可能性があります。私は他の人がソフトリンクを作成することから始めることをお勧めするのを見ました/boot/kernel
。