The Hso driver kernel module
The hso.ko kernel module is provided by Option and is released to the community under the GPL license. Option is working with the community to have the driver integrated in to the latest up-and-comming kernel releases 2.6.27.
UPDATE: Version 1.2 of the driver has been included in Ubuntu 8.10. Version 1.3 was included in Fedora 10.1. This may be all you need to do! However, if you have stability problems consider manually installing your own copy of the driver as described below.
While the driver is being integrated I have provided a source code package of the latest version in my forum. As of writing the latest version is 1.14 but you should always check the forum to see if there has been an update.
If you compile the driver yourself then each time you update the kernel you must recompile the driver again. But there is a solution to this problem - use DKMS. You can read about this here.
USB devices that use this driver:
Datacards that use this driver:
Modules that use this driver:
Visit the hso Support Forum
The drivers are located in the HSO forum, look for the latest version here:
Download the latest version
Kernel modules and new devices
I have just installed Ubuntu 8.10 and I find hso.ko 1.2 is preinstalled:
This is great for my icon 225 but my Vodafone E3730 is not supported by that version of the driver. I need to install the latest version.
What does the module do?
The module is a driver ( a program) that provides the communication link and control interface between the Linux kernel and the modem. The kernel and applications such as HSOconnect and Network Manager communicate via the hso driver with the modem.
When the module is installed the Linux kernel reads from it a list of supported manufacturer and product IDs. When a new device is plugged in the kernel will look at its manufacturer and product identity codes - if they match a pair of codes in the module's list then the module is loaded in to memory and linked up with the device. The kernel will then call the module initialisation code.
When the module is being initialised it creates new nodes in the Linux file system /dev directory. If all goes to plan these nodes will be labeled:
/dev/ttyHS0
/dev/ttyHS1
....
/dev/ttyHSn
(the number of nodes created depends on the device and how it has been configured at manufacture.)
For controlling and communicating with the modem it is /dev/ttyHS1 that is used. It works like an asynchronous serial interface as found on dial-up modems. It is over this interface that AT commands are sent to control the device and set up the Internet connection.
In addition there is an hs0 interface created that is used for the actual Internet data link when it is established.
How to compile and use the module
If you have never compiled a module before then it is possible that you haven't yet installed the support files needed to compile code and make kernel modules. You need the c compiler gcc, make and libc6-dev installed. On Debian based systems you get these by installing the build-essential package:
You also need the kernel header files for your version of the kernel. You can discover which version of the kernel you are using by typing the command
On my system the command
will install the files I need. On other systems you would use your equivalent package manager to locate and install a similar package (it may even be the full kernel source!).
Because you are making a kernel module you have to install it as the root user (using sudo or su)
1. Download the lastest module source file from the HSO forum
2. Untar the package: tar zxf hso-1.6.tar.gz
3. Change to the directory:
4. Build the module:
5. Install the module:
(if your device uses ZeroCD technology then you also need to install ozerocdoff before you can see these ports listed below.)
Now plug in the device, wait a few seconds and type: ls -al /dev/ttyHS*
You should see /dev/ttyHS0, /dev/ttyHS1 and others listed.
Everything is now ready.
Device Vendor and Product IDs supported by hso module (v1.14)
To be 100% sure your device will need the hso module type the following command:
{default_port_device(0x0af0, 0x6711)},
{default_port_device(0x0af0, 0x6731)},
{default_port_device(0x0af0, 0x6751)},
{default_port_device(0x0af0, 0x6771)},
{default_port_device(0x0af0, 0x6791)},
{default_port_device(0x0af0, 0x6811)},
{default_port_device(0x0af0, 0x6911)},
{default_port_device(0x0af0, 0x6951)},
{default_port_device(0x0af0, 0x6971)},
{default_port_device(0x0af0, 0x7011)},
{default_port_device(0x0af0, 0x7031)},
{default_port_device(0x0af0, 0x7051)},
{default_port_device(0x0af0, 0x7071)},
{default_port_device(0x0af0, 0x7111)},
{default_port_device(0x0af0, 0x7211)},
{default_port_device(0x0af0, 0x7251)},
{default_port_device(0x0af0, 0x7271)},
{default_port_device(0x0af0, 0x7311)},
{default_port_device(0x0af0, 0xc031)}, /* Icon-Edge */
{icon321_port_device(0x0af0, 0xd013)}, /* Module HSxPA */
{icon321_port_device(0x0af0, 0xd031)}, /* Icon-321 */
{icon321_port_device(0x0af0, 0xd033)}, /* Icon-322 */
{USB_DEVICE(0x0af0, 0x7301)}, /* GE40x */
{USB_DEVICE(0x0af0, 0x7361)}, /* GE40x */
{USB_DEVICE(0x0af0, 0x7381)}, /* GE40x */
{USB_DEVICE(0x0af0, 0x7401)}, /* GI 0401 */
{USB_DEVICE(0x0af0, 0x7501)}, /* GTM 382 */
{USB_DEVICE(0x0af0, 0x7601)}, /* GE40x */
{USB_DEVICE(0x0af0, 0x7701)},
{USB_DEVICE(0x0af0, 0x7706)},
{USB_DEVICE(0x0af0, 0x7801)},
{USB_DEVICE(0x0af0, 0x7901)},
{USB_DEVICE(0x0af0, 0x7A01)},
{USB_DEVICE(0x0af0, 0x7A05)},
{USB_DEVICE(0x0af0, 0x8200)},
{USB_DEVICE(0x0af0, 0x8201)},
{USB_DEVICE(0x0af0, 0x8300)},
{USB_DEVICE(0x0af0, 0x8302)},
{USB_DEVICE(0x0af0, 0x8304)},
{USB_DEVICE(0x0af0, 0x8400)},
{USB_DEVICE(0x0af0, 0xd035)},
{USB_DEVICE(0x0af0, 0xd055)},
{USB_DEVICE(0x0af0, 0xd155)},
{USB_DEVICE(0x0af0, 0xd255)},
{USB_DEVICE(0x0af0, 0xd057)},
{USB_DEVICE(0x0af0, 0xd157)},
{USB_DEVICE(0x0af0, 0xd257)},
{USB_DEVICE(0x0af0, 0xd357)},
{USB_DEVICE(0x0af0, 0xd058)},
{USB_DEVICE(0x0af0, 0xc100)},
If when you plug in your device you find that the option.ko module grabs it and creates /dev/ttyUSB? ports then you need to blacklist the option.ko module. This solution is described in the Icon 7.2 page