During an installfest over the weekend, my local user group was bitten by an IBM BIOS bug that affects some versions of older IBM Thinkpad laptops. This bug was originally discussed on a FreeBSD mailing list back in 2001. Since then, IBM has released BIOS versions that fix the bug, but it is important to check your Thinkpad model number and BIOS version before attempting to install either FreeBSD or PC-BSD.
Details regarding the affected model numbers and BIOS versions are now in the this section of the PC-BSD Handbook.
Webcamd is a port of the Video4Linux USB webcam and DVB drivers into userspace. It’s been available as a FreeBSD port since January and comes installed with PC-BSD. When Hans Petter Selasky ported these drivers he knew there “were a lot of them, probably many hundreds”. However, it was hard to quantify exactly how many existed and exactly what hardware was supported as this information is scattered throughout thousands of src files and dozens of websites and wiki pages (possibly containing incomplete or outdated information).
It took a while to research what hardware is (in theory) supported by the various drivers; in doing so, I ended up with a spreadsheet that currently contains 1396 entries. That information was used to create 46 man pages (45 driver man pages and 1 for webcamd itself) which have now been added to the port. If you already have webcamd installed and are comfortable updating FreeBSD ports, you can upgrade to the latest version of webcamd. If you’re using PC-BSD, you can wait for next month’s 8.2 release as the latest version of webcamd will be installed with it. Or, if you’re impatient and want to check out the man pages now, you can uninstall the current version and install the new version as the superuser:
pkg_delete –x webcamd && pkg_add –rf webcamd
Once you have the latest version of webcamd, try these commands to see which man pages interest you:
apropos webcamd | more
The driver man pages contain the VendorID:ProductIDs of previously documented known devices. To determine the ID of a device, use one of the following commands on either a FreeBSD or PC-BSD system:
usbconfig dump_all_config_desc | grep vendor (if the device is an inserted USB device)
Here is an example for when I insert a USB camera:
usbconfig dump_all_config_desc | grep vendor
ugen3.3: product 0x0991 vendor 0x046d at usbus3, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON
I could then quickly check to see if that ID is known to be supported from the webcamd man pages:
gzcat * | grep “046d:0991″
Since I just get my prompt back, support for this particular device isn’t currently documented, so I’ll check just the VendorID:
gzcat * | grep “046d”
This will provide an ordered list of all known to be working Logitech products. From the list, the last documented ID is 046d:08dd.
I know that the information from existing resources is out-of-date. You can help to improve the man pages by letting us know the VendorID:ProductID of any cameras that work for you and which currently aren’t listed in the man pages. Also, if you come across an ID that is supposed to work but does not, please send us the details so we can update that information in the man pages.
For now, leave a comment or send me an email with the information about the device. If it turns out to be useful to do so, we’ll throw up a wiki page where needed changes can be posted and addressed.
Does your wireless device use the iwi(4) driver? Bernhard Schmidt is working on some patches to resolve some of the known issues with this driver and is looking for testers. If you’re interested in helping out, follow the instructions on the iwi wiki. If you need help getting started, you’re always welcome to join us on #pcbsd on IRC freenode. We can help you write up your bug report or help you review your findings before sending them off to Bernhard.
The ndisgen(8) utility can be used to convert an existing Windows network driver to a FreeBSD kernel loadable module. This can allow you to access network devices for which a FreeBSD driver doesn’t currently exist (typically wireless drivers). The utility has been around for a while and typically works well on 32 bit systems. However, users on 64 bit systems often experience kernel panics or drivers that load but don’t do anything.
Paul Mahol is working on improvements to ndisgen and is looking for testers so that it can be tested on as much hardware as possible before the improvements are committed to the FreeBSD repository. If you have a network device without a FreeBSD driver, you can help (and possibly get yourself a working driver!) by doing the following:
As the superuser, use the download link on the NDISulator page to download either the .tgz or .zip file.
Update: on 9.0, use this download link instead.
Uncompress that file to /tmp, then:
Download an XP or Windows 2003 driver for your device and make note of the locations of the .inf and .sys files that came with the download. Make sure you download and use the files that match your architecture (32 or 64 bit). Run the interactive script and input the paths to those files when prompted:
Once the conversion is complete, the script will indicate the name of the kernel module (it will end in a .ko extension) which was created in your current directory. After exiting the script, try to load the driver:
cp driver_name.ko /boot/modules
If all went well, the network device should now be accessible using ndis(4) as described in the FreeBSD Handbook. When you are finished, don’t forget to:
If things went well, take a moment to double-check that your device is mentioned in Table 1 of the Wireless Testing page and add it if it is not.
If all did not go well, head over to the Ndisulator Wiki. Take a minute to read its content (it’s short and sweet), especially the Making useful bug reports page. If you don’t have a github login, you can create one here so that you can submit your bug report here.
We did some testing on 3G modems at OLF and loading the u3g driver seems to do the trick (earlier versions of FreeBSD had a conflict between u3g and umass but this seems to be fixed now). You can load the driver by issuing this command as the superuser:
If you would like the driver to autoload at boot time, carefully add this line to /boot/loader.conf:
Lars Engels also provided a useful link containing an exhaustive list of APNs, usernames and passwords.
Please let us know if further configuration settings are required (i.e. which are currently not possible to do within the System Network Configuration utility) in order to get your modem to work.