RasPi作業メモ

工作少年がやってきて、RasPiが動かないというのでいろいろトラブルシュート。

  • 動かないのは前回あげたPi1 Bと自分で購入したPi3両方
  • 電源はPi3と一緒に買った2.5Aのやつ
  • モニタは三菱のRDT1713VMというアナログ+DVIのもの
  • HDMI-VGA変換で接続
  • キーボードは有線、マウスは無線

という環境。症状としては

  • RasPi3は起動するけどエラーと出る
  • Pi1は画面が出ない

とのこと。ウチの環境(800x600の古いモニタ + HDMI-VGA変換)に合わせて/boot/config.txtのHDMI設定を変えてたかもしれないので、まずはウチで動いてた状態に戻す。キーボードもマウスも動いてたものに交換。
→やっぱり画面出ない。HDMIモニタに繋いでも動かない。

ネットワーク経由で入ろうとしたけどIPアドレスどうしてたか忘れた。もう、全部焼き払うことにする。

  • 公式からダウンロードするのは超絶遅いので、ダウンロードボタンを押してファイル名がわかったらググる
  • jaistftpミラーを使用

昨今のRaspberry Pi情報に追いつく

NOOBS
Raspbian
    • ddで直書きできる方がイメージを書く時間=インストール時間である上、RasPiが不安定かもしれない場合でも信用できる状態が構築できるので、やっぱ便利。最終的に全部こっちにした。
    • イメージが4GBくらいになってるので少なくとも8GBくらいのカードが必要
    • SDカード挿入→mountコマンドでデバイスファイル名を確認。今回は/dev/disk1s1 on /Volumes/UNTITLED (msdos, local, nodev, nosuid, noowners)の出力があったので/dev/disk1。→Disk Utilityでアンマウント→ddコマンドで書き込み→ブートパーティションが自動マウントされるので、またDisk Utilityでアンマウント→取り出して使うという流れ。
    • /dev/disk1にバッファリングなしで書き込むコマンドは sudo dd bs=4M if=2016-11-25-raspbian-jessie.img of=/dev/rdisk1
    • ダウンロード元は http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian/images/raspbian-2016-11-29/2016-11-25-raspbian-jessie.zip
    • MacでうまくunzipできずWindows10でやった
PIXEL
    • 新しいデスクトップ環境。Raspbianを入れたら勝手に動く。
    • 2015-02-16-raspbian-wheezy当時はデフォではXは動かなかったけど、いまは動く。
    • ちゃんと使ってないけどデスクトップのメニュー内容とかはwheezyと同じ感じ。
すばらしい、と思ったこと

Raspbianをddで書き込んだSDカードをRasPiに突っ込んで起動すると、勝手にパーティションを切って最大限に利用してくれる。
コントロールしたいことがある場合は困るかもしれないけど、32GBとかのやつでも何も考えずに進むのは正直感動した。
この自動拡張を抑止したいときは http://raspberrypi.stackexchange.com/questions/47773/disable-auto-file-system-expansion-in-new-jessie-image-2016-05-10 にあるように、/boot/cmdline.txtからinit=/usr/lib/raspi-config/init_resize.shの行を除けばよいらしい。

インストールの流れ

NOOBS
    • 起動するとインストールイメージを選ぶ画面が出るけどネットが繋がってなければRaspbianしか選べない
    • 起動してインストールイメージ選んでインストールという流れ
    • Pi1はこれでいけたけど、Pi3は途中でイメージが壊れてると言い出した
Raspbian
    • 起動→勝手に/をリサイズ→PIXEL起動。ちょう便利。

電源

  • Pi3はけっきょく電源っぽい感じ。ACアダプタをスマホの2Aのやつに変えたらPIXELが起動するところでコケるようになった。
  • ウチにPi3環境がないので入れ替え確認ができないのがイタかった。
  • 電源はSwitch Scienceのやつが欲しいねやっぱり。
  • いま思ったけど、ATX電源の5VをUSBに変換するアダプタとか作っとくと便利かも。
  • USB簡易テスターみたいなやつがぜんぜん信用出来ない…。ちゃんとした電流計が使いたい。

モニタ

  • Pi1が起動するようになったので三菱のモニタを使えるように/boot/config.txtを編集
  • http://elinux.org/RPi_Configuration を見るべし
  • hdmi_force_hotplug=1 をやって動かないところで時間切れで諦めたけど、hdmi_safe=1 を試すべきだった

まとめ

だいぶ勘が鈍ってた。五里霧中な感じで4時間くらい作業してこの状態、というのはだいぶ情けない。電源はもっとマトモなのを手配しとく必要があるし、HDMIまわりはちゃんとメモを作る必要がある(追記2に書いた)。

追記

  • 電源は2A程度でも動くという話があり(https://www.switch-science.com/catalog/2650/ など)、だったらこのPi3個体がおかしいかも。
  • うまく動いてないRasPiで/boot/config.txtを編集したいときは、SDカードを他のマシンに挿すと/bootがマウントされて編集できる。べんり!
  • 同じくうまく動いてないRasPiを操作したいときはsshで入りたいが、最近のraspbianはデフォルトではsshdを動かさない。touch /boot/sshすると(/bootにsshという空ファイルを作ると)sshが動くようになり、普通にuser=pi、password=raspberryで入れる。以後はsshが動いてるので、常時動かす場合これはセキュリティリスクですわよ。いろいろ変更すべし。
  • 安定してからオーバークロックしてみたら普通にいける。

追記2: どろぬまhdmi-vga変換

現状
すばらしいコマンドがあるよ
  • モニタの対応hdmiモードを調べるコマンドが http://elinux.org/RPiconfig の"Which values are valid for my monitor?"に載ってる。
    • CEA(hdmi_group=1)でサポートしてるモード: /opt/vc/bin/tvservice -m CEA
    • DMT(hdmi_group=2)でサポートしてるモード: /opt/vc/bin/tvservice -m DMT
    • 現在のモード: /opt/vc/bin/tvservice -s

それぞれ

pi@raspberrypi:~ $ /opt/vc/bin/tvservice -m CEA
Group CEA has 9 modes:
  (prefer) mode 1: 640x480 @ 60Hz 4:3, clock:25MHz progressive 
           mode 2: 720x480 @ 60Hz 4:3, clock:27MHz progressive 
           mode 3: 720x480 @ 60Hz 16:9, clock:27MHz progressive 
  (native) mode 4: 1280x720 @ 60Hz 16:9, clock:74MHz progressive 
           mode 16: 1920x1080 @ 60Hz 16:9, clock:148MHz progressive 
           mode 17: 720x576 @ 50Hz 4:3, clock:27MHz progressive 
           mode 18: 720x576 @ 50Hz 16:9, clock:27MHz progressive 
           mode 19: 1280x720 @ 50Hz 16:9, clock:74MHz progressive 
           mode 31: 1920x1080 @ 50Hz 16:9, clock:148MHz progressive 
pi@raspberrypi:~ $ /opt/vc/bin/tvservice -m DMT
Group DMT has 10 modes:
           mode 4: 640x480 @ 60Hz 4:3, clock:25MHz progressive 
           mode 5: 640x480 @ 72Hz 4:3, clock:31MHz progressive 
           mode 6: 640x480 @ 75Hz 4:3, clock:31MHz progressive 
           mode 8: 800x600 @ 56Hz 4:3, clock:36MHz progressive 
           mode 9: 800x600 @ 60Hz 4:3, clock:40MHz progressive 
           mode 10: 800x600 @ 72Hz 4:3, clock:50MHz progressive 
           mode 11: 800x600 @ 75Hz 4:3, clock:49MHz progressive 
           mode 16: 1024x768 @ 60Hz 4:3, clock:65MHz progressive 
           mode 17: 1024x768 @ 70Hz 4:3, clock:75MHz progressive 
           mode 18: 1024x768 @ 75Hz 4:3, clock:78MHz progressive 
pi@raspberrypi:~ $ /opt/vc/bin/tvservice -s
state 0x12000a [HDMI CEA (1) RGB full 4:3], 640x480 @ 60.00Hz, progressive
pi@raspberrypi:~ $ 

となった。現在のモードは正しいけど、1920x1080とかぜったい対応してない。

考察?
  • 変換アダプタがhdmiモニタとして振る舞い、実モニタ側とはちゃんと通信してないように見える。
    • 通信しないテキトー仕様もありえるけど、VGAケーブルが細いやつで通信線が通ってないとかありえるんじゃないかと思ったり。
役に立った設定、期待に反した設定など
  • DMTのmode 16-18はこのモニタに適切に見えるけど、モニタの対応クロックが24-61KHzなためか映らなかった(tvserviceコマンドの出力はMHzとあるけどKHzだよね?)。RasPiでサポートされてないmode 15(1024x768@43Hz)がたぶんベストマッチ。
  • なぜかhdmi_group=1のhdmi_mode=4および5(720p@60Hzおよび1080i@60Hz)が映る。後者はちらつくけど前者は結構きれい。
  • hdmi_group=1, hdmi_mode=1のVGA固定はかなり強力に思える。hdmi_safe=1より役に立った。
  • hdmi_safe=1: これは、hdmi_force_hotplug=1, hdmi_ignore_edid=0xa5000080, config_hdmi_boost=4, hdmi_group=2, hdmi_mode=4, disable_overscan=0, overscan_left=24, overscan_right=24, overscan_top=24, overscan_bottom=24 を設定した状態らしい。ところがぜんぜん動かない。
  • framebuffer_width=800とframebuffer_height=600の組み合わせ: これだけ設定してもダメっぽい
    • →後から試したらgroup2のmode8-11全滅だったので800x600の設定だったのがアカンかったかも。
    • →640と480でやってもダメだった。
最終的に
  • 疲れた。
  • けっきょくhdmi_group=1のhdmi_mode=5(720p)の、さらにdisable_overscan=1にした。
    • disable_overscan=1で周囲に黒い部分があったのが消えて完璧。
    • でも縦横比は16:9なので4:3だと縦長になっちゃう。
  • マトモなhdmiモニタに繋ぐときはこの設定をコメントアウトする。コメントアウトしない場合:
pi@raspberrypi:~ $ /opt/vc/bin/tvservice -m CEA
Group CEA has 12 modes:
           mode 1: 640x480 @ 60Hz 4:3, clock:25MHz progressive 
           mode 2: 720x480 @ 60Hz 4:3, clock:27MHz progressive 
           mode 3: 720x480 @ 60Hz 16:9, clock:27MHz progressive 
  (prefer) mode 4: 1280x720 @ 60Hz 16:9, clock:74MHz progressive 
  (native) mode 5: 1920x1080 @ 60Hz 16:9, clock:74MHz interlaced 
           mode 6: 720x480 @ 60Hz 4:3, clock:27MHz x2 interlaced 
           mode 16: 1920x1080 @ 60Hz 16:9, clock:148MHz progressive 
           mode 17: 720x576 @ 50Hz 4:3, clock:27MHz progressive 
           mode 18: 720x576 @ 50Hz 16:9, clock:27MHz progressive 
           mode 20: 1920x1080 @ 50Hz 16:9, clock:74MHz interlaced 
           mode 22: 720x576 @ 50Hz 16:9, clock:27MHz x2 interlaced 
           mode 31: 1920x1080 @ 50Hz 16:9, clock:148MHz progressive 
(failed reverse-i-search)`tvserviceC': /opt/vc/bin/^Cservice -m 
pi@raspberrypi:~ $ /opt/vc/bin/tvservice -m DMT
Group DMT has 17 modes:
           mode 4: 640x480 @ 60Hz 4:3, clock:25MHz progressive 
           mode 5: 640x480 @ 72Hz 4:3, clock:31MHz progressive 
           mode 6: 640x480 @ 75Hz 4:3, clock:31MHz progressive 
           mode 9: 800x600 @ 60Hz 4:3, clock:40MHz progressive 
           mode 10: 800x600 @ 72Hz 4:3, clock:50MHz progressive 
           mode 11: 800x600 @ 75Hz 4:3, clock:49MHz progressive 
           mode 16: 1024x768 @ 60Hz 4:3, clock:65MHz progressive 
           mode 17: 1024x768 @ 70Hz 4:3, clock:75MHz progressive 
           mode 18: 1024x768 @ 75Hz 4:3, clock:78MHz progressive 
           mode 21: 1152x864 @ 75Hz 4:3, clock:108MHz progressive 
           mode 35: 1280x1024 @ 60Hz 5:4, clock:108MHz progressive 
           mode 36: 1280x1024 @ 75Hz 5:4, clock:135MHz progressive 
           mode 47: 1440x900 @ 60Hz 16:10, clock:106MHz progressive 
           mode 48: 1440x900 @ 75Hz 16:10, clock:136MHz progressive 
           mode 51: 1600x1200 @ 60Hz 4:3, clock:162MHz progressive 
           mode 58: 1680x1050 @ 60Hz 16:10, clock:146MHz progressive 
           mode 68: 1920x1200 @ 60Hz 16:10, clock:154MHz progressive 
pi@raspberrypi:~ $ /opt/vc/bin/tvservice -s
state 0x12000a [HDMI CEA (4) RGB lim 16:9], 1280x720 @ 60.00Hz, progressive
pi@raspberrypi:~ $ 

コメントアウトすると:

@raspberrypi:~ $ /opt/vc/bin/tvservice -m CEA
Group CEA has 12 modes:
           mode 1: 640x480 @ 60Hz 4:3, clock:25MHz progressive 
           mode 2: 720x480 @ 60Hz 4:3, clock:27MHz progressive 
           mode 3: 720x480 @ 60Hz 16:9, clock:27MHz progressive 
           mode 4: 1280x720 @ 60Hz 16:9, clock:74MHz progressive 
  (native) mode 5: 1920x1080 @ 60Hz 16:9, clock:74MHz interlaced 
           mode 6: 720x480 @ 60Hz 4:3, clock:27MHz x2 interlaced 
           mode 16: 1920x1080 @ 60Hz 16:9, clock:148MHz progressive 
           mode 17: 720x576 @ 50Hz 4:3, clock:27MHz progressive 
           mode 18: 720x576 @ 50Hz 16:9, clock:27MHz progressive 
           mode 20: 1920x1080 @ 50Hz 16:9, clock:74MHz interlaced 
           mode 22: 720x576 @ 50Hz 16:9, clock:27MHz x2 interlaced 
           mode 31: 1920x1080 @ 50Hz 16:9, clock:148MHz progressive 
pi@raspberrypi:~ $ /opt/vc/bin/tvservice -m DMT
Group DMT has 17 modes:
           mode 4: 640x480 @ 60Hz 4:3, clock:25MHz progressive 
           mode 5: 640x480 @ 72Hz 4:3, clock:31MHz progressive 
           mode 6: 640x480 @ 75Hz 4:3, clock:31MHz progressive 
           mode 9: 800x600 @ 60Hz 4:3, clock:40MHz progressive 
           mode 10: 800x600 @ 72Hz 4:3, clock:50MHz progressive 
           mode 11: 800x600 @ 75Hz 4:3, clock:49MHz progressive 
           mode 16: 1024x768 @ 60Hz 4:3, clock:65MHz progressive 
           mode 17: 1024x768 @ 70Hz 4:3, clock:75MHz progressive 
           mode 18: 1024x768 @ 75Hz 4:3, clock:78MHz progressive 
           mode 21: 1152x864 @ 75Hz 4:3, clock:108MHz progressive 
           mode 35: 1280x1024 @ 60Hz 5:4, clock:108MHz progressive 
           mode 36: 1280x1024 @ 75Hz 5:4, clock:135MHz progressive 
           mode 47: 1440x900 @ 60Hz 16:10, clock:106MHz progressive 
           mode 48: 1440x900 @ 75Hz 16:10, clock:136MHz progressive 
           mode 51: 1600x1200 @ 60Hz 4:3, clock:162MHz progressive 
           mode 58: 1680x1050 @ 60Hz 16:10, clock:146MHz progressive 
  (prefer) mode 68: 1920x1200 @ 60Hz 16:10, clock:154MHz progressive 
pi@raspberrypi:~ $ /opt/vc/bin/tvservice -s
state 0x120006 [DVI DMT (68) RGB full 16:10], 1920x1200 @ 60.00Hz, progressive
pi@raspberrypi:~ $ 

ちゃんと認識して(tvservice -mの出力結果は変わらず)、ちゃんと自動設定してくれる(tvservice -sの結果は変わる)。普通に使ってると当たり前のことが、とても素晴らしい。