Linux on Pomera DM200 人柱版 その2

投稿者: | 2017年7月9日

人柱版その2を公開します。

今回のバージョンではベースをDebian 9.0 (stretch)に変更し、試験的にX環境とBluetooth有効化スクリプトを追加しました。
また前の人柱版を使用していただいた方からあがった不具合の修正を行っています。

今回も試用されるみなさまからの不具合や要望などをいただけると助かります。

この手のソフトではお決まりですが文鎮になっても責任は負いません。
本体内のソフト変更を伴いますのでメーカーへの問い合わせはやめてください。

7/10追記
wpa_supplicant.confを/etc/wpa_supplicant/wpa_supplicant.confに置く場合にはSDカードのvfat領域に有るsettings/wpa_supplicant.confは削除してください。
参照順にミスが有りこちらを先に見に行くようになっていました。

7/17追記
moyashiさんに詳細な使い方を書いていただいていますのでインストール後はこちらを参照してみてください。
KING JIM ポメラDM200でEmacs、Vim、Ruby、Pythonが動くなんて素敵すぎる!

7/17追記2
US配列に設定した場合に、`や~が入力できない問題に対応したテストカーネルを作成しました。
その他にも変更(詳細はchange.txt参照)を入れてありますが、とりあえず動作には問題なさそうなので以下に置いておきます。
test_kernel_d28.zip

8/1追記
上のd28のテストカーネルまでの変更に追加してフレームバッファの色深度を32bitに変更する対応を入れました。
今までは16bit設定になっていたので、少し色がきれいに見えるようになるかと思います。
test_kernel_d29.zip

8/3追記
上の7/10の追記で記載した、/etc/wpa_supplicant/wpa_supplicant.conf が作成されていても
無視されてしまう場合がある問題を修正したwifi_switchコマンドを置いておきます。
v02_updater01.zip

2018/4/15追記
Pomeraの公式アップデータv1.4を適用すると日付が24時間ずれる問題に対応しました。なおv1.4に更新していない場合は逆に時刻がずれます。
test_kernel_d31.zip
(@oballyさん、@ytakedaさん確認ありがとうございました。)
問題の現象発生時の動作については@oballyさんの以下のサイトを参照ください。
http://d.hatena.ne.jp/obally/20180412/1523536786
原因はRockchipのRTCが11/31まである扱いをするため、1年ごとに1日ずれるという問題です。
カーネルにはこの問題に対する対応は入っているのですが、どうもRTCからの時刻のとり方の問題かPomeraの元ソフトの内部でも同じ補正を行っているようでDebian側の時刻とずれてしまいます。そのためカーネルに少し手をいれました。

2018/5/28追記
コメントで親指シフトに対応するために”/dev/uinput”がほしいという要望があったため
“CONFIG_INPUT_UINPUT=y”としました。
test_kernel_d32.zip
 

何が動くか

機能 対応状況 備考など
キーボード 実は`(バッククオート)が入力できないような気がします
内蔵LCD
WiFi ほぼ○ BTと同時に動かすと動作が怪しくなる
Bluetooth 有効になっているとWiFiに影響有り
USB △(制限あり) 起動時からHOSTモード設定に変更。
HOSTモードでも内部からのVBUS出力不可のため外からの給電が必要。
suspend/resume ○? Suspend to RAMとResumeは可能。
suspend状態でどの程度電池がもつかは検証不足。
WiFi/BTをONにしたことが有ると(?)復帰ミス発生の可能性あり。

 

注意/制限事項など

前回からの変更/追加分のみ

■試験的にX環境(xfce4)を入れてありますが、長時間触らずに置いておくと気がつくと反応しなくなっている場合があったので使用する場合はご注意ください。そうなった場合にはCtrl+Alt+F2などで別のttyからログインしてkillするなどしてください。

■Bluetoothを有効化するコマンドを追加しましたが、Bluetooth機器と接続しているとWiFiと干渉するのかWiFiの通信が不安定になります。その場合はBluetoothを切断してみてください。
 

インストール手順

■準備
 内蔵eMMC(4GB)のバックアップをとるために十分なサイズのSDカードが必要です。
 インストーラとrootfsの入ったSDカードイメージを書き込むために16GB以上のSDカードが必要です。
 公開前のテストにはSanDiskのUltra 16GBを使用しました。(48MB/sの記載のあるもの)

0. 本体のバックアップをとる
 DM200 eMMC NAND バックアップ/リストア ツール
 使い方はzipを展開するとできるreadme.txtを読んでください。
 取得したファイルはPCなど別の機器上に保存しておいてください。

1. インストーラのダウンロードとSDへの書き込み
 DM200 Debian インストーラー v0.2 (今回は800MBほど有ります)
 readme.txtにも記載していますが、展開するとdm200_debian_16GB.imgができるので、Windowsの場合はWin32DiskImagerやrawrite、Linux,MacならddなどでSDカードの先頭から書き込んでください。
 RasPiのSDイメージインストール手順が参考になります。

2. インストール実行
 readme.txtの手順でインストールを実行してください。

3. Linux起動手順
 インストールが正常に完了すると自動で再起動がかかり標準ロムが動作するので、一度電源を切って”左Alt + 右Shift + 電源キー”の3つ長押しで電源を入れます。
 POMERAのロゴが出たら離してOK。Linuxの起動ログが流れてコンソールのログイン画面が表示されるはずです。

4. ログイン
 起動後は通常のLinuxと同様に使用可能です。
 アカウントはrootのほかにdm200というユーザーを作成してあります。
 rootのパスワードはroot、dm200のパスワードはdm200です。

■前回のv0.1がインストール済みの本体に今回のバージョンを入れる場合、一度リストア手順を行ってもとに戻してから再度インストールを行ってください。 
なお、v0.1を使っていてその時のrootfsをそのまま使いたい場合はそのSDカードは置いておき、別のSDカードで一度リストアとインストール手順を行ったあとSDカードを差し替えることで前の環境を使用することも可能です。
 

変更点、追加など

・起動時にkmsgを出さないようにしたので起動が早くなった(気がする)

・BluetoothのON/OFF (要root権限)
 有効化
  #/opt/bin/bt_switch on
 無効化
  #/opt/bin/bt_switch off

  – 有効化コマンド実行後、コンソールに結構な量のログが流れるのは正常動作です。ログ出力を停止すると正常に動くかなくなるためそのままにしてあります。数行出て止まった場合にはONに失敗していますので一度offコマンドを実行してから再度onしてみてください。
  – 有効化後のデバイスの接続方法については次の項目で記載します。

・Suspend / Resume (要root権限)
 #/opt/bin/sus2ram
 でSuspend to RAMの動作が動きます。Resumeは電源ボタンを押してください。
 - コマンド名が標準の別のもの同じだったため変更しました。
 - 無線機器の電源処理を追加したため、waitを少し多めに入れています。そのためコマンドを実行してから画面が消えるまでにタイムラグが5秒ほど増えました。(他に方法があるかは確認中)

・dm200ユーザーでログインした際にfbtermとuim-fepが標準で起動するように設定を追加。
 - 不要な場合は.bashrcの最後の方を見て消してください。

・wifi接続設定(wpa_supplicant.conf)の参照場所追加
 - vfat領域(windowsから見える領域)にsettingsフォルダを追加して、中にwpa_supplicant.confのひな型を置くようにしました。ファイルの下の2行を変更して置いておけばwifi_switch
on実行時にこのファイルの設定を読みに行くようにしてあります。(起動時に/tmpにコピーしてそれを見る、Linux環境で変更したら再起動が必要です)

・X関係とxfce4のファイルを一式追加
 $startx
 でGUI画面になります。
 ただし、内蔵ポインティングデバイスがないためUSBまたはBluetoothでマウスなどを接続する必要があります。
 また、初回はダイアログが出るのでAlt+Tabを押してダイアログにフォーカスを当てたあとSpaceでどちらかのボタンを押してください。
 ポインティングデバイスがない状態でメニューを開くにはAlt+F1で左上のドロップダウンが開きます。
 なお、fbtermで/dev/fb0を使っているとXが起動できないため、標準のconsoleに戻って実行する必要があります。

Bluetooth ON後の接続手順

今のところGUIでのデバイスの接続方法は無いため、以下の手順を参考にペアリングと接続を行う必要があります。一度接続すればあとは電源を切っても次の起動でbluetoothのon操作を行うだけで認識するようになります。

$bluetoothctl

として、hci0というデバイスが見えれば本体側は有効化できています。
次につなぎたいデバイスをみつけるため、接続相手の機器をペアリングモードにして

[bluetooth]scan on

とコマンドを入れるてしばらく待つと、ペアリング可能な機器のアドレスが表示されます。
接続機器のアドレスが分かったら

[bluetooth]pair 機器のBTアドレス
[bluetooth]trust 機器のBTアドレス
[bluetooth]connect 機器のBTアドレス

とすれば接続完了です。(この手順はBTマウスで確認)
なお機器のBTアドレスは途中まで入力してTabを押すと補完されます。
exitでbluetoothctlを抜けてください。

前回からの注意事項にもありますが、 Bluetooth機器と接続しているとWiFiの接続が不安定になります。その場合には接続機器側の電源を切るかbt_switchでoffにしてみてください。
この問題は今のところ対処方法が有るのかも不明です。
 

TODO

・電池残量低下時の通知/シャットダウン処理追加
・キー配列の変更 (多用するHOME,End,PageUp,PageDownをどこかのキーコンビネーションで使えるようにする)
・BluetoothとWiFiを同時に有効にするとWiFiが切れる問題の調査
・USBがデバイスモードのときに別のデバイスとつないだ際にVFAT領域を見えるようにするための処理追加
・まれに起動に失敗する場合がある件について調査(おそらく修正完了)

Linux on Pomera DM200 人柱版 その2」への32件のフィードバック

  1. Sean

    Thank you for sharing such a great information and files. I will definitely give this try on my own. before that, I have a couple of questions to you. Can I install a Korean key input software in your debian image? and will the instant on-off still work after debian is installed? thank you in advance.

    返信
  2. ichinomoto 投稿作成者

    Thanks for interested in my soft.

    Sorry, this image is specialized to japanese language.
    But “Debian on Pomera DM200” is normal Debian Linux (but arch=ARM). So, you can change language environment to Korean.

    Except “C” and “ja.JP_UTF8” LANG is not enabled, so you have to enable Korean setting in /etc/locale.gen and do locale-gen command.
    “LANG” of dm200 account is set to ja.JP_UTF8, so you have to change this in .bashrc .

    You can install Debian supported packages listed on https://packages.debian.org/stretch/.

    Instant on-off like normal Pomera DM200 is not supported, but “Debian on Pomera DM200” can suspend to RAM.
    command:
    sudo /opt/bin/sus2ram
    Push power button to resume.

    返信
  3. t_j_baldwin

    ありがとうございます。

    さっそくやってみて、Debian動かして楽しんでました。
    Debian 側の動きがおかしいので、最初からやり直そうと、バックアップのファイルからReadMeの通り、mmcblk0p14.imgとmmcblk0p15.imgをリストアし直してから、再度インストール・イメージを書いたSDを入れて、”左Alt + 右Shift + 電源キー”の3つ長押し したのですが、Linux起動ログが流れず FACTORY MODE に落ちてしまいます。

    何か心当たりありますでしょうか?

    # POMERA自体は文鎮化してないのですが、Debianで遊べなくなってしまった・・・

    返信
    1. ichinomoto 投稿作成者

      すみません、今更の返信ですがおそらくインストーラに使用しているSDカードのvfat領域上にインストール完了情報(INSTALL_COMPLETEDというファイル)があるのではないかと思います。
      インストール済みの場合は再度インストーラが動作しないようにこのファイルがある場合にはインストーラが動作しないようにしてありますので、もし有る場合にはこのファイルを消してみてください。
      SDカードを1から作りなおした場合にはこの問題は発生しませんので、もしかしたらすでにそちらで解消済みかもしれませんね。

      返信
  4. ktg

    こんなにも素晴らしいものをありがとうございます。
    どこでもプログラミングできるようになりました。

    返信
  5. nngc

    このハックのおかげでポメラの可能性が格段に向上しました。
    とても感謝しています。ありがとうございます。

    一点質問させてください。
    現在、/dev/uinput を使用したプログラムを使いたいと考えているのですが、
    何かしらの方法で /dev/uinput を有効にすることは出来ませんでしょうか?

    返信
    1. ichinomoto 投稿作成者

      カーネルのconfigの問題ですね。
      https://github.com/ichinomoto/dm200_debian_kernel/blob/master/arch/arm/configs/dm200_defconfig#L1473
      のとおり、現状では有効になっていません。

      カーネルのコンパイルと置き換え方法がわかるようであれば
      CONFIG_INPUT_UINPUT=y
      にしてカーネルをコンパイルして置き換えてみてください。
      もしくはモジュールだけコンパイルしてinsmodするかになります。

      大した手間でもないのでこちらで組み込みで有効にしたカーネルを作っても構いません。
      この機能が有効に使えるようであれば公開版のカーネルに入れても良さそうですし。

      返信
      1. nngc

        返信ありがとうございます。
        /dev/uinputを有効にできればoyainputなどを使用してlinux上でも親指シフトが
        可能になるため、少なからず需要はあると思います。
        出来ましたら、次期カーネルの機能追加の候補として考慮して頂けるとうれしいです。

        返信
        1. ichinomoto 投稿作成者

          そういう用途が有るのですね。
          では次で入れておきます。
          他にも入れたいものが有るので予定は今週末ぐらいということで。

          返信
          1. nngc

            ご対応ありがとうございます。
            カーネルがリリースされ次第検証し、結果を報告させて頂きます。
            他の追加要素も楽しみにしております。

          2. nngc

            /dev/uinputを有効にしたカーネルのリリースありがとうございます。
            早速試させて頂きます。

          3. nngc

            遅くなりましたが、d32カーネルとoyainputでlinux上での親指シフトが無事動作しました。
            本当にありがとうございました。

          4. nngc

            /dev/uinput の対応をして頂いてからDM200を使わなかった日はないと言って
            いいくらい、Linux on Pomera DM200 のお世話になっています。
            今では文章作成からブログ更新、メール、プログラミング、サーバーの管理まで仕事の大部分を
            DM200でまかなえており、あまりの依存具合に予備のDM200も用意しているくらいです。
            このハックを公開して頂けたことで私の生活は格段に豊かになりました。
            本当に感謝しています。駄文失礼いたしました。

          5. ichinomoto 投稿作成者

            わざわざありがとうございます。
            そこまで使ってもらえると公開したかいがありますね。

  6. 吉田健一

    echo disk > /sys/power/stateとした後、rebootすると必ずその直後に復帰し、その後の作業は全てなかった事になり、pomeraにも戻らなくなりました。本体ROMの何処かを書き換えてしまったのかとおもいます。
    元に戻せないでしょうか?kernelは
    Linux version 3.10.0 (root@maya) (gcc version 4.9.2 (Debian 4.9.2-10) ) #28 SMP PREEMPT Sat Jul 8 10:53:40 UTC 2017
    を使っています。

    返信
    1. ichinomoto 投稿作成者

      まずpomeraが起動できる状態に戻す方法ですが、Debian化の前にnandのバックアップを取ってあり、現在linuxが動作する状態であればmmcblk0p5の領域をddで書き戻してください。
      これでpomeraが起動できるように戻ります。
      sysfsを触る知識があればこの書き方でわかりますでしょうか。

      ちなみになぜこのようなことになるかというと、kernelのhibernation処理がpomeraで採用されているwarp!!という実装に置き換わっており、hibernation処理が動作するとmmcblk0p5に書き込むようになっているためです。
      また、ubootの実装はそのwarp領域から復帰するような処理になっています。
      warp!!についてはこちら
      http://www.lineo.co.jp/modules/warp/

      hibernationについては書くとやって戻せなくなる人が出るかと思い、あえてこの件は同人誌の中にしか書かずサイトの方にはsuspend to ramの話しか書いていませんでした。

      現在私の方では完全に文鎮になってからでもなんとか復帰できそうなことがわかっており手順は構築中です。

      なおwarpの実装は結合度高めでkernel(とuboot)に組み込まれているため、現状では外したものはコンパイルできていません。
      そのうち外したいのですが、それよりはkernelのバージョンを上げたいと思っています。(これもかなり大変ですけど)

      返信
  7. 吉田健一

    お返事ありがとうございます。warpは不勉強で知りませんでした。助かります。
    自分の失敗ごまかすわけではないですが、mmcblk0p5からの起動はすごく速いですね。
    電源オフの状態からでも、Xが立ち上がって即利用可能な状態になるので、この状態もちょっと魅力的でした。
    /mnt/vfatにデータおいてumountしてからhibernateして使うようにするのが便利かもしれません。
    /varの下とか問題起こすかもしれませんが、、、

    返信
    1. ichinomoto 投稿作成者

      そうですね。
      提供されているubootとkernelのソースから見た感じでは、warpの実装ではubootからkernelを経由せずに直接保存されたイメージからresumeする動きのようなので復帰が早いです。
      さすが売り物として出しているだけあります。

      pomeraの機能は使うことはなく、Debianとして使うだけというのであればそのような使い方はありかもしれません。
      書かれている通りfsの扱いが大丈夫かというのが気になるところではありますが。

      返信
      1. dm200user

        横から失礼いたします。僕も吉田様と同様、 echo disk > /sys/power/stateを試してしまい、フル再起動に失敗しハマってしまいました。nand restoreからddしようとおもったのですが、v1.5のバックアップを保存していたSSDが破損しまったため正常なmmcblk0p5.imgがなく困っております。。imgをddしなくとも復旧する方法を、何かご存知ないでしょうか??

        返信
        1. ichinomoto 投稿作成者

          すみません返信遅くなりました。

          本体内部にはバックアップ領域があるため、それをコピーすることでwarp領域(/dev/mmcblk0p5)を以前のものに戻すことは可能です。
          mmcblk0p19のラベルがorg_warpとなっているのでこの中身をmmcblk0p5に上書きすることで復帰できるはずです。
          もし実行する場合には両方のサイズを確認して同じか確認してみてください。確か512MBの領域はmmcblk0p5とp19の2つだけだったと思いますので同じであれば正しいはずです。
          念の為dumpしてlinuxマシンなどで中身を確認してみると良いかと思います。

          もしくは公式のアップデータを分割すると領域のデータがそのまま入っているのでそれを上書きするという手も有ります。
          参考情報はこちら
          https://github.com/ichinomoto/dm200_tools/commit/51ac739348d68c17571796eec5fea8daa8ac64a4

          返信
          1. dm200

            ichinomoto様

            お忙しい中、ありがとうございました!
            parser.shを公式v1.5に当ててwarp領域を抽出することで、リストアに成功しました!

            復旧用にもう一台買おうか迷っていたので、本当に助かりました。
            ありがとうございます。

          2. ichinomoto 投稿作成者

            無事復旧できたようで良かったです

  8. ktg

    DM200のLinux化ありがとうございます。ありがたく使わせてもらってます。
    vfat内の_sdboot.sh が実行されるための条件を、ご存知でしたら教えて頂けないでしょうか。
    (pomera fw v1.3です。)

    最近、たまたまSDカードが壊れてしまいました。
    再度SDカードにDM200_debian_installer_v0.2.zipをddしたものを使って起動したのですが、
    挙動を見る限り、_sdboot.sh が実行されておらず、install.shも動いていないように見えます。
    なぜかdebianは立ち上がっていますが、rockchipのfirmwareが/opt/etc/下になく、無線が使えませんでした。
    (その後、バックアップイメージの/systemからPC上で手動でコピーして無線が使えています。)

    返信
  9. ごとぅ

    元々ポメラは持っていたのですが、Debian化が可能と聴き、早速DM200を購入しました。
    SDカードへのNANDバックアップイメージ作成ファイルコピーなど行いましたが、
    ALT+SHIFT+POWERでPOMERAロゴが表示されたあと、真っ黒い画面のまま。
    最近購入したのでファームがVer.1.4になっていますが、この影響は考えられますか?
    SDカードはFAT32でフォーマットした32GBです。
    POMERAからのアクセスは問題ありません(backup用にコピーしたresフォルダの存在も確認できています)
    ファームを落とさなければだめでしょうか?

    返信
    1. ichinomoto 投稿作成者

      すみませんコメントの確認が遅くなりました。
      NANDバックアップなどが動作したということであれば、一通りの手順は動作するはずです。
      ロゴのあとに真っ黒になったということはkernelとinitramfsは上書きできていると思うので、このあとの処理で考えられるのはSDの認識が怪しいか正しく書き込めていないためにrootfsの読み込みに失敗しているあたりになると思います。
      もし他に手持ちのSDカードがありましたらそのSDカードにイメージを書き込んで試してみてください。
      またこれで動作しない場合はkernelかinitramfsの書き込みに失敗している可能性がありますので最初からやり直してみてください。

      返信
  10. ピンバック: 最近ポメラDM200を買いました |

  11. ncc

    すばらしいハックをありがとうございます。
    ポメラのファームがVer1.4までは問題ありませんでしたが、Ver1.5にあげたところ、
    全角/半角キーとMenuキーがlinux上で使えなくなってしまいました。
    1.4に戻すと問題なく使えるのですが、Linux上の設定の変更でどうにかなるものでしょうか?

    返信
    1. ichinomoto 投稿作成者

      すみません今頃コメントに気が付きました。
      ちょっと確認してみます。

      返信
  12. -

    自分にもlinuxインストールできました!情報・ファイル提供ありがとうございます。emacsがつかえる小さいPCがほしかったので、ちょうどよかったです。

    返信
  13. kosho

    DM250でlinuxインストールしたのですが、Wifiの設定でつまづいています。

    Wi-fiをonにしようとして、$sudo /opt/bin/wifi_switch on すると、

    Error for wireless request “Set Power Management” (8B2c) :
    SET failed on device wlan0 ; Interrpted system call.
    Successfully initialized wpa_supplicant
    n180211: Could not set interface wlan0 flags (UP): Operation not permitted
    n180211: deint ifname=wlan0 disabled_11b_rates=0
    Could not set interface wlan0 flags (UP): Operation not permitted
    WEXT: Could no set interface ‘wlan0’ UP
    wlan0: Failed to initialize driver interface

    というlogが出てwlan0がonにできません。
    チェックするところがありますでしょうか?

    返信
    1. ichinomoto 投稿作成者

      かなり見ていなかったのですでに解決していたらすみません。
      こちらで公開しているrootfsイメージはデフォルトでは起動時に行っているDM200とDM250の機種判定処理が良くないため
      /etc/init.d/dm200_wirelessを以下のファイルに置き換えてみてもらえないでしょうか。
      https://github.com/ichinomoto/dm200_tools/blob/master/rootfs_script/files/etc/init.d/dm200_wireless

      またほかの場所でも機種チェック処理が良くないためこちらのコミットで修正を行っています。
      こちらも併せて確認してみてください。
      https://github.com/ichinomoto/dm200_tools/commit/939c3ee71ba0c1b930afc00d1741b94482c85017

      返信
      1. 匿名

        質問した人ではありませんが、同様のエラーでWiFi接続できませんでしたが、if文のところを修正したら解決しました。
        ありがとうございました。

        返信

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です