kobo

#kof2013@shimadah に「kobo でDebian 動かしてる人居るよ.調べてみる価値はあると思う.」とか言われて帰ってからググったらmarekさんて方がイメージを配布しているよう.

kernel 部分はオリジナルのKobo をカスタマイズしたもので,起動時に選択画面が表示されるようになっていて、Debian を選んだ場合chroot でDebian(Jessie)環境が起動する.Kobo も起動することが出来る. ディスプレイドライバはオリジナルに改良を加えて差分書き換え、動的書き換えがサポートされている。 タッチドライバも改良されていて、マルチタッチ(2点)対応になっている。



必要なもの

  • kobo glo or touch(他は未検証) ※miniでもokらしい
  • 8GB 以上の microSD card(出来ればClass10以上)
  • オリジナル kobo のイメージ(hw_config 抜き出し)
  • marekさんのDebian イメージ
  • 母艦
    • 以下ではLinuxを母艦としているが,MacOS(デバイス名などが異なる)やWindows(Win32 Disk Imagerなどを利用)でも可能と思われる.

kobo 開腹

スイッチの辺りからクレジットカードなどを差し込んで爪を開けていくと裏蓋が外れる. kobo touch なら金属のカバーをずらして,glo だと microSD を引っこ抜くだけ
#なれるとKobo を捻って隙間を作ってパキパキ外せるように…

バックアップ

kobo から取り出した microSD を dd でバックアップする.

$ sudo dd if=/dev/mmcblk0 of=kobo_touch.img bs=4M

出来たらバックアップ後出来たら microSD はそのまま保管する.

Windows でのdd はこちらを参考に

Debian イメージの入手

Kobo as a Linux tablet - mgibek から
2013-08-17_kobo_debian.part01.rar
2013-08-17_kobo_debian.part02.rar
2013-08-17_kobo_debian.part03.rar
を入手.

% md5sum *.rar
342f94a38724a9046e1eef1f204fd1dd  2013-08-17_kobo_debian.part01.rar
be37567c98d03807e4f524d8c50ee217  2013-08-17_kobo_debian.part02.rar
3ba5b7f6ad9b09c0396e4a06fb57ca07  2013-08-17_kobo_debian.part03.rar
% sha1sum *.rar 
a0a4eebbeabdbd46bf4c649d1f162f1e7a2fe461  2013-08-17_kobo_debian.part01.rar
ac0c3833c5b90a3f518a6cc6e67af4b2a210f3fc  2013-08-17_kobo_debian.part02.rar
46b4255c8476f7db8d2c8bc33de04912b630ac05  2013-08-17_kobo_debian.part03.rar

展開して *8GB 以上のmicroSD card を用意(中身は全部上書きされる)* してイメージを書き込む. 今回はディスクスペースがもったいないので一時ファイルを作らずそのまま流し込んだ.

% sudo sh -c "unrar p -inul 2013-08-17_kobo_debian.part01.rar > /dev/sdb"

※unrar の p オプションは標準出力に展開. -inul はメッセージ出力をしない.これつけないとゴミが入ってしまう.

分解せずにバックアップ(未検証)

簡単koboバックアップ Wiki - SourceForge.JP

起動….タッチが効かない

後はkobo の電源を切ってからmicroSD card を差し替えて起動するだけ. 起動後タッチしても反応しない.
よく見るとこれは *N905C* 用のイメージ.手元の端末は *N905B* Kobo Touch/Glo/Mini hacking スレ Part.6 によると *hw_config* を書き換えるといいらしい.

hw_config* とは?

て事でググると Community Workspace/kobo - Mer Wiki とかが引っかかった.

hw_config の書き換え

オリジナル kobo のイメージや microSD から hw_config を書き出して,Debian image に上書きする.

hw_config 書き出し

を参考にオリジナル kobo イメージや microSD から書き出し

% sudo dd if=./kobo_touch.img of=./touch_hwconfig.bin bs=512 count=1 skip=1024 count=2

hw_config 書き込み

% sudo dd if=./touch_hwconfig.bin of=/dev/mmcblk0 bs=512 count=1 seek=1024 count=2

Windows でのdd はこちらを参考に

起動画面

起動選択画面が表示される.

  • コンピュータぽいアイコン -> Debian イメージが起動.
  • 本ぽいアイコン -> 通常の kobo イメージが起動(海外版)
  • WiFi? ぽいアイコン -> 診断モード(ftp/telnet)

診断モード

telnet/ftp が利用可能

id:root
password:無し

ホームボタンでシャットダウン

シャットダウン画面変更

/etc/init.d/rcS 内の以下の部分でシャットダウン画面を表示している.

 cat /root/images/power_off.raw | /usr/local/Kobo/pickel showpic

表示画像のraw は800x600 のRGB565
以下のようにして作成できる.

% convert test.jpg -geometry 800x600 -ordered-dither threshold,32,64,32 test.png
% ffmpeg -vcodec png -i test.png -vcodec rawvideo -f rawvideo -pix_fmt rgb565 test.raw

これを,/root/images/power_off.raw と差し替えるとシャットダウン画面が差し替わる.

※ここではchroot 元のpath

Kobo on Debian 単体でrgb565 なraw 作成

  • pkg 導入
    $ sudo apt-get install imagemagick libav-tools
  • 画面キャプチャ
    $ xwd -root > ~/test.wd
  • wd から png に
    $ convert test.wd test.png
  • png から raw に
    $ avconv -i test.png -f rawvideo -pix_fmt rgb565 -y test.raw < /dev/null

swap 作成

※診断モードで行う

swap ファイル作成

# dd if=/dev/zero of=/var/swap bs=1024k count=512
# mkswap /var/swap

/etc/fstab 修正

+ /var/swap   swap    swap    defaults        0 0      

動作確認

# swapon -a
# free

再起動して認識されるか確認…されないorz

/etc/init.d/rcS を見ると /dev/mmcblk0p3 をswapon している.その下にswapon を追記した.

         swapon /dev/mmcblk0p3
+        swapon /var/swap

とりあえず認識している.

/dev/mmcblk0p3 を確認するとswap 領域として確保してある。

$ sudo fdisk -l /dev/mmcblk0|grep mmcblk0p3
/dev/mmcblk0p3        14698496    15652863      477184   82  Linux swap / Solaris

swap を有効にしようとしたらエラーとなる。

$ sudo swapon /dev/mmcblk0p3
swapon: /dev/mmcblk0p3: swapon failed: Invalid argument

mkswap したら利用できた。(SD Card のサイズが大きい場合にはエラーにならずにうまく行く?)

$ sudo mkswap /dev/mmcblk0p3
Setting up swapspace version 1, size = 433148 KiB
no label, UUID=9a0f220e-c47f-4879-a1e7-dd2bbbf54e74
$ sudo swapon /dev/mmcblk0p3 
$ free
             total       used       free     shared    buffers     cached
Mem:        254052     117328     136724          0       8732      63400
-/+ buffers/cache:      45196     208856
Swap:       957208          0     957208

ということで,スワップファイル作ったりrcS とかいじらなくても以下の手順だけでok.

$ sudo mkswap /dev/mmcblk0p3
$ sudo swapon -a

debian で遊ぶ

後は普通のdebian なのでそのまま遊ぶ.

※アプリケーション起動中にホームボタンを押すと最大化表示になる.もう一度押すと元に戻る.

awsome メニュー登録

apt でアプリケーションを導入してもawsome のメニューに自動登録されない.

  • /.config/awesome/rc.lua

  • /.config/awesome/debian/menu.lua

の辺りを編集.

  • Apps -> mikutter 登録

    /.config/awesome/rc.lua

      menuapps = {
         { "Firefox", "firefox" },
         { "FBReader", "fbreader" },
    -    { "Calculator", "xcalc" }
    +    { "Calculator", "xcalc" },
    +    { "mikutter", "mikutter" },
      }
  • Debian -> Applications -> Network -> Communication -> mikutter 登録

    /.config/awesome/debian/menu.lua

      Debian_menu["Debian_Applications_Network_Communication"] = {
              {"Xbiff","xbiff"},
    +         {"mikutter","/usr/bin/mikutter"},
      }

※syntax error とかになるとawsome 標準設定で起動してくるので注意.標準設定は細かくて操作が大変.

メニューの Config -> awsome -> restart で反映される.

WiFi? 接続

とりあえず kobo のイメージで WiFi?接続後一旦シャットダウン.その後Debian で起動して,menu -> Config -> Wi-Fi -> Start で接続.

この時にsshd/ftpd も起動される.

起動時自動的にWiFi? に接続する

/.xinitrc のawesome 起動前にWiFi? 接続script( ~/scripts/wifi-start ) を呼び出すようにする.

  if [ -f $HOME/.Xmodmap ]; then
       /usr/bin/xmodmap $HOME/.Xmodmap
  fi
  
+ ~/scripts/wifi-start &
  exec awesome >~/.cache/awesome/stdout 2>~/.cache/awesome/stderr

source.list 変更

- deb http://ftp.us.debian.org/debian jessie main
+ deb http://ftp.jp.debian.org/debian jessie main

timezone 変更

$ date
Thu Dec  5 13:18:29 CET 2013

とCET になっているのをJST に変更する.

$ sudo dpkg-reconfigure tzdata

Current default time zone: 'Asia/Tokyo'
Local time is now:      Thu Dec  5 21:19:29 JST 2013.
Universal Time is now:  Thu Dec  5 12:19:29 UTC 2013.

規定ブラウザをmidori に変更

Iceweasel が導入されているが,重いのでmidori に変更してみる.

midoriの導入

$ sudo apt-get install midori

規定ブラウザの変更

$ sudo update-alternatives --config x-www-browser
There are 2 choices for the alternative x-www-browser (providing /usr/bin/x-www-browser).

  Selection    Path                Priority   Status
------------------------------------------------------------
* 0            /usr/bin/iceweasel   70        auto mode
  1            /usr/bin/iceweasel   70        manual mode
  2            /usr/bin/midori      50        manual mode

Press enter to keep the current choice[*], or type selection number: 2
update-alternatives: using /usr/bin/midori to provide /usr/bin/x-www-browser (x-www-browser) in manual mode

ブラウザやmikutter で日本語が文字化けする

日本語フォントを導入します.

$ sudo apt-get install fonts-ipafont

USB network

Kobo とUSB network 接続をする

  • Kobo でドライバ読み込み
    $ sudo insmod /host/drivers/ntx508/wifi/sdio_wifi_pwr.ko
    $ sudo insmod /host/drivers/ntx508/usb/gadget/arcotg_udc.ko
    $ sudo insmod /host/drivers/ntx508/usb/gadget/g_ether.ko
    これで,/dev/usb0 が出来る.
  • PC とUSB 接続をしてip を設定する
    marek@kobo:~$ sudo ifconfig 192.168.2.2
  • PC 側でもip を設定する
    % sudo /sbin/ifconfig usb0 192.168.2.1

※なんかWiFi? Start 状態でないと繋がらない? sdio_wifi_pwr.ko も必要だった.

  • scrit を用意してmenu に登録しておくと便利
    script を用意して,
    $ cat ~/scripts/usbnet-start
    #!/bin/sh
    (
    echo "# Loading drivers..."
    sudo insmod /host/drivers/ntx508/wifi/sdio_wifi_pwr.ko
    sudo insmod /host/drivers/ntx508/usb/gadget/arcotg_udc.ko
    sudo insmod /host/drivers/ntx508/usb/gadget/g_ether.ko
    sleep 4
    
    sudo ifconfig usb0 192.168.2.2 up
    
    # servers
    sudo dropbear
    sudo vsftpd &
    
    echo "100"
    echo "# Your IP is: "`sudo ifconfig usb0 | grep -o -E '([0-9]{1,3}\.){3}[0-9] {1,3}' | head -1
    `
    ) |
    zenity --progress \
      --title="Starting USB Network..." \
      --percentage=0
$ cat ~/scripts/usbnet-stop
#!/bin/sh

(
echo "# Stopping servers..."
sudo killall vsftpd
sudo killall dropbear

echo "33"
echo "# Bringing eth0 down..."
sudo ifconfig usb0 down

echo "66"
echo "# Unloading drivers..."
sudo rmmod /host/drivers/ntx508/usb/gadget/g_ether.ko
sudo rmmod /host/drivers/ntx508/usb/gadget/arcotg_udc.ko
sudo rmmod /host/drivers/ntx508/wifi/sdio_wifi_pwr.ko
) |
zenity --progress \
  --title="Stopping USB Network.." \
  --percentage=0 \
  --auto-close

zenity --info --text="USB Network is OFF."

/.config/awesome/rc.lua でメニューに登録

 menuwifi = {
    { "Start", os.getenv("HOME") .. "/scripts/wifi-start" },
    { "Stop", os.getenv("HOME") .. "/scripts/wifi-stop" },
    { "----------" },
    { "Status", os.getenv("HOME") .. "/scripts/wifi-status" }
 }
+ menuusb = {
+    { "USB Network Start", os.getenv("HOME") .. "/scripts/usbnet-start" },
+    { "USB Network Stop", os.getenv("HOME") .. "/scripts/usbnet-stop" },
+    { "----------" },
+ }
  menuconfig = {
      { "Wi-Fi", menuwifi },
+     { "USB", menuusb },
      { "awesome", menuawesome, beautiful.awesome_icon },
  }

Kobo on Debian でシャットダウン時の画面を表示した状態でシャットダウンする

  • パッケージの導入
    $ sudo apt-get install imagemagick libav-tools
  • 診断モードで /etc/init.d/rcS を修正. (/debian/home/marek/power_off.raw が存在すればこれを表示して終了.無ければ標準の/root/images/power_off.raw を表示して終了する)
  • シャットダウン時の画面を保存するscript を用意. 診断モードの場合は /debian/home/marek/scripts/ss-quit.sh
    Debian の場合は /home/marek/scripts/ss-quit.sh
  • awsome のメニューに登録しておく

    /.config/awesome/rc.lua を編集

      menuawesome = {
        { "manual", terminal .. " -e man awesome" },
        { "edit config", editor_cmd .. " " .. awesome.conffile },
        { "restart", awesome.restart },
        { "quit", awesome.quit },
    +   { "ss & quit", os.getenv("HOME") .. "/scripts/ss-quit.sh" }
     }

script は以下にある.

apt-get dist-upgrade するとタッチドライバが使えなくなる

dist-upgrade するとxorg のバージョンが変わり、marekさん謹製のマルチタッチドライバ(オリジナルはシングルタッチ)が動かなくなるが、ビルドし直すと動くようになる。 source はイメージに含まれている。 開発環境も含まれている。

# cd /home/marek/src/xorg-input-kobomultitouch/
# make clean
# make
# make install

リモート接続

ssh

dropbear が起動しているが機能がとても少ない.

起動/終了はWiFi? Start のScript 内で行っている.

  • /scripts/wifi-start

  • /scripts/wifi-stop

vnc

x11vnc だとDISPLAY=:0 を操作できる

当たり前だけどカラー液晶端末で表示するとカラーで表示される.

xrdp

なんとなく入れてみたけど普通に使えている

サスペンド/レジューム※失敗

echo -n 1 | sudo tee /sys/power/state-extended
echo -n mem | sudo tee /sys/power/state

で行けそうだが,

$ echo -n mem | sudo tee /sys/power/state
memtee: /sys/power/state: Invalid argument

となってうまく行かない.

mikutter 導入2014-01-08版

jessie がStableになってjessie でmikutter がサポートされているので今後はmikutter パッケージを導入するだけでいい

現在mikutter はDebian jessie から移動しています.とりあえずこんな感じで動かしています.
Jessie は未だtesting なのでまた状況は変わると思います.てことで2014-01-08版てことで.

  • /etc/apt/sources.list にsid を追加
    + deb http://ftp.jp.debian.org/debian/ sid main
  • /etc/apt/preferences を作成
    Package: *
    Pin: release a=sid
    Pin-Priority: 99
  • mikutter 導入
    $ sudo apt-get update
    $ sudo apt-get upgrade
    $ sudo apt-get install mikutter/sid

ip アドレスが変わるのが困る

avahi を使う

※未検証

# apt-get install avahi-daemon

ip は変わるが、ホスト名.local という名前が使えるようになる。 規定値では kobo.local になるはず。

% cat /debian/etc/hostname 
127.0.0.1       localhost.localdomain   localhost
127.0.1.1       kobo

以下RaspberyPi? のRasbian での設定例

WiFI AP の機能を使う

MAC Address を登録して固定IP を振るように設定する。

手動で設定

Kobo の設定を引き継がないように /debian-start を修正して、debian の作法で固定IP を手動設定する。

% diff debian-start.org debian-start|sed -e 's/^/ /'
16,18c16,18
< cp -L /etc/wpa_supplicant/wpa_supplicant.conf /debian/etc/wpa_supplicant/wpa_supplicant.conf
< cp -L /etc/resolv.conf /debian/etc/resolv.conf
< cp /etc/hosts /debian/etc/hosts
---
> #cp -L /etc/wpa_supplicant/wpa_supplicant.conf /debian/etc/wpa_supplicant/wpa_supplicant.conf
> #cp -L /etc/resolv.conf /debian/etc/resolv.conf
> #cp /etc/hosts /debian/etc/hosts

お絵かき対応したい

ドラッグ操作ができないので、普通のペイントソフトでは線が引けない…。 mouse move で線が引けるsoft は無いだろうか?

機種別

glo

  • キーボードのズレを修正したい matchbox-keyboard/README から
      -g,--geometry <HxW.y.x>  Specify keyboard's geometry 
     (ex: -g 200x800; -g 0x800.200.0; -g 0x0.0.50; zeroes mean "by-default")
    で行けそう?

結局,~/.config/awesome/rc.lua の以下の2行書き換えでいけた.

$ diff ~/.config/awesome/rc.lua.org ~/.config/awesome/rc.lua
518c518
<               c:geometry({ x = 0, y = 0, width = 800, height = 250 })
---
>               c:geometry({ x = 0, y = 0, width = 1024, height = 250 })
520c520
<               c:geometry({ x = 0, y = 350, width = 800, height = 250 })
---
>               c:geometry({ x = 0, y = 460, width = 1024, height = 250 })
  • 選択画面の座標を修正したい
  • 終了時の画面を修正したい 恐らく解像度があっていないせいなので,解像度を合わせればいい.
  • バックライトキーを使えないか?
    xev
    KeyPress event, serial 30, synthetic NO, window 0xe00001,
        root 0xc2, subw 0x0, time 1118000, (258,127), root:(280,175),
        state 0x0, keycode 98 (keysym 0xff26, Katakana), same_screen YES,
        XLookupString gives 0 bytes: 
        XmbLookupString gives 0 bytes: 
        XFilterEvent returns: False
    
    KeyRelease event, serial 33, synthetic NO, window 0xe00001,
        root 0xc2, subw 0x0, time 1118270, (258,127), root:(280,175),
        state 0x0, keycode 98 (keysym 0xff26, Katakana), same_screen YES,
        XLookupString gives 0 bytes: 
        XFilterEvent returns: False
    

母艦でのディスクイメージのマウント

イメージの中はパーティションが複数あるのでoffset を指定してmount する

% /sbin/fdisk -l -u ./2013-08-17_kobo_debian.img

Disk ./2013-08-17_kobo_debian.img: 8014 MB, 8014266368 bytes
255 heads, 63 sectors/track, 974 cylinders, total 15652864 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000aad1a

                       Device Boot      Start         End      Blocks   Id  System
./2013-08-17_kobo_debian.img1           19456    10506239     5243392   83  Linux
./2013-08-17_kobo_debian.img2        10506240    14698495     2096128    b  W95 FAT32
./2013-08-17_kobo_debian.img3        14698496    15652863      477184   82  Linux swap / Solaris
% sudo mount -o loop,offset=`expr 19456 \* 512` ./2013-08-17_kobo_debian.img /mnt

これで第一パーティションを/mnt にマウントしている.

ユーザーモードエミュレーションQEMU を使ってHost PC でapt-get とかする

qemu-user-static を導入

% sudo apt-get install qemu-user-static

ディスクイメージをマウント

% sudo mount -o loop,offset=`expr 19456 \* 512` /var/tmp/2013-08-17_kobo_debian.img /mnt

ユーザーモードエミュレーションQEMU コマンドをコピーする

% sudo cp -p /usr/bin/qemu-arm-static /mnt/debian/usr/bin

chroot してapt とかする

% sudo chroot /mnt/debian /bin/bash
# vi etc/apt/sources.list
# cat <<__EOF__> /etc/resolv.conf
> nameserver 8.8.8.8
> __EOF__
# apt-get update
  :

自動マウントされた時などに /dev/null が使えなくて困ることがある.

/bin/sh: 1: cannot create /dev/null: Permission denied

mount option に nodev が付いている場合は remount して外す

% sudo mount -o remount,dev /dev/sdb1

https://plus.google.com/u/0/103792214056489833385/posts/7JYendkgX1T

Windows で書き込みを試みる

マンガ喫茶によったついでにWindows で試してみた.

  • dd for windows
    Linux 等のdd と同じ使い方だが,デバイスの指定方法が特殊だった.
    #未フォーマットでドライブレターがない場合はどうやって指定するんだろう?(Windows側で一旦フォーマットしてドライブレターが現れるようにしてから?)
>dd if=E:\2014-02-11_kobo_debian.img of=\\.\F: bs=4M
rawwrite dd for windows version 0.3.
Written by John Newbigin <jn@it.swin.edu.au>
This program is covered by the GPL.  See copying.txt for details
Error writing file: 87 パラメーターが間違っています。
1023+1 records in
1023+0 records out
>dd if=E:\glo_hwconfig.bin of=\\.\F: bs=512 count=1 seek=1024 count=2
rawwrite dd for windows version 0.3.
Written by John Newbigin <jn@it.swin.edu.au>
This program is covered by the GPL.  See copying.txt for details
2+0 records in
2+0 records out

写真とか

参考URL



spam 避けですcheck を付けて下さい

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-02-05 (木) 14:59:54 (1041d)