Ключевые слова:pda, linux, pocketpc, wifi, game, bluetooth, (найти похожие документы)
From: Урманов Марат <my-ipaq@narod.ru.>
Date: Mon, 3 Jan 2005 18:21:07 +0000 (UTC)
Subject: Обзор операционной системы Linux на iPAQ H5550
Оригинал: http://my-ipaq.narod.ru/review.htmlhttp://my-ipaq.narod.ru/opie.htmlhttp://my-ipaq.narod.ru/games_opie.htmlhttp://my-ipaq.narod.ru/wifi.htmlhttp://my-ipaq.narod.ru/bluetooth.htmlhttp://my-ipaq.narod.ru/kernel.html
Один из проектов портирования линукса на наладонники называется
Familiar который поддерживает два окружения GPE и OPIE и основан на
дистрибутиве Debian. GPE Palmtop Environment использует X
Windows System и GTK + widget toolkit, в то время как OPIE (Open
Palmtop Integrated Environment) является ответвлением окружения
Qtopia разрабатываемым Trolltech. На момент написания статьи
стабильный релиз был Familiar v0.8.2 который поддерживает iPAQ h3600,
h3700, h3800, h3900, h5400, and h5500 series, Siemens Simpad and Sharp
Zauri. Статус портирования на другие платформы можно посмотреть
здесь На данном сайте рассмотрим установку линукса на iPAQ H5550 и
некоторые проблемы возникающие при этом. Во первых нужно определиться
с окружением. Каждое имеет свои минусы и плюсы.
Начну пожалуй с общих проблем с которыми я столкнулся для версии
familiar 0.8.2:
Joypad - драйвер джойпада работает не совсем корректно, поэтому в игры
требующие точного позиционирования (типа "Змейки") играть вряд ли
получиться. Хотя в игру "Alladdin" я играю без проблем на моем iPAQ.
WiFi - на данный момент не поддерживает WPA (теоретически решаемо
портированием нового драйвера, если кому надо). В остальном работает.
Bluetooth - не работает одновременно с WiFi (проблема решается
пересборкой ядра, есть соответствующий патч) Отдельно работает на ура.
По крайней мере в инет через GPRS хожу без проблем.
SD/MMC card - на форумах часто проскакивает сообщение о проблемах с
девайсом. У меня с картой Kingston SD ElitePro 512MB проблем не было.
Sound - нет автоматического определения подключения/отключения
наушников (решается пересборкой ядра).
Окружение OPIE.
Минусы:
Проблема с регулировкой звука (решается либо использованием консольной
утилиты, либо наушниками с регулировкой). Нет графического интерфейса
для сканера отпечатков пальцев (сам драйвер поставлятся в комплекте).
При выставлении событий нет возможности использовать buzzer. Как мне
показалось меньше софта (мое личное мнение). Можно использовать проги
от zaurus'а, но их в большинстве случаев придется пересобирать.
Плюсы:
Возможность синхронизировать контакты с MS Outlook (хотя может для
кого-то и минус) и также из любых прог. которые поддерживают формат
vcard 2.1. Я без проблем синхронизирую с телефонной книгой на моем
SonyEricsson T630.
Окружение GPE.
Ну, в общем противоположно окружению OPIE. Нет проблем со звуком, есть
графический интерфейс для отпечатков пальцев (правда сам не пробовал),
возможность использовать buzzer. И так как он основан на библиотеке
GTK, то выбора софта вроде побольше (типа gnumeric, firefox и т.д.)
Самый большой минус, по моему, это отстутствие поддержки стандарта
vcard в приложении Contacts, хотя следует отметить, что с этим
окружением я работал мало и возможно неправ.
Также отмечу, что не рассматривал возможность синхронизации с линукс
десктопами поэтому ничего сказать по этому вопросу не могу. См.
страничку Erik Hovland.
Для получения более подробной информации смотрите:
- Основной сайт проекта
http://www.handhelds.org/
- Сайт портирования на платформу H5550
http://www.handhelds.org/moin/moin.cgi/HpIpaqH5400
- Поиск пакетов
http://ipkgfind.handhelds.org/
- Релизы
http://familiar.handhelds.org/releases/
- Снапшоты текущей версии
http://familiar.handhelds.org/snapshots/
- И конечно очень помогает поиск по мейллистам:
http://dir.gmane.org/gmane.comp.handhelds.linux.familiarhttp://dir.gmane.org/gmane.comp.handhelds.linux.familiar.develhttp://dir.gmane.org/gmane.comp.handhelds.linux.h5400http://dir.gmane.org/gmane.comp.handhelds.opiehttp://dir.gmane.org/gmane.comp.handhelds.opie.develhttp://dir.gmane.org/gmane.comp.handhelds.gpe
- а также по Wiki страничкам:
http://www.handhelds.org/moin/moin.cgi/FrontPageOpie на iPAQ H5550
В этой статье я рассмотрю некоторые проблемы окружения Opie 1.2.0 из
поставки familiar 0.8.2 для iPAQ H5550. На установке останавливаться
не буду, так как она прошла без проблем. После установки появляется
экран настройки различных параметров: часовой пояс, дата, время и т.д.
Устанавливаем. Тут следует сказать, что пакет timezone, включенный по
умолчанию, содержит только несколько городов, поэтому когда указываем
местоположение, для которого отсутствует timezone файл, то будет
использоваться пояс GMT, вследствие чего часы будут идти неверно. Для
исправления просто установите пакет с именем timezones-europe, или
скопируйте файл нужного вам города в директорию
usr/share/zoneinfo/Europe c десктопа.
После входа сразу бросается в глаза отсутствие русских шрифтов и много
раскладок различных языков. Лишние раскладки можно убрать удалив
соответствующие файлы *.keymap из директории
/opt/QtPalmtop/share/multikey. Для установки же русских шрифтов можно
использовать пакеты cyrillic-font-ipaq-... распространяемые Антоном Масловским
Для их установки нужно запускать ipkg с опцией
--force-depends, и после рестарта Opie выбрать в "Settings -
Appearance - Font" шрифт Helvetica. Причем для H5550 нужны только
пакеты с rotation t0 и t10. Также можно использовать шрифты с
сайта.
Теперь рассмотрим некоторые приложения. По умолчанию установлены
только приложения Pim. Причем приложение Contacts может импортировать
файлы формата vcard 2.1, что позволяет синхронизировать контакты с
любыми программами поддерживающими этот формат(эта возможность выгодно
отличает окружение Opie от Gpe, где такая возможность пока не
реализована) Например я синхронизирую таким образом контакты на
наладоннике с телефонной книгой на моем Sony Ericsson T630. Для этого
устанавливаю bluetooth соединение с телефоном и экпортирую телефонную
книгу в файл с помощью команды gammu -backup phonebook.vcf. И уже
полученный файл импортируется в приложение "Contacts". Т.к при
экспортировании используестя формат UTF-8, то проблем с русским быть
не должно. Также "Contacts" можно синхронизировать с MS Outlook на
десктопной машине. Для этого я использовал программу Intellisync 1.43E
поставляемую с zaurus'ами Устанавливем SetupI.exe на десктопной
машине. На наладоннике идем в "Settings->Security->Sync",
устанавливаем "Accept sync from network" в "Any" и "Select your sync
software" в "IntelliSync". Все работает, единственное приходиться
каждый раз нажимать кнопку Allow. Но как это исправить увы не знаю.
Что касается синхронизацией с Linux десктопом, то сам не пробовал.
Поэтому отсылаю вас к странице ErikHovland где описаны некоторые
проблемы возникающие при этом.
Ядро 2.4.19-rmk6-pxa1-hh37 поставляемое по умолчанию с Familiar 0.8.2
имеет проблему автоматического переключения звукового потока на
наушники при их подключении. Решается компиляцией ядра с применением
патча (см. Компиляция ядра iPAQ H5550) Если Вам не очень хочется
пересобирать ядро, то можете решить проблему заменив модули ak4535.o и
h5400-audio.o находящиеся в каталоге
/lib/modules/2.4.19-rmk6-pxa1-hh37/kernel/drivers/sound на
скомпилированные мной файлы ak4535.o и h5400-audio.o в которых
эта проблема решена.
После копирования не забудьте выполнить команду depmod.24 и загрузить
эти модули или перегрузите наладонник. Следующая проблема которая
поддается только частичному решению - это регулировка звука. Для
регулировки звука скажем в Opiemediaplayer2(который кстати
проигрывает mp3, mpeg, wav, ogg, quicktime, divx, и т.д. включая
потоковое вещание) есть два варианта, либо использовать наушники с
регулятором громкости, либо пакет aumix и его консольную
утилиту(графическая не подойдет, так как этот пакет собран под Gpe,
но консольная работает хорошо). Решать вам. Кстати перед установкой
Opiemediaplayer2 не забудьте установить пакет opie-mediaplayer2-skin-default.
Если звук будет проигрываться с двойной скоростью раскомментарьте строку
audio.oss_sync_method:softsync в файле /home/root/Settings/opiexine.cf.
Что касается интернет приложений то с аськой проблем нет. Ставим пакет
qpe-gaim и нужный протокол, для аськи например это будет пакет
gaim-protocol-oscar. A вот с браузером пришлось повозиться.
Единственный браузер который я нашел с поддержкой страниц в русской
кодировке для Opie на iPAQ - это Opera для zaurus'a от IBM. Ее и будем
ставить. Заходите на сайт Ibm , регистрируетесь и стягиваете
"WebSphere Everyplace Multimodal Environment", файл multimodal.ipk.
Переименовываете его в multimodal.tar.gz и извлекате tar'ом файл
opera_arm.ipk. После чего устанавливаете с помощью ipkg. Браузер
установиться в директорию /home/QtPalmtop и создаст каталог
/home/zaurus. Из каталога /home/zaurus переносим содержимое (каталог
.opera - где лежит opera.ini с настройками и .operasave) в /home/root,
а все содержимое /home/QtPalmtop в каталог /opt/QtPalmtop. Дальше
переименовываем opera в opera.bin:
#mv /opt/QtPalmtop/bin/opera
/opt/QtPalmtop/bin/opera.bin
И создаем скриптик opera следующего содержания:
#!/bin/sh
export LD_LIBRARY_PATH=/opt/QtPalmtop/libold
export LOGNAME=0
opera.bin
кладем его в каталог /opt/QtPalmtop/bin/opera не забывая сделать
исполняемым:
#chmod a+x /opt/QtPalmtop/bin/opera
Далее создаем каталог /opt/QtPalmtop/libold и копируем туда следующие
файлы из дистрибутива Familiar 0.7.2: libpqe.so.1, libqte.so.2,
libpng.so.3 Для этого скачиваем familiar-0.7-compat.tar.gz, далее:
#cd /opt/QtPalmtop/libold
#tar -xzf familiar-0.7-compat.tar.gz
В архиве одна символическая ссылка неправильна. libpqe.so.1 ссылается
на libqpe.so.1.5.0, а надо libqpe.so.1 -> libqpe.so.1.5.0 Изменяем:
# rm ibpqe.so.1
# ln -s libqpe.so.1.5.0 libqpe.so.1
И последний штрих:
#ln -s /opt/QtPalmtop/opera /usr/share/opera
Теперь Opera должна заработать.
Что касается остальных прог. типа читалка текстов или читалка .pdf то
проблем замечено не было. Словари для zbedic можно взять со страницы
Антона Масловского. Еще хочется сказать пару слов о карте Москвы.
В настоящее время сущ. проект для просмотра карты Москвы через браузер
Карта m2004 распространяется в формате squashfs. Проблема в том,
что в ядре Familiar эта файловая система не поддерживается. Думаю что
проще пересобрать ядро на десктопе с включенной поддержкой squashfs и
cramfs и перекинуть в cramfs, либо договориться с автором.
Полезные ссылки:
- Кодирование видео для оптимизации под Opiemediaplayer2
- Установка Opera http://opie.handhelds.org/cgi-bin/moin.cgi/Opera
Проект OpieИгры на Familiar 0.8.2 c окружением Opie 1.2.0
Начну с того, что в Familiar на H5550 сущ. проблема с драйвером
jotpad'а которая решается только частично. Проблема заключается в
следующем. H5550 имеет четыре сенсора NW, NE, SE, SW и пятый по
середине. С центральным нет никаких проблем. Нажатия же N, E, S, W
эмулируется соседними сенсорами. Т.е если нажимается N, то оба сенсора
NW и NE должны показывать нажатие и генерировать одно прерывание (по
которому определяется что нажата N).
Физически расположены так:
button button
button
button button
Драйвер пытается эмулировать так:
up
left action right
down
Но часто (в результате неправильной эмуляции драйвером ядра) также
генерируется еще два прерывания одно показывает что нажато NW, а
другое что нажата NE. В первом ошибочном случае получится что мы
нажали UP и LEFT, а во втором, что UP и LEFT а потом UP и RIGHT (или
UP, LEFT и RIGHT). Сущ. патч ядра который частично решает эту
проблему, но не полность (см. Компиляция ядра iPAQ H5550). Если
пересобирать ядро не хочется то можете заменить модуль h5400_asic.o из
каталога /lib/modules/2.4.19-rmk6-pxa1-hh37/kernel/arch/arm/mach-pxa
на скомпилированный мной модуль h5400_asic.o в котором эта проблема
решена. Не забудьте после замены модуля выполнить dempod.24 и
перезагрузиться. Резюмирую сказанное отмечу, что играть в игры (до
решения проблемы окончательно) которые требуют абсолютно точного
позиционирования не получиться. В пример поставлю известную игру
"Snake" - играть точно не сможете. Но в играх где допустимо иногда
неправильно нажатая кнопка играть можно. Например, я играю в известную
игру "Aladdin" c платформы Super Nintendo и играется я вам скажу очень
комфортно. Вообщем ставим пропатченное ядро и вперед, не тратя время.
Теперь я раскажу о том как установить эмулятор Super Nintendo и
запустить игру на примере все той же игры "Aladdin". Ставим как обычно
эмулятор snes9x из Familiar feed, и в инете стягиваем образ игры
"Aladdin". Пытаемся запустить:
root@h5550:~# snex9x -nosound aladdin.smc
но у нас ничего не получается, экран мельтешит, рябит и ничего не
показывает. На самом деле это решается просто. Создаем скриптик
aladdin.sh следующего содержания:
#!/bin/sh
export QWS_DISPLAY=Transformed:Rot270:0
snes9x -nosound /path/to/image/ALADDIN.SMC &
root@h5550:~# chmod a+x aladdin.sh
и запускаем. Уже лучше, не правда ли? Теперь возникла проблема входа в
игру, так как непонятно где кнопка Action. И вот здесь нам надо
сделать remapping кнопок. Начнем с теории. При нажатии какой-либо
кнопки мы проходим по следующему пути:
1. Keypress and kernel ->
2. opie core libs ->
3. SDL library -> snes emulator -> Game
В библиотеке SDL remapping кнопок iPAQ следующий:
* Record button = Shift
* Card = Alt
* Calendar = "y"
* Home (task???) = Enter
* Mail = ESC
Т.е когда мы нажимаем кнопку Mail библиотека SDL передает в эмулятор
кейкод ESC. Вот здесь и начинается самое интересное. Будем делать
rempaping в эмуляторе. Для этого в нем предусмотрена переменная
S9XKEYS которая маппит указанные в ней кейкоды SDL на эмуляцию
джойстика:
Quit,A,B,X,Y,L,R,START,SELECT,LEFT,RIGHT,UP,DOWN,L+U,L+D,R+U,R+D
А теперь переходим к практике:
мы нажимаем кнопку Mail, в библиотеке SDL ей присваивается значение
ESC, смотрим кейкоды SDL (приложение 1) и находим, что кейкод для ESC
= 27. Далее в переменную S9XKEYS записываем код 27:
S9XKEYS=27
Это будет означать что мы при нажатии Mail сэмулировали кнопку
джойстика Quit. Идем дальше. Нажимаем кнопку Calendar, в библиотеке
SDL ей присваивается значение "y" , в переменной S9XKEYS маппим ее на
кнопку виртуального джойстика A:
S9XKEYS=27, 121
Думаю идея понятна. Для запуска игры "Aladdin" добавляем remapping в
ранее созданный скрипт aladdin.sh:
#!/bin/sh
export QWS_DISPLAY=Transformed:Rot270:0
export S9XKEYS=27,121,308
snes9x -nosound /media/ram/games/snes9x/ALADDIN.SMC &
Запускаем и наслаждаемся игрой. Да кстати не забудьте перед запуском
сделать rotate экрана, а то для того чтобы пойти влево нужно будет
нажимать joypad вверхJ))) По поводу сохранения - после того как
пройдете три уровня узнаете пароль на следующий, четвертый, и сможете
сразу переходить на него в начале игры вводя пароль в меню, ну или
поищите пароли в инете. Нужно еще сказать что если запущен эмулятор
snes9x и наладонник входит в режим засыпания, то он оттуда потом не
выйдет, поможет только reset (как исправить пока не знаю)
Сущ. также эмулятор scummvm который тоже работает. Делаем типа того:
#!/bin/sh
export QWS_DISPLAY=Transformed:Rot270:0
scummvm -g normal --aspect-ratio monkey2
Игра запускается, но я не играл поэтому ничего больше сказать не могу.
Пробуйте.
Приложение 1. Кейкоды для SDL
SDLK_BACKSPACE = 8,
SDLK_TAB = 9,
SDLK_CLEAR = 12,
SDLK_RETURN = 13,
SDLK_PAUSE = 19,
SDLK_ESCAPE = 27,
SDLK_SPACE = 32,
SDLK_EXCLAIM = 33,
SDLK_QUOTEDBL = 34,
SDLK_HASH = 35,
SDLK_DOLLAR = 36,
SDLK_AMPERSAND = 38,
SDLK_QUOTE = 39,
SDLK_LEFTPAREN = 40,
SDLK_RIGHTPAREN = 41,
SDLK_ASTERISK = 42,
SDLK_PLUS = 43,
SDLK_COMMA = 44,
SDLK_MINUS = 45,
SDLK_PERIOD = 46,
SDLK_SLASH = 47,
SDLK_0 = 48,
SDLK_1 = 49,
SDLK_2 = 50,
SDLK_3 = 51,
SDLK_4 = 52,
SDLK_5 = 53,
SDLK_6 = 54,
SDLK_7 = 55,
SDLK_8 = 56,
SDLK_9 = 57,
SDLK_COLON = 58,
SDLK_SEMICOLON = 59,
SDLK_LESS = 60,
SDLK_EQUALS = 61,
SDLK_GREATER = 62,
SDLK_QUESTION = 63,
SDLK_AT = 64,
/*
Skip uppercase letters
*/
SDLK_LEFTBRACKET = 91,
SDLK_BACKSLASH = 92,
SDLK_RIGHTBRACKET = 93,
SDLK_CARET = 94,
SDLK_UNDERSCORE = 95,
SDLK_BACKQUOTE = 96,
SDLK_a = 97,
SDLK_b = 98,
SDLK_c = 99,
SDLK_d = 100,
SDLK_e = 101,
SDLK_f = 102,
SDLK_g = 103,
SDLK_h = 104,
SDLK_i = 105,
SDLK_j = 106,
SDLK_k = 107,
SDLK_l = 108,
SDLK_m = 109,
SDLK_n = 110,
SDLK_o = 111,
SDLK_p = 112,
SDLK_q = 113,
SDLK_r = 114,
SDLK_s = 115,
SDLK_t = 116,
SDLK_u = 117,
SDLK_v = 118,
SDLK_w = 119,
SDLK_x = 120,
SDLK_y = 121,
SDLK_z = 122,
SDLK_DELETE = 127,
/* Arrows + Home/End pad */
SDLK_UP = 273,
SDLK_DOWN = 274,
SDLK_RIGHT = 275,
SDLK_LEFT = 276,
SDLK_INSERT = 277,
SDLK_HOME = 278,
SDLK_END = 279,
SDLK_PAGEUP = 280,
SDLK_PAGEDOWN = 281,
/* Function keys */
SDLK_F1 = 282,
SDLK_F2 = 283,
SDLK_F3 = 284,
SDLK_F4 = 285,
SDLK_F5 = 286,
SDLK_F6 = 287,
SDLK_F7 = 288,
SDLK_F8 = 289,
SDLK_F9 = 290,
SDLK_F10 = 291,
SDLK_F11 = 292,
SDLK_F12 = 293,
SDLK_F13 = 294,
SDLK_F14 = 295,
SDLK_F15 = 296,
/* Key state modifier keys */
SDLK_NUMLOCK = 300,
SDLK_CAPSLOCK = 301,
SDLK_SCROLLOCK = 302,
SDLK_RSHIFT = 303,
SDLK_LSHIFT = 304,
SDLK_RCTRL = 305,
SDLK_LCTRL = 306,
SDLK_RALT = 307,
SDLK_LALT = 308,
SDLK_RMETA = 309,
SDLK_LMETA = 310,
SDLK_LSUPER = 311, /* Left "Windows" key */
SDLK_RSUPER = 312, /* Right "Windows" key */
SDLK_MODE = 313, /* "Alt Gr" key */
SDLK_COMPOSE = 314, /* Multi-key compose key */
/* Miscellaneous function keys */
SDLK_HELP = 315,
SDLK_PRINT = 316,
SDLK_SYSREQ = 317,
SDLK_BREAK = 318,
SDLK_MENU = 319,
SDLK_POWER = 320, /* Power Macintosh power key */
SDLK_EURO = 321, /* Some european keyboards */
SDLK_UNDO = 322, /* Atari keyboard has Undo */
WiFi на iPAQ H5550
------------------
В модели iPAQ H5550 используется WiFi чип Atmel AT76C503. По умолчанию
при загрузке системы модуль драйвера подгружается и интерфейс
поднимается, что соответственно приводит к увеличению потребления
питания и ускорению расхода батареи. Поэтому подгружать модуль драйвер
при загрузке не будем. Удаляем файл /etc/modutils/at76c503-rfmd и
выполняем команду:
# update-modules
Затем напишем простой скриптик wlan-start.sh для подгрузки модулей WiFi:
#!/bin/sh
modprobe at76c503-rfmd
sleep 1
ifconfig wlan0 up
iwconfig wlan0 essid "put here ESSID"
iwconfig wlan0 key
iwconfig wlan0 key **************************
udhcpc -i wlan0 -q
Это wlan соединение к accesspoint c essid и wep-ключом. Если Вам это
не нужно, то просто заккоментарьте их и все. Последняя строка
использует dhcp для получения ip, соотвественно если используте
статический адрес, то измените последнюю строку. Например для доступа
к публичной точке доступа скрипт будет выглядеть так:
#!/bin/sh
modprobe at76c503-rfmd
sleep 1
ifconfig wlan0 up
udhcpc -i wlan0 -q
Ну и для отключения WiFi:
#!/bin/sh
ifconfig wlan0 down
rmmod at76c503-rfmd
rmmod at76c503
rmmod at76_usbdfu
Если наладонник не хочет подсоединяться к вашей точке доступа
802.11b/g и вылетает по таймауту, то попробуйте обновить firmware. А
вот здесь возникает проблема, потому что на сайте HP выкладываются
прошивки для iPAQ под винды. Т.е. вам придется восстановить wince для
прошивки. Erik Hovland на своем сайте предупреждает (цитирую):
"I noticed that atmelwlandriver has a command line utility for it. And
I have been slogging through trying to get it to compile in OE. No
luck yet".
Если будетe перепрошивать обязательно берите прошивку без поддержки
WPA иначе wireless работать не будет (чтобы работал также нужна
поддержка WPA в драйвере ядра). Тут надо сказать, что в настоящее
время для atmel в Familiar используется драйвер belios который не
поддерживает WPA. Хотя сущ. альтернативный проект драйвера с
поддержкой WPA, но в ядро Familiar он еще не портирован (по крайней
мере я об этом не слышал). Есди вдруг вы захотите этим заняться, то
последовательность следующая:
1) upgrade the firmware (restore wince, use the softpak from hp site to upgrade it)
2) build the atmelwlandriver
- download it from http://atmelwlandriver.sourceforge.net/
- change the header file for usb devices to include the vendor and
device ids for the compaq part. You can get this information from
looking at the source in the berlios driver.
- compile the atlmelwlandriver against the hh 2.4 kernel cvs.
- cross fingers.
- copy over driver to your pda and load it.
But watch out. There is no guarantee that it will work. The last
atmelwalndriver version that worked is quite old and took some amount
of hacking.
Для тех, кто желает заняться Wardriving c помощью вашего iPAQ Вы
можете использовать пакет kismet. Устанавливаем пакет, затем:
1) переводим интерфейс в режим мониторинга:
root@h5550:~# iwpriv wlan0 monitor 2 1
(думаю возможно также iwconfig wlan0 monitor)
2) правим конфиг kismet(vi /etc/kismet.conf):
source=atmel_usb,wlan0,wlan0
channelhop=false (если true, kismet_server не получает пакеты)
3) запускаем kismet:
root@h5550:~# kismet
Информация о найденных сетях будет показываться на экране, а также
сохраняться в нескольких файлах в текущем каталоге (каталог сохранения
работы можно изменить в конфиге). Да и не забудьте перед этим сменить
мак адрес интерфейса wlan. Для этого использовать предустановленную
утилиту ifconfig нельзя, так как на самом деле в Familiar используется
пакет busybox для основных утилит. А в нем некотороые опции порезаны,
в том числе и опция смены мак адреса. Но это решается просто,
устанавливаем куда-нибудь пакет net-tools из Familiar feed и
используем утилиту ifconfig оттуда.
Bluetooth на iPAQ H5550
В этой статье я рассмотрю работу bluetooth'а на моем H5550 и
подключение к инету через телефон Sony Ericsson T630 (оператор
beeline). Начну с того что во первых используется стек BlueZ, а во
вторых в ядре дистрибутива familiar есть проблема с драйвером, поэтому
придется собирать ядро. Проблема состоит из двух частей. Первая это
то, что bluetooth драйвер (natsemi lmx9814) иногда портит данные. Эта
проблема пропатчена в ядре hh40 и выше. Поэтому на ней мы
останавливаться не будем. Вторая проблема заключается в том что
bluetooth uart (btuart) процессора pxa-25x использует software flow
control, т.е. использует процессор при обработке последовательных
соединений, скорость которых достигает 921kbps. Это приводит к
большому числу прерываний процессора. Если при этом еще какое-либо
устройство (обычно устройства wlan) вызывает прерывание, то процессор
просто `засорится'. C точки зрения пользователя это выглядит так, что
вы не сможете использовать одновременно bluetooth и к примеру WiFi.
Конечно если вы хотите одновременно использовать только bluetooth то
он должен работать замечательно. Решение же проблемы предложил Catalin
Drula сделавший патч который использует hardware uart (huart) вместо
btuart. Итак, качаем патч в директорию с исходниками ядра, патчим
(patch -p1 < patch_hwuart), компилим и устанавливаем как обычно не
забыв включить опцию CONFIG_PXA_HWUART=y (добавив ручками в .config
или при make oldconfig) Для более подробной информации см. раздел
Компилирование ядра linux для iPAQ. После успешной установки
пропатченного ядра приступаем собственно к настройке соединения.
Запускаем службы (если еще не запущены), привязываем последовательный
порт к стеку BlueZ через UART HCI, и поднимаем локальный интерфейс:
root@h5550:~# /etc/init.d/bluethooth start
root@h5550:~# hciattach /dev/tts/1 any 921600 noflow
(eсли используете непропатченное ядро то команда будет
hciattach /dev/tts/1 any 921600)
root@h5550:~# hciconfig hci0 up
Проверяем:
root@h5550:~# hciconfig -a
hci0: Type: UART
BD Address: 08:00:17:1F:B7:BD ACL MTU: 339:4 SCO MTU: 60:9
UP RUNNING PSCAN ISCAN
RX bytes:133 acl:0 sco:0 events:16 errors:0 TX bytes:589 acl:0 sco:0
commands:16 errors:0
Features: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
Packet type: DM1 DH1 HV1
Link policy: RSWITCH HOLD SNIFF PARK
Link mode: SLAVE ACCEPT
Name: 'No name'
Class: 0x120112
Service Classes: Networking
Device Class: Computer, Handheld
HCI Ver: 1.1 (0x1) HCI Rev: 0x180 LMP Ver: 1.1 (0x1) LMP Subver: 0x180
Manufacturer: RTX Telecom A/S (21)
Как видим с локальным интерфейсом у нас все в порядке. Включаем
bluetooth в телефоне и сканируем:
root@h5550:/etc/bluetooth# hcitool scan
Scanning ...
00:0F:DE:FD:07:26 T630
Ну чтоже телефон определился. Чтобы удачно установить связь через
bluetooth, устройства должны знать пин коды друг друга. Пин код
наладонника указываем в /etc/bluetooth/pin (например цифры 123) На
наладоннике, программа стека Bluez /usr/bin/bluepin, прописанная в
конфигурационном файле /etc/bluetooth/hcid.conf , должна спрашивать
пин телефона у пользователя интерактивно... но у меня это не работает.
Поэтому лично я обойдусь без интерактивности. Демон hcid ожидает от
этой программы ответ в формате PIN:pin, где pin - пин телефона. В моем
случае Поэтому я делаю так:
root@h5550:/usr/bin# mv bluepin bluepin.old (если bluepin вообще есть)
root@h5550:/usr/bin# vi bluepin
(содержимое файла bluepin)
#!/bin/sh
echo PIN:T630
root@h5550:/usr/bin# chmod a+x /usr/bin/bluepin
После этого нужно перестартовать bluetooth. Думаю не надо напоминать
что на телефоне нужно сменить пин код используемый по умолчанию.
Проверяем соеднинение на канальном уровне:
root@h5550:/etc/bluetooth# l2ping 00:0F:DE:FD:07:26
Ping: 00:0F:DE:FD:07:26 from 08:00:17:1F:B7:BD (data size 44) ...
0 bytes from 00:0F:DE:FD:07:26 id 0 time 20.67ms
0 bytes from 00:0F:DE:FD:07:26 id 1 time 22.64ms
0 bytes from 00:0F:DE:FD:07:26 id 2 time 41.42ms
3 sent, 3 received, 0% loss
А теперь просканируем на предмет предоставляемых сервисов:
root@h5550:/etc/bluetooth# sdptool browse 00:0F:DE:FD:07:26
Inquiring ...
Browsing 00:0F:DE:FD:07:26 ...
Service Name: Dial-up Networking
Service RecHandle: 0x10000
Service Class ID List:
"Dialup Networking" (0x1103)
"Generic Networking" (0x1201)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 1
Profile Descriptor List:
"Dialup Networking" (0x1103)
Version: 0x0100
Service Name: Voice gateway
Service RecHandle: 0x10002
Service Class ID List:
"Headset Audio Gateway" (0x1112)
"Generic Audio" (0x1203)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 3
Profile Descriptor List:
"Headset" (0x1108)
Version: 0x0100
Service Name: Serial Port 1
Service RecHandle: 0x10003
Service Class ID List:
"Serial Port" (0x1101)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 4
Service Name: Serial Port 2
Service RecHandle: 0x10004
Service Class ID List:
"Serial Port" (0x1101)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 5
Service Name: OBEX Object Push
Service RecHandle: 0x10005
Service Class ID List:
"OBEX Object Push" (0x1105)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 10
"OBEX" (0x0008)
Profile Descriptor List:
"OBEX Object Push" (0x1105)
Version: 0x0100
Service Name: IrMC Synchronization
Service RecHandle: 0x10006
Service Class ID List:
"IrMC Sync" (0x1104)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 11
"OBEX" (0x0008)
Profile Descriptor List:
"IrMC Sync" (0x1104)
Version: 0x0100
Service Name: HF Voice gateway
Service RecHandle: 0x10007
Service Class ID List:
"Handfree Audio Gateway" (0x111f)
"Generic Audio" (0x1203)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 6
Profile Descriptor List:
"Handsfree" (0x111e)
Version: 0x0100
Service Name: OBEX Basic Imaging
Service RecHandle: 0x1000b
Service Class ID List:
"Imaging Responder" (0x111b)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 15
"OBEX" (0x0008)
Profile Descriptor List:
"Imaging" (0x111a)
Version: 0x0100
Service Name: OBEX File Transfer
Service RecHandle: 0x1000f
Service Class ID List:
"OBEX File Transfer" (0x1106)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 7
"OBEX" (0x0008)
Profile Descriptor List:
"OBEX File Transfer" (0x1106)
Version: 0x0100
Как видим у нас на телефоне есть порты Serial Port 1, Serial Port 2,
DialUp и также мы можем использовать протокол OBEX для передачи файлов
и картинок (см. ниже). Теперь создаем локальные устройства /dev/rfcomm
(по умолчанию в Familiar их нет):
root@h5550:/etc/bluetooth# mknod /dev/rfcomm0 c 216 0
и привязываем его к bluetooth устройству с адресом 00:0F:DE:FD:07:26
по 4-му каналу.
root@h5550:/etc/bluetooth# rfcomm bind 0 00:0F:DE:FD:07:26 4
Посмотреть привязано ли уже что-нибудь можно командой
root@h5550:/etc/bluetooth# rfcomm show
rfcomm0: 00:0F:DE:FD:07:26 channel 4 clean
И чтобы выполнять привязку автоматически при запуске сервисов
bluetooth'а прописываем в /etc/bluetooth/rfcomm.conf следующее:
rfcomm0 {
# Automatically bind the device at startup
bind yes;
# Bluetooth address of the device
device 00:0F:DE:FD:07:26;
# RFCOMM channel for the connection
channel 4;
# Description of the connection
comment "Connection to phone";
}
Вот собственно связь между наладонником и телефоном через эмуляцию
последовательного порта установлена.
Можно проверить соединение исользую любую терминальную программу на
кпк, к примеру ставим minicom. В конфиге /etc/minirc.dfl настраиваем
на работу с портом `pr port /dev/rfcomm0' и запускаем. Теперь мы можем
набрать любую AT команду, например вызвать какой-либо номер:
ATDT+89051234567
Теперь приступаем к настройку ppp соединения через GPRS (при этом у
вас уже должен быть подключен пакет трех услуг)
Создаем файл /etc/ppp/peers/gprs следующего содержания:
/dev/rfcomm0 57600
connect '/usr/sbin/chat -v -f /etc/ppp/chat/gprs'
noauth
defaultroute
lock
debug
novjccomp
nopcomp
noaccomp
nodeflate
novj
nobsdcomp
default-asyncmap
ipcp-accept-local
ipcp-accept-remote
usepeerdns
user beeline
nodetach
В файл /etc/ppp/chat/gprs записываем команды /usr/sbin/chat:
TIMEOUT 5
ECHO ON
ABORT '\nBUSY\r'
ABORT '\nERROR\r'
ABORT '\nNO ANSWER\r'
ABORT '\nNO CARRIER\r'
ABORT '\nNO DIALTONE\r'
ABORT '\nRINGING\r\n\r\nRINGING\r'
'' \rAT
TIMEOUT 12
OK ATH
OK ATE1
OK AT+CGDCONT=1,"IP","internet.beeline.ru"
OK ATD*99***1#
CONNECT
И в файл /etc/ppp/pap-secrets добавляем строку:
beeline ppp0 "beeline"
и все, подключамся к интернету с помощью команды:
root@h5550:~# pppd call gprs
Тут нужно отметить что для окружения Opie на момент написания статьи
только Opera поддерживает русские страницы(см "Opie на iPAQ H5550")
Через bluetooth можно не только выходить в инет но и скачивать скажем
фотографии с телефона на наладонник. Для этого я использую протокол
OBEX и пакет openobexftp с сайта Debian'а. Я не использовал этот пакет
из Familiar feed потому что на момент написания статьи родной пакет
компилировался без поддержки Bluetotha (без опций -B -b, может щас уже
исправлено). Качаем:
libgcc1_3.4.3-13_arm.deb
libopenobex-1.0-0_1.0.0-rel-3_arm.deb
obexftp_0.10.7-3_arm.deb
инставлируем используя ipkg install * и далее делаем что нужно.
Например, получить листинг корневой директории:
root@h5550:~# obexftp -b 00:0F:DE:FD:07:26 -B 7 -l /
листинг директории Pictures:
root@h5550:~# obexftp -b 00:0F:DE:FD:07:26 -B 7 -l /Pictures.
перейти в директорию Pictures и считать (get) файл pic.jpg
root@h5550:~# obexftp -b00:0F:DE:FD:07:26 -B 7 -c Pictures -g pic.jpg
загрузить (put) файл в телефон:
root@h5550:~# obexftp -b 00:0F:DE:FD:07:26 -B 7 -c Java -p Board.jar
Ну и так далее. Обратим только внимание, что мы используем устройство
с mac адресом 00:0F:DE:FD:07:26 и канал 7 (OBEX File Transfer)
Но и это еще не все. Что делать если мы хотим скажем послать смс-ку с
наладонника или сделать бэкап адресной книги телефона. В этом нам
поможет программка gammu, которая поддерживает различные телефоны. И
не пугайтесь если Вашего телефона нет в списке на сайте gammu (моего
тоже нет). Главное чтобы он был AT совместимым. Пишем конфиг
/home/root/.gammurc:
[gammu]
port = /dev/rfcomm0
model = at
connection = at115200
#synchronizetime = yes
logfile = gammulog
logformat = textall
#use_locking = yes
#gammuloc = locfile
#startinfo = yes
#gammucoding = utf8
Устанавливаем связь между последовательным устройством и
bluetooth-сервисом телефона на канале 4 (последовательный порт 1) Если
конечно он еще не привязан (в противном случае будет ошибка что порт
уже занят)
root@h5550:~# rfcomm bind 0 00:0F:DE:FD:07:26 4
и например, идентифицировать модель:
root@h5550:~# gammu --identify
Manufacturer : Ericsson
Model : unknown (AAB-1021012-BV)
Firmware : R7A011
IMEI : xxxxxxxxxxxxxxx
SIM IMSI : xxxxxxxxxxxxxxx
Посмотреть дату на телефоне:
root@h5550:~# gammu --getdatetime
Phone time is Thu Sep 8 14:34:22 2005
Получить адресную книгу телефона:
root@h5550:~# gammu --getallmemory ME
..............
Memory DC, Location 16
General number : "89061234567"
Name : "Chuvak"
.....................
Отправить смс-ку:
root@h5550:~# echo 'test_from_ipaq' | gammu --sendsms TEXT +79032219734
И что самое интересное можно сделать экспорт адресной книги телефона в
формат vcard 2.1 (про формат vcard читать здесь http://www.imc.org/pdi/):
root@h5550:~# gammu --backup backup.vcf
Далее можно импортировать этот файл в приложение Contacts окружения
Opie. Можно также экспортировать контакты из Contacts в файл формата
vcard и потом используя gammu в телефон. Таким образом у нас
получилось синхронизировать адресную книгу телефона с контактами на
наладоннике. К сожелению приложение Contacts окружения GPE пока не
поддерживает импорт и экспорт, поэтому в этом окружении этот фокус не
пройдет.
Полезные ссылки:
- О протоколе Bluetooth (немного теории).
http://www.palowireless.com/infotooth/tutorial
- Сайт Gammu.
http://www.mwiacek.com/gsm/soft/gammu.html
- Сайт OpenOBEX.
http://openobex.sourceforge.net/
- HpIpaqH5400.
http://www.handhelds.org/moin/moin.cgi/
- Патч Catalin Drula для Bluethooth.
http://www-lsr.imag.fr/Les.Personnes/Catalin.Drula/bluetooth.htmlКомпиляция ядра iPAQ H5550
Начну с того, что возможно два пути сборки ядра. Это вручную и
используя OpenEmbedded Достоинством OE является возможность
собирать готовый дистрибутив, скажем Opie, со своим собственным,
пропатченным ядром. Но так как на данный момент мне это не нужно то я
расскажу как компилить ядро вручную. Нам нужна машина с линуксом (я
использовал SuSe 9.3) c установленным gcc и bison (у меня
соответственго версии 3.3.5 и 1.8). Создаем папку проекта, например
/usr/src/familiar:
host:/usr/src # mkdir familiar
Скачиваем prebuild toolchain (используемый для кроскомпиляции)
Распаковываем:
host:/usr/src/familiar # tar -C / -jxf arm-linux-gcc-3.3.2.tar.bz2
(распакуется в каталог /usr/local/arm...)
Делаем доступными комынды arm-linux...:
host:/usr/src/familiar # export PATH=/usr/local/arm/3.3.2/bin:$PATH
Получаем последнюю версию исходников ядра в каталог linux-2.4.19-rmk6-pxa1-hh:
host:/usr/src/familiar # cvs -d :pserver:anoncvs@cvs.handhelds.org:/cvs checkout -d
linux-2.4.19-rmk6-pxa1-hh linux/kernel
Если нам нужна другая версия исходников ядра, то смотрим версии
которые есть по Makefile'у и качаем соответственно версию которая
нужна:
host:/usr/src/familiar # cvs -d :pserver:anoncvs@cvs.handhelds.org:/cvs rlog linux/kernel/Makefile
host:/usr/src/familiar # cvs -d :pserver:anoncvs@cvs.handhelds.org:/cvs checkout -r \
K2-4-19-rmk6-pxa1-hh37 -d linux-2.4.19-rmk6-pxa1-hh37 linux/kernel
Устанавливаем headers на наши исходники:
host:/usr/src/familiar # cd /usr/include
host:/usr/include # ln -s /familiar/linux-2.4.19-rmk6-pxa1-hh/include/asm-arm asm
host:/usr/include # ln -s /familiar/linux-2.4.19-rmk6-pxa1-hh/include/linux linux
Теперь устанавливаем нужные нам патчи. Для возможности использовать
одновременно bluetooth и WiFi скачиваем [3]патч в каталог наших
исходников и применяем:
host:/usr/src/familiar/linux-2.4.19-rmk6-pxa1-hh # pathc -p1 < patch-hwuart
для исправления работы joypad изменяем файл
../arch/arm/match-pxa/h5400_asic_io.c в соответствиии с патчем.
Проблема с потерей bluetooth'ом пакетов и автоматическое определение
включения/выключения наушников включены в ядре hh40 и выше. Если вы
собираете более старое ядро, то можете скачать патч для
автоматического определения включения/выключения наушников в каталог
исходников и применить с помощью команды patch -p2 < patch-... Вот
собственно и все. Все готово к компиляции ядра для нашего iPAQ:
host:/usr/include # cd /usr/src/familiar/linux-2.4.19-rmk6-pxa1-hh
host:/usr/src/familiar/linux-2.4.19-rmk6-pxa1-hh #
host:usr/src/familiar/linux-2.4.19-rmk6-pxa1-hh # make ipaqpxa_config
...
host:usr/src/familiar/linux-2.4.19-rmk6-pxa1-hh # make oldconfig
при выполнении make oldconfig нужно установить параметр CONFIG_PXA_HWUART=y
host:usr/src/familiar/linux-2.4.19-rmk6-pxa1-hh # make dep
...
host:usr/src/familiar/linux-2.4.19-rmk6-pxa1-hh # make zImage
...
host:usr/src/familiar/linux-2.4.19-rmk6-pxa1-hh # make modules
Если все нормально то устанавливаем модули (пока локально):
host:usr/src/familiar/linux-2.4.19-rmk6-pxa1-hh # make INSTALL_MOD_PATH= modules_install
Где PATH директория в которую должны быть установлены модули, в
соответствии с версией ядра в файле Makefile. Например
/lib/modules/2.4.19-rmk6-pxa1-hh40. Не обращайте внимания на ошибки
связанные с depmod, зависимости мы создадим позже. В ядре драйвера для
wireless нет, нужно компилить его отдельно. В настоящее время
используется драйвер at76c503a Получаем исходники:
host:usr/src/familiar/ # cvs -d:pserver:anonymous@cvs.berlios.de:/cvsroot/at76c503a login
(при запросе пароля нажимаем Enter)
host:usr/src/familiar/ # cvs -d:pserver:anonymous@cvs.berlios.de:/cvsroot/at76c503a co at76c503a
редактируем Makefile указывая на наши исходники ядра, и наш кросскомпилятор:
host:usr/src/familiar/ # cd at76c503a
host:usr/src/familiar/at76c503a # vi Makefile
----редактируем следующие строки---------
СС=arm-linux-gcc
KERNEL_VERSION=(версия собираемого ядра для наладонника, например так
KERNEL_VERSION=2.4.19-rmk6-pxa1-hh40)
KERNEL_SR=(директория исходников ядра, например
/lib/modules/2.4.19-rmk6-pxa1-hh40/build)
------------------------------------------
host:usr/src/familiar/at76c503a # make
host:usr/src/familiar/at76c503a # make install
Модуль драйвера должен скомпилироваться в директорию
/lib/modules/2.4.19-rmk6-pxa1-hh40/kernel/drivers/net/wireless/at76c503
Теперь приступим к установке нового ядра на наш наладонник. Архивируем
каталог с установленными модулями:
host:/lib/modules/ # tar -czf 2.4.19-rmk6-pxa1-hh40.tar.gz 2.4.19-rmk6-pxa1-hh40/
Переименовываем и архивируем само ядро zImage которое находится в
каталоге ../arch/arm/boot/:
host:/usr/src/familiar/linux-2.4.19-rmk6-pxa1-hh/arch/arm/boot # cp zImage zImage-new
host:/usr/src/familiar/linux-2.4.19-rmk6-pxa1-hh/arch/arm/boot # tar -czf zImage-new.tar.gz zImage-new
Получившиеся два файла копируем на наш наладонник любым удобным
способом и разархивируем в нужные директории(модули в /lib/modules/,
ядро в /boot):
root@h5550:/media/card# tar -C /libmodules -xzf 2.4.19-rmk6-pxa1-hh40.tar.gz
root@h5550:/media/card# tar -C /boot -xzf zImage-new.tar.gz
root@h5550:/media/card# cd /lib/modules/2.4.19-rmk6-pxa1-hh40
root@h5550:/lib/modules/2.4.19-rmk6-pxa1-hh40# rm build
root@h5550:/lib/modules/2.4.19-rmk6-pxa1-hh40# cd ../
root@h5550:/lib/modules# chown -R root.root 2.4.19-rmk6-pxa1-hh40/
Устанавливаем линк на новое ядро, старое пока сохраняем на случай
восстановления(и запомните как оно называется, пригодится):
root@h5550:/boot/# rm zImage
root@h5550:/boot/# ln -s /zImage-new zImage
Далее перегружаемся и смотрим что у нас получилось. Если возникли
проблемы и хотите вернуться к старому ядру, то перегружаем наладонник
с удерживаемым джойпадом и попадаем в загрузчик:
boot>
Указываем старое ядро которое хотим загрузить:
boot> set kernel_filename /boot/old_kernel
boot> boot
Copyright (C) 2003-2005 Marat Urmanov <my-ipaq@narod.ru.>