Debian on Pomera DM200/DM250

投稿者: | 2022年8月16日

2022/9/27
FrameBufferの色深度はもともとのカーネルの設定では16bppでした。Pomera標準ソフトは白黒表示なのでそれで全く問題はありません。
DM200のkernelをさわりだした当初に、パネルが24bit対応だとわかったためせっかくならということで32bppに変更していました。
ただこれにより描画のためのデータ転送量が大幅に増えてしまい表示が遅くなる原因にもなっています。そのため16bppに戻したkernelを作成しました。
色深度32bpp->16bppへの変更でもパネルの性能のせいか見た目はほとんど変わりがわからないように見えるので、今後作成する場合も16bppで作成しようと思っています。

2022/9/27
Device TreeでCPU速度上限が通常より低く設定されている部分をkernel上で強制的に上書きしたものを以下のインストーラの項目のところに置きました。
処理速度が足りないという場合は入れ替えてみてください。
場合によって電源長押しでも復帰できない状態になる場合があるようなので一旦取り下げます。
続報:USBハブ経由で電源を接続していても電池がなくなったことが原因だと思われる、ということなので高負荷時にどれぐらい電池を食っているのか等をこちらでも確認してから再度公開にしようと思います。
続報2:
DM250でUSBハブを介して電源を入力すると接続が、ACとして認識される場合(2A程度流れている)、USBとして認識される場合(500mA程度流れている)、ほとんど通電していない場合(100mA以下)があるようで、電流値が少ない認識だった場合に電池が減っていくことが有りました。抜き差しすると認識が変わったりするのですが詳細までは追えていません。
Type-Cポートへの接続処理に関してはDM250でソースが変わっている部分があり、変更分を取り込んだだけでちゃんと追って見てはいないのでどこかで一度確認してみようと思います。
今のところ対応としてはUSBハブ経由で電源を接続している場合には運用でカバーしてもらえればと思います。(たまにバッテリー残量を確認しつつ使ってください…)

2022/8/16
とりあえず公開しても大丈夫かなという程度には動くようになったのでα版という扱いで公開します。
バックアップ・リストアツールとkernel/initramfsインストーラは問題ないと思うのですが、rootfsイメージの調整がしきれていません。
ただ今回はインストーラとrootfsのSDイメージを分けたので、SDカードの差し替えによるrootfsの交換はしやすくなると思います。

現状の問題
bluetoothが正常に動作していません。DM200/DM250どちらかでも良いので、動かせた場合は何をしたら動いたかをコメントやtwitter等で書いていただけると助かります。
なお20220816版のrootfsではDM250の場合チップとの初期通信処理が正常に動いていないのでおそらく全く動かないと思います。

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

これは何か

インストーラでPomeraの内蔵eMMCにあるリカバリkernelとリカバリinitramfs領域を書き換えます。
書き換え後に起動手順を行うと書き換えたkernelとinitramfsを使って、SDカードの2番目のパーティションに置いたrootfsのDebian(bullseye)が動きます。

何が動くか

機能 対応状況 備考など
キーボード
内蔵LCD
WiFi ほぼ○ BTと同時に動かすと動作が怪しくなる
BTを使っていなくてもDM200で速度が出ない報告あり。
個体によっては常に1Mbps出ないとのこと。
確認しているDM200とDM250本体では1〜20Mbps程度。
Bluetooth アルファ版では未確認。
有効になっているとWiFiに影響有り
USB △(制限あり) 起動時からHOSTモード設定に変更。
HOSTモードでも内部からのVBUS出力不可のため外からの給電が必要。
DM250では先にハブに給電している状態で本体に差し込まないと認識しない。
suspend/resume ○? Suspend to RAMとResumeは可能。
suspend状態でどの程度電池がもつかは検証不足。
WiFi/BTをONにしたことが有ると(?)復帰ミス発生の可能性あり。
注: hibernation(suspend to disk)はしないでください。これを行うとPomeraの標準環境を上書きしてしまいます。
戻すにはバックアップ時に取得するmmcblk0p5.imgが必要です。

準備

 内蔵eMMC(DM200は4GB、DM250は8GB)のバックアップをとるために十分なサイズのSDカードが必要です。16GB以上を推奨。
 rootfsの入ったSDカードイメージを書き込むために8GB以上のSDカードが必要です。
 SDカードは古いものを使うと特に書き込みでの待ち時間がかなり伸びるためなるべく新しめのものをおすすめします。

DM200/DM250 eMMC NAND バックアップ/リストア ツール

DM200/DM250 eMMC NAND バックアップ/リストア ツール v0.2

使い方:
 1. fat32でフォーマットしたSDカード(DM200は8GB以上、DM250は16GB以上)にbackupフォルダの中身をコピーする。
 2. Pomeraの電源ボタンを長押しで電源を落とし、1で作成したSDカードを入れる。
 3. 左Alt+右Shiftを押しながら電源ボタンを押して電源を入れ。Pomeraのロゴが表示されて3秒程度の間は3ボタンとも押したままにしておく。
 4. 自動で処理が進むのでしばらく待つ。終わると自動で再起動する。
 5. SDカードをPCで見るとbackupフォルダの中にバックアップファイルが保存される。(DM200では25個、DM250では27個)

保存したバックアップファイルはPCなど別の機器上になくさないように保存しておいてください。
もとに戻す際に必要になります。

kernel/initramfsインストーラ

これがDebian化のためのメイン部分です。

kernel/initramfsインストーラ v0.2

使い方:
 1. fat32でフォーマットしたSDカードにzipファイルの中身をすべてコピーする。
 2. Pomeraの電源ボタンを長押しで電源を落とし、1で作成したSDカードを入れる。
 3. 左Alt+右Shiftを押しながら電源ボタンを押して電源を入れ。Pomeraのロゴが表示されて3秒程度の間は3ボタンとも押したままにしておく。
 4. 自動で処理が進むのでしばらく待つ。終わると自動で再起動する。

DM200とDM250はkernelが違うので別の表示になります。

kernel update:
dm2x0_kernel_update_20220926:
20220924版の変更に加えて、描画高速化のためにFrameBufferの色深度を16bppに変更
dm2x0_kernel_update_20220924:
USBジョイスティック対応、CPU1.3GHzまで有効(テスト版) 電源長押しでも復帰できない状態になる場合があるようなので一旦取り下げます。
 標準の設定ではCPUの周波数は816MHzまでしか上がりませんが、SoCの上限である1.3GHzまで上がるように変更したものです。zipを展開してkernel_update.shを実行するとkernelを書き換えます。
 このkernelに置き換えることで電池の消費量増加、発熱、フリーズの可能性が有ります。CPU速度が欲しい用途向けなので文書作成用などの軽めの用途で使用する場合は不要です。

#cpufreqのgovernorをperformanceに設定するなど高速で固定するとフリーズすることは有りますが、そういう使い方をしなければフリーズしたりハードに影響があることまでにはならなさそうなので再度公開にしました。
リスクは有りますのでその辺りは承知の上でご利用ください。

追記事項:
この下の項目に置いてある8/16版のrootfsに入っている一部のスクリプトでは機種判定をメモリ使用可能量で判定しています。しかし上のkernelに変更するとこの数値が変わってしまいDM250の場合に正しく判定できなくなってしまいます。
20220924版、20220926番を使用する際には以下を参考に該当ファイルの書き換えをお願いします。
https://github.com/ichinomoto/dm200_tools/commit/939c3ee71ba0c1b930afc00d1741b94482c85017
判定処理をDM250にしか存在しないブロックデバイスの有無で判定するように変更しています。
#変更が溜まってきたのでそろそろ新しいrootfsを作ろうと思います…

DM200/DM250用 Debian rootfsイメージ

バージョンはDebian 11(bullseye)です。
pomera_dm2x0_debian_20220816.zip

使い方:
 1. SDイメージを展開し、etcherなどでSDカードに書き込む。
 2. Pomeraの電源ボタンを長押しで電源を落とし、1で作成したSDカードを入れる。
 3. 左Alt+右Shiftを押しながら電源ボタンを押して電源を入れ。Pomeraのロゴが表示されて3秒程度の間は3ボタンとも押したままにしておく。
 4. 自動でSDカードのrootfsパーティション拡張とswap領域の作成を行う。(ここはサイズ次第ではだいぶ時間がかかる。処理の詳細は下の方に記載)

 5. 4の処理が終わると自動で再起動されるので、一度電源を落として3の手順で再度電源を入れる。
 6. Debianの起動ログが流れてログインプロンプトが表示される。(初回起動で機種にあった設定を行います)
 7. ユーザー名”pomera” パスワード”dm200″に設定してあるので、一度ログインして再起動する。(6の設定を反映するため)

以降は3の手順で電源を入れるとDebianを使用可能になります。
なおDM200の場合のみdebianの初回起動時に標準ROMの時計をずらしてしまうので、再起動後に標準ROMの状態で時計を合わせてください。2回目以降はずれなくなるはずです。

その他いろいろ
・rootでのログインは無効にしてあります。

・初回起動時はkernel module関係でFAILEDが表示されますが、初回起動で行われる処理で対応が行われて出なくなります。

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

・ wifiを有効無効
 有効
 sudo /opt/bin/wifi_switch on
 無効
 sudo /opt/bin/wifi_switch off

・bluetoothの有効無効
 有効
 sudo /opt/bin/bt_switch on
 無効
 sudo /opt/bin/bt_switch off
20220816版では正常動作を確認できていません。

・バックライトの明るさ設定
 - wifiの設定と同じ場所にbacklight.confを置いてあります。ここに数値を書いておくと起動時に読み込んでその明るさになります。
  なお30以下はバックライトが消灯するため指定しないようにしてください。)
 - 無変換+F1でバックライト-5、無変換+F2でバックライト+5 が動作するようなアプリを入れてあります。(この処理を行っているアプリはソースが残っていないためそのうち作り直す予定)
 - 直接数値を指定したい場合は以下のコマンド(数値は40〜128ぐらいが良いです。低すぎるとバックライトが消えて何も見えなくなります)
  sudo /opt/bin/backlight 70

・バッテリー残量表示
 battery

・suspend
 sus2rum
 復帰は電源キー

・日本語コンソール
 fbtermコマンドでコンソールで日本語が使える状態になります。
 入力モードの切り替えはctrl+spaceです。

・X関係
 xfce4環境を入れてあります。
 $startx
 でXを立ち上げるとGUI画面になります。
 日本語入力する場合はterminalなどの文字が入力できる状態でMenu+spaceを押すとmozcに切り替わるのでその状態でcapsキーか全角半角キーで入力モードが切り替えできます。
 ただし、内蔵ポインティングデバイスがないためUSBまたはBluetoothでマウスなどを接続する必要があります。
 ポインティングデバイスが無い状態でメニューを開くにはAlt+F1で左上のドロップダウンが開きます。
 なお、fbtermで/dev/fb0を使っているとXが起動できないため、標準のconsoleから実行する必要があります。

・4の手順で何を行っているか。
 初回に自動でパーティションを拡張する処理を入れてあります。
 この処理でSDイメージには先頭に2GBのvfat領域(ここは触らない)、2番目にdebianのrootfs領域(ここを最大に拡張)、3番目に(後端から)1GBのswap領域という構成になります。
 (#わかる方向け。swapに1GBも取られたくない場合にはSDイメージをSDカードに書き込んだ後、そのままvfat領域にある_init.shの中のpartedで指定している数値を変更してください。initramfsでこのファイルの処理を実行します。)

TODO

・電池残量低下時の通知/シャットダウン処理追加
・キー配列の変更 (多用するHOME,End,PageUp,PageDownをどこかのキーコンビネーションで使えるようにする)
・Bluetoothを使えるようにする
・USBがデバイスモードのときに別のデバイスとつないだ際にVFAT領域を見えるようにするための処理追加

寄付とかしたい場合

以下のリンクから以前DM200でDebianを動くようにしたときのまとめを購入してもらえると(boostしてもしなくても)喜びます。
Debian on Pomera DM200