как я madwimax для midinux-а собирал.

имеется: mid (mobile internet device), аппаратно идентичный Moblin-у.
требуется: обеспечить подключение к сети Yota с помощью usb-модема Samsung swc-u200.

[александр баракин aka sash-kan <alex.barakin@gmail.com>]

внутри устройства стоит Midinux. и хотя до терминала добраться несложно (Fn+P), что-либо собрать прямо на устройстве не получится: нет ни компилятора, ни других необходимых вещей.

для сборки rpm-пакетов надо скачать midinux sdk. размером 933786191 байт.

далее нужно сделать chroot внутрь распакованной файловой системы и следовать инструкции от intel.

как известно, для работы модема под gnu/linux необходим madwimax и библиотека libusb1.0. скачать исходники и распаковать в ~/rpmbuild/SOURCES/ проблемы, понятно, не составляет. а вот spec-файлы, которые понадобятся для сборки rpm-пакетов — вопрос отдельный. искал я подходящие spec-и запросами к google: «libusb1 spec» и «madwimax spec». найденное, конечно, можно использовать лишь как основу.

получившиеся у меня spec-файлы выкладывать я, пожалуй, не буду. в виду, во-первых, их тривиальности, во-вторых, кривости. да-да, rpm-ы я до этого не собирал ни разу. так уж жизнь сложилась…

а вот некоторые соображения, конечно, изложу.

для сборки madwimax необходимы заголовочные файлы libusb. поэтому при сборке libusb devel-пакет пропускать никак нельзя. конечно, его (после сборки) надо будет и установить внутри нашего сборочного chroot-а. ни libusb, ни madwimax не требуют патчей для того, чтобы собрать их внутри midinux sdk и установить в систему. но вот чтобы работало, патч всё-таки нужен.

дело в том, что, по-видимому, из-за древней версии udev-а (103.3), стоящего в midinux-е, не срабатывают udev-правила при подключении модема. и madwimax, соответственно, не стартует. после некоторого количества проб и ошибок с сопоставлением вывода udev-овских информационных утилит (udevmonitor, udevtest), был нарисован такой вот патч:

--- madwimax-0.1.1/scripts/udev/z60_madwimax.rules.in   2009-07-04 03:54:13.000000000 +0000
+++ madwimax-0.1.1/scripts/udev/z60_madwimax.rules.in.new       2009-09-01 12:13:32.000000000 +0000
@@ -1,16 +1,18 @@
 # udev rules file for madwimax supported devices
-SUBSYSTEM!="usb|usb_device", GOTO="madwimax_rules_end"
+SUBSYSTEM=="usb", GOTO="madwimax_rules_start"
+SUBSYSTEM!="usb_device", GOTO="madwimax_rules_end"
 ACTION!="add", GOTO="madwimax_rules_end"
 
+LABEL="madwimax_rules_start"
 # detach buggy disk
 ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="6761", ATTR{bInterfaceNumber}=="01", RUN+="/bin/sh -c '/bin/echo -n $kernel > /sys/$devpath/driver/unbind'"
 ATTRS{idVendor}=="04e9", ATTRS{idProduct}=="6761", ATTR{bInterfaceNumber}=="01", RUN+="/bin/sh -c '/bin/echo -n $kernel > /sys/$devpath/driver/unbind'"
 ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="6780", ATTR{bInterfaceNumber}=="01", RUN+="/bin/sh -c '/bin/echo -n $kernel > /sys/$devpath/driver/unbind'"
 
 # run madwimax
-ATTR{idVendor}=="04e8", ATTR{idProduct}=="6761", RUN+="@SBINDIR@/madwimax -qd --exact-device=$attr{busnum}/$attr{devnum}"
-ATTR{idVendor}=="04e9", ATTR{idProduct}=="6761", RUN+="@SBINDIR@/madwimax -qd --exact-device=$attr{busnum}/$attr{devnum}"
-ATTR{idVendor}=="04e8", ATTR{idProduct}=="6731", RUN+="@SBINDIR@/madwimax -qd --exact-device=$attr{busnum}/$attr{devnum}"
-ATTR{idVendor}=="04e8", ATTR{idProduct}=="6780", RUN+="@SBINDIR@/madwimax -qd --exact-device=$attr{busnum}/$attr{devnum}"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="6761", RUN+="/usr/sbin/madwimax -qd --exact-device=$attr{busnum}/$attr{devnum}"
+ATTRS{idVendor}=="04e9", ATTRS{idProduct}=="6761", RUN+="/usr/sbin/madwimax -qd --exact-device=$attr{busnum}/$attr{devnum}"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="6731", RUN+="/usr/sbin/madwimax -qd --exact-device=$attr{busnum}/$attr{devnum}"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="6780", RUN+="/usr/sbin/madwimax -qd --exact-device=$attr{busnum}/$attr{devnum}"
 
 LABEL="madwimax_rules_end"

кстати, этот патч, возможно, позволит madwimax-у автоматически «заводиться» и под xandros-ом (eee pc). там тоже не срабатывали правила из-за древности версии. в виду отсутствия в данный момент xandros-а под рукой — проверить нет возможности.

ещё и путь к каталогу с dhclient-овскими lieases пришлось подправить:

--- madwimax-0.1.1/scripts/events/event.sh.generic.in   2009-09-01 12:11:05.000000000 +0000
+++ madwimax-0.1.1/scripts/events/event.sh.generic.in.new       2009-09-01 12:02:18.000000000 +0000
@@ -8,7 +8,7 @@
        if [ -x /sbin/dhclient3 ]; then
                /sbin/dhclient3 -nw -pf /var/run/dhclient."$2".pid -lf /var/lib/dhcp3/dhclient."$2".leases "$2" >/dev/null 2>&1
        elif [ -x /sbin/dhclient ]; then
-               /sbin/dhclient -pf /var/run/dhclient."$2".pid -lf /var/lib/dhcp/dhclient."$2".leases "$2"
+               /sbin/dhclient -pf /var/run/dhclient."$2".pid -lf /var/lib/dhclient/dhclient."$2".leases "$2"
        elif [ -x /sbin/pump ]; then
                /sbin/pump -i "$2"
        elif [ -x /sbin/udhcpc ]; then

вот, собственно, и всё. тройка оставшихся недостатков:

1. всё-таки иногда cd-rom, которым (в частности) прикидывается модем, таки монтируется. через раз. на работоспособность это не влияет, просто, скажем, не очень красиво. как это исправить, уж не знаю. может быть, и остальные переменные ATTR заменить на ATTRS?

2. на экране устройства наличие интернета никак не отображается. задача, требующая более глубокого погружения внутрь принципов организации сетевой и графической работы midinux-а. на что времени у меня, увы, не было.

3. перед подключением модема нужно отключить любое другое активное соединение с интернетом (тот же wifi).

[ опубликовано 12/03/2010 ]

александр баракин aka sash-kan <alex.barakin@gmail.com> - как я madwimax для midinux-а собирал.   Версия для печати