The Motorola sm56 soft modem driver has been tested to work for Mandrake
Linux 8.0 (i386). However, Motorola discontinued their support for
the sm56 soft modem later in <DATE>. The Motorola sm56 soft modem
driver found in the Motorola website only works for Mandrake Linux 8.0 (i386)
as tested on my machine. When the driver is installed on Mandrake Linux
8.2, the driver stops responding and does not work. This webpage details
the steps that I have done in order to make the soft modem driver works on
Mandrake Linux 8.2.
DISCLAIMER:
The steps outlined in this page is not guaranteed to be fully working.
It may caused incompatibilities, bugs, and data corruption when the
kernel source code is modified. The author does not know the effect
and the full consequence of the solution suggested in this page. However,
to the best of his knowledge, the steps outlined so far does not caused any
problem. Please report any problems found or comments to the author's
email address at the bottom of the webpage.
PROBLEM
The following error messages are produced when you load the sm56 driver.
It is assumed that you have already installed the sm56 driver on your
system:
Log-in as root and type the following command on the shell:
[root@localhost darwin]# insmod sm56
Using /lib/modules/2.4.18-6mdk/kernel/drivers/char/sm56
Warning: loading /lib/modules/2.4.48-6mdk/kernel/drivers/char/sm56 will
taint the kernel: no license
Segmentation fault
[root@localhost darwin]#
To get more information on the error message, type the following command
on the shell:
We are interested in the file
/usr/src/linux-2.4.18-6mdk/mm/slab.c. View the file
using any text editor and go to line 1099. You can see the following
C codes:
static int kmem_cache_grow (kmem_cache_t * cachep,
int flags)
{
slab_t *slabp;
struct page *page;
void *objp;
size_t offset;
unsigned int i, local_flags;
unsigned long ctor_flags;
unsigned long save_flags;
/* Be lazy and only check for valid flags here,
* keeping it out of the critical path in kmem_cache_alloc().
*/
if (flags & ~(SLAB_DMA|SLAB_LEVEL_MASK|SLAB_NO_GROW))
BUG();
if (flags & SLAB_NO_GROW)
return 0;
Note the lines in bold and red color, it is located in lines 1098 and 1099.
If we removed these lines, we can avoid the error message that is preventing
our sm56 driver from being installed. Comment out the lines in bold
and red color above:
/*
if (flags & ~(SLAB_DMA|SLAB_LEVEL_MASK|SLAB_NO_GROW))
BUG();
*/
Now recompile your kernel source code. You can
view the instructions located on the README.TXT in your kernel source code
root directory. Install your newly compiled kernel. Reinstall
the sm56 driver again if it is erased when installing the new kernel. Then
load the sm56 driver by typing insmod sm56. Your driver should now
install itself without the segmentation fault message. Happy browsing
using your sm56 and Linux!!!
If you found any problems, additional information, explanation, comments
and suggestions, please send them to darwin_te@yahoo.com.