OpenInkpot: освобождая электронные книги
Гусаров Михаил, dottedmag@dottedmag.net, Евгений Хоружий, jekhor@gmail.com, Минск, Беларусь
LVEE 2008
В докладе представлен OpenInkpot — проект разработки свободного дистрибутива, ориентированного на устройства для чтения книг на базе электронных чернил. В докладе рассказывается о предпосылках к созданию проекта, о достигнутых результатах и об устройстве дистрибутива.
e-ink
В 2007 году на массовом рынке появились специализированные устройства для чтения с экранами на основе электронной бумаги (e-ink).
Электронная бумага — тип экрана, принципиально отличающийся от LCD/OLED-экранов, массово применяющихся в небольших устройствах. Отличия состоят в следующем:
- небольшое количество оттенков серого цвета (конфигурация, давно не интересная разработчикам графических библиотек);
- очень большое время обновления экрана (порядка 0,5 секунды);
- мультистабильность экрана (возможность удержания изображения в выключенном состоянии).
Особенности экранов e-ink приводят к весьма специфичным требованиям по управлению питанием. В совокупности с небольшим количеством принципиально различных устройств на рынке, а также неудовлетворительным качеством прошивок, поставляемых разработчиками устройств, это привело к созданию отдельного проекта, фокусирующегося на разработке дистрибутива Linux для использования в e-ink устройствах чтения книг.
оборудование и ядро Linux
Основная разработка ведётся для HanLin/lBook eReader V3. Устройство имеет микропроцессор S3C2410 (SoC, система-на-кристалле) на ядре ARM. К нему подключаются контроллер экрана, память, слот SD/MMC, USB разъём, контроллер батареи, MP3 декодер, светодиод и кнопки.
Такой же процессор используется в проекте OpenMoko, поэтому часть драйверов (в частности, SD/MMC) были взяты оттуда. Написаны драйвера клавиатуры, контроллера дисплея, контроллера зарядки батареи.
Особенностью контроллера экрана является специфический параллельный интерфейс с достаточно низким быстродействием.
В драйвере контроллера дисплея используется механизм отложенного ввода-вывода (deffered IO), что позволяет объединять несколько последовательных изменений изображения за короткий промежуток времени в одну транзакцию. Данный механизм появился в ядре Linux 2.6.22.
Ядро поддерживает корректное засыпание-просыпание процессора, однако это занимает некоторое время и пока не удалось избавиться от проблем с работой драйвера e-ink контроллера после просыпания.
дистрибутив
Разработка основана на embedded-дистрибутиве SLIND. Изначально работа велась на базе OpenEmbedded, но неудовлетворённость системой сборки — долгие циклы полной пересборки и плохой контроль за сборочной средой — заставили взять другой, хоть и менее известный дистрибутив.
Технологическая база полностью унаследована от SLIND: используется Debian Etch в качестве базовой сборочной среды и кросс-компиляция с применением некоторых трюков для выполнения bootstrap на хост-системе. Исходный код пакетов хранится в git, а собранные пакеты — в APT-репозиториях.
Целевая система представляет собой deb-based дистрибутив, усечённый для embedded-целей, но сохраняющий высокую степень совместимости с Debian по формату source- и binary-пакетов и по инструментарию разработки.
На текущий момент работает kdrive (X server для встраиваемых устройств), а также «читалка» книг FBReader. Идёт работа по портированию библиотек EFL на libxcb.
В рамках Google Summer of Code идёт работа над портированием OpenInkpot на устройства Sony PRS-505 и Bookeen Cybook Gen3.
источники
1. Проект SLIND http://slind.org/
2. Проект OpenEmbedded http://openembedded.org/