2014年12月22日

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 ではせっかくアプリを動かせるのに・・

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

  • KDK まわりは公開されている公式の情報が非常に少ないため事情が判然としないが、開発段階での実機デバッグは欠かせないため脱獄なしで実機へアプリをインストールする方法は多分あるはず
  • ただ、終息に向かい始めている KDK をわざわざ今からオーダーしそれベースでコードを書くのはあまり嬉しくない。脱獄するのは気が進まないが脱獄することで自由度が高くなれば開発上の選択肢も増えるのではないか?
  • やっぱり色々なのがある、、
  • Kindle Hacks Information - wiki.mobileread.com

  • 手元には Paperwhite の 2012年版(PW or PW1) と2013年版(PW2) がある。旧いほうはもう使ってないので自己責任での実験用と割り切り脱獄することに。ファームは 5.4.4.2 でありダウングレードの必要はなし
  • 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」を入れてみた
  • 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

  • 動画: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 - wikipedia

    日本 Qt ユーザー会

  • Qt は開発もコミュニティも活発な様子で、この機会に触れておけば今後に活かせる可能性も十分に考えられる
  • そんなわけで Qt を使って Kindle で動くコードを書いてみることにした

開発環境の構築 〜 クロスコンパイル 〜 実機での動作確認

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-NGNiLuJe 氏の 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
    
  • configure 〜 make
    
    $ 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 へのキットの登録とクロスコンパイルの実行

  • Gentoo 環境に Qt Creator をインストール
    # emerge --ask dev-qt/qt-creator
    
  • Qt Creator にビルド済みのツールチェーンを登録

    (クリックで拡大)

    (クリックで拡大)

    (クリックで全体表示)

Qt でコードを書く 〜 ビルド

Kindle 実機へのバイナリの転送・環境設定・実行

未解決の事項

  • Kindle 実機上で GUI が正しく表示できず画面が乱れる
  • pbchess に同梱の Qt ランタイムを転用すれば問題が見られないため Qt ライブラリビルド時の問題と考えられる。現時点では未解決

(tanabe)
klab_gijutsu2 at 00:19│Comments(0)kindle | hack

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔   
 
 
 
Blog内検索
Archives
このブログについて
DSASとは、KLab が構築し運用しているコンテンツサービス用のLinuxベースのインフラです。現在5ヶ所のデータセンタにて構築し、運用していますが、我々はDSASをより使いやすく、より安全に、そしてより省力で運用できることを目指して、日々改良に勤しんでいます。
このブログでは、そんな DSAS で使っている技術の紹介や、実験してみた結果の報告、トラブルに巻き込まれた時の経験談など、広く深く、色々な話題を織りまぜて紹介していきたいと思います。
最新コメント