How to find the right network driver in Solaris
By user13366078 on May 07, 2007
Today, I installed a new networking card into my home server. The card wasn't recognized immediately by Solaris, so I had to do some research and this is what I learned.
Looking for a cheap card, but still from a bigger brand, I went for a D-Link DGE-530T which you can get for less than 20 Euros on the Internet. And it can do Gigabit Ethernet, too!
After plugging in comes the first test: Does Solaris recognize that card? This can be verified using
devfsadm(1M), so Solaris looks for new hardware, then checking the output of
prtconf -v for a section saying "Ethernet". Our D-Link card looks like this:
pci1186,4b01 (driver not attached) Hardware properties: name='assigned-addresses' type=int items=10 value=820e0810.00000000.e2000000.00000000.00004000.810e0814 .00000000.00002000.00000000.00000100 name='reg' type=int items=15 value=000e0800.00000000.00000000.00000000.00000000.020e0810 .00000000.00000000.00000000.00004000.010e0814.00000000.00000000.00000000.00000100 name='compatible' type=string items=7 value='pci1186,4b01.1186.4b01.11' + 'pci1186,4b01.1186.4b01' + 'pci1186,4b01' + 'pci1186,4b01.11' + 'pci1186,4b01' + 'pciclass,020000' + 'pciclass,0200' name='model' type=string items=1 value='Ethernet controller' name='power-consumption' type=int items=2 value=00000001.00000001 name='66mhz-capable' type=boolean name='fast-back-to-back' type=boolean name='devsel-speed' type=int items=1 value=00000001 name='interrupts' type=int items=1 value=00000001 name='max-latency' type=int items=1 value=0000001f name='min-grant' type=int items=1 value=00000017 name='subsystem-vendor-id' type=int items=1 value=00001186 name='subsystem-id' type=int items=1 value=00004b01 name='unit-address' type=string items=1 value='1' name='class-code' type=int items=1 value=00020000 name='revision-id' type=int items=1 value=00000011 name='vendor-id' type=int items=1 value=00001186 name='device-id' type=int items=1 value=00004b01
The very first line, "
pci1186,4b01" tells us the PCI vendor-ID and product-ID for our card. But it's the "driver not attached" part that is worrying:
drvconfig couldn't find a suitable driver for our card.
Unfortunatly, this particular card is not listed in the Solaris Hardware Compatibility List (HCL) so it's time to ask our friend Google and do some research. this post tells us that our card has a Marvell Yukon 88E8001 chip-set. Well, had we looked real close to the product photo on the D-Link website, then we would have noticed just this model number printed on the biggest chip of that card...
This time, we're lucky: The Marvell Yukon chip-set is listed on the Solaris Hardware Compatibility List (HCL)! In this case, it's listed as part of a mainboard and therefore comes with a different PCI-ID. But we learn from this entry that the correct driver is called "
skge" and that it can be downloaded here.
Our HCL-Friend also tells us how to teach the driver a new PCI-ID: After installing the skge driver (I went for the 64-Bit version), we say:
/usr/sbin/update_drv -a -i '"pci1186,4b01"' skge
Now, Solaris knows that the skge driver can handle our particular brand of network card.
And low and behold,
prtconf recognized our card:
# prtconf -D | grep 1186,4b01
pci1186,4b01, instance #0 (driver name: skge)
Yippeee, the driver is attached! Now we can configure the card just like any other using
ifconfig skge0 plumb etc. or create a
Being good Solaris community citizens, we should now contribute to it by hitting the "Submit Hardware" form in the Solaris HCL so future generations of cheap networking card users can spare the work of finding the right driver.
(Edit: Changed the formatting of the code parts, since the pre-tag messed up my layout.)