過去数日間、私はRealtek Ethernetカードを動作させようとしました(成功しませんでした)。ワイヤレス接続には問題はありません。イーサネット接続のみ機能しません。
RTL8101/2/6E PCI Expressカードを使用してDell InspironにUbuntu 16.10をインストールしました。このカードは、バグが多く信頼できないように見えるr8169ドライバを使用します(例:ここ)。解決策はr8168ドライバを使用しているようですので、次のようにします。
r8168-dkms
apt-getを介してパッケージをインストールします。r8169
モジュールブラックリストに追加/etc/modprobe.d/
- 再起動。
lsmod
使用中のモジュールがまだリストされており、lspci -v
カードがr8169ドライバとモジュールを使用していることを知らせるため、機能しません。
modprobe.blacklist=r8169
最終的にgrubにオプションを渡すモジュールを/etc/default/grub
。
問題は、r8168
モジュールがうまくロードされているが(で見ることができるlsmod
)カードに接続されていないifconfig
(実際には)表示されないことです。ルミ存在するLinuxに特定のデバイス(Realtek NIC)用の特定のドライバをロードさせる。)。
私に関連する部分は次のとおりですlshw -C network
。
*-network UNCLAIMED
description: Ethernet controller
product: RTL8101/2/6E PCI Express Fast/Gigabit Ethernet controller
vendor: Realtek Semiconductor Co., Ltd.
physical id: 0
bus info: pci@0000:01:00.0
version: 07
width: 64 bits
clock: 33MHz
capabilities: pm msi pciexpress msix vpd bus_master cap_list
configuration: latency=0
resources: ioport:3000(size=256) memory:b0600000-b0600fff memory:b0400000-b0403fff
私のデバイス:
> lspci -v -s 01:00
01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8101/2/6E PCI Express Fast/Gigabit Ethernet controller (rev 07)
Subsystem: Dell RTL8101/2/6E PCI Express Fast/Gigabit Ethernet controller
Flags: bus master, fast devsel, latency 0, IRQ 11
I/O ports at 3000 [size=256]
Memory at b0600000 (64-bit, non-prefetchable) [size=4K]
Memory at b0400000 (64-bit, prefetchable) [size=16K]
Capabilities: <access denied>
上記の出力には、lspci
使用しているドライバやカーネルモジュールは表示されません。
r8168
最後に、ドライバを使用するためにネットワークカードをインポートしようとしました(この記事で説明されているように)。回答)、役に立たない。
% sudo echo 10ec 8168 > /sys/bus/pci/drivers/r8168/new_id
/sys/bus/pci/drivers/r8168/new_id: File exists.
% sudo echo "0000:01:00.0" > /sys/bus/pci/drivers/r8168/bind
/sys/bus/pci/drivers/r8168/bind: File exists.
私は何を見逃していますか?デバイスにドライバを使用するように指示する他の方法はありますか?次回読んでいる内容へのリンク、手がかり、アドバイスは役に立ち、多くの感謝を申し上げます。
ベストアンサー1
これは可能ですが、ドライバがデバイスと完全に互換性がない可能性があることに注意してください。
カーネルモジュールを再コンパイルすることも含まれているので、心配な場合は注意することをお勧めします。特に、ほとんどのNICはカスタムバイナリファームウェアブロブをロードする必要があり、これによりハードウェアが破損する可能性があります。したがって、互換性のあるファームウェアブロブを見つけるために注意を払って宿題をしましょう。
続行しますか?いいね:)
まず、実行中のカーネルのドライバソースを見つける必要があります。 dkmsを使用するとき、そのソースがすでにシステムのどこかにあるとします。これがある場合は、登録する場所を見つけてくださいMODULE_DEVICE_TABLE
。たとえば、オンラインでのクイック検索では、r8169.cファイルには次のセクションがあります。
static const struct pci_device_id rtl8169_pci_tbl[] = {
{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8129), 0, 0, RTL_CFG_0 },
{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8136), 0, 0, RTL_CFG_2 },
{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8161), 0, 0, RTL_CFG_1 },
{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8167), 0, 0, RTL_CFG_0 },
{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8168), 0, 0, RTL_CFG_1 },
{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8169), 0, 0, RTL_CFG_0 },
{ PCI_VENDOR_ID_DLINK, 0x4300,
PCI_VENDOR_ID_DLINK, 0x4b10, 0, 0, RTL_CFG_1 },
{ PCI_DEVICE(PCI_VENDOR_ID_DLINK, 0x4300), 0, 0, RTL_CFG_0 },
{ PCI_DEVICE(PCI_VENDOR_ID_DLINK, 0x4302), 0, 0, RTL_CFG_0 },
{ PCI_DEVICE(PCI_VENDOR_ID_AT, 0xc107), 0, 0, RTL_CFG_0 },
{ PCI_DEVICE(0x16ec, 0x0116), 0, 0, RTL_CFG_0 },
{ PCI_VENDOR_ID_LINKSYS, 0x1032,
PCI_ANY_ID, 0x0024, 0, 0, RTL_CFG_0 },
{ 0x0001, 0x8168,
PCI_ANY_ID, 0x2410, 0, 0, RTL_CFG_2 },
{0,},
};
MODULE_DEVICE_TABLE(pci, rtl8169_pci_tbl);
そのため、リストされているPCI IDの1つを持つデバイスが見つかった場合は、このドライバを使用するようにカーネルに指示します。 NICのPCIデバイスIDを使用して、構造に追加の行を追加し、再コンパイル(dkmsのみを使用してください)して再起動する必要があります。