Первая программа для Qumo!
Goto page 1, 2, 3, 4, 5, 6, 7, 8, 9  Next
 
View unanswered posts
Post new topic   Reply to topic    The-eBook Forum Index -> Qumo
 
Author Message

x-code
Член клуба The eBook

Член клуба The eBook



Joined: 01 Dec 2009
Posts: 843



PostPosted: 02.01.2011 19:03     Quote

Итак, используя Sibrary Toolchain и примеры для iRiver Story (спасибо leffnfm, ссылка в теме "Альтернативные прошивки"), удалось собрать и запустить на Qumo Libro первую программу.

Программа умеет работать с экранным frame buffer'ом и только. Нет реакций на кнопки, даже обновление экрана приходится делать вручную. Это первый маленький шаг, но очень важный: теперь есть отличный канал обратной связи с книгой. Можно просканировать все ее содержимое изнутри, вытащить любые файлы на флэшку, дизассемблировать их, возможно даже - подменить какие-то файлы на своиSmile

Файлы текущей директории (ей оказалась /userdata/home/root):

_________________
 
View user's profile Send private message ^

Sergey_H
Искушенный участник форума

Искушенный участник форума



Joined: 22 Feb 2010
Posts: 60



PostPosted: 02.01.2011 19:18     Quote

Ну что же - поздравляю.
Инструкция по написанию софта ожидается? Smile Что-то типа how-to - я бы тоже поковырялся...
_________________
PB 301+, Qumo Libro, Kindle Touch
 
View user's profile Send private message ^

x-code
Член клуба The eBook

Член клуба The eBook



Joined: 01 Dec 2009
Posts: 843



PostPosted: 02.01.2011 21:02     Quote

Качаете sibrary toolchain и 64-битный дистрибутив Линукса. Ставите все это. Выполняете инструкции китайцев, прилагаемые к тулчайну (нужно распаковать содержимое архива тулчайна в /usr/local/ereader и выполнить команду конфигурирования окружения toolchain_setup (source /usr/local/ereader/eabi-glibc/toolchain-setup).
После этого можно использовать кросскомпилятор gcc (arm-ereader-gnueabi-gcc)

p.s. Удалось программно записать файл на флэшку, значит, можно вытаскивать из прошивки что угодно.
Долго возился, т.к. почему-то заработало только с относительными путями.
Флэшка доступна из запускаемой программы по такому пути
./../../../media/mmcblk0p1

shell-скрипты тоже запускаются, просто при запуске учитывайте этот путь. Например, для запуска программы s22, находящейся в корне флэшки, скрипт будет выглядеть так (я давал расширение файла .sh):
Code:

#!/bin/sh
./../../../media/mmcblk0p1/s22


Вывод содержимого текущей директории в файл в корне флэшки:
Code:

#!/bin/sh
ls > ./../../../media/mmcblk0p1/myhomedir.txt

(после этого нужно выйти из Проводника и снова войти, чтобы список файлов обновился)
_________________
 
View user's profile Send private message ^

leffnfm
Активный участник форума

Активный участник форума



Joined: 01 Aug 2010
Posts: 229



PostPosted: 04.01.2011 16:04     Quote

Что-ж, поздравляю! Это большой прогресс!
Исходники написанной проги не выложите?)
Хорошо бы всю userdata на карточку перетащить...
 
View user's profile Send private message ^

x-code
Член клуба The eBook

Член клуба The eBook



Joined: 01 Dec 2009
Posts: 843



PostPosted: 04.01.2011 23:04     Quote

Исходники выложу, сейчас они на линуксовом разделе. В svn репозитории ScanReflower есть папочка с исходниками виндовской отладочной версии cramfsck, там же сделаю папку с исходниками этой софтины. Практической пользы от нее скорее всего больше не будет, т.к. единственное ее назначение - вывести списки файлов и найти относительное расположение флэшки. Теперь все можно делать на shell скриптах.

А userdata вытащить элементарно просто - напишите скрипт, который копирует всю папку /userdata/home/root на флэшку. Там много чего полезного: все текущие настройки книги, история, всевозможные букмарки и закладки и т.д., в общем куча всего, что можно экспортировать на компьютер - например между перепрошивками... Еще, помнится, кому-то нужно было вытаскивать закладки из книг на компьютер. В общем, используя эти данные, можно создать полноценную систему синхронизации книги и компьютера.

Дальнейшее написание софта будет уже не тем извращенным способом, каким я воспользовался (прямая запись в dev/fb), а с использованием родных для Либры GUI библиотек - GTK, GDK, XCB.

Софт из OpenInkpot, который люди наверняка захотят портировать, написан с использованием этих же библиотек (я посмотрел для примера CoolReader), так что дело за малым - разобраться с техническими моментами сборки и отладки приложений.

Добавлено спустя 38 минут 15 секунд:

Вот прямо сейчас скопировал
Code:

#!/bin/sh
cp -a . ./../../../media/mmcblk0p1/home

(home - предварительно созданная папка на карточке)

Сколько там всего интересного!.. Laughing Laughing Laughing
_________________
 
View user's profile Send private message ^

leffnfm
Активный участник форума

Активный участник форума



Joined: 01 Aug 2010
Posts: 229



PostPosted: 04.01.2011 23:52     Quote

Интересненько... Так значит шелл-скрипты теперь запускать возможно?...
А вам не трудно будет некоторые переменные отсюда (goo.gl/sRq4F) вывести в файл? Думаю это во многом поможет делу, в переменных много ценной инфы.
К вопросу о синхронизации - было бы очень полезно.
В общем вы молодец, так держать!))

Добавлено спустя 1 минуту 8 секунд:

Прогу для копирывания home на карточку в студию!!!!)
 
View user's profile Send private message ^

x-code
Член клуба The eBook

Член клуба The eBook



Joined: 01 Dec 2009
Posts: 843



PostPosted: 05.01.2011 00:00     Quote

Прога для копирования home на карточку уже в студии, в моем предыдущем постеSmile
Переменные... как-то так?
Code:
echo $BASH > ./../../../media/mmcblk0p1/bash.txt

для $BASH ничего не вывел (видимо нет такой переменной), но например для $PATH получилось
Code:
/usr/local/lib/libfm:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr /sbin:/sbin:

_________________
 
View user's profile Send private message ^

Oaks
Зрелый участник форума

Зрелый участник форума



Joined: 08 Oct 2010
Posts: 28



PostPosted: 05.01.2011 19:16     Quote

Жаль что Линукс 64-битный. Не все смогут полакомится.
 
View user's profile Send private message ^

leffnfm
Активный участник форума

Активный участник форума



Joined: 01 Aug 2010
Posts: 229



PostPosted: 06.01.2011 18:02     Quote

Хорошо бы портировать на либру Instead или QSP...
Гемора много конечно, но сколько счастья...)
 
View user's profile Send private message ^

monah_tuk
Недавний участник форума

Недавний участник форума



Joined: 09 Jan 2011
Posts: 16


Location: Vladivostok

PostPosted: 09.01.2011 08:41     Quote

Абсолютные пути тоже работают, абсолютный путь к флешке будет:
/userdata/media/mmcblk0p1

Сразу, у меня Digma e600, так что, если есть какие отличия - не пинайте Smile

посмотреть установленные переменные окружения: команда set, вот что у меня:
http://codepad.org/TffYPtuL

тут примонтированные тома:
http://codepad.org/qitA7nfE

Тут содержимое файловой системы, содержимого /userdata нету, но оно, в заводском варианте лежит в /sibrary (в root.tar). В usr.tar содержимое /usr
http://hatred.homelinux.net/~hatred/digma/

выложил, т.к. копируется ооооочень медленно внутрянке.

Согласно списку примонтированных томов, всё, что есть в /userdata мы можем перезаписать, дописать, удалить и т.д. Как минимум вижу пользу: создавать свои ярлыки в главном меню, и, при желании, подкатегории - достаточно посмотреть, в качестве примера, как организована категория GAMES.desktop, эт будет удобно для выбстрого вызова своих приложений.

Пока правда только "Hello, world!" запустил для арма Smile))

Posted after 1 hour 2 minutes 8 seconds:

Вот тут пример "Hello World" на Gtk под Digma e600:
http://hatred.homelinux.net/~hatred/digma/apps/

исходники там же, образец Makefile тоже.

Для сборки (все действия в каталоге сборки):
source /usr/local/ereader/eabi-glibc/toolchain_setup
make

после чего на флешке создаём директорию Programms в ней helloworld и помещаем туда helloworld и run.sh
после чего ОБЯЗАТЕЛЬНО корректно отключаем флешку (umount или "безопасное извлечение устройств" в винде, хотя точно не уверен Smile), далее, опять таки ОБЯЗАТЕЛЬНО перезагружаем книжку (в ином случае отхватывал разные эпические фейлы временами).

Идем в "Внутренняя память" -> Programms -> helloworld и выбираем для запуска run.sh. Далее жмём Обновление экрана, пока не понял как там делать это автоматом.

Вот, два раза нажимаем Ok на джойстике и программа завершается в helloworld-out.txt после первого нажатия, будет продублировано приветствие.

Кто силён в дизассемблере для армов, дизасемблируйте программу calendar из /usr/bin/calendar, будет наглядным пособием для дальнейшего раскуривания )

Posted after 2 minutes 24 seconds:

и да, любителям и обладателям книжек с клавиатурой, можно попробовать запилить туда xterm Smile
 
View user's profile Send private message ^

leffnfm
Активный участник форума

Активный участник форума



Joined: 01 Aug 2010
Posts: 229



PostPosted: 09.01.2011 12:22     Quote

Щастье!)
 
View user's profile Send private message ^

monah_tuk
Недавний участник форума

Недавний участник форума



Joined: 09 Jan 2011
Posts: 16


Location: Vladivostok

PostPosted: 09.01.2011 15:13     Quote

Так, первые шаги по обновлению экрана: тут один фиг непосредственно дергается /dev/fb0 со специфическими ioctl, краем глаза подглядел:
ioctl( %d, EPAPER_UPDATEFB_LOCAL );
ioctl( %d, EPAPER_UPDATEFB_FULL );

значение макросов я пока не знаю, это текстовые строчки, что в аппликухе radio встретились, видать для себя, в отладочных целях использовали, забыли вытереть. В общем, сижу втыкаю в вывод IDA Pro, но озарения нет, поэтому реверсировщиков умных просьба в студию Smile

Posted after 2 hours 40 minutes 6 seconds:

Долбанный IDA Pro, некорректно распознаёт вызовы импортируемых функций, пишет полную кашу, думал мозг сломаю, тем паче что ассемблерные мнемоники для ARM для меня полностью не знакомы o_O

Ну да хрен с ним, всё равное теперь мы умеем обновлять экран: я таки вытащил номера ioctl'ей и оформил в виде трешки утильных функций.

В архив helloworld.tar.gz я положил два новых файла:
digma_hw.c
digma_hw.h

пока там собственно описан функционал для обновления экрана:
1. продефайнены IOCTL'и
EPAPER_UPDATE_LOCAL - частичное обновления (только измененных областей)
EPAPER_UPDATE_PART - какое-то тоже частичное обновление, но смысла не особо понял, вроде выглядит хуже чем у _LOCAL
EPAPER_UPDATE_FULL - полное обновление экрана (через затемнение), медленно и жруще Smile

2. определены функции:
Code:

void epaperUpdateFull(void);    // <-- полное обновление экрана
void epaperUpdateLocal(void);    // <-- частичное обновление экрана
void epaperUpdatePart(void);    // <-- а вот это протестируйте и доложите


использовать достаточно просто: подключаем в вашей программе заголовочный файл digma_hw.h и к исходникам добавляем digma_hw.c, компиляем, радуемся.

Нюанс: у меня создалось впечатление, что прорисовкой каждого компонента нужно рулить вручную, посему, не забываем цеплять обработчик эвента "expose-event" у созданных Gtk виджетов, и прописывать там вызов обновления экрана.

PS в архиве так же подправленная версия helloworld, демонстрирующая базовую работу с обновлением экрана.
 
View user's profile Send private message ^

x-code
Член клуба The eBook

Член клуба The eBook



Joined: 01 Dec 2009
Posts: 843



PostPosted: 09.01.2011 20:51     Quote

monah_tuk
С абсолютными путями у меня файл не создавался функциями fopen() и open(), а по относительному пути создавался и открылсяSmile
Про обновление экрана: получается, что gtk своими средствами не позволяет это делать, и нужно пользоваться ioctl?
А с клавиатурой то-же самое? в примере для iRiver Story для чтения клавиш используется /dev/input.

Дизассемблером я кстати смотрел программу chess (игрушка гобанг), китайцы всю отладочную информацию оставили. Эх, был бы hexrays для ARM'а, можно было бы декомпильнуть полностьюSmile А так действительно мнемоники непривычные.

Ну и наконец, интересно было бы узнать, как устроены приложения для других платформ, например для Азбуки или Покетбука. Как там обновляется экран? (в покете вроде какая-то закрытая библиотека inkview, которую все просят открыть, а в азбуке как?)
_________________


Last edited by x-code on 10.01.2011 01:54; edited 1 time in total
 
View user's profile Send private message ^

leffnfm
Активный участник форума

Активный участник форума



Joined: 01 Aug 2010
Posts: 229



PostPosted: 09.01.2011 22:44     Quote

Сейчас пришла в голову интересная идея).
Программа должна обновлять экран и выводить счетчик. Так мы поймем сколько реально страниц можно прочесть))).
А вообще, не страдайте фигней - скорее пишите шахматы!!!

Кстати у x-code 666 сообщений. Стремно).
 
View user's profile Send private message ^

monah_tuk
Недавний участник форума

Недавний участник форума



Joined: 09 Jan 2011
Posts: 16


Location: Vladivostok

PostPosted: 10.01.2011 00:53     Quote

Ну с абсолютным путём у меня открылся /dev/fb0. chess тоже погляжу, но вот сравнил свою с дебагом программу, и ихнюю, IDA примерно одинаково показывает.

Про ввод не смотрел, но судя по тому, что на Ок оно реагирует из коробки, а биндинги на Menu, Back, NextPage и PrevPage есть в sibrary.h, то клавиатура нормально отработается средствами Gtk/Gdk.

Просто ручное обновление экрана E-Ink считаю более менее оправданным (особенно при наличии "железной" кнопки обновления) и логичным - обновлять только когда это действительно жизненно необходимо.

Ну и да, библиотечка libsibrary.a по большей части враппер для всякого рода посылок D-Bus и cat /proc/meminfo Smile нужно будет вытянуть мигание светодиодом
 
View user's profile Send private message ^

lunohod
Член клуба The eBook

Член клуба The eBook



Joined: 10 Jan 2007
Posts: 4283


Location: Stuttgart, Germany

PostPosted: 13.01.2011 13:42     Quote

x-code wrote:

Ну и наконец, интересно было бы узнать, как устроены приложения для других платформ, например для Азбуки или Покетбука. Как там обновляется экран? (в покете вроде какая-то закрытая библиотека inkview, которую все просят открыть, а в азбуке как?)


В азбуке обычный fb без хитрожопых ioctl'ов. Поверх fb работают иксы. Обновление экрана инициируется автоматически в драйвере фреймбуфера через определённый промежуток времени после начала записи в /dev/fbX. При этом драйвер активирует полное или частичное обновление в зависимости от обновляемой площади.

Преимущество этого метода заключается в том, что иксы и приложения не надо патчить кривохаками для управления экраном.
_________________
V3, n516, PRS-505, iLiad, eSlick, Samsung E60, K3, K4NT, Onyx M90, PB 912, Kobo Mini
 
View user's profile Send private message ^

x-code
Член клуба The eBook

Член клуба The eBook



Joined: 01 Dec 2009
Posts: 843



PostPosted: 13.01.2011 18:33     Quote

lunohod
Очень хорошо что вы зашли в эту темуSmile Очень нужны ваши рекомендации как человека, занимающегося программингом под ридеры!
1. Какие программы, не слишком сложные по объему исходников, посоветуете для начала портировать с Азбуки? Программы уровня CoolReader ИМХО слишком большие, сложно будет разобраться не имея опыта...
Что-нибудь попроще, игрушку типа крестики-нолики... или какой-нибудь файловый менеджер, чтобы показывал всю внутреннюю флэшку, а не только sd-карту... или календарь какой... Просто подскажите, что там в git репозитории есть.
2. как посоветуете лучше организовать процесс разработки, отладки?
3. где чисто теоретически может быть функция подключения к книге по ssh (ведь в Азбуке это вроде есть?) Поскольку сейчас есть доступ к внутренней памяти, хотелось бы научиться подключаться к книге через удаленный терминальный доступ.
_________________
 
View user's profile Send private message ^

leffnfm
Активный участник форума

Активный участник форума



Joined: 01 Aug 2010
Posts: 229



PostPosted: 13.01.2011 23:09     Quote

Шахматы, начало! Very Happy
 
View user's profile Send private message ^

monah_tuk
Недавний участник форума

Недавний участник форума



Joined: 09 Jan 2011
Posts: 16


Location: Vladivostok

PostPosted: 14.01.2011 00:46     Quote

Имхо, для начала бы запилить FBReader последний, а то возможности организовывать коллекции есть, даже поля заполняются, а интерфейса нет.

А насчет сетевухи, нужно запустить
ifconfig
ifconfig eth0
и т.д. и посмотреть вывод, мне кажется, её тут просто нет.
 
View user's profile Send private message ^

x-code
Член клуба The eBook

Член клуба The eBook



Joined: 01 Dec 2009
Posts: 843



PostPosted: 14.01.2011 01:16     Quote

Quote:
А насчет сетевухи, нужно запустить
ifconfig
ifconfig eth0
и т.д. и посмотреть вывод, мне кажется, её тут просто нет.

Интересно как это технически сделано в Азбуке. Поскольку я с Азбукой дела не имел, то не знаю, но вероятно, там есть режим использования usb как сетевого соединения, и есть режим как mass storage.
Есть еще вариант, что usb может работать не как сетевуха а как виртуальный COM порт...

Просто я не знаю на что смотреть... Какой сервис к примеру может отвечать за работу с книгой по usb как mass storage? Что будет, если его остановить программно? Какие сервисы могут отвечать за работу с usb как с виртуальным com-портом?
ifconfig и ifconfig eth0 действительно ничего не выдают.
_________________
 
View user's profile Send private message ^
Display posts from previous:   
Post new topic   Reply to topic    The-eBook Forum Index -> Qumo All times are GMT + 4 Hours
Goto page 1, 2, 3, 4, 5, 6, 7, 8, 9  Next
Page 1 of 9

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum

© The-eBook, 1999-2014. © Design by Prohorenkov
Syndicating News | Powered by phpBB © 2001, 2005 phpBB Group.
Хостинг предоставлен компанией DatForce     Яндекс.Метрика