Author | Message |
---|
x-code Член клуба The eBook
Joined: 01 Dec 2009 Posts: 843
| Posted: 02.01.2011 19:03 | |
| Итак, используя Sibrary Toolchain и примеры для iRiver Story (спасибо leffnfm, ссылка в теме "Альтернативные прошивки"), удалось собрать и запустить на Qumo Libro первую программу.
Программа умеет работать с экранным frame buffer'ом и только. Нет реакций на кнопки, даже обновление экрана приходится делать вручную. Это первый маленький шаг, но очень важный: теперь есть отличный канал обратной связи с книгой. Можно просканировать все ее содержимое изнутри, вытащить любые файлы на флэшку, дизассемблировать их, возможно даже - подменить какие-то файлы на свои
Файлы текущей директории (ей оказалась /userdata/home/root):
_________________ ♘ |
| | | Sergey_H Искушенный участник форума
Joined: 22 Feb 2010 Posts: 60
| Posted: 02.01.2011 19:18 | |
| Ну что же - поздравляю. Инструкция по написанию софта ожидается? Что-то типа how-to - я бы тоже поковырялся... _________________ PB 301+, Qumo Libro, Kindle Touch |
| | | x-code Член клуба The eBook
Joined: 01 Dec 2009 Posts: 843
| Posted: 02.01.2011 21:02 | |
| Качаете 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
|
(после этого нужно выйти из Проводника и снова войти, чтобы список файлов обновился) _________________ ♘ |
| | | leffnfm Активный участник форума
Joined: 01 Aug 2010 Posts: 229
| Posted: 04.01.2011 16:04 | |
| Что-ж, поздравляю! Это большой прогресс! Исходники написанной проги не выложите?) Хорошо бы всю userdata на карточку перетащить... |
| | | x-code Член клуба The eBook
Joined: 01 Dec 2009 Posts: 843
| Posted: 04.01.2011 23:04 | |
| Исходники выложу, сейчас они на линуксовом разделе. В 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 - предварительно созданная папка на карточке)
Сколько там всего интересного!.. _________________ ♘ |
| | | leffnfm Активный участник форума
Joined: 01 Aug 2010 Posts: 229
| Posted: 04.01.2011 23:52 | |
| Интересненько... Так значит шелл-скрипты теперь запускать возможно?... А вам не трудно будет некоторые переменные отсюда (goo.gl/sRq4F) вывести в файл? Думаю это во многом поможет делу, в переменных много ценной инфы. К вопросу о синхронизации - было бы очень полезно. В общем вы молодец, так держать!))
Добавлено спустя 1 минуту 8 секунд:
Прогу для копирывания home на карточку в студию!!!!) |
| | | x-code Член клуба The eBook
Joined: 01 Dec 2009 Posts: 843
| Posted: 05.01.2011 00:00 | |
| Прога для копирования home на карточку уже в студии, в моем предыдущем посте Переменные... как-то так?
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: |
_________________ ♘ |
| | | Oaks Зрелый участник форума
Joined: 08 Oct 2010 Posts: 28
| Posted: 05.01.2011 19:16 | |
| Жаль что Линукс 64-битный. Не все смогут полакомится. |
| | | leffnfm Активный участник форума
Joined: 01 Aug 2010 Posts: 229
| Posted: 06.01.2011 18:02 | |
| Хорошо бы портировать на либру Instead или QSP... Гемора много конечно, но сколько счастья...) |
| | | monah_tuk Недавний участник форума
Joined: 09 Jan 2011 Posts: 16
Location: Vladivostok
| Posted: 09.01.2011 08:41 | |
| Абсолютные пути тоже работают, абсолютный путь к флешке будет: /userdata/media/mmcblk0p1
Сразу, у меня Digma e600, так что, если есть какие отличия - не пинайте
посмотреть установленные переменные окружения: команда 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!" запустил для арма ))
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 или "безопасное извлечение устройств" в винде, хотя точно не уверен ), далее, опять таки ОБЯЗАТЕЛЬНО перезагружаем книжку (в ином случае отхватывал разные эпические фейлы временами).
Идем в "Внутренняя память" -> Programms -> helloworld и выбираем для запуска run.sh. Далее жмём Обновление экрана, пока не понял как там делать это автоматом.
Вот, два раза нажимаем Ok на джойстике и программа завершается в helloworld-out.txt после первого нажатия, будет продублировано приветствие.
Кто силён в дизассемблере для армов, дизасемблируйте программу calendar из /usr/bin/calendar, будет наглядным пособием для дальнейшего раскуривания )
Posted after 2 minutes 24 seconds:
и да, любителям и обладателям книжек с клавиатурой, можно попробовать запилить туда xterm |
| | | leffnfm Активный участник форума
Joined: 01 Aug 2010 Posts: 229
| Posted: 09.01.2011 12:22 | |
| Щастье!) |
| | | monah_tuk Недавний участник форума
Joined: 09 Jan 2011 Posts: 16
Location: Vladivostok
| Posted: 09.01.2011 15:13 | |
| Так, первые шаги по обновлению экрана: тут один фиг непосредственно дергается /dev/fb0 со специфическими ioctl, краем глаза подглядел: ioctl( %d, EPAPER_UPDATEFB_LOCAL ); ioctl( %d, EPAPER_UPDATEFB_FULL );
значение макросов я пока не знаю, это текстовые строчки, что в аппликухе radio встретились, видать для себя, в отладочных целях использовали, забыли вытереть. В общем, сижу втыкаю в вывод IDA Pro, но озарения нет, поэтому реверсировщиков умных просьба в студию
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 - полное обновление экрана (через затемнение), медленно и жруще
2. определены функции:
Code: | void epaperUpdateFull(void); // <-- полное обновление экрана void epaperUpdateLocal(void); // <-- частичное обновление экрана void epaperUpdatePart(void); // <-- а вот это протестируйте и доложите
|
использовать достаточно просто: подключаем в вашей программе заголовочный файл digma_hw.h и к исходникам добавляем digma_hw.c, компиляем, радуемся.
Нюанс: у меня создалось впечатление, что прорисовкой каждого компонента нужно рулить вручную, посему, не забываем цеплять обработчик эвента "expose-event" у созданных Gtk виджетов, и прописывать там вызов обновления экрана.
PS в архиве так же подправленная версия helloworld, демонстрирующая базовую работу с обновлением экрана. |
| | | x-code Член клуба The eBook
Joined: 01 Dec 2009 Posts: 843
| Posted: 09.01.2011 20:51 | |
| monah_tuk С абсолютными путями у меня файл не создавался функциями fopen() и open(), а по относительному пути создавался и открылся Про обновление экрана: получается, что gtk своими средствами не позволяет это делать, и нужно пользоваться ioctl? А с клавиатурой то-же самое? в примере для iRiver Story для чтения клавиш используется /dev/input.
Дизассемблером я кстати смотрел программу chess (игрушка гобанг), китайцы всю отладочную информацию оставили. Эх, был бы hexrays для ARM'а, можно было бы декомпильнуть полностью А так действительно мнемоники непривычные.
Ну и наконец, интересно было бы узнать, как устроены приложения для других платформ, например для Азбуки или Покетбука. Как там обновляется экран? (в покете вроде какая-то закрытая библиотека inkview, которую все просят открыть, а в азбуке как?) _________________ ♘
Last edited by x-code on 10.01.2011 01:54; edited 1 time in total |
| | | leffnfm Активный участник форума
Joined: 01 Aug 2010 Posts: 229
| Posted: 09.01.2011 22:44 | |
| Сейчас пришла в голову интересная идея). Программа должна обновлять экран и выводить счетчик. Так мы поймем сколько реально страниц можно прочесть))). А вообще, не страдайте фигней - скорее пишите шахматы!!!
Кстати у x-code 666 сообщений. Стремно). |
| | | monah_tuk Недавний участник форума
Joined: 09 Jan 2011 Posts: 16
Location: Vladivostok
| Posted: 10.01.2011 00:53 | |
| Ну с абсолютным путём у меня открылся /dev/fb0. chess тоже погляжу, но вот сравнил свою с дебагом программу, и ихнюю, IDA примерно одинаково показывает.
Про ввод не смотрел, но судя по тому, что на Ок оно реагирует из коробки, а биндинги на Menu, Back, NextPage и PrevPage есть в sibrary.h, то клавиатура нормально отработается средствами Gtk/Gdk.
Просто ручное обновление экрана E-Ink считаю более менее оправданным (особенно при наличии "железной" кнопки обновления) и логичным - обновлять только когда это действительно жизненно необходимо.
Ну и да, библиотечка libsibrary.a по большей части враппер для всякого рода посылок D-Bus и cat /proc/meminfo нужно будет вытянуть мигание светодиодом |
| | | lunohod Член клуба The eBook
Joined: 10 Jan 2007 Posts: 4283
Location: Stuttgart, Germany
| Posted: 13.01.2011 13:42 | |
| 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 |
| | | x-code Член клуба The eBook
Joined: 01 Dec 2009 Posts: 843
| Posted: 13.01.2011 18:33 | |
| lunohod Очень хорошо что вы зашли в эту тему Очень нужны ваши рекомендации как человека, занимающегося программингом под ридеры! 1. Какие программы, не слишком сложные по объему исходников, посоветуете для начала портировать с Азбуки? Программы уровня CoolReader ИМХО слишком большие, сложно будет разобраться не имея опыта... Что-нибудь попроще, игрушку типа крестики-нолики... или какой-нибудь файловый менеджер, чтобы показывал всю внутреннюю флэшку, а не только sd-карту... или календарь какой... Просто подскажите, что там в git репозитории есть. 2. как посоветуете лучше организовать процесс разработки, отладки? 3. где чисто теоретически может быть функция подключения к книге по ssh (ведь в Азбуке это вроде есть?) Поскольку сейчас есть доступ к внутренней памяти, хотелось бы научиться подключаться к книге через удаленный терминальный доступ. _________________ ♘ |
| | | leffnfm Активный участник форума
Joined: 01 Aug 2010 Posts: 229
| Posted: 13.01.2011 23:09 | |
| Шахматы, начало! |
| | | monah_tuk Недавний участник форума
Joined: 09 Jan 2011 Posts: 16
Location: Vladivostok
| Posted: 14.01.2011 00:46 | |
| Имхо, для начала бы запилить FBReader последний, а то возможности организовывать коллекции есть, даже поля заполняются, а интерфейса нет.
А насчет сетевухи, нужно запустить ifconfig ifconfig eth0 и т.д. и посмотреть вывод, мне кажется, её тут просто нет. |
| | | x-code Член клуба The eBook
Joined: 01 Dec 2009 Posts: 843
| Posted: 14.01.2011 01:16 | |
| Quote: | А насчет сетевухи, нужно запустить ifconfig ifconfig eth0 и т.д. и посмотреть вывод, мне кажется, её тут просто нет. |
Интересно как это технически сделано в Азбуке. Поскольку я с Азбукой дела не имел, то не знаю, но вероятно, там есть режим использования usb как сетевого соединения, и есть режим как mass storage. Есть еще вариант, что usb может работать не как сетевуха а как виртуальный COM порт...
Просто я не знаю на что смотреть... Какой сервис к примеру может отвечать за работу с книгой по usb как mass storage? Что будет, если его остановить программно? Какие сервисы могут отвечать за работу с usb как с виртуальным com-портом? ifconfig и ifconfig eth0 действительно ничего не выдают. _________________ ♘ |
| | |
| 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
|
© Libroom, 2021
|