Realtek RTL8100E/RTL8101E/RTL8102E-GR NIC
Starting with Centos 5.2 the stock kernel offers support for this chipset via the r8169 driver. If possible please consider using Centos 5.2 instead of any of the methods described below. |
Contents
1. Hardware
Any of the following 10/100M Fast Ethernet PCI Express NICs:
- RTL8100E
- RTL8101E
- RTL8102E-GR
The driver is known to work on:
- ECS 945GCT-M/133
Realtek PCI-Express NIC Described here: Realtek RTL8100E/8101E/8102E-GR Datasheet
According to the chip manufacturer this driver supports some of the chips which previously required the r1000 driver ( which as of version r1000_v1.06 is only maintained for kernel 2.4 and most important does not always work correctly with the new chipsets. Therefore on the above mentioned hardware please always try to use the newer r8101 driver instead of r1000).
2. Problem
Correct driver is not included with the standard CentOS 4.5, 5.0 and 5.1 distributions.
3. Output of `lspci -v`
On an ECS 945GCT-M/133
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8101E PCI Express Fast Ethernet controller (rev 01)
Subsystem: Elitegroup Computer Systems Unknown device 8136
Flags: bus master, fast devsel, latency 0, IRQ 177
I/O ports at e800 [size=256]
Memory at febff000 (64-bit, non-prefetchable) [size=4K]
Expansion ROM at febc0000 [disabled] [size=128K]
Capabilities: [40] Power Management version 2
Capabilities: [48] Vital Product Data
Capabilities: [50] Message Signalled Interrupts: 64bit+ Queue=0/1 Enable-
Capabilities: [60] Express Endpoint IRQ 0
Capabilities: [84] Vendor Specific Information
4. Solution
There are a few ways to get the driver.
(1) Download and install the r8101 driver from Realtek's website at: Realtek Driver Download
Some direct links (newer versions might be available -- use the above link to check):
(2) As an alternative and simpler method, a dkms-enabled driver package can be downloaded from wolfy's site. Please follow the instructions available at http://wiki.centos.org/Repositories/RPMForge to install and activate the RPMForge repository. After that you can use the instructions from this quick install guide to install the package.
5. List of packages needed to install r1000/r8168/r8101
Here is the full list of packages which must be installed in order to compile the driver from source.
Centos 5 |
Centos 4 |
Centos 3 |
Repository |
Observation |
binutils |
binutils |
binutils |
standard |
(1) |
gcc |
gcc |
gcc |
standard |
(1) |
glibc-devel |
glibc-devel |
glibc-devel |
standard |
(1) |
glibc-headers |
glibc-headers |
glibc-headers |
standard |
(1) |
kernel-headers |
glibc-kernheaders |
glibc-kernheaders |
standard |
(1) |
kernel-devel |
kernel-devel |
kernel-source |
standard |
(1) (2) |
make |
make |
make |
standard |
(1) |
dkms |
dkms |
dkms |
RPMForge |
(3) |
(1) standard = Base + Updates repositories.
(2)
- Under all circumstances, the kernel-headers / kernel-devel / kernel-source package must match the version of the kernel for which the driver is compiled (not necessarily the running kernel).
- At boot time, dkms will detect if the existing driver module matches the running kernel and will compile a newer one if needed, provided that kernel-headers / kernel-devel / kernel-source matches the running kernel.
If you are compiling the driver manually, you can compile the driver for another kernel version than the running one by using the procedure described below under Updating the Kernel. This step is mandatory if you are upgrading the kernel via a remote connection and you are not using dkms.
(3) Only needed if installing dkms-r8101. You can check the state of the module any time using the command dkms status. The most interesting states are: added (the module has been successfully registered with the dkms system, but it has not been compiled) and installed (the module has also been successfully compiled).
6. Remotely Updating the Kernel
When a NIC driver isn't included in the kernel, updating the kernel remotely can be a problem. A few extra steps can make this possible.
Install the new kernel. Either from RPM or compiling a custom kernel. If installing from RPM, the associated kernel-devel package will also need to be installed.
Do not reboot. The NIC driver hasn't been added to the new kernel yet. Rebooting now means an inactive NIC and a visit to the console.
Go to the src directory of the r8101 source. Edit Makefile.
- Change the line
KVER := $(shell uname -r)
to your newly installed kernel version. For example:KVER := 2.6.22.9-MyCustomKernel
- Go back to the top directory of the r8168 source and recompile and install the driver:
make all;
This will overwrite any existing r8101.ko driver. If you want to keep the older driver, rename the existing file before compiling the new driver.
- Confirm that the driver was copied to the right place. For example:
find /lib/modules/2.6.22.9-MyCustomKernel -name r8101.ko
If you have two copies present, use modinfo to identify the older driver and delete or rename it before rebooting.
- Run:
depmod -a 2.6.22.9-MyCustomKernel
Update your bootloader configuration (usually /boot/grub/grub.conf) and reboot.
Note: if you install the above mentioned dkms-r8101 package and leave the dkms-autoinstaller service enabled, steps 3-7 will be performed automatically after you boot with a new kernel, provided you have updated the corresponding kernel-headers (kernel-devel/kernel-source) package. So basically all you would have to do is
- install dkms-r8101
- upgrade kernel
- make sure the dkms-autoinstaller service is active
reboot
