Автор Тема: Встроенный аналоговый модем на ноутбуке и Runtu  (Прочитано 4980 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн mkudritsky

  • Новичок
  • **
  • Автор темы
  • Сообщений: 89
Никогда не подумал бы, что мне когда-нибудь понадобится аналоговый софт-модем, встроенный в мою Sony Vaio VGN TX3XRP_B.
Но он понадобился, чтобы отправить факс с ноутбука.
Да, да! В России еще есть организации, где  нет Интернета и email, а имеются только городские телефоны и факсы на них!

Итак, мои изыскания по этому софтовому модему моей Соньки.
1. Диагностика, что это  за модем. (Увы, когда на буке стояла Windows 7, я не удосужился выписать название чипа модема).
Работа утилиты scanModem.gz выдала информацию:
NAME="Audio device: Intel Corporation NM10/ICH7 Family High Definition Audio Controller "
CodecDiagnosed=Conexant_
HDAchipVendorID=14f1
CHIP=0x14f12bfa
IDENT=hsfmodem
Driver=hsfmodem-drivers

Об этом же говорит и информация, находящаяся по адресу:
/proc/asound/card0/codec#1
Codec: Conexant ID 2bfa
Address: 1
MFG Function Id: 0x2 (unsol 1)
Vendor Id: 0x14f12bfa
Subsystem Id: 0x104d0200
Revision Id: 0x90000
Modem Function Group: 0x2

Вывод: модем от Conexant, сидит на Аудиодевайсе, чип 0x14f12bfa (вернее 2bfa) и ему нужны дрова hsfmodem

2. Начал искать эти самые дрова hsfmodem.
Разумеется, их в репозиториях Runtu 14.04.1 LITE не было!
Начал искать исходники или *.deb пакеты.

Нашел, но, во-первых, драйвера платные, а, во-вторых, для очень дремучих ядер (крайние для kernel 2.6.31-17), причем, что неприятно, для каждого релиза ядра надо ставить новые дрова:
http://www.linuxant.com/drivers/hsf/oem/downloads-ubuntu-x86.php

Есть и бесплатные дрова от Dell (которая на некоторые свои ноутбуки 8-летней давности ствила Ubuntu), но они еще менее свежие:
http://www.dell.com/support/Article/us/en/19/SLN60881/EN
(но зато драйвера freeware!)

Наконец, один украинский умелец пересобрал дрова от http://www.linuxant.com/ для kernel 3.* и сделал их бесплатными:
http://g.if.ua/blog/tags/hsfmodem/
hsfmodem-7.80.02.06full-linux3.tar.gz

В общем, при попытке поставить *.deb пакет в систему с дровами hsfmodem диагностика пишет, что не может проинициализировать модуль. И модем, разумеется, не виден по командам:
$lspci
$lsusb

При попытке компиляции из исходников дальше всего дело зашло с исходниками от украинского умельца.
Кстати, можно сразу пытаться собрать *.deb пакет командой
$sudo make debprecomp
Но тоже выдаются ошибки:

Makefile:25: *** WARNING: Trying to compile kernel modules on a i686 system while the installed hsf driver package is for i386, this is likely to fail... ***
gcc: fatal error: no input files

In file included from <command-line>:0:0:
/usr/include/stdc-predef.h:59:1: fatal error: /usr/src/kernel-headers-3.13.0-48-generic/include/linux/config.h: Нет такого файла или каталога

В общем, как я понял, файлы в системе Runtu все для i686 процессора, а драйвера hsfmodem - только для i386 процессора.
Это первое.
А второе - в системе нет нужного для компиляции файла /usr/src/kernel-headers-3.13.0-48-generic/include/linux/config.h
Хотя я вроде все пакеты с заголовками поставил:
libc6-dev
linux-headers-3.13.0-48
linux-headers-3.13.0-48-generic
linux-libc-dev

В общем, не подскажите, можно ли при сборке пакета hsfmodem*.deb для моей системы задать ключ компилятору, чтобы собирал софт для i386, а не для i686?
И что бы такое сделать, чтобы, наконец, найти этот "проклятый" config.h ?!

Ну или все бросить и не двигаться дальше?

P.S. Систему Win 7 ставить на бук ради посылки одного факса, потребовавшегося 1 раз в 10 лет, не охота! Бегать с этой целю на почту - тоже! :)
Но спортивный интерес остался! Удастся прикрутить дрова или нет?!
P.P.S. Надо бы прикупить домой переходник USB => Comm, т.к. дома лежит внешний аппаратный модем ZyXEL Elite 2864 - один из самых лучших в свое время для отправки/приема факсов. На порядок лучший Win-модема-свистульки. И для аппаратного внешнего модема никаких дров не надо - факсимильный софт напрямую работает с comm-портом...
« Последнее редактирование: Март 28, 2015, 14:24:29 от HsH »

Оффлайн HsH

  • Administrator
  • *****
  • Сообщений: 3463

    Делал в LiveCD Runtu XFCE 14.04.2 с ядром 3.13:
sudo aptitude update
sudo aptitude install debhelper
sudo mkdir -p /usr/src/kernel-headers-3.13.0-46-generic/include/linux/
sudo touch /usr/src/kernel-headers-3.13.0-46-generic/include/linux/config.h
sudo make debdist

    Последняя команда выполняется в каталоге с распакованными исходниками. В каталоге packages/DEBS/i386 собрался пакет hsfmodem_7.68.00.09oem_i386.deb. Работоспособность не проверял.

Оффлайн mkudritsky

  • Новичок
  • **
  • Автор темы
  • Сообщений: 89
Отчет о попытке установить драйвера
Действительно, при помощи полученных рекомендаций удалось откомпилировать драйвера и получить файл
hsfmodem_7.68.00.09oem_i386.deb

Разве лишь я еще добавил строчку предварительного кода перед компиляцией:
sudo touch /usr/src/kernel-headers-3.13.0-48-generic/include/linux/version.h

При попытке установить драйвера через GDebi получил сообщение в описании пакета:

HDA (High Definition Audio) Modems

        Only under 2.6.16 or newer kernels

        HDA VENDOR ID 14F12BFA
        HDA VENDOR ID 14F12C06

        We recommend the installation of alsa-driver-linuxant available
        at http://www.linuxant.com/alsa-driver before installing this
        driver if you have a HDA modem.

(Жирным шрифтом выделен мой модем).

Но в терминальном окне при установке пакета выдано вот такое сообщение:
sudo hsfconfig
Conexant HSF softmodem driver, version 7.68.00.09oem

If you need assistance or more information, please go to:
http://www.linuxant.com/

When reporting a problem for the first time, please send
us the file generated by "hsfconfig --dumpdiag".
modprobe: invalid option -- 'l'
modprobe: invalid option -- 'l'

No pre-built modules for: Ubuntu-14.04.2 linux-3.13.0-48-generic i686-SMP

Trying to automatically build the driver modules...
(this requires a C compiler and proper kernel sources to be installed)

Where is the linux source build directory that matches your running kernel?
[/lib/modules/3.13.0-48-generic/build]

WARNING: missing file /lib/modules/3.13.0-48-generic/build/include/linux/version.h
The cause of this is usually a missing or unconfigured
kernel source tree (and sometimes an incorrect directory or symbolic link).

However, proper /boot/config-3.13.0-48-generic was found.
Would you like to try using it (in a temporary kernel tree)? [yes]

Unable to prepare temporary kernel tree

First, ensure that the proper kernel source and compiler packages
from your distribution vendor and/or the community are installed.

The Linux kernel can then be reconfigured by running "make menuconfig"
under the kernel source directory (usually /usr/src/linux).

Verify that the proper options for your system are selected.

Then compile and install your new kernel (for more information about
this procedure, see the README file under the kernel source directory),
reboot the system using the new kernel, and re-run "hsfconfig".

В общем, как я понял, система не видит модули.
Или они не откомпилировались? Или системе нужны модули i686, а есть только модули i386?

Тоже самое вылезает при попытке установить патчи
alsa-driver-linuxant
Кстати, поскольку мой модем сидит на звуковом устройстве, то по сообщениям в других конференциях часто после установки патчей alsa перестает работать звук (вплоть, как я понял, до переустановки системы).

В общем, теряюсь в догадках. Что дальше делать?
Наверное, надо искать файл
WARNING: missing file /lib/modules/3.13.0-48-generic/build/include/linux/version.h
которого нет и который я запулил в каталог /usr/src/kernel-headers-3.13.0-48-generic/include/linux/version.h в нулевом виде.

В качестве информации.
Украинский умелец действительно поработал над драйверами hsfmodem, так как исходники от dell и от linuxant компилироваться отказываются.
Не исключаю, что честный PCI-софтмодем, установленный в отдельный слот, на чипе 14F12BFA даже установится!
А беда моего модема состоит в том, что он сидит на звуковой карточке вторым девайсом. Так что нужны не только драйвера чистого модема, но еще и патч для дров звука alsa.

З.Ы. Народ, а что скажете про переходники USB => Comm? Они все Linux-ами распознаются?
А то цена вопроса около 300 руб для подключения нормального внешнего comm-модема.

Оффлайн HsH

  • Administrator
  • *****
  • Сообщений: 3463
что скажете про переходники USB => Comm? Они все Linux-ами распознаются?
А то цена вопроса около 300 руб для подключения нормального внешнего comm-модема.

    Зависит от поддержки чипсета, на котором собран конвертер. Нужно смотреть в "околокомпьютерных" магазинах, цена вопроса как раз укладывается в несколько сотен рублей. Многие предоставляют возможность протестировать устройство перед покупкой - это оптимальный вариант.

Оффлайн mkudritsky

  • Новичок
  • **
  • Автор темы
  • Сообщений: 89
В общем, коллеги, вчера я весьма долго копался с драйверами hsfmodem в Runtu 14.04.1 LITE на ядре kernel 3.13
Изложу свои изыскания. Может кому-то понадобится, хоть я и не смог завести свой софтмодем на ноутбуке.

1. Насчет файлов version.h config.h и прочих заголовков, которые не находились при компиляции.
Оказалось, что эти файлы есть, но на них надо сделать символические ссылки.
Подсказала мне все это информация отсюда:
http://ubuntuforums.org/showthread.php?t=1597605
cd /lib/modules/$(uname -r)/build/include/linux
sudo ln -s ../generated/utsrelease.h
sudo ln -s ../generated/autoconf.h
sudo ln -s ../generated/uapi/linux/version.h

2. С большим трудом, но нашел пример удачной компиляции драйверов для hsfmodem на ядре kernel 3.4 (не ядрах 2.6):
http://pastebin.com/YjLE4Sge
В общем, чтобы сохранить эту информацию, приведу свои действия:
А. Скачал пакет hsfmodem_7.80.02.06oem_i386.deb.zip с сайта linuxant.com
Драйвера alsa ставить не стал, т.к. они в нашей системе свежее, чем на linuxant. Да и видится системой модем, но без дров.
В общем, поставил hsfmodem_7.80.02.06oem_i386.deb через утилиту Gdebi
Preparing to unpack …/hsfmodem_7.80.02.06oem_i386.deb ...
Unpacking hsfmodem (7.80.02.06oem) ...
Настраивается пакет hsfmodem (7.80.02.06oem) …
Conexant HSF softmodem driver, version 7.80.02.06oem

If you need assistance or more information, please go to:
http://www.linuxant.com/

When reporting a problem for the first time, please send
us the file generated by "hsfconfig --dumpdiag".
modprobe: invalid option -- 'l'
modprobe: invalid option -- 'l'

No pre-built modules for: Ubuntu-14.04.2 linux-3.13.0-48-generic i686-SMP

Trying to automatically build the driver modules...
(this requires a C compiler and proper kernel sources to be installed)

Building modules for kernel 3.13.0-48-generic, using source directory
/lib/modules/3.13.0-48-generic/build. Please wait...

ERROR: Module build failed!
Please examine the log file "/etc/hsfmodem/log/buildlog-20150330181504.txt" to determine why.

Посмотрел на лог - компилятор модулей не может найти очередной файл заголовков в директиве
#include <asm/system.h>
Начал искать и нашел, что надо применить патчи, да не один, а аж три штуки:
http://www.openmamba.org/showfile.html?file=/pub/openmamba/devel/patches/hsfmodem-7.80.02.06-kernel-2.6.37.patch
http://www.openmamba.org/showfile.html?file=/pub/openmamba/devel-past/patches/hsfmodem-7.80.02.06-kernel-2.6.39.patch
http://www.openmamba.org/showfile.html?file=/pub/openmamba/devel-past/patches/hsfmodem-7.80.02.06-kernel-3.4.patch

Ну и далее я действовал так, пытаясь откомпилировать модули:
cd /usr/lib/hsfmodem
sudo patch -p1 < /tmp/hsfmodem-7.80.02.06-kernel-2.6.37.patch
sudo patch -p2 < /tmp/hsfmodem-7.80.02.06-kernel-2.6.39.patch
sudo patch -p2 < /tmp/hsfmodem-7.80.02.06-kernel-3.4.patch
Кстати, сначала не тупо патчил, а все сделал вручную!!! Так как исходники поменяли имя и вообще много времени прошло.

Б. Ну и после удачного наложения патчей перекрестился и повторно отправил систему на компиляцию:
sudo hsfconfig
Conexant HSF softmodem driver, version 7.80.02.06oem

If you need assistance or more information, please go to:
http://www.linuxant.com/

When reporting a problem for the first time, please send
us the file generated by "hsfconfig --dumpdiag".
modprobe: invalid option -- 'l'
modprobe: invalid option -- 'l'

No pre-built modules for: Ubuntu-14.04.2 linux-3.13.0-48-generic i686-SMP

Trying to automatically build the driver modules...
(this requires a C compiler and proper kernel sources to be installed)

Where is the linux source build directory that matches your running kernel?
[/lib/modules/3.13.0-48-generic/build]

Building modules for kernel 3.13.0-48-generic, using source directory
/lib/modules/3.13.0-48-generic/build. Please wait...

ERROR: Module build failed!
Please examine the log file "/etc/hsfmodem/log/buildlog-20150330183110.txt" to determine why.
А вот и новый лог:
driver version 7.80.02.06oem
Makefile:25: *** WARNING: Trying to compile kernel modules on a i686 system while the installed hsf driver package is for i386, this is likely to fail... ***
(cd /lib/modules/3.13.0-48-generic/build && make "CNXT_KERNELSRC=/lib/modules/3.13.0-48-generic/build" "M=/usr/lib/hsfmodem/modules" "CC=gcc" clean)
make[1]: Entering directory `/usr/src/linux-headers-3.13.0-48-generic'
/usr/lib/hsfmodem/modules/Makefile:25: *** WARNING: Trying to compile kernel modules on a i686 system while the installed hsf driver package is for i386, this is likely to fail... ***
make[1]: Leaving directory `/usr/src/linux-headers-3.13.0-48-generic'
(cd /lib/modules/3.13.0-48-generic/build && make "CNXT_KERNELSRC=/lib/modules/3.13.0-48-generic/build" "M=/usr/lib/hsfmodem/modules/GPL/hda" "CC=gcc" "HDA_CFLAGS=-DFOUND_KZALLOC  -DFOUND_TLV   -DFOUND_IRQ_HANDLER_T -DFOUND_DELAYED_WORK  -DFOUND_NO_CTL_ELEM_RW" clean)
make[1]: Entering directory `/usr/src/linux-headers-3.13.0-48-generic'
make[1]: Leaving directory `/usr/src/linux-headers-3.13.0-48-generic'
rm -rf *.o GPL/*.o *.ko GPL/*.ko *.mod.c GPL/*.mod.c .*.cmd GPL/.*.cmd .tmp_versions .tmp_versions  /lib/modules/3.13.0-48-generic/build/.tmp_versions/hsfosspec.mod  /lib/modules/3.13.0-48-generic/build/.tmp_versions/hsfserial.mod  /lib/modules/3.13.0-48-generic/build/.tmp_versions/hsfengine.mod  /lib/modules/3.13.0-48-generic/build/.tmp_versions/hsfpcibasic2.mod  /lib/modules/3.13.0-48-generic/build/.tmp_versions/hsfpcibasic3.mod  /lib/modules/3.13.0-48-generic/build/.tmp_versions/hsfhda.mod  /lib/modules/3.13.0-48-generic/build/.tmp_versions/hsfmc97ich.mod  /lib/modules/3.13.0-48-generic/build/.tmp_versions/hsfmc97via.mod  /lib/modules/3.13.0-48-generic/build/.tmp_versions/hsfmc97ali.mod  /lib/modules/3.13.0-48-generic/build/.tmp_versions/hsfmc97ati.mod  /lib/modules/3.13.0-48-generic/build/.tmp_versions/hsfmc97sis.mod  /lib/modules/3.13.0-48-generic/build/.tmp_versions/hsfsoar.mod Modules.symvers GPL/hda/Modules.symvers Module.symvers GPL/hda/Module.symvers modules.order GPL/hda/modules.order Module.markers GPL/hda/Module.markers
(cd /lib/modules/3.13.0-48-generic/build && make "CNXT_KERNELSRC=/lib/modules/3.13.0-48-generic/build" "M=/usr/lib/hsfmodem/modules" "CC=gcc" modules)
make[1]: Entering directory `/usr/src/linux-headers-3.13.0-48-generic'
/usr/lib/hsfmodem/modules/Makefile:25: *** WARNING: Trying to compile kernel modules on a i686 system while the installed hsf driver package is for i386, this is likely to fail... ***
  CC [M]  /usr/lib/hsfmodem/modules/mod_engine.o
  CC [M]  /usr/lib/hsfmodem/modules/mod_hda.o
  CC [M]  /usr/lib/hsfmodem/modules/mod_mc97ali.o
In file included from /usr/lib/hsfmodem/modules/mod_mc97ali.c:32:0:
/usr/lib/hsfmodem/modules/cnxthwpci_common.c:29:22: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'cnxthwpci_probe'
 static int __devinit cnxthwpci_probe (struct pci_dev *pdev,
                      ^
In file included from /usr/lib/hsfmodem/modules/mod_mc97ali.c:32:0:
/usr/lib/hsfmodem/modules/cnxthwpci_common.c:138:23: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'cnxthwpci_remove'
 static void __devexit cnxthwpci_remove (struct pci_dev *pdev)
                       ^
/usr/lib/hsfmodem/modules/cnxthwpci_common.c:224:23: error: 'cnxthwpci_probe' undeclared here (not in a function)
     .probe          = cnxthwpci_probe,
                       ^
In file included from /usr/lib/hsfmodem/modules/mod_mc97ali.c:9:0:
/usr/lib/hsfmodem/modules/cnxthwpci_common.c:225:35: error: 'cnxthwpci_remove' undeclared here (not in a function)
     .remove         = __devexit_p(cnxthwpci_remove),
                                   ^
/usr/lib/hsfmodem/modules/GPL/oscompat.h:342:24: note: in definition of macro '__devexit_p'
 #define __devexit_p(x) x
                        ^
In file included from /usr/lib/hsfmodem/modules/cnxthwpci_common.c:22:0,
                 from /usr/lib/hsfmodem/modules/mod_mc97ali.c:32:
/usr/lib/hsfmodem/modules/cnxthw_common.c:17:19: warning: 'cnxthw_DevMgrPMControl' defined but not used [-Wunused-function]
 static COM_STATUS cnxthw_DevMgrPMControl(POS_DEVNODE pDevNode,
                   ^
make[2]: *** [/usr/lib/hsfmodem/modules/mod_mc97ali.o] Error 1
make[1]: *** [_module_/usr/lib/hsfmodem/modules] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-3.13.0-48-generic'
make: *** [all] Error 2

На этом я пока остановился.
Как я понял, тут уже не получится сделать ссылки на какие-нибудь файлы типа version.h или asm/system.h
Тут все серьезнее - надо править код на языке C. То есть самому писать патч...
Это называется картина Репина "Приплыли..."

Жаль. Но может на досуге потом еще поковыряюсь с этим злосчастным драйвером hsfmodem
Честно говоря, не ожидал, что ядра 2.6 так сильно даже по структуре отличаются от 3.13, которые в свою чередь отличаются от 3.4...

Ну а пока пауза...
Тем не менее, буду рад любым соображениям камрадов.

Оффлайн mkudritsky

  • Новичок
  • **
  • Автор темы
  • Сообщений: 89
Тем чудакам, кто еще ковыряется с драйверами hsfmodem, приведу ссылку, где можно их скачать.
Дело в том, что на сайте http://www.linuxant.com/ нет дров с теми именами, которыми оперирует 99% заинтересованных юзеров в Интернете.
Итак, вот эти дрова:

http://george-hopkins.github.io/hsfmodem/

Причем, тут есть дрова и от Dell, и от Linuxant, и от какого-то DiacoEdition.

Ну и чуть ниже выскажу свои эмоции:
1. Никак не ожидал, что компиляция исходников hsfmodem - это только 1/6 часть пути!
Создается впечатление, что и hsfmodem*.deb файл, и команда
$sudo make install
просто кидают исходники в директорию
/usr/lib/hsfmodem

Самая веселая часть наступает при подаче команды
$sudo hsfconfig
(она же выполняется в терминальном окне на завершающей стадии установки hsfmodem*.deb пакета).

Тут-то и начинается настоящая компиляция модулей, которая на современных системах редко когда завершается удачно!

2. Я вот думал, как это они (Linuxant) выложили дрова в исходниках и сделали их платными???
Оказывается, что там есть пропиетарная часть, которая поставляется только в виде готовых программных модулей и находится в этой директории "исходников" (так сказать исходников):
modules/imported

Так что из-за наличия этой пропиетарной части дрова вполне могут и принципиально не заработать, начиная с какой-то версии ядер после 2.6.*