gemlog/public/uk/porting-koreader-on-pocketbook-602.gmi
2025-11-13 15:16:59 +02:00

163 lines
No EOL
8.9 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Портування KoReader на PocketBook 602
На момент допису, через допотопність девайсу PocketBook 602, офіційної підтримки його в KoReader немає, тому я вирішив на скору для себе з цим розібратись.
Сам додаток KoReader мені потрібен виключно через наявність в ньому плагіна для читання ресурсів Gemini / Gemtext:
=> gemini://gemini.thegonz.net/gemini.koplugin/
Нижче описаний персональний досвід, щоб нічого не забути, бо портування не є завершеним!
## Особливості встановлення
Встановлюючи KoReader, я спочатку скопіював його на зовнішню картку USB, як це описано в інструкції:
> You need to obtain a recent PocketBook package from the releases page. Then unzip the archive on your computer. There will be two directories in the unzipped directory, namely applications and system.
>
> Copy and merge both the applications and system directories into your PocketBook's USB root directory
=> https://github.com/koreader/koreader/wiki/Installation-on-PocketBook-devices#installation
Але у такому разі, додаток не запускатиметься, при чому crash.log не створюватиметься. Після аналізу вихідних файлів, знайшов "мовчазного винуватця" в рядку:
``` /applications/koreader.app
# we're always starting from our working directory
cd ${KOREADER_DIR} || exit
```
Тобто шлях був не коректним, і додаток вилітав ще до ініціації самого crash.log нижче по коду. Виявивши причину, я додав у цей же файл рандомні шляхи, отримані з ШІ, один з яких (ext2) спрацював. Після ініціалізації crash.log я таки вирішив перевірити як влаштована файлова система на цьому девайсі, додавши після рядків ініціації crash.log команду:
``` bash
df -h "$@" >> crash.log 2>&1
```
Запустивши додаток і перепідключившись через шнурок, вивід crash.log був наступним:
``` crash.log
Filesystem Size Used Available Use% Mounted on
/dev/root 26.5M 17.5M 7.6M 70% /
none 128.0M 168.0K 127.8M 0% /var
tmpfs 124.4M 0 124.4M 0% /var/dev/shm
/dev/mmcblk0p3 117.2M 97.6M 19.7M 83% /ebrmain
/dev/mmcblk0p2 602.3M 409.4M 192.9M 68% /mnt/secure
/dev/loop0 117.5M 117.5M 0 100% /ebrmain/cramfs
/dev/mmcblk0p1 1019.0M 338.4M 680.7M 33% /mnt/ext1
/dev/mmcblk1 1.9G 81.3M 1.8G 4% /mnt/ext2
```
Як бачимо, девайс ext1 - це саме внутрішня пам'ять, якщо поритись в сорсах, то фігурує саме цей шлях. Але якщо поставити KoReader на ext1, то його просто не буде видно в меню додатків. Згодом, щоб не патчити все на світі у сорсах KoReader, я скористався таким лайф-хаком:
* ставимо (через шнурок) на ext1 згідно інструкції
* копіюємо /mnt/ext1/system/bin/koreader.app до /mnt/ext2/system/bin/koreader.app
Таким чином, все буде розпізнаватись, додаток буде стартувати, але все-одно вилітатиме по причинам нижче (хоча вже писатиме подробиці в crash.log)
## Біндінг
На момент допису, підтримки цього девайсу в офіціному біндінгу немає. Біндінг потрібен для опису специфіки конкретного пристрою для роботи програми, це свого роду такий собі високорівневий "драйвер", без якого KoReader просто не запуститься з помилкою в crash.log накшталт "девайс не підтримується".
Все це є в документації, але підсумовуючи створив:
=> https://github.com/oooo-ps/koreader/tree/pocketbook-602 окрему гілку
=> https://github.com/oooo-ps/koreader/commit/083d71a6065b209cf1f39229ed2c792fa2fedba0 патч
=> https://github.com/koreader/koreader/pull/14611 PR#14611
Щоб не ходити на GitHub, інструкція для PocketBook 602 виглядає наступним чином:
``` frontend/device/pocketbook/device.lua
# рядок ~472
-- PocketBook Pro (602)
local PocketBook602 = PocketBook:extend{
model = "PB602",
display_dpi = 167,
isTouchDevice = no,
hasFrontlight = no,
hasDPad = yes,
hasFewKeys = yes,
}
# рядок ~869
elseif codename == "602" then
return PocketBook602
```
* тут я ще трохи сумніваюся стосовно display_dpi (можливо має бути 166)
## Крос-компіляція
Запустити готові бінарники для PocketBook з асету відповідних релізів на GitHub не вийде, бо вони зкомпільовані для сучасних ARM і при такій спробі, в crash.log буде помилка:
``` crash.log
Illegal instruction
```
PocketBook має відносно стару архітектуру процесора ARMv6:
``` crash.log
# cat /proc/cpuinfo >> crash.log ARMv6
ARMv6-compatible processor rev 6 (v6l)
```
Я спочатку подумав, що самий хитрий і вирішив просто підмінити бінарники з іншого релізу:
=> https://github.com/koreader/koreader/releases/download/v2025.10/koreader-linux-armv7l-v2025.10.tar.xz
Але не все так склалося як гадалося: у цьому наборі зовсім інша структура та набори файлів. Отже довелось таки розгортати середовище для крос-компіляції. Минаючи довгу передісторію, потрібно виконати наступні кроки, попередньо ознайомившись з актуальною документацією:
=> https://github.com/koreader/koreader/blob/master/doc/Building.md Building
=> https://github.com/koreader/koreader/blob/master/doc/Building_targets.md Building targets
=> https://github.com/koreader/koreader/blob/master/doc/Porting.md Porting
### koxtoolchain
Завантажуємо середовище:
=> https://github.com/koreader/koxtoolchain/releases/tag/2025.05
Розпаковуємо в теку, де лежать бінарні файли, або створюємо симлінки. В мене деякі тимчасові бінарники лежать окремо, в $HOME/Bins - цей шлях я використовую в $PATH:
``` bash
export PATH="$PATH:$HOME/Bins/kindle/x-tools/arm-kindle-linux-gnueabi/bin:$PATH"
```
### koreader
Встановивши koxtoolchain, спочатку ставимо залежності для вашої операційної системи:
=> https://github.com/koreader/koreader/blob/master/doc/Building.md#prerequisites Prerequisites
І власне збираємо віртуальну машину:
=> https://github.com/koreader/koreader/blob/master/doc/Building.md#building-and-running-the-emulator Building and running the emulator
``` bash
git clone https://github.com/koreader/koreader.git
cd koreader && ./kodev fetch-thirdparty
```
Перед тим, як продовжити, мені порадили спробувати змінити у файлі:
``` base/Makefile.defs
CHOST?=arm-pocketbook-linux-gnueabi
POCKETBOOK=1
HAS_POCKETBOOK_TC:=$(shell command -v arm-pocketbook-linux-gnueabi-gcc 2> /dev/null)
ifdef HAS_POCKETBOOK_TC
CHOST?=arm-pocketbook-linux-gnueabi
else
CHOST?=arm-linux-gnueabi
endif
```
на
``` base/Makefile.defs
CHOST?=arm-kindle-linux-gnueabi
LEGACY=1
```
Після чого компілюємо pocketbook вже засобами хосту arm-kindle-linux-gnueabi:
``` bash
./kodev release pocketbook
```
Тут в мене виникла інша проблема, тому закінчу цей матеріал як з нею розберусь.
## Посилання
=> https://github.com/koreader/koreader/issues/14600 Тема №14600 на GitHub (дякую усім, хто долучився)