Kindle Paperwhite で動くプログラムを書いてみた話
2018年追記
本記事は 2014年12月当時の事情に基づく試みの記録として残しているものです。すでに内容に実効性はなく、むしろ現時点においては一連の手順が何らかの事故を誘発する可能性もあります。本記事を参照した結果何らかの損害が発生したとしても筆者ならびに当社は一切の責任を負いません。十分にご注意下さい。
はじめに 〜ご注意下さい〜
この記事は、Amazon 社の販売する電子書籍リーダー「Kindle Paperwhite」を "脱獄" し、公式の開発キットである KDK を使わずに作成した GUI プログラムを動かした試みについて記述したものです。この試みは Kindle 愛好者の一人としてとても残念に思った Amazon 社の最近の方針転換を受け自己責任で行った実験であり、記事は自分用に控えた情報の一部を技術的な話題のひとつとして書き留めたものです。無論 Kindle の "脱獄" や非公式なプログラムの適用を推奨・支援するものではなく、文中の手順を追うだけでは再現できない内容としていますが、そもそも Kindle の "脱獄" には多くの危険が伴います。直接・間接にかかわらずこの記事が何らかのきっかけとなっていかなる被害・損害が発生したとしても筆者も KLab も一切の責任を負いかねますのであらかじめご了承下さい。
試作したアプリの Kindle での動作の様子
下の動画は後述の調査と手順を経て試作したアプリを Kindle 実機上で動かした様子を撮影したものです。アプリはシンプルな画像ファイルビューワで、まず開発環境の Gentoo Linux 上のターミナルより Kindle へログインし同アプリをコマンドラインから起動した様子、次に Kindle へ導入ずみのアプリケーションランチャの GUI から起動した様子を収めています。(1分23秒 無音)
記事の内容
話題の背景 〜 Kindle ではせっかくアプリを動かせるのに・・
- Amazon は Kindle 上で動作する "active content" アプリケーション (Kindlet) の開発キットとして Java ベースの KDK (Kindle Development Kit) を 2010 年にリリース。KDK の入手には登録と申請が必要
- その後 米国内に住所を持つユーザを対象に Amazon.com にて kindle active content の販売・配布が開始される
- 2012年 11月に日本での Kindle Paperwhite/ Kindle Fire の発売が開始される。これに伴い Amazon.co.jp で Kindle 書籍の販売がスタート。ただし active content はその後も供給されず
- 一方、2014年現在 Amazon.com 上の active content は 300 タイトル余と少なく、最新のタイトルの登録日が 2013年 6月という寂しげな状況
- KDK は依然として一般へ公開されないまま
- そんな中、2014年 11月発売の最新機種「Kindle Voyage」は active content に非対応であることが判明
アマゾン Kindleアプリ開発キット KDK、限定ベータ配付開始 - japanese.engadget.com
Amazon Kindle # Kindle Development Kit (KDK) and active content - wikipedia (en)
kindle active content の例: "Notepad" - www.amazon.com
kindle active content - www.amazon.com

Amazon Kindle Development Kit download? - Stack Overflow
: 2014-10-25 Avwriter: I just noticed that I cannot Download any of my Active Content (bought for my Paperwhite) to my Voyage. : vxf: I think it is a compatibility issue. When the first PW came out, all the active content I had for the Touch did not work. Most of it was updated over the following months to ensure compatibility, but a handful of gamebooks I had purchased on the Touch never worked properly :
「大方の消費者はスマホやタブレットのアプリを好むためわれわれは最良の読書専用デバイス作りに注力する」とのこと
Amazon Drops Support for Kindle Active Content From the Kindle Voyage - The Digital Reader
I was told by Amazon spokesperson Kinley Pearsall that app support would not be coming in the future, and that: You're correct that these apps are not supported on Kindle Voyage. We've heard from customers that they generally prefer apps on their phones and tablets, so our focus is on building the best purpose-built reading devices.
Help & Customer Service - Kindle Active Content
: Kindle active content is not compatible with Fire tablets, Kindle (7th Generation), Kindle Voyage, and Kindle reading apps. :2011年 3月にスタートした、Kindle Fire と Android デバイスをターゲットとする Amazon Appstore は好調の様子であり今後のアプリケーションビジネスはそちらに一本化しコストを削減しようとする意思の表れか。 kindle active content および KDK が今後終息の方向に向かうことはほぼ確実と考えられる。
せめて自分専用に何とかできないものか 〜 遊休中の旧モデルを脱獄
- 手元では日常的に Kindle Paperwhite を使用中。軽量かつバッテリーが非常に長持ちなので使っていて気持ちがいい
- Kindle でアプリを動かせればさらにうれしい。早く Amazon.co.jp 経由で active content を利用可能になればなぁとのんびり期待していたが、上述のようにどうやら Amazon は Kindle active content を撤収しようとしているらしい。なので今後の日本での展開を待っても無駄っぽい
- Amazon 側の対応に期待できないとなれば使いたいアプリは自分で作るという選択肢もある。でも野良 Kindlet って作れるのか?
- 作れるらしい
Active content development?!! - wiki.mobileread.com
Kindlet Index - wiki.mobileread.com
Kindlet writing guide for the absolute beginner (PW) - wiki.mobileread.com
えらく濃いサイトだと思ったら脱獄系だった (^^;
: 1. Prerequisites: : ・Your Kindle must be jailbroken. If you haven't already,here is the link to do so.
Kindlet Developer HowTo - wiki.mobileread.com
Kindle Hacks Information - wiki.mobileread.com
Kindle Touch/PaperWhite 5.0.x - 5.4.4.2 JailBreak. Plus K5/PW USBNetwork. - wiki.mobileread.com
Mobileread Kindlet Kit - wiki.mobileread.com 野良 Kindlet を動かすためのハック
KUAL: Kindle Unified Application Launcher - wiki.mobileread.com 汎用アプリケーションランチャ 「KUAL」(これは野良 Kindlet)
Font, ScreenSaver & USBNetwork Hacks for Kindle 2.x, 3.x & 4.x USB 接続経由でKindle へログインするためのソフトウェア・Python・その他
「USB Remote NDIS Network Device」経由でログインした様子
Welcome to Kindle! ################################################# # N O T I C E * N O T I C E * N O T I C E # ################################################# Rootfs is mounted read-only. Invoke mntroot rw to switch back to a writable rootfs. ################################################# [root@kindle root]# uname -a Linux kindle 2.6.31-rt11-lab126 #1 Mon Apr 28 12:33:59 PDT 2014 armv7l GNU/Linux [root@kindle root]#
最初の実験 〜 Python スクリプトで .pdf 文書をダウンロード
- ここで最初に小さな実験を。ハックの中に Python が含まれていたのでざっくりスクリプトを用意して、Kindle Paperwhite に内蔵の「ブラウザ(体験版)」ではダウンロードできない *.PDF ファイルを Kindle の Documents フォルダへダウンロードしてみることにする
- 動画:Python スクリプトで PDF ファイルをダウンロードしてみる (42秒 無音)
(内蔵ブラウザでダウンロード不可の拡張子のファイルへのリンクをクリックした際のメッセージ)
キーワードは「Qt」
- 上のようにスクリプトはひとまず期待通りに動いたが、配布されている Python には GUI キットが含まれていない。前出のランチャ KUAL からこのスクリプトを呼ぶことはできるもののランチャから動的なパラメータ(この場合だとたとえば PDF ファイルの URL)を渡すことはできない。Kindle を活かすためにはやはり GUI の要素が必要
- アプリ開発の参考になる情報を求める過程で、脱獄ずみの環境を前提とする試用可能な商用ゲームアプリ「pbchess」を入れてみた
- 動画:pbchess の動作の様子 (1分16秒 無音)
- Kindlet のアプリケーションランチャ「KUAL」を起動
- KUAL 上の一覧から「vlasovsoft」を選択 〜 内容は盛りだくさん
- pbchess の本体は ELF バイナリ
ADDRESS 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 0123456789ABCDEF ------------------------------------------------------------------------------ 00000000 7F 45 4C 46 01 01 01 00 00 00 00 00 00 00 00 00 .ELF............ 00000010 02 00 28 00 01 00 00 00 94 DD 01 00 34 00 00 00 ..(.....庇..4... 00000020 F0 15 09 00 02 00 00 05 34 00 20 00 08 00 28 00 ........4. ...(. 00000030 1F 00 1C 00 01 00 00 70 4C A2 08 00 4C 22 09 00 .......pL「..L".. 00000040 4C 22 09 00 70 4F 00 00 70 4F 00 00 04 00 00 00 L"..pO..pO...... 00000050 04 00 00 00 06 00 00 00 34 00 00 00 34 80 00 00 ........4...4... 00000060 34 80 00 00 00 01 00 00 00 01 00 00 05 00 00 00 4............... 00000070 04 00 00 00 03 00 00 00 34 01 00 00 34 81 00 00 ........4...4... 00000080 34 81 00 00 13 00 00 00 13 00 00 00 04 00 00 00 4............... 00000090 01 00 00 00 01 00 00 00 00 00 00 00 00 80 00 00 ................ 000000A0 00 80 00 00 C0 F1 08 00 C0 F1 08 00 05 00 00 00 ....タ...タ....... 000000B0 00 80 00 00 01 00 00 00 C0 F1 08 00 C0 F1 09 00 ........タ...タ... 000000C0 C0 F1 09 00 E0 0F 00 00 C0 16 00 00 06 00 00 00 タ.......タ....... 000000D0 00 80 00 00 02 00 00 00 44 F2 08 00 44 F2 09 00 ........D...D... 000000E0 44 F2 09 00 48 01 00 00 48 01 00 00 06 00 00 00 D...H...H....... 000000F0 04 00 00 00 04 00 00 00 48 01 00 00 48 81 00 00 ........H...H... 00000100 48 81 00 00 20 00 00 00 20 00 00 00 04 00 00 00 H... ... ....... 00000110 04 00 00 00 51 E5 74 64 00 00 00 00 00 00 00 00 ....Q蚯d........ 00000120 00 00 00 00 00 00 00 00 00 00 00 00 06 00 00 00 ................ 00000130 04 00 00 00 2F 6C 69 62 2F 6C 64 2D 6C 69 6E 75 ..../lib/ld-linu 00000140 78 2E 73 6F 2E 33 00 00 04 00 00 00 10 00 00 00 x.so.3.......... 00000150 01 00 00 00 47 4E 55 00 00 00 00 00 02 00 00 00 ....GNU......... :
- バイナリの依存関係をみると pbchess は Qt (キュート) で開発されているらしい
[root@kindle pbchess]# ldd pbchess /usr/lib/libenvload.so (0x40021000) libcommon.so => /mnt/us/vlasovsoft/Qt/lib/libcommon.so (0x4002a000) libQtSvg.so.4 => /mnt/us/vlasovsoft/Qt/lib/libQtSvg.so.4 (0x4006d000) libQtSql.so.4 => /mnt/us/vlasovsoft/Qt/lib/libQtSql.so.4 (0x400bf000) libQtXml.so.4 => /mnt/us/vlasovsoft/Qt/lib/libQtXml.so.4 (0x400f7000) libQtGui.so.4 => /mnt/us/vlasovsoft/Qt/lib/libQtGui.so.4 (0x40138000) libQtNetwork.so.4 => /mnt/us/vlasovsoft/Qt/lib/libQtNetwork.so.4 (0x409de000) libQtCore.so.4 => /mnt/us/vlasovsoft/Qt/lib/libQtCore.so.4 (0x40abc000) libpthread.so.0 => /lib/libpthread.so.0 (0x40d9b000) libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x40db7000) libm.so.6 => /lib/libm.so.6 (0x40e7b000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x40ee9000) libc.so.6 => /lib/libc.so.6 (0x40efb000) libdl.so.2 => /lib/libdl.so.2 (0x40ff6000) librt.so.1 => /lib/librt.so.1 (0x41001000) /lib/ld-linux.so.3 (0x40000000)
- Qt は KDE や Google Earth、Doxygen、Skype といったメジャーなソフトウェアの開発にも使用されており、クロスプラットフォームで FreeBSD ・ 組み込みLinux ・ Mac OS X ・ Windows ・ Linux/X11・Windows CE ・ Symbian ・ MeeGo ・ Amiga OS ・ Android ・ iOS・Windows Phone に対応しているとのこと
- Qt は開発もコミュニティも活発な様子で、この機会に触れておけば今後に活かせる可能性も十分に考えられる そんなわけで Qt を使って Kindle で動くコードを書いてみることにした
Kindle Hacks Information # Games - wiki.mobileread.com
pbchess - Chess for Kingle 3 and DX - wiki.mobileread.com
pbchess Download - Commercial programs - pbchess.vlasovsoft.net
pbchess-1.2.6 の Kindle へのインストール方法 - wiki.vlasovsoft.net
開発環境の構築 〜 クロスコンパイル 〜 実機での動作確認
Qt で arm Linux 向けにクロスコンパイルを行うためにはそのためのツールチェーンが必要。
- Kindle 用ツールチェーンはどうやって作のか?
- どのプラットフォームでクロスコンパイルを行うか?
次の問答が参考になった。
Cross compiler for Kindle? - wiki.mobileread.com
(抜粋) rfog: Were can we find a cross compiler for Kindle? Smarter: You need to install cygwin, then follow the instructions in the "x-compile" file of "kindle-x-tc.tar.gz" from http://www.mobileread.com/forums/showthread.php?t=88004 . rfog: Thank you! However I'm in trouble with this. After installing cygwin, I create a folder called Kindle and lanuch "x-compile" script Smarter: Don't try to just run the script, read it to see what it does. Valentino: Unless you have a user named niluje and are running gentoo, you will need to change the paths and --prefix= in the configure lines, paths to source code in his portage tree etc. It's pretty specific to his system so you will need to adapt it a little.
- [kindle-x-tc.tar.gz 中の x-compile.sh の内容]
- x-compile.sh は三世代分の Kindle に対応する GNU arm ツールチェーンをビルドするためのスクリプト。Kindle Hack の中心的存在であるフランスのNiLuJe 氏 によるもので、氏の開発環境で使用されているそのままの内容で公開されている
- x-compile.sh はクロスチェーンのビルドに広く利用されている crosstool-NG と NiLuJe 氏の SVN リポジトリ 中のリソースを組み合わせて使用している
- x-compile.sh の処理内容は Gentoo Linux 環境に強く依存している。当初は Mac OS X 環境でのビルドも考えたが依存部分の吸収が困難であるため Gentoo 環境を用意することにした
Gentoo Linux と KDE のインストール
Gentoo の予備知識を持たずに PC 実機にインストールを行った。かなりの手間と時間がかかり、後に「ドM御用達のディストリビューション」というジョークを知り納得
インストールと初期設定手順の詳細は省略
母艦から Kindle へのログインと Kindle USB ストレージのマウントができるように
脱獄後の Kindle に前出の「USBNetwork Hacks for Kindle」を導入すると、Kindle のホームメニューの検索機能(ルーペのアイコン)に「;un」とタイプすることで、母艦へ USB 接続した Kindle が USB Network / USB Strage のふたつのモードをトグルするようになる。
USB Network モードの Kindle には母艦から USB RNDIS Gadget Driver 経由で telnet, ssh アクセスが可能。 USB Network モードの Kindle Paperwhite のデフォルトの usb0 :
usb0 Link encap:Ethernet HWaddr EE:19:00:00:00:00 inet addr:192.168.15.244 Bcast:192.168.15.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Windows の場合は USB Network モードの Kindle を USB 接続してから 次のページにリンクのある「linux.inf」を仮想ネットワークドライバとしてインストールすることでアクセス可能となる。
Howto : Armadillo-810を接続して使用するためのWindows環境設定 - 株式会社アットマークテクノ様のサイトより
以下は Gentoo Linux での USB RNDIS Gadget Driverドライバのインストールと接続の方法。
参考情報: Gentoo Wiki Archives - HOWTO_Windows_Mobile_5_RNDIS - www.gentoo-wiki.info
Gentoo のソースディレクトリ上で menuconfig を実行し必要なドライバを追加し何度か [EXIT] を押下して青画面を抜け最後に変更の保存をを実行し /usr/src/linux/.config を更新。
pc-533 t # cd /usr/src/linux pc-533 t # make menuconfig
(クリックで全体表示)
(クリックで全体表示)
ドライバのビルドとカーネル再構築
pc-533 t # make && make modules_install : pc-533 t # cp arch/x86/boot/bzImage /boot/ pc-533 t # lilo pc-533 t # reboot
母艦の usb0 経由で Kindle へアクセス
pc-533 t # ifconfig usb0 192.168.15.1 netmask 255.255.255.0 pc-533 t # pc-533 t # ifconfig usb0 usb0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.15.1 netmask 255.255.255.0 broadcast 192.168.15.255 inet6 fe80::ec49:ff:fe00:0 prefixlen 64 scopeid 0x20<link> ether ee:49:00:00:00:00 txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 6 bytes 508 (508.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 pc-533 t # pc-533 t # telnet 192.168.15.244 Trying 192.168.15.244... Connected to 192.168.15.244. Escape character is '^]'. Welcome to Kindle! ################################################# # N O T I C E * N O T I C E * N O T I C E # ################################################# Rootfs is mounted read-only. Invoke mntroot rw to switch back to a writable rootfs. ################################################# [root@kindle root]#
以下は USB ストレージモードの Kindle デバイスへのマウント方法
pc-533 t # dmesg : : [ 3112.835019] usb 2-1: new high-speed USB device number 4 using ehci-pci [ 3112.955172] usb 2-1: New USB device found, idVendor=1949, idProduct=0004 [ 3112.955175] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 3112.955178] usb 2-1: Product: Amazon Kindle [ 3112.955181] usb 2-1: Manufacturer: Amazon [ 3112.955183] usb 2-1: SerialNumber: B0241503251307V2 [ 3112.958186] usb-storage 2-1:1.0: USB Mass Storage device detected [ 3112.958246] scsi6 : usb-storage 2-1:1.0 [ 3113.961320] scsi 6:0:0:0: Direct-Access Kindle Internal Storage 0100 PQ: 0 ANSI: 2 [ 3113.961502] sd 6:0:0:0: Attached scsi generic sg2 type 0 [ 3113.970178] sd 6:0:0:0: [sdb] Attached SCSI removable disk [ 3116.006308] sd 6:0:0:0: [sdb] 2797568 512-byte logical blocks: (1.43 GB/1.33 GiB) [ 3116.221429] sd 6:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 3116.444941] sdb: sdb1 pc-533 linux # pc-533 linux # mount -t vfat /dev/sdb1 /media pc-533 linux # ls /media developer documents extensions linkss python screensaver system usbnet vlasovsoft wk
ツールチェーンをビルド
前出の x-compile.sh には以下のソフトウェア群をクロスコンパイルする処理が含まれるが、ツールチェーン自体のビルドは冒頭の Build_CT-NG() 関数で完結しており同関数のみを呼び出せば良い。
zlib/ expat/ freetype (for harfbuzz)/ harfbuzz/ freetype/ ftbench/ fontconfig/ coreutils/ libtommath/ libtomcrypt/ dropbear/ rsync/ busybox/ OpenSSL 0.9.8/ OpenSSL 1/ OpenSSH/ ncurses/ htop/ lsof/ shlock/ protobuf/ mosh/ libarchive/ GMP/ nettle/ KindleTool/ USBNet helper/ libpng/ libjpeg-turbo/ ImageMagick/ bzip2/ libffi/ ICU/ SQLite3/ Python/ inotify-tools/ glib/ fuse/ sshfs/ gawk/ fbgrab/ strace/ elfutils/ ltrace
- ~/Kindle ディレクトリを作成
- ~/SVN ディレクトリ配下で svn co https://svn.ak-team.com/svn/ を実行
- x-compile.sh の Build_CT-NG() 関数直後に同関数の呼び出しと exit を追記(デフォルトでは呼び出されない)
- 必要なパッケージを emerge (スクリプト実行時に not found が出たら足りないものをインストール)
- ct-ng menuconfig 画面で指定するパラメータは Kindle 第五世代の Paperwhite 2012 の機種世代を示す "K5" キーワードについて 180行目付近からの記述にあるフラグ指定を参考に
- バイナリは $HOME/x-tools/ ディレクトリ下に出力される
$ ls ~/x-tools/arm-kindle5-linux-gnueabi/bin arm-kindle5-linux-gnueabi-addr2line arm-kindle5-linux-gnueabi-gcov arm-kindle5-linux-gnueabi-ar arm-kindle5-linux-gnueabi-gprof arm-kindle5-linux-gnueabi-as arm-kindle5-linux-gnueabi-ld arm-kindle5-linux-gnueabi-c++ arm-kindle5-linux-gnueabi-ld.bfd arm-kindle5-linux-gnueabi-c++filt arm-kindle5-linux-gnueabi-ld.gold arm-kindle5-linux-gnueabi-cc arm-kindle5-linux-gnueabi-ldd arm-kindle5-linux-gnueabi-cpp arm-kindle5-linux-gnueabi-nm arm-kindle5-linux-gnueabi-ct-ng.config arm-kindle5-linux-gnueabi-objcopy arm-kindle5-linux-gnueabi-dwp arm-kindle5-linux-gnueabi-objdump arm-kindle5-linux-gnueabi-elfedit arm-kindle5-linux-gnueabi-populate arm-kindle5-linux-gnueabi-g++ arm-kindle5-linux-gnueabi-ranlib arm-kindle5-linux-gnueabi-gcc arm-kindle5-linux-gnueabi-readelf arm-kindle5-linux-gnueabi-gcc-4.9.2 arm-kindle5-linux-gnueabi-size arm-kindle5-linux-gnueabi-gcc-ar arm-kindle5-linux-gnueabi-strings arm-kindle5-linux-gnueabi-gcc-nm arm-kindle5-linux-gnueabi-strip arm-kindle5-linux-gnueabi-gcc-ranlib
Kindle 用 Qt ライブラリをビルド
- http://download.qt-project.org/archive/qt/4.8/4.8.5/ より qt-everywhere-opensource-src-4.8.5.tar.gz をダウンロード 〜 展開
- qt-everywhere-opensource-src-4.8.6/mkspecs/qws/arm-none-linux-gnueabi-g++/ ディレクトリを qt-everywhere-opensource-src-4.8.6/mkspecs/qws/linux-arm-kindle5-gnueabi-g++/ としてコピー
- linux-arm-kindle5-gnueabi-g++/qmake.conf を以下の要領で編集
$ cat qmake.conf # # qmake configuration for building with arm-none-linux-gnueabi-g++ # include(../../common/linux.conf) include(../../common/gcc-base-unix.conf) include(../../common/g++-unix.conf) include(../../common/qws.conf) # modifications to g++.conf #QMAKE_CC = arm-none-linux-gnueabi-gcc #QMAKE_CXX = arm-none-linux-gnueabi-g++ #QMAKE_LINK = arm-none-linux-gnueabi-g++ #QMAKE_LINK_SHLIB = arm-none-linux-gnueabi-g++ QMAKE_CC = arm-kindle5-linux-gnueabi-cc QMAKE_CXX = arm-kindle5-linux-gnueabi-g++ QMAKE_LINK = arm-kindle5-linux-gnueabi-g++ QMAKE_LINK_SHLIB = arm-kindle5-linux-gnueabi-g++ # modifications to linux.conf #QMAKE_AR = arm-none-linux-gnueabi-ar cqs #QMAKE_OBJCOPY = arm-none-linux-gnueabi-objcopy #QMAKE_STRIP = arm-none-linux-gnueabi-strip QMAKE_AR = arm-kindle5-linux-gnueabi-ar cqs QMAKE_OBJCOPY = arm-kindle5-linux-gnueabi-objcopy QMAKE_STRIP = arm-kindle5-linux-gnueabi-strip
export PATH=$HOME/x-tools/arm-kindle5-linux-gnueabi/bin:$PATH
$ pwd /home/t/wk/qt-everywhere-opensource-src-4.8.6 $ ./configure -embedded arm -xplatform qws/linux-arm-kindle5-gnueabi-g++ \ -opensource -confirm-license -no-opengl \ -little-endian -no-multimedia -no-qt3support -qt-gfx-transformed : Qt is now configured for building. Just run 'gmake'. Once everything is built, you must run 'gmake install'. Qt will be installed into /usr/local/Trolltech/QtEmbedded-4.8.6-arm To reconfigure, run 'gmake confclean' and 'configure'. $ gmake :
- qt-everywhere-opensource-src-4.8.6/src/3rdparty/webkit/Source/WebCore/platform/graphics/filters/arm 下の FEGaussianBlurNEON.cpp, FELightingNEON.cpp はコンパイルエラーを起こすため要対応
- qt-everywhere-opensource-src-4.8.6/src/3rdparty/webkit/Source/WebCore/platform/graphics/filters 下の FEGaussianBlur.cpp, FELighting.cpp はコンパイルエラーを起こすため要対応
Qt ランタイムライブラリをテスト
- Qt ライブラリのビルド時に生成されるテストセットと各ライブラリを Kindle 実機へ転送
- GUI 要素を伴わないテストのみの確認ではいずれも OK
[root@kindle qt]# ls -l mylib -rwxrwxrwx 1 root root 2605567 Nov 22 01:49 libQt3Support.so.4 -rwxrwxrwx 1 root root 3183515 Nov 22 05:44 libQtCore.so.4 -rwxrwxrwx 1 root root 3528600 Nov 22 05:44 libQtDeclarative.so.4 -rwxrwxrwx 1 root root 9758291 Nov 22 05:44 libQtGui.so.4 -rwxrwxrwx 1 root root 112144 Nov 22 01:49 libQtMultimedia.so.4 -rwxrwxrwx 1 root root 1038753 Nov 22 05:44 libQtNetwork.so.4 -rwxrwxrwx 1 root root 1787017 Nov 22 05:44 libQtScript.so.4 -rwxrwxrwx 1 root root 760466 Nov 22 05:44 libQtScriptTools.so.4 -rwxrwxrwx 1 root root 237082 Nov 22 05:44 libQtSql.so.4 -rwxrwxrwx 1 root root 314366 Nov 22 05:44 libQtSvg.so.4 -rwxrwxrwx 1 root root 145956 Nov 22 05:44 libQtTest.so.4 -rwxrwxrwx 1 root root 22158302 Nov 22 05:44 libQtWebKit.so.4 -rwxrwxrwx 1 root root 22158302 Nov 22 05:44 libQtWebKit.so.4.9.4 -rwxrwxrwx 1 root root 259207 Nov 22 05:44 libQtXml.so.4 -rwxrwxrwx 1 root root 104981 Nov 21 18:12 libScreenManager.so [root@kindle qt]# [root@kindle qt]# export LD_LIBRARY_PATH=./mylib [root@kindle qt]# export QT_QWS_FONTDIR=./fonts [root@kindle qt]# [root@kindle qt]# ./tst_loading -qws ********* Start testing of tst_Loading ********* Config: Using QTest library 4.8.6, Qt 4.8.6 PASS : tst_Loading::initTestCase() RESULT : tst_Loading::load():"amazon": 6.5 msecs per iteration (total: 52, iterations: 8) RESULT : tst_Loading::load():"kde": 6.6 msecs per iteration (total: 53, iterations: 8) RESULT : tst_Loading::load():"apple": 6.6 msecs per iteration (total: 53, iterations: 8) PASS : tst_Loading::load() PASS : tst_Loading::cleanupTestCase() Totals: 3 passed, 0 failed, 0 skipped ********* Finished testing of tst_Loading ********* [root@kindle qt]# [root@kindle qt]# ./tst_painting -qws ********* Start testing of tst_Painting ********* Config: Using QTest library 4.8.6, Qt 4.8.6 PASS : tst_Painting::initTestCase() RESULT : tst_Painting::paint():"amazon": 3.8 msecs per iteration (total: 62, iterations: 16) PASS : tst_Painting::paint() RESULT : tst_Painting::textAreas(): 55 msecs per iteration (total: 55, iterations: 1) PASS : tst_Painting::textAreas() PASS : tst_Painting::cleanupTestCase() Totals: 4 passed, 0 failed, 0 skipped ********* Finished testing of tst_Painting ********* [root@kindle qt]# ls MIMESniffing lib tst_painting tst_qwebhistoryinterface env.sh mylib tst_qdeclarativewebview tst_qwebinspector fonts plugins tst_qgraphicswebview tst_qwebpage hybridPixmap test1 tst_qwebelement tst_qwebview ktresume.sh test1.sh tst_qwebframe ktsuspend.sh tst_loading tst_qwebhistory [root@kindle qt]# ./MIMESniffing -qws ********* Start testing of tst_MIMESniffing ********* Config: Using QTest library 4.8.6, Qt 4.8.6 PASS : tst_MIMESniffing::initTestCase() PASS : tst_MIMESniffing::testCase1() PASS : tst_MIMESniffing::cleanupTestCase() Totals: 3 passed, 0 failed, 0 skipped ********* Finished testing of tst_MIMESniffing *********
Qt Creator へのキットの登録とクロスコンパイルの実行
Qt でコードを書く 〜 ビルド
Kindle 実機へのバイナリの転送・環境設定・実行
未解決の事項
- Kindle 実機上で GUI が正しく表示できず画面が乱れる
- pbchess に同梱の Qt ランタイムを転用すれば問題が見られないため Qt ライブラリビルド時の問題と考えられる。現時点では未解決
(tanabe)