With the information given by Diaco, Lamp20, Shizeon, Backu, Chiaseth and the writers of http://help.ubuntu.com/community/Dia...Howto/Conexant I have used a USB winmodem with a Conexant driver in (K)Ubuntu 11.10 (Oneiric).
Anyway, if I had any big problem with a Conexant modem, I would remember what was written, not about winmodems but about true modems, in https://help.ubuntu.com/community/Di...Howto/Conexant: "Note that in general, you can buy a Lucent or Intel (smartlink, or other brand with intel chipset) modem for less than 19.99 US".
When I plugged a Conexant modem, I executed and it said:
[...]
Bus 006 Device 002: ID 0572:1300 Conexant Systems (Rockwell), Inc. SoftK56 Data Fax Voice CARP
[...]
so I knew that the HSF modem was recognized by the system.
As I had a previous internet connection, I upgraded the system
Code:
sudo apt-get update && sudo apt-get dist-upgrade
I checked that I had no previous Conexant drivers installed. For example: I executed
Code:
ls /usr/sbin/hsfconfig
and it said that that file did not exist; if it existed I would have thought that something was still installed.
I made sure that I had "gcc" and "make" ready, executing
Code:
sudo apt-get install gcc make
Then I executed those steps told there:
Code:
sudo -s
cd /lib/modules/$(uname -r)/build/include/linux
ln -s ../generated/utsrelease.h
ln -s ../generated/autoconf.h
exit
I prepared the files for the driver compilation, executing
Code:
mkdir ~/conexant_modem
cd ~/conexant_modem
and if I had a 64-bit operating system I executed
Code:
wget http://linux.dell.com/files/ubuntu/hardy/modem-drivers/hsf/hsfmodem-7.68.00.09x86_64oem.tar.gz
tar xzf hsfmodem-7.68.00.09x86_64oem.tar.gz
wget http://www.bargweb.net/images/2009/november/hsfmodem-7.80.02.05-DiacoEdition.zip
unzip hsfmodem-7.80.02.05-DiacoEdition.zip
cp -a hsfmodem-7.80.02.05-DiacoEdition/modules/imported/include/framewrk.h hsfmodem-7.68.00.09x86_64oem/modules/imported/include/framewrk.h
cp -a hsfmodem-7.80.02.05-DiacoEdition/modules/imported/include/osservices.h hsfmodem-7.68.00.09x86_64oem/modules/imported/include/osservices.h
else, if I had a 32-bit operating system I executed
Code:
wget http://linux.dell.com/files/ubuntu/hardy/modem-drivers/hsf/hsfmodem-7.68.00.09oem.tar.gz
tar xzf hsfmodem-7.68.00.09oem.tar.gz
wget http://www.bargweb.net/images/2009/november/hsfmodem-7.80.02.05-DiacoEdition.zip
unzip hsfmodem-7.80.02.05-DiacoEdition.zip
cp -a hsfmodem-7.80.02.05-DiacoEdition/modules/imported/include/framewrk.h hsfmodem-7.68.00.09oem/modules/imported/include/framewrk.h
cp -a hsfmodem-7.80.02.05-DiacoEdition/modules/imported/include/osservices.h hsfmodem-7.68.00.09oem/modules/imported/include/osservices.h
A note for the curious ones: those "framewrk.h" and "osservices.h" files were the different ones between the directories "hsfmodem-7.68.00.09oem/modules/imported" and "hsfmodem-7.80.02.05-DiacoEdition/modules/imported".
If I had a 64-bit operating system I executed
Code:
wget http://www.linuxant.com/drivers/hsf/full/archive/hsfmodem-7.80.02.06x86_64full/hsfmodem-7.80.02.06x86_64full.tar.gz
else, if I had a 32-bit operating system I executed
Code:
wget http://www.linuxant.com/drivers/hsf/full/archive/hsfmodem-7.80.02.06full/hsfmodem-7.80.02.06full.tar.gz
A note for the curious ones: that file was the newest one in http://www.linuxant.com/drivers/hsf/full/downloads.php
And then, if I had a 64-bit operating system I executed
Code:
tar xzf hsfmodem-7.80.02.06x86_64full.tar.gz
rm -r hsfmodem-7.80.02.06x86_64full/modules/imported
cp -R hsfmodem-7.68.00.09x86_64oem/modules/imported hsfmodem-7.80.02.06x86_64full/modules/
cp -R hsfmodem-7.68.00.09x86_64oem/modules/imported hsfmodem-7.80.02.06x86_64full/modules/
else, if I had a 32-bit operating system I executed
Code:
tar xzf hsfmodem-7.80.02.06full.tar.gz
rm -r hsfmodem-7.80.02.06full/modules/imported
cp -R hsfmodem-7.68.00.09oem/modules/imported hsfmodem-7.80.02.06full/modules/
cp -R hsfmodem-7.68.00.09oem/modules/imported hsfmodem-7.80.02.06full/modules/
The next step was to clean the present directory.
If I had a 64-bit operating system I executed
Code:
rm -rf hsfmodem-7.68.00.09x86_64oem
rm -rf hsfmodem-7.80.02.05-DiacoEdition
rm hsfmodem-7.68.00.09x86_64oem.tar.gz
rm hsfmodem-7.80.02.05-DiacoEdition.zip
rm hsfmodem-7.80.02.06x86_64full.tar.gz
else, if I had a 32-bit operating system I executed
Code:
rm -rf hsfmodem-7.68.00.09oem
rm -rf hsfmodem-7.80.02.05-DiacoEdition
rm hsfmodem-7.68.00.09oem.tar.gz
rm hsfmodem-7.80.02.05-DiacoEdition.zip
rm hsfmodem-7.80.02.06full.tar.gz
Then I had to change some files to adapt them to work with the 3.0.0 version of the Linux kernel.
If I had a 64-bit operating system I executed
Code:
cd hsfmodem-7.80.02.06x86_64full
xdg-open modules/GPL/serial_cnxt.c
else, if I had a 32-bit operating system I executed
Code:
cd hsfmodem-7.80.02.06full
xdg-open modules/GPL/serial_cnxt.c
and then a text editor was launched. I searched for the string
Code:
#ifndef FOUND_UART_REGISTER_PORT
and below I found the string
Code:
static DECLARE_MUTEX(cnxt_port_sem);
I deleted that last string, and wrote there
Code:
static DEFINE_SEMAPHORE(cnxt_port_sem);
and I saved and closed that file. I executed
Code:
xdg-open modules/osdiag.c
and then a text editor was launched. I searched for the string
and below I found the string
Code:
.ioctl = diag_ioctl,
I deleted that string, and wrote there
Code:
.compat_ioctl = diag_ioctl,
and I saved and closed that file. I executed
Code:
xdg-open modules/osnvm.c
and then a text editor was launched. I searched for the string
Code:
static LIST_HEAD(nvm_newinst_list);
and below I found the string
Code:
static DECLARE_MUTEX(nvmelem_writelist_sem);
I deleted that last string, and wrote there
Code:
static DEFINE_SEMAPHORE(nvmelem_writelist_sem);
and I saved and closed that file.
A note for the curious ones: the source of those changes in those files was http://www.openmamba.org/showfile.ht...l-2.6.37.patch
The user named Chiaseth helped telling those steps that I followed, this way:
1. I executed
Code:
xdg-open modules/osservices.c
and then a text editor was launched. I searched for the string
Code:
#include <linux/smp_lock.h>
and I deleted that string, and wrote there
Code:
#include <linux/mutex.h>
DEFINE_MUTEX(os_mutex); // Define a mutex
In that file I searched for the strings
replacing all of them with
Code:
mutex_unlock(&os_mutex)
Also, in that file I searched for the strings
replacing all of them with
Code:
mutex_lock(&os_mutex)
and I saved and closed that file.
2. I executed
Code:
xdg-open modules/osdcp.c
In that file I searched for the string
Code:
static spinlock_t dcp_lock = SPIN_LOCK_UNLOCKED;
replacing it with
Code:
static DEFINE_SPINLOCK(dcp_lock);
and I saved and closed that file.
3. I executed
Code:
xdg-open modules/osdiag.c
In that file I searched for the string
Code:
static spinlock_t diag_lock = SPIN_LOCK_UNLOCKED;
replacing it with
Code:
static DEFINE_SPINLOCK(diag_lock);
and I saved and closed that file.
4. I executed
Code:
xdg-open modules/osfloat.c
In that file I searched for the string
Code:
static spinlock_t fpstates_lock __attribute__((unused)) = SPIN_LOCK_UNLOCKED;
replacing it with
Code:
static DEFINE_SPINLOCK(fpstates_lock);
and I saved and closed that file.
5. I executed
Code:
xdg-open modules/osservices.c
In that file I searched for the string
Code:
static spinlock_t atomic_lock __attribute__((unused)) = SPIN_LOCK_UNLOCKED;
replacing it with
Code:
static DEFINE_SPINLOCK(atomic_lock);
and I saved and closed that file.
6. I executed
Code:
xdg-open modules/GPL/oscompat.h
In that file I searched for the string
Code:
static spinlock_t tqueue_lock __attribute__((unused)) = SPIN_LOCK_UNLOCKED;
replacing it with
Code:
static DEFINE_SPINLOCK(tqueue_lock);
and I saved and closed that file.
Finally...
If executed
Code:
sudo make install
sudo hsfconfig
It asked "Where is the linux source build directory that matches your running kernel?", then I simply pressed the return key to accept the default answer. I also accepted the default answer in other questions.
Finally the command reported that
Code:
The /dev/modem alias (symlink) points to ttySHSF0
I executed
and at the end I saw
Code:
[59190.782005] hsfengine: module license 'see LICENSE file distributed with driver' taints kernel.
[59190.782011] Disabling lock debugging due to kernel taint
[59192.564398] ttySHSF0 at MMIO 0x0 (irq = 0) is a Conexant HSF softmodem (USB-0572:1300)
[59192.600274] usbcore: registered new interface driver hsfusbcd2
[59194.416241] usbcore: deregistering interface driver hsfusbcd2
[59194.600064] usb 6-1: reset full speed USB device using uhci_hcd and address 2
[59194.811746] cnxthsf_DcpDestroy: units still active, waiting..
[59194.811764] cnxthsf_DcpDestroy: units still active, waiting..
[59194.811778] cnxthsf_DcpDestroy: units still active, waiting..
[59196.967466] ttySHSF0 at MMIO 0x0 (irq = 0) is a Conexant HSF softmodem (USB-0572:1300)
[59196.994150] usbcore: registered new interface driver hsfusbcd2
which meant, among other things, that the USB modem was detected at /dev/ttySHSF0.
Note: as they said in https://help.ubuntu.com/community/Di...Howto/Conexant: "do not delete or move the source tree [in our case: ~/conexant_modem] from your system after these steps, it will be required to uninstall and patch the driver."
I launched kppp (for example) and configured a new "connection", specifying that the modem was at /dev/ttySHSF0. You could also use a program like efax-gtk to send faxes through the modem.
Notes about maintenance:
If a system upgrade changed the kernel version of my computer, and I could not connect to internet or I saw a general protection fault due to a hsf driver error:
I executed
Code:
sudo hsfconfig --uninstall
and rebooted the computer (just in case).
If I had a 64-bit operating system I executed
Code:
cd ~/conexant_modem/hsfmodem-7.80.02.06x86_64full
else, if I had a 32-bit operating system I executed
Code:
cd ~/conexant_modem/hsfmodem-7.80.02.06full
I executed
Code:
sudo make clean
sudo make install
sudo hsfconfig
and I accepted the default answer in the questions.
Further information
If you find any problem, or want to make any change to the method, please write it in this thread, so we can all have a proper final document.
Bookmarks