Realtekネットワークカードでr8168ドライバを使用する方法

Realtekネットワークカードでr8168ドライバを使用する方法

過去数日間、私はRealtek Ethernetカードを動作させようとしました(成功しませんでした)。ワイヤレス接続には問題はありません。イーサネット接続のみ機能しません。

RTL8101/2/6E PCI Expressカードを使用してDell InspironにUbuntu 16.10をインストールしました。このカードは、バグが多く信頼できないように見えるr8169ドライバを使用します(例:ここ)。解決策はr8168ドライバを使用しているようですので、次のようにします。

  • r8168-dkmsapt-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のみを使用してください)して再起動する必要があります。

おすすめ記事