Kobo用アプリ作成 (その1)

 前のエントリで kobo 用の開発環境を整えたので、簡単な kobo 用スタンドアロンアプリを作ってみます。

スタンドアロンアプリの他にも、プラグイン形式でアプリを作ることもできますが、nickel の仕様が公開されておらず、解析しながら実装することになるため、ここでは省きます。

スタンドアロンアプリのスタイルとして以下の2つがあります。

  1. nickel のQWSサーバを利用したスタンドアロンアプリ
  2. nickel なしの完全スタンドアロンアプリ

nickel とは kobo 標準のアプリのことです。

1. nickel の QWS サーバを利用

nickel プロセスの裏側でアプリを立ち上げる形式です。

Qt/Embedded は 1 つのプロセスを I/O 用サーバ(QWSサーバ)として起動させ、他のプロセスはQWSサーバに接続することで、複数のプロセスが Window を作成したりイベントを処理したりすることができるようになっています。

nickel の QWS サーバを利用することで、画面描画処理を nickel に任せることができるようになり、アプリの実装量が少なくなります。

本来なら画面タッチのイベントも QWS サーバがハンドリングしてクライアントに渡すはずなのですが、Kobo では mouse イベントが呼ばれないので、自前で /dev/input/event? を処理する必要があります。

また、後ろで nickel が動いているため、使用可能なメモリ量には限りがあります。

 

2. nickel なしの完全スタンドアロンアプリ

nickel を終了させ、自分自身が QWS サーバになる形式です。

I/O を行なってくれるサーバがいないので、画面描画、タッチやキー入力のイベントハンドリングも自前で行う必要があります。

具体的には、QScreen クラス, QWSMouseHandler クラスを実装する必要があります。

綺麗な作り方としては、QWS サーバに必要な機能は別の .so に分離しておくのですが、nickel ではこのへんの機能は全部 libnickel.so に詰め込んであるため、nickel の実装を流用することができません。

ただ、悪いことばかりではなく、自分で画面描画を制御できるため 2 値モードなども実装すれば使用可能です。

また、nickel がいないため、メモリも広く使うことができます。

 

■ Kobo 用スタンドアロンアプリの注意点

どちらのタイプにも共通の注意点を書いておきます。

まず、日本語フォントが使えません。

有名なモリサワフォントが入っているため、その流用防止のためと思われますが、フォントに暗号化がかかっており普通の Qt ライブラリ経由ではフォントが使用できません。そのため独自にフォントを入れる必要があります。

CFW を前提とするなら、KBMincho (お世話になってます!)が入っているので使用するとよいでしょう。

一部の英文フォントは暗号化されていないようです。

 

■ QWS利用スタンドアロンのサンプル

さて、能書きはこれくらいにしておいて、実際にサンプルアプリを試してみましょう。

Kobo 上でコマンドを実行する必要があるため telnet の環境が必要です。

また、日本語フォントを使うため、CFW 0.95 が入っている必要があります。

前回の環境構築で、作業ディレクトリ内に env.sh というファイルが作られていると思います。これを source します。

$ cd ~/kobo
$ source env.sh
または
$ . env.sh

次にサンプルソース(kobo-standalone-example.tar.gz)をダウンロードし、展開します。

$ wget http://petit-noise.net/system/files/kobo-standalone-example.tar.gz
$ tar xf kobo-standalone-example.tar.gz
$ cd kobo-standalone-example/ 

前回インストールした qt の qmake を実行し、make します。

$ /usr/local/Trolltech/QtEmbedded-4.8.0-arm/bin/qmake
$ make

standalone というファイルができていると思います。

これを kobo へコピーします。PC につないだ時に見える KOBOeReder ドライブのルートディレクトリへコピーしてください。

PC との接続を解除し、telnet で kobo にログインして、以下のコマンドを実行して環境変数を設定します。

# export QWS_MOUSE_PROTO="tslib_nocal:/dev/input/event1"
# export QWS_KEYBOARD=imx508kbd:/dev/input/event0
# export QWS_DISPLAY=Transformed:imx508:Rot90
# export NICKEL_HOME=/mnt/onboard/.kobo
# export LD_LIBRARY_PATH=/usr/local/Kobo:/mnt/onboard/app/
# export LANG=en_US.UTF-8

そして転送した standalone アプリを実行します。

# /mnt/onboard/standalone

以下のような画面が表示されれば成功です。

サンプルソースが非常に汚いですがご勘弁を・・・。


Kobo用開発環境の構築

某所で要望があったのと備忘録も兼ねて、Kobo の開発環境の構築方法をまとめました。

簡単にビルドできるように半自動ビルドスクリプトを用意したので Ubuntu の環境さえ用意すれば用意に構築できるようになっています。

Kobo offcial(?) の Kobo-Reader リポジトリをベースに修正を行なっています。修正したリポジトリは github: t-bucchi/Kobo-Reader で公開しています。

■ 必要なもの

Ubuntu 12.10 をインストールした環境が必要です。32bit, 64bit で確認しています。

おそらく、比較的最近の Ubuntu なら他のバージョンでも問題ないとは思います。

Ubuntu 以外のディストリビューションの場合はビルドスクリプト内で deb パッケージのチェックを行なっているので、その部分をコメントアウトして自前でパッケージを入れてください。

■ 構築手順

Ubuntu がインストールされた PC で作業します。

1. 作業ディレクトリの作成

適当な場所に作業ディレクトリを作成します。ここでは ~/kobo とします。作成後、ディレクトリを移動します。

Qt ライブラリのインストール先を除いて、このディレクトリ以下にだけアクセスします。

$ mkdir ~/kobo
$ cd ~/kobo

2. ビルドスクリプトのダウンロード

以下の URL からビルドスクリプト build.sh をダウンロードし、実行権限を与えます。

$ wget http://petit-noise.net/wp-content/uploads/build.sh
$ chmod +x build.sh

3. Qt インストールディレクトリの作成

Qt は /usr/local/Trolltech 以下にインストールします。

オリジナルの Kobo-Reader のビルド手順では作業ディレクトリ内にインストールするようになっているのですが、スタンドアロンアプリをビルドした時にパスの違いで問題が出たので、Kobo 本体と同じ位置にインストールすることにしました。

# Qt の環境構築に詳しい人で、開発PC上のパスとターゲットのパスが違っても問題ない構築方法をご存じの方は教えてください・・。

root 権限がないと /usr/local/Trolltech ディレクトリは作れないので、事前に作っておきます。

権限は適宜設定してください。ここでは全ユーザに書き込み権限を与えています。

一人で Ubuntu PC を使っている分にはこれで問題ないと思います。

$ sudo mkdir /usr/local/Trolltech
$ sudo chmod a+w /usr/local/Trolltech

補足:

build.sh では安心して使えるように sudo を一切使っていません。

root 権限が必要な操作は手動で行う必要があります。

4. 必要なパッケージのインストール

ビルドに必要なパッケージをインストールします。

$ sudo apt-get install git gettext autoconf libglib2.0-dev libtool build-essential libdbus-1-dev

5. ビルド

./build.sh を実行します。

$ ./build.sh

自動的に toolchain や Kobo-Reader リポジトリをダウンロードし、ビルドを行います。

ダウンロードとビルドには結構な長い時間がかかりますのでご注意ください。PCの性能にもよりますが、数時間というオーダーで時間がかかります。

 

ビルドが成功すると Finished!!! と表示されます。

ビルド時のログが build.log というファイルに保存されますので、エラーが出た場合などには参考にしてください。

 


Kobo glo 用メンテナンスファーム

昨日の kobo Touch 用ファームに引き続き、kobo glo 用も作ってみました。

HWCONFIG と kernel を kobo glo 用に置き換えただけで動いてしまいました。

→ダウンロードはこちら

glo でもメンテナンスファーム起動
glo でもメンテナンスファーム起動

kobo Touch ではホームボタン+電源スイッチの組み合わせでしたが、kobo glo ではライトボタン長押し+電源スイッチの長スライドで起動させることができます。

こちらもヒトバシラーな人大募集です。

バックアップ/リストアだけでなく、Kobo ハッキングのツールとしても使えると思います。これで少しでも独自ファームなどの開発が進めないいなと思ってます。

あと、kobo glo は内蔵 SD として 4GB が載っていますが、実際は 2GB しか使われていません。メンテナンスファームでは fdisk とresize2fs も入れてあります。・・・何が言いたいかわかった人は試してみては? (私はまだ試してませんが・・)

 

次は plugin や独自アプリにでも手を伸ばしてみますかね。

このメンテナンスファームは、2ch の kobo hacking スレの方々の有益な情報を元に作られています。先人たちの苦労と努力に感謝と敬意を表します。ありがとうございました。プロバイダが規制中で書き込めなかったので、こんなところからですいません。