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

ATOM Cam2 hack中

ATOM Cam2 hack中

鹿児島Linux勉強会 2021.12で発表

E567a535ddc7964130dd086f147a7682?s=128

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)

    <maroken@kagolug.org> 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__ (xiaoyongjian@xiaoyongjian-virtual-machine) (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