Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ATOM Cam2 hack中

ATOM Cam2 hack中

鹿児島Linux勉強会 2021.12で発表

Kenichiro MATOHARA

December 19, 2021
Tweet

More Decks by Kenichiro MATOHARA

Other Decks in Technology

Transcript

  1. ATOM Cam2 hack ATOM Cam2 hack 中 中 Kenichiro Matohara(matoken)

    <[email protected]> 1 / 39
  2. 南隅から参加(鹿児島の右下) 好きなLinuxディストリビューションはDebian お仕事募集 mailto:work@matohara.org Kenichiro Matohara(matoken) Kenichiro Matohara(matoken) https://matoken.org https://matoken.org

    2 / 39
  3. ロケット情報 🚀 ロケット情報 🚀 2021-12-21 23:33:52〜 JAXA種子島宇宙センター 大型ロケット発射 場より打ち上げ H-IIAロケット45号機(三菱重工)/第6世代通信衛星「Inmarsat-6」

    シリーズ初号機衛星(英インマルサット社) 久々の夜間打ち上げで遠隔地からも見えやすそう 遠方の方はインターネットストリーミングでどうぞ 3 / 39
  4. ATOM Cam2 ATOM Cam2 日本のベンチャー起業のATOM tech Inc.が発売 ATOM Cam初代に続き2つ目のATOM Cam2(防水)

    最近防水&首振り機能のSwingが発売 2,980円と安価な割には夜間など写りがいい(9mまでのir LEDx4あり) 解像度はFullHD WebUI等はなくてアプリ(Android/iOS)経由での操作のみ factory modeを使い任意のscriptを実行できる!(serlalも使えるよう) ATOM Cam 2 (アトムカム ツー) - 完全防水・防塵+カラーナイトビジ ョン | ATOMシリーズ | ATOM 公式ストア 4 / 39
  5. ATOM Cam2付属品 ATOM Cam2付属品 カメラ本体 専用USBケーブル1.8m(USB A-microB,きしめん型) 防水防塵を気にしないなら適合するケーブルはありそう ACアダプタ(USB A,

    5V 1A) 設置用プレート,両面テープ,固定用ネジ スタートガイド 5 / 39
  6. ATOM Cam比較 ATOM Cam比較 価 格 特徴 初代 2500 オプションのセンサー連携可能,USBCamとして利

    用可能,PCアプリベータ版あり 2 2980 防水,双方向通話 Swing 4280 防水,首振り機能 いずれもfactory mode利用可能 6 / 39
  7. まずmicroSD cardなしで動かす まずmicroSD cardなしで動かす Wi-Fi(2.4GHz)のAPが必要 Android or iOSアプリが必要(今回はAndroid利用) アプリでWi-Fi情報を手打ちしてQR Codeを表示してATOM

    Cam2で 読み取り Wi-Fi認識後アプリで認識,設定やプレビュー等が行える Android版はよく繋がらなくなる.アプリを強制終了して起動し 直すと治る. アプリで録画は可能だが,充電しながらでもバッテリーがどんど ん減っていくのでスポットで  初代にはWindows/macOSアプリ(β版)がある 7 / 39
  8. Androidで録画してみたもの Androidで録画してみたもの 0:00 / 0:26 8 / 39

  9. microSD microSD SD端子をレンズ側に向けて差し込む.プッシュロック式.差し込 んだあとちゃんと蓋を閉じる. 1パーティション目のみ認識 初期化を行っても1つめのみ 8GB/16GB/32GB(FAT) 相性で認識しない場合もあるよう?(UUIDの問題も?) 現在Trancend 16GB(9181AA

    16G 09SS2)利用(高耐久モデルが良いと 思う) 9 / 39
  10. 録画データ 録画データ 録画データは1分毎に1ファイル作られる record/YYYYMMDD/HH/mm.mp4 大体7.6MB/分 10 / 39

  11. ffprobe昼 ffprobe昼 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/media/matoken/D522-0232/record/20211214/19/06.mp4': Metadata: major_brand :

    isom minor_version : 512 compatible_brands: isomiso2avc1mp41 encoder : Lavf57.25.100 Duration: 00:01:00.05, start: 0.000000, bitrate: 1030 kb/s Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080, 963 Metadata: handler_name : VideoHandler vendor_id : [0][0][0][0] Stream #0:1(und): Audio: pcm_alaw (alaw / 0x77616C61), 8000 Hz, mono, s16, 64 kb/s (default) Metadata: handler_name : SoundHandler vendor_id : [0][0][0][0] 11 / 39
  12. ffprobe夜 ffprobe夜 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/media/matoken/D522-0232/record/20211214/21/46.mp4':M encoder : Lavf57.25.100

    Duration: 00:01:00.07, start: 0.000000, bitrate: 1034 kb/s Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080, 967 Metadata: handler_name : VideoHandler vendor_id : [0][0][0][0] Stream #0:1(und): Audio: pcm_alaw (alaw / 0x77616C61), 8000 Hz, mono, s16, 64 kb/s (default) Metadata: handler_name : SoundHandler vendor_id : [0][0][0][0] 12 / 39
  13. 昼 h.264 1920x1080 20fps/8kHz mono 1Mbit/s 夜 h.264 1920x1080 15fps/8kHz

    mono 1Mbit/s 13 / 39
  14. 自転車や自動車で撮影(ドライブ 自転車や自動車で撮影(ドライブ レコーダー?) レコーダー?) AtomCam2をチェストマウントしてみる自転車ライト(150lm)のみ AtomCam2をチェストマウントしてみる街灯のある街なか AtomCam2を自動車に乗せてみる 一時停止時はきれいだけど動きのある動画は無理がある https://vimeo.com/manage/653732586/general https://vimeo.com/manage/653734533/general

    https://vimeo.com/manage/654950499/general 14 / 39
  15. フィールドカメラとして利用 フィールドカメラとして利用 野生動物を撮りたい 9mまで照らせるir LEDが利用可能 結構きれいに写っていそう まだ動物は撮れていない 星空を撮りたい 肉眼で見える以上の星,航空機,流星は撮れている 動体検知機能

    付属の動体検知機能ではこのあたりのものはうまく検知できな いor誤検知が多すぎて辛い 録画後に後処理? 15 / 39
  16. 屋外でバッテリーで動かす 屋外でバッテリーで動かす ダイソー300円のモバイルバッテリー(スペック上2000mA)でストリ ーミング&SD録画しながら約3時間40分程稼働 バッテリーのみ防水を考えれば良い 袋に入れてみたが朝露がついていたのでもう少し防水を 設定したWi-Fiのない場所で電源を入れると毎回録画がUNITIME 0 になって録画が上書きされてしまう 後述のfactory

    modeでfakehwtime的なもを使って回避?(テザリン グ?) 16 / 39
  17. factory mode でScriptを動かす factory mode でScriptを動かす こんな感じのファイル,ディレクトリを作成して, Test.tar とし てアーカイブを作成してmicroSDのrootに置くと起動時に

    test.sh が 実行される $ tree -F . ├── Test/ │ ├── checksum* │ ├── factoryTestProcess* │ ├── singleBoadTest* │ └── test.sh* └── factory* 17 / 39
  18. Test/test.sh をこんな感じで書いて 実行権をつけて Test.tar としてtarで固めてmicroSDにcp $ cat Test/test.sh #!/bin/sh echo

    "========== It works! ===========" /system/bin/hl_client & /system/bin/iCamera_app & #ここ以降に走らせせたい処理を書く $ chmod +x Test/test.sh $ tar cfv Test.tar Test factory 18 / 39
  19. run.sh run.sh scriptを書き換えるたびにarchiveするのが面倒なので run.sh を呼 ぶようにしてここにscriptの続きを書くことに # microSD PATH ->

    /media/mmc /media/mmc/run.sh 19 / 39
  20. telnetdを試す telnetdを試す buisyboxにtelnetdが含まれるようなので以下のようにしてtelnetdの起 動を試みる echo "telnetd start." telnetd -l /bin/sh

    -p 8023 & 20 / 39
  21. telnetd起動しない? telnetd起動しない? atomcam_tool(factory modeでATOM Cam2 便利機能実装ツール)を試 すと動作する atomcam_toolのtelnetに接続してtelnetdを手で叩くと動作する このTest.tarを展開して Test/test.sh

    を書き直してみるとやはり動 かない? debug printを入れてsdに書き出し( /media/mmc )してみるとscript自体 は動いている PATHをlsで確認して /sbin/telnetd としてみたりしたけどうま く行かない 21 / 39
  22. ifconfigやdateやsleepを挟むとうまくいった! ネットワーク設立後の起動がうまく行っているようなのでネッ トワーク設立後に叩かないといけない? Twitterで iCamera_app がtelnetd killしてると教えてもらう ひろみつさんはTwitterを使っています 「@matoken1 iCamera_app

    が無線確立の際にkillall telnetd してます。その後に起動すれば ok」 / Twitter 22 / 39
  23. atomcam_toolsのtelnetd起動 atomcam_toolsのtelnetd起動 ProcessName=telnetd while true do # telnet killed by

    iCamera_app count=`ps | grep $ProcessName | grep -v grep | wc -l` if [ $count = 0 ]; then echo "$ProcessName is dead." telnetd else echo "$ProcessName is alive." > /dev/null fi sleep 10 done 23 / 39
  24. telnet接続 telnet接続 $ sudo nmap -sP 192.168.68.1- | grep 7C:DD:E9:

    -B2 | head -1 Nmap scan report for 192.168.68.104 $ telnet 192.168.68.106 8023 Trying 192.168.68.106... Connected to 192.168.68.106. Escape character is '^]'. /sys/devices/virtual/gpio/gpio77 # uname -a /bin/sh: uname: not found /sys/devices/virtual/gpio/gpio77 # cat /proc/version Linux version 3.10.14__isvp_swan_1.0__ ([email protected]) (gcc version 24 / 39
  25. あとは何でもできそう (1つ書き換えるたびにmicroSD 指し直しで何度も抜き差ししてソケッ ト壊れないか怖かった.初代ならserial使うと良さそう) 25 / 39

  26. GPIOでLED制御 GPIOでLED制御 /sys/class/gpio の下にいくつかGPIOがあるようなのでvalueを書き換 えて動きを確認 47⇒1 : 前面左右LEDx4が赤(irも?) 38⇒0 :

    前面中央LEDが黄色 39⇒0 : 前面中央LEDが青色 (38, 39は同時に光らせることが出来る) /sys/class/gpio # echo 1 > gpio47/value /sys/class/gpio # echo 0 > gpio38/value /sys/class/gpio # echo 0 > gpio39/value 26 / 39
  27. gpio direction value 38 out 1 39 out 0 47

    out 0 48 - 0 50 in 0 51 in 1 27 / 39
  28. gpio direction value 52 out 0 53 out 0 77

    out 1 28 / 39
  29. debianユーザランドを動かす debianユーザランドを動かす 例によって debootstrap でユーザランド環境を作ってディスクイメ ージに流し込んでATOM Cam2でchrootしようとする しかし /proc/filesystems を見るとvfat,

    jffs2, exfat くらいしか無 い 29 / 39
  30. /proc/filesystems /proc/filesystems nodev sysfs nodev rootfs nodev bdev nodev proc

    nodev cgroup nodev tmpfs nodev debugfs nodev sockfs nodev pipefs nodev anon_inodefs nodev rpc_pipefs nodev configfs nodev devpts squashfs nodev ramfs vfat nodev nfs nodev jffs2 nodev mtd_inodefs exfat 30 / 39
  31. debootstrap debootstrap $ fakeroot # debootstrap --foreign --keyring=/usr/share/keyrings/debian-archive-removed-keys.gpg \ --arch=mips

    jessie debian_mips http://archive.debian.org/debian/ # exit $ sudo chroot debian_mips # /debootstrap/debootstrap --second-stage 31 / 39
  32. jffs2 jffs2 jffs2イメージ作成 ATOM Cam2でmount……失敗 $ mkfs.jffs2 -r ./debian_mips -p

    -e 0x2000 -o ./debian_mips.img # mount -t jffs2 -o rw,relatime /media/mmc/debian_mips.img /tmp/debian mount: mounting /dev/loop0 on /tmp/debian failed: Invalid argument 32 / 39
  33. atomcam_toolsの中のext4.koもら atomcam_toolsの中のext4.koもら ってきて利用 ってきて利用 atomcam_toolsではext2 mountしているので出来るはずもう少し調べ る‥… # mkdir /tmp/mmc

    /tmp/debian # mount /dev/mmcblk0p1 /tmp/mmc # insmod /tmp/mmc/modules/crc16.ko # insmod /tmp/mmc/modules/mbcache.ko # insmod /tmp/mmc/modules/jbd2.ko # insmod /tmp/mmc/modules/ext4.ko # mount -t ext2 /media/mmc/debian_jessie_mips.img /tmp/devian mount: mounting /dev/loop0 on /tmp/devian failed: No such device 33 / 39
  34. atomcam_tools atomcam_tools WebUI http://[ATOMCam2のIPアドレス]:8080/cgi-bin/honeylab.cgi FTPd/Telnetd RTSP(swap必須) rtsp://[IPADDR]:8554/unicast 静止画取得 http://[IPADDR]:8080/cgi-bin/get_jpeg.cgi microSDにswap

    file作成&swapon 検出動画(12秒)をmicroSDに保存 一定時間毎の再起動,ftpサーバにデータアップロード機能 等々とても便利! bakueikozo/atomcam_tools 34 / 39
  35. RTSP RTSP 星空をRTSPで暖かな室内の大画面で見る $ ffplay rtsp://[IPADDR]:8554/unicast 流星も確認できた RTSPでライブストリーミング(YouTubeLive等へ) 時たま止まるような?(検証不足) 35

    / 39
  36. これからやりたいこと これからやりたいこと dropbear(sshd)動作 factory modeが塞がれても大丈夫 据え置き場所を探して設置 電源とWi-Fiが必要 Internetへストリーミング 安定度や帯域の問題 静止画?

    仮想背景として利用 ATOM Cam2でSDカード上から自前Linux Kernelを動かす - honeylab’s blog 36 / 39
  37. まとめ まとめ 本来はATOM CamはIoTエッジでクラウドでいろいろな感じな製品 factory mode で色々遊べて楽しい(なかなか塞がれない塞ぐ気がな い?) atomcam_tools を使うと実用的な範囲でとても便利になるのでおす

    すめ たまにおかしくなるのでクリティカルな場所には予備があるとよ さそう 37 / 39
  38. URL URL atomcam_Tools作者 factory modeの使い方 matokenのメモ 鹿児島Linux勉強会2021.04で発表 honeylab’s blog ATOM

    Camで手軽にゲフンゲフン - Qiita https://wiki.matoken.org/gadget/atomcam2 PQI Air Pen Hack 38 / 39
  39. 奥付 奥付 発表 発表者 利用ソフトウェア ライセンス CC BY-NC-SA 4.0 鹿児島Linux勉強会

    2021.12(オンライン開催) Kenichiro Matohara(matoken) Asciidoctor Reveal.js 39 / 39