Полноценная Linux-система на твоем КПК

Linux на карманном компьютере – зачем это нужно? Действительно, зачем, если с каждым КПК идет ОС, к которой нет никаких серьезных претензий и для которой разработано огромное количество софта? Ответ кроется в функциональности. Microsoft умудрилась низвести такое великолепное устройство, как наладонник, до электронного органайзера с мультимедиа-функциями! Притом с крайне неудачным интерфейсом. После установки Linux ты получишь полноценную машину, на которую при желании можно установить любой машинно-независимый пакет из огромного репозитория GNU/Linux, где даже самый взыскательный пользователь найдет себе необходимую программу.

Всегда есть выбор

После установки Linux на КПК ты можешь использовать ядро стандартное или свое, заюзать понравившуюся графическую оболочку или дописать любую из существующих. О выборе софта я уже и не говорю (к слову, встроенная в Windows Mobile программа Excel по всем параметрам проигрывает прекрасно работающему Gnumeric, а, например, чем Firefox лучше IE, и говорить не надо). Широчайший простор для творчества, работы и исследований! Ты волен изменять все что угодно, ведь это Linux!

Работа с сетью, как всегда, на высоте. Более того, КПК можно превратить в любой сервер, какой пожелаешь, и он будет работать. К тому же присутствуют и приятные дополнительные бонусы, например звуковые карты, которые в Windows функционировали исключительно в полудуплексном режиме, а в Linux работают честно, на полную мощность. А в некоторых моделях HP iPAQ есть возможность вывести внешний USB-коннектор, чтобы подключить к КПК мышку, клавиатуру, принтер, кардридер и flash-карту, ведь поддержка USB-host'а есть только в Linux! Подробнее об этом читай во врезке.

GUI

На текущий момент для КПК существуют два динамично развивающиеся графических пользовательских интерфейса: GPE (использует X Windows System и GTK в связке с widget toolkit) и OPIE (одна из ветвей окружения Qtopia фирмы Trolltech). У каждой из этих GUI имеются как плюсы, так и минусы. Однако ситуация напоминает конкуренцию KDE и GNOME на больших компьютерах – фанатики ведут священные войны, а пользователи работают в той среде, которая им больше приглянулась. Я все же рекомендую GPE – для этой разработки существует большее количество готового софта.

Совместимость

Увы, пока не для всех КПК есть собранные дистрибутивы. Больше всего повезло, конечно, владельцам наладонников от HP, ведь именно для них был создан один из самых всесторонне протестированных и поддерживаемых дистрибутивов – Familiar Linux. Однако владельцам других моделей отчаиваться рано – на сегодняшний день Familiar поддерживает достаточно большое количество моделей, кроме того, это не единственный дистрибутив - есть еще Angstrom, Maemo... А, как показывает практика, портирование ядра для конкретной модели – это не такая невыполнимая задача, как кажется на первый взгляд.

Установка

Для установки дистрибутива Familiar на КПК, прежде всего, необходимо иметь:

   1. обычный комп с любым современным дистрибутивом Linux (установка с Windows-систем также возможна, но осуществляется сложнее);
   2. flash-карта CD/CF объемом от 128 Мб;
   3. RS232 или USB.

Кабель лучше иметь RS232, так как с его помощью можно отслеживать загрузку ядра в режиме реального времени, даже если экран КПК не работает. К тому же не потребуется никаких дополнительных программ, установку можно будет провести с любой платформы. Инсталляция посредством USB-кабеля возможна только с Linux-ПК, имеющего пропатченное ядро (usbnet).

Первым делом необходимо сохранить всю информацию с карточки и памяти КПК где-нибудь в надежном месте и полностью зарядить аккумулятор. Далее предполагаем, что у нас есть дистрибутив, работающий именно с нашей моделью КПК, RS232-кабель, Linux-десктоп, КПК с CD flash-картой.

Вариант 1: загрузка без перепрошивки BootLoader'а

Для загрузки без перепрошивки BootLoader'а нам понадобится haret – программа для загрузки ядра из окружения Windows. Последовательность действий будет такова:

   1. Разбиваем карточку на два раздела: один – FAT, другой – ext2.
   2. Создаем папку на FAT-разделе, в которой будет установлен Linux, допустим /lin/.
   3. Ищем в дистрибутиве ядро (название начинается с zImage, переименовываем в kernel), копируем kernel в /lin/.
   4. Создаем в /lin/ обычный текстовый документ с именем startup.txt следующего содержания:

Настройка загрузки ядра

set KERNEL kernel

set MTYPE 341

set CMDLINE "root=/dev/mmcblk0p1 noinitrd cachepolicy=writeback console=ttyS0,115200n8 console=tty0"

bootlinux

Для карточек CF запись «root=/dev/mmcblk0p1» следует поменять на «root=/dev/hda1».

   5. Копируем haret в /lin/.
   6. Копируем rootfs на раздел с ext2.
   7. Запускаем wrap-haret.exe и ждем загрузки.

Вариант 2: полноценная установка

Для реализации этого варианта нам нужна программа установки загрузчика BootBlaster и непосредственно сам загрузчик *.bin. Все эти файлы мы можем найти в дистрибутиве. Сначала поставим загрузчик: для этого запускаем BootBlaster, выполняем сохранение Windows и старого загрузчика («Flash -> Save Bootldr.gz» и «Flash -> Save Wince.gz»), теперь перепрошиваем загрузчик («Flash -> Program»), после этого обязательно проверяем корректность установки («Flash -> Verify»). В случае некорректной прошивки повторяем процедуру еще раз, если и это не помогает, восстанавливаем стандартный загрузчик.

Теперь приступаем к установке системы. Подключив КПК к компьютеру (через COM-порт), мы получим полноценный Linux-терминал, приконнектиться к которому можно при помощи любой терминальной программы. Параметры подключения: 115200; 8N1; flow control – отключено; hardware handshaking – отключено.

После подключения получаем приглашение от системы, вводим команду «load root», далее, используя протокол Y-modem, посылаем на КПК файл с расширением *.jffs2, извлеченный из дистрибутива. Это довольно длительная операция. Когда же мы снова увидим системное приглашение, введем команду «boot». Все, система установлена!

Пересборка ядра и приложений

Процедура портирования ядра на разные модели КПК может существенно варьироваться, поэтому приведу лишь общие рекомендации. Если ни твой КПК, ни его ближайшие по архитектуре родственники не имеют поддержки со стороны дистрибутивов, то необходимо разобрать его (гарантия после такой процедуры, естественно, идет лесом), считать все маркировки и идентифицировать их. Тут тебе могут помочь либо интернет, либо специальные каталоги, либо знакомый из сервисного центра. Необходимо любым из доступных способов получить уникальный MACHINE ID и найти JTAG-интерфейс. Далее нужно узнать, какие из работающих на Linux КПК используют те же чипы, что и твой КПК. После этого берется ядро для такого КПК и из него вытаскивается модуль, соответствующий чипу устройства, иначе переделывается готовый модуль для его ближайших родственников.

Таким образом и собираются ядра, так как 99% КПК на рынке построены на сходной аппаратной базе. Для всей процедуры нам потребуется haret – великолепная программа для реверсного инжиниринга, точнее, ее переделанная версия, которая не сбрасывает состояния устройств, что позволяет не инициализировать их в ядре. После этого пишется (переделывается, копируется) NAND-драйвер. Все это можно проделать при помощи автоматизированной системы сборки Open Embedded, огромным плюсом которой является создание собственного дистрибутива с собственными программами и пропатченным ядром. Однако удовольствия от этого мы не получим никакого, поэтому будем делать все вручную.

Первым делом скачиваем пакет для кросс-компиляции prebuild toolchain, забираем приглянувшуюся версию ядра и устанавливаем заголовочные файлы на наши исходники (ln -s). Теперь ищем по всей паутине патчи на наше ядро, которые, как нам кажется, будут нужны, и устанавливаем их. Компилируем ядро и, если все идет нормально, ставим модули, после чего редактируем make-файл (прописываем корректные пути к компилятору и исходникам). Далее набираем команды «make» и «make install». Вуаля! Наше ядро готово! Копируем модули и ядро на КПК и загружаем. Пересборка приложений осуществляется таким же образом.

Конечно, это не приятная прогулка, но, надеюсь, решившиеся на эту непростую работу получат много удовольствия. И если твои эксперименты завершатся успешно, не сочти за труд поделиться своим опытом с менее настойчивыми туксоводами.

Софт на каждый день

Ниже описаны самые нужные приложения, готовые к установке и не требующие пересборки. Найти их можно в feed'ах на официальном сайте Familiar. Стоит отметить, что в стандартной поставке Familiar идет большое количество программ.

Незнакомого софта тут не найдешь, в основном это портированные версии «больших» программ.

    * Minimo - Firefox для КПК, поддерживает все технологии и стандарты, присущие «большому» огнелису. Субъективно, пользоваться им намного удобнее, чем IE.
    * Links - великолепный текстовый браузер.
    * Dillo - браузер, разработанный с нуля; отличная поддержка кириллицы. Жаль, что не поддерживает SSL по умолчанию, а все мои попытки сделать это вручную, увы, окончились неудачей.
    * Sylpheed - лучший из всех протестированных мной почтовых клиентов на КПК.
    * Gaim - наверняка знаком большинству читателей. КПК-версия обладает той же функциональностью.
    * GPE-PIM - хороший PIM, не уступает своим конкурентам ни в Linux, ни в Windows. Присутствует возможность синхронизации с Evolution и Outlook.
    * Fbreader - лучшая из программ для чтения книг как для КПК, так и для настольных систем. Множество функций, продуманный интерфейс.
    * Gpdf - добротная программа для чтения pdf-файлов.
    * Vi - легендарный текстовый редактор, теперь и для КПК. Однако продуктивно работать с ним можно только при наличии BT-клавиатуры (сказывается тяжелое консольное детство).
    * AbiWord - текстовый процессор, по функциональности на две головы выше, чем тот же мобильный Word. Пересобран из настольной версии.
    * Gnumeric - после общения с этой программой мобильный Excel кажется кустарной поделкой. По функциональности полностью аналогичен своему «большому» брату.
    * Nmap - один из лучших сканеров портов.
    * X-Chat - IRC-клиент. Функции стандартны, интерфейс в меру удобен.
    * Midnight Commander - удобный консольный файловый менеджер, стандарт де-факто на десктопах.

Работа с USB, подключение к компьютеру и интернету

На Linux-десктоп с USB-хабом необходимо установить два модуля ядра: собственно, сам модуль для USB-хаба и usbnet. На стороне наладонника USB-драйвер и usbnet в большинстве случаев уже установлены. Единственное, что требуется сделать, – прописать соответствующие IP-адреса. Вот как я изменил часть «iface usbf inet static» этого файла:

# vi /etc/network/interface

iface usbf inet static

// IP КПК

address xxx.xxx.xxx.xxx

netmask yyy.yyy.yyy.yyy

network xxx.xxx.ххх.0

// IP десктопа

gateway xxx.xxx.xxx.www

Для автоматического старта подключения при загрузке системы набираем:

# cd /etc/rc2.d

# ln `-s ../init.d/initd-usbnet S45usbnet.sh`

Для ручного подключения:

# /etc/init.d/initd-usbnet start

Если компьютер подключен к локальной сети с выходом в интернет, то ничего делать не придется, КПК подключится автоматически.

Заключение

Linux пришел на КПК достаточно недавно, и пока его инсталляция и работа с ним напоминает аналогичную ситуацию на обычном компьютере образца 1996 года. Установка все еще остается слишком сложной для простых юзеров, наработки больше предназначены для программистов, чем для пользователей. Однако и Linux, и КПК сейчас популярны как никогда, и, возможно, через несколько лет Linux потеснит Windows Mobile хотя бы на этом секторе рынка.

Хочешь…

…использовать ресурсы КПК на все 100%?

…иметь неограниченный простор для модернизации и экспериментов?

…располагать на КПК всеми приложениями с настольного компьютера?

…иметь действительно удобный инструмент для работы?

Контроллер USB-хост в iPAQ 5450/5550/5555

Josha Alex, один из разработчиков Familiar, обнаружил, что в HP iPAQ 5450/5550/5555 встроен контроллер USB-хост, к которому подключен WiFi, однако HP не сделала внешнего коннектора. Относительно других моделей ничего не известно, но, скорее всего, USB-хост может присутствовать и в них - уж очень производители не любят отходить от работающих решений. В среде Windows Mobile этот контроллер задействовать нельзя, однако в Linux проблема решается установкой модуля kernel-module-usb-storage.

Имеют место 4 провода: D+, D-, Gnd и +5V. D+ и D- подключаются к коннекторам USB, Gnd - к плате, +5V - к питанию КПК или внешнему источнику.
При помощи этого USB-host'a можно подключить к КПК все что угодно: мышку, клавиатуру, принтер, кардридер и flash-карту.

На прилагаемом к журналу диске ты найдешь все необходимые конфигурационные файлы и скрипты для подключения КПК к интернету через мобильный телефон.
INFO

На рынке есть и КПК с уже предустановленным Linux'ом - это Nokia 770 и многие модели от Sharp.
WWW

    * opie.handhelds.org - сайт проекта Opie.
    * tuxmobil.org - все, что связано с переносом Linux'а на мобильные устройства.
    * wwwhandhelds.org – крупнейший сайт, посвященный открытому программному обеспечению для КПК.
    * wwwhandhelds.org/moin/moin.cgi/GPEProject - сайт проекта GPE.
    * wwwhandhelds.org/moin/moin.cgi/FamiliarDistribution - сайт проекта Familiar.
    * wwwhandhelds.org/moin/moin.cgi/OpenEmbedded - сайт системы автосборки OpenEmbedded.