Содержание |
Цель этого документа - описать простые пути решения основных задач использования КПК, если на нем стоит ОС Linux. Я буду пополнять его по мере возможности, находжения ошибок, решения или не решения новых задач.
Хороший вопрос - а зачем использовать Linux на КПК? Для себя я отвечаю на него так: КПК для меня давно вышел за рамки "читалки книг и PIM'a", коим был черно-белый Palm Zire с 2мя мегабайтами памяти, мне нужна еще и нормальная работа с Сетью. Не только HTTP, а возможность использовать ssh, nmap, ping и whois. Так же, мне нужна полноценная многозадачность, да и от читалки книг и PIM'a я не хочу отказываться. А WinCE несколько поднадоел своей ограниченностью. Конечно, работает еще не все, но, мне кажется, исправление достдных оплошностей, описаных тут дело месяцев или недель. Я буду пополнять это документ тем, что мне еще удалось сделать и, также жду комментариев и советов.
Что у меня есть
Чего хочу от КПК
Тут перечислены задачи, большую часть из них я уже победил, которые должен решать мой наладонник.
Все началось почти год назад, когда я купил свой iPaq, который сменил Tungsten E. Покупал я его с надеждой поставить туда Linux, так как будучи на стенде Familiar на LinuxTAG 2004 я видел много iPaq'ов с Linux'ами, а вот на Palm его было установить без шансов. Правда, в тогдашнем состоянии порта Familiar на 2200, пользоваться им было совcем не возможно: ядро, конечно, работало, а вот BT, тачпад, и, самое главное, управление питанием - нет. Но я подписался на рассылку и следил за новостями, пробовал билды и, наконец, понял,что с выходом v0.83 (на момент поста он уже почти совсем релиз, кажется, индекс RC2) дела с портом обстоят просто замечательно! И 9 марта 2006 года решил полностью перейти на Linux.
Первый мой опыт был неудачен, я прочитал http://www.handhelds.org/moin/moin.cgi/HpIpaqH2200SDBoot , скачал OPIE образ с http://familiar.handhelds.org/snapshots/v0.8.3/RC2/unsorted/ и не смог его загрузить. В рассылке мне объяснили, что с теми образами имеются проблемы, поэтому правильно использовать вот этот образ, а потом обновить его через feed.
Правильная (то есть та, которая сработала у меня, я считаю, что у вас на компьютере Linux и буду приводить только значимые команды) процедура такая:
1. Скачиваем указанный выше образ 2. Распаковывыем его куда-то на локальный диск (/home/ipaq) 3. Переходим в папку /home/ipaq/boot и копируем его на какую-нибудь CF или SD/MMC 4. Создаем startup.txt следующего содержания, означающего, что загружаться мы будем с 1го раздела SD (а для CF root=/dev/hda1):
set KERNEL zImage set MTYPE 341 set CMDLINE "root=/dev/mmcblk0p1 noinitrd cachepolicy=writeback" bootlinux
5. Кладем туда же haret.exe и wrap-haret.exe 6. Вставляем карточку в iPaq и переносим все это на iPaq File Store. Оттуда они не будут исчезать при перезагрузках. 7. Далее, размонтируем карточку (у меня /dev/sde, у вас не знаю, посмотрите fdisk -l), отформатируем ее на ext2, смонтируем, зальем образ, отмонтируем:
#umount /dev/sde1 #fdisk /dev/sde
На вопросы: n (новый раздел), p (primary), 1(первый), w (выйти и записать).
#mkfs.ext2 /dev/sde1 #mount /dev/sde1 /media/sde1 #cd /meda/sde1 #tar jxpcvf #umount /dev/sde1
8. Вставляем карточку, запускаем whrap-haret.exe и минут через несколько нам будет предложено ввести пароль рута и информацию о пользователе. В первом приближении, установка завершена.
Здесь необходимо сделать два очень важных замечания:
Первое, что нас должно интересовать, это память. Считаем, что ROM для нас (пока) недоступен. В WinCE память делиться на 2 части, одна под storage, одна под RAM, а карты памяти используются, так сказать, сбоку. В Linux все как в большом компьютере: у меня 64МБ RAM и 1ГБ "дискового" пространства на SD. 64 МБ - это не много и если мы выйдем за их предела, то ничего хорошего из этого не выйдет. Я предлагаю решать вопрос при помощи использования swap файла, и здесь опять есть важные замечания:
Создадим 32МБ из консоли iPaq:
#touch /swap #dd if=/dev/zero of=/swap bs=1M count=32 #mkswap /swap #vi /etc/fstab /swap none swap sw 0 0 #swapon -a
Теперь можно спокойнее работать с тяжелыми приложениями и контролировать его работу через /proc/meminfo.
Далее, с чем мне захотелось работать, была клавиатура. Vi не очень удобен с виртуальной, которая отнимает пол консоли, поэтому, я купил Compaq Foldable Keyboard. Работой с такими клавиатурами занимается демон kbdd, конфигурационный файл которого /etc/kbdd.conf. Мне нужно было просто раскомментировать строчки:
port: /dev/tts/0 type: foldable
Но перезапуск демона ничего не дал. Порывшись в Google, я нашел, что по умолчанию порт /dev/tts/0 используется как консоль и задается это последней строчкой /etc/inittab. Закомментируем ее:
#S:2345:respawn: /sbin/getty 115200 tts/0 vt100
После перезагрузки все, как говорится, работает.
В настоящее время управление питанием полностью поддерживается, однако, в примеденной мной ссылке на образ, отсуствует модуль battery.ko, поэтому не доступен регистр состояния батарее. Управление
обеспечивает демон APM apmd, именно его вызов (apmd -suspend) производится при нажатии кнопки Power. По какой-то причине, экран не очищается при входе в sleep и изображение видно еще 2-3 секунды, но это нормально. Часы во время "сна" продолжают идти. Раньше зарядка батареи под Linux была проблематична, так как ток контроллируется программно и пока не появился драйвер, батарейка заряжалась до бесконечности и портилась.
В настоящее время не реализована поддержка смена частоты в зависимости от загрузки процессора (хотя она есть в ядре), но это будет исправлено в ближайшее время.
Следующая по важности задача - работа с сетью. На iPaq работает SSH, грех не пользоваться нормальной консолью и scp. Нам понадобится крэдл или USB-кабель. В качестве документации по этому вопросу нужно использовать http://www.handhelds.org/moin/moin.cgi/UsbNet, однако, там пропущен очень важный шаг: чтобы хостовый компьютер распознал iPaq как сетевую карту usb0, перед одключением необходимо загрузить модуль g_ether на стороне iPaq. А вот далее все становиться довольно просто:
* ipaq # modprobe g_ether * host # modprobe cdc_subset * host # modprobe usbnet * host # ifconfig usb0 192.168.0.200 * ipaq # ifconfig usb0 192.168.0.202
Теперь дадим iPaq'у прямой доступ в сеть
* host # echo `1' > /proc/sys/net/ipv4/ip_forward * host # iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.202/32 -j MASQUERADE * ipaq # route add default gw 192.168.0.200 usb0
Конечно, на хосте надо корректно завести настройки интерфейса usb0, подгрузку модулей и настройку межсетевого эктана, чтобы в дальнейшем обходиться только ifup usb0. На iPaq интерфейс определяется в /etc/network/interfaces:
iface usb0 inet static address 192.168.0.202 netmask 255.255.255.0 network 192.168.0.0 gateway 192.168.0.0
(todo: маршрутизация тоже где-то есть. а вот где?)
По опыту общения с WinCE, задача выхода в интернет с КПК через Bluetooth на большом компьютере казалась мне довольно трудной, причем как раз со стороны КПК, так как такие простые настройки, как IP и маску для разных вариантов соединения Microsoft умудрились запихать в десяток малопонятных менюшечек. В Linux'e все оказалось крайне просто. Считаем, что у вас достаточно современный дистрибутив и просто воткнутый в USB Bluetooth dongle плднимает все нужные модули, а так же команда /etc/init.d/bluetooth start срабатывает без ошибок, а если нажать на иконку BT на iPaq, то большой компьютер виден (запомним его адрес!).
Все, что нужно знать, описано в этом документе. Итак, надо выполнить:
modprobe bnep на обоих хостах. pand -listen -role GN на большом компьютере. pand -connect host_bluetooth_addres на iPaq. ifconfig bnep0 10.0.0.1 на большом компьютере. ifconfig bnep0 10.0.0.1 на iPaq.
при помощи ping проверяем, что все работает именно так, как было задумано.
Для управления пакетами в Familiar есть довольно неплохой менеджер ipkg, который поддерживает зависимости и репозитории. Им очень просто пользоваться, во многом он похож на apt-get.
Для того, чтобы заработал русский интерфейс, необходимо:
Для ввода русского текста с экрана необходима русская раскладка клавиатуры. Самая лучшая из встреченных мной вот эта:
iPaq Russian keyboard http://whitenoise.ssrlab.com/pda/xkbd/xkbd-ru-en-123_0.1.1.tar.gz
Как организовать многоязычный ввод с внешней клавиатуры, я пока не понял. Есть еще одна проблема: gpe-soundbite перехватывал а,п и р как хоткеи, и еще что-то перехватывает ч. Как это победить - надо еще выяснить.
Приложения доступны через Feed и устанавливаются командой вида:
ipkg install package_name
Одно из самых интересных свойств порта Linux то, что многие desktop приложение портированы. Я запускал Firefox, evince, Abiword, но пользоваться ими не советую, так как они не ориентированы на мобильное рзрешение экрана. Поэтому, придется озадачиться подбором хорошо портированных и заточеных приложений:
В первую очередь всем, кто помогал мне в рассылке H2200-port.