The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Обзор операционной системы Linux на iPAQ H5550 (pda linux pocketpc wifi game bluetooth)


<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>
Ключевые слова: 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.html http://my-ipaq.narod.ru/opie.html http://my-ipaq.narod.ru/games_opie.html http://my-ipaq.narod.ru/wifi.html http://my-ipaq.narod.ru/bluetooth.html http://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.familiar http://dir.gmane.org/gmane.comp.handhelds.linux.familiar.devel http://dir.gmane.org/gmane.comp.handhelds.linux.h5400 http://dir.gmane.org/gmane.comp.handhelds.opie http://dir.gmane.org/gmane.comp.handhelds.opie.devel http://dir.gmane.org/gmane.comp.handhelds.gpe - а также по Wiki страничкам: http://www.handhelds.org/moin/moin.cgi/FrontPage
Opie на 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.>

<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру