Friday, February 13, 2009

Another way to add driver(s) to EON

This method uses a booted/running EON NAS to add a new driver to itself. Another simple method I overlooked to add a driver was to first transfer the driver binary(eg rtls, conf (eg rtls.conf) and 64-bit binary if applicable to eon. Place the files appropriately in /kernel/drv or /kernel/drv/amd64.
Test it using add_drv -v, for example I placed the file /kernel/drv/rtls
add_drv -v rtls
Current Method: Then edit /mnt/eon0/.backup entries to include the new driver files
/etc/name_to_major
/etc/driver_aliases
/kernel/drv/rtls
/kernel/drv/rtls.conf
/kernel/drv/amd64/rtls
Deprecated Method: Then edit the FILES section in updimg.sh to include this file
FILE="/etc/hosts
/etc/hostid
change to
FILE="/etc/hosts
/etc/hostid
/etc/name_to_major
/etc/driver_aliases
/kernel/drv/rtls
/kernel/drv/rtls.conf
/kernel/drv/amd64/rtls
End Deprecated Method

If the driver added is not listed in /etc/name_to_major, it (eg rtls, sfe, mega_sys)will need to be added to the last line and the number entry next to the driver incremented to a unique value. If the last line is
rtls 52
edit to be
rtls 52
sfe 53
To preserve this driver beyond reboots, run updimg.sh /mnt/eon0/boot/x86.eon

13 comments:

scf said...

Hi! Thanks for your work on eon!

I have a problem with adding a driver for my NIC. I have a SIS900 onboard adapter and I can configure it manually when booted from cd or usb drive. Though the driver doesn't get loaded when I boot with new image I have added the driver to. This image contains the driver file (sfe) in /kernel/drv (I use 32bit version) but it is just not loaded. I execute add_drv command with proper parameters, do ifconfig sfe4 plumb and it's there. What am I doing wrong?

Andre Lue said...

scf,

Can you say which files you added (i'm guessing for 32-bit /kernel/drv/sfe, sfe.conf)?

If you do modinfo after boot is the driver loaded? Are you using the driver binary for the matching solaris release (ie snv_110 driver with snv_110 EON)?

Also, you may enable debugging at boot to help by adding after unix:
unix -m verbose or
unix -v

You may also post your /var/adm/messages output at http://pastebin.com/ and link it back here so I could take a look.

scf said...

Thanks for reply Andre!

I've added a 32bit version of sfe (put it into /kernel/drv). The sfe.conf is missing even in existing osol setup, though I've tried to create an empty sfe.conf with no luck.

The driver is not loaded on boot, this is the problem. There is even nothing from sfe in the log. I've downloaded sfe driver from its home page http://homepage2.nifty.com/mrym3/taiyodo/sfe-2.6.0a.tar.gz#../sfe-2.6.0a.tar.gz

I've also tried the driver from snv_111 osol. And I can load both drivers manualy executing proper add_drv command. It adds a line into driver_aliases file, I change the updimage.sh script to preserve this file in the new image, but this has no effect.

I will try to enable the debugging tomorrow when get access to this box.

Thanks for your support!

scf said...

There is a log file http://pastebin.com/m600400ee

The entries about sfe in the end of the file appear when I do:
add_drv -v -i "pci1039,900" sfe

its output is there http://pastebin.com/m344b214

Andre Lue said...

scf,

I think it's because sfe is not in /etc/name_to_major
try adding it to the last line and incrementing the number.
ie if the last line is
rtls 52
edit to
rtls 52
sfe 53

Also, can you do me a favor. I'm trying to squash a multi-core bug
can you do a pastebin of output and /tmp/foo from this cmd
truss -fae -vall -o /tmp/foo psrinfo -v

thanks

scf said...

Thanks Andre,

Finally I got network working! :)

There is output from the command you asked for:
http://pastebin.com/m113d2510
http://pastebin.com/m178db44d

You said it's to solve some multi core issue, but not that my cpu is single core.

Anonymous said...

Hi, I'm new with Solaris and with EON at that. I'm using EON, of course as a basic Fileserver. EON has been working great, but I've been trying to figure out how to add the driver SUNWrge. I am no developer, just a basic end user with enough knowledge to install a system, but not exactly modify and maintain it. It's working fine now with an rtls driver, although it'd be great if I can get the GigE NIC working. First, I'm not exactly sure where to look for the binary for the driver. I downloaded snv_114 SXCE and looked around there but all I could fine was a "none" package in the products directory. I've tried google, unfortunately with no help. I'm working on making my own ISO image, but if there's any quicker way, I'd appreciate your help. Thanks.

Anonymous said...

Hello again!

I was able to add the rge driver on eon snv_114 with pkgadd on opensolaris using snv_114 sxce dvd. The problem I'm experiencing now is that the driver won't load on start up. As I've read from above posts, to check /etc/name_to_major. rge is there, with a number 61 to it. Although, the line before it was 59. I looked around the file, it seems the number is all over the place and I found 60 preceded by fssnap. So I didn't bother changing rge to 60. I can use the driver by adding the proper commands on .exec file but Apache2 is failing at start up due to no IPv4 service available at bootup. Any help?

Andre Lue said...

GleNN,

I know you have this resolved but for others. The drivers on the DVD are structured as follows (SUNWrge for this example)
/Solaris_11/Product/SUNWrge/archive/none.7z

This file can be unpacked with 7-zip
http://www.7-zip.org/
or on a uniz box that has 7z
7z e -o/tmp none.7z
cpio -idumBv < /tmp/none

Move the driver into /kernel/drv/ and kernel/drv/amd64 for 64-bit, thhen edit /etc/name_to_major with the next unique number ex:
rge 62 (where 62 is the next unique number)

Joseph said...

Andre,
I was searching the net to troubleshoot the "add_drv/rem_drv currently busy; try later" I get when adding or removing a driver from an unpacked miniroot in Sol 10u7 and came across your site. Do you happen to have any idea whats going wrong?

Thanks!

Andre Lue said...

More info would be needed. You can try adding truss -fae -vall -o /tmp/foo in front of your add_drv cmd and posting the contents of /tmp/foo to the opensolaris forum and asking for help. You can also post back a link and I'll take a look.

Joseph said...

Andre,
Turns out the miniroot got packaged by Sun with a lock file in the /tmp folder...

Thanks!

Unknown said...

Hi,
I have a problem to add a driver for my NIC SUNWurtw
I extracted the driver from /Solaris_11/Product/SUNWurtw/archive/none.7z and copy it to /kernel/drv using the same OpenSolaris version 129
I updated the /etc/name_to_major with unique id urtw 82
When I tried to add the driver ,I received the following error message :
#add_drv -v urtw
exit status = 0
devfsadm: driver failed to attach: urtw
exit status = 1
Warning: Driver (urtw) successfully added to system but failed to attach
Driver (urtw) installed.

I run the following command truss -fae -vall -o /tmp/foo

I posted the contents of /tmp/foo to http://pastebin.com/m220c985

Thanks