Slide 1

Slide 1 text

ATOM Cam2 hack ATOM Cam2 hack 中 中 Kenichiro Matohara(matoken) 1 / 39

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

ロケット情報 🚀 ロケット情報 🚀 2021-12-21 23:33:52〜 JAXA種子島宇宙センター 大型ロケット発射 場より打ち上げ H-IIAロケット45号機(三菱重工)/第6世代通信衛星「Inmarsat-6」 シリーズ初号機衛星(英インマルサット社) 久々の夜間打ち上げで遠隔地からも見えやすそう 遠方の方はインターネットストリーミングでどうぞ 3 / 39

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

ATOM Cam2付属品 ATOM Cam2付属品 カメラ本体 専用USBケーブル1.8m(USB A-microB,きしめん型) 防水防塵を気にしないなら適合するケーブルはありそう ACアダプタ(USB A, 5V 1A) 設置用プレート,両面テープ,固定用ネジ スタートガイド 5 / 39

Slide 6

Slide 6 text

ATOM Cam比較 ATOM Cam比較 価 格 特徴 初代 2500 オプションのセンサー連携可能,USBCamとして利 用可能,PCアプリベータ版あり 2 2980 防水,双方向通話 Swing 4280 防水,首振り機能 いずれもfactory mode利用可能 6 / 39

Slide 7

Slide 7 text

まず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

Slide 8

Slide 8 text

Androidで録画してみたもの Androidで録画してみたもの 0:00 / 0:26 8 / 39

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

録画データ 録画データ 録画データは1分毎に1ファイル作られる record/YYYYMMDD/HH/mm.mp4 大体7.6MB/分 10 / 39

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

昼 h.264 1920x1080 20fps/8kHz mono 1Mbit/s 夜 h.264 1920x1080 15fps/8kHz mono 1Mbit/s 13 / 39

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

フィールドカメラとして利用 フィールドカメラとして利用 野生動物を撮りたい 9mまで照らせるir LEDが利用可能 結構きれいに写っていそう まだ動物は撮れていない 星空を撮りたい 肉眼で見える以上の星,航空機,流星は撮れている 動体検知機能 付属の動体検知機能ではこのあたりのものはうまく検知できな いor誤検知が多すぎて辛い 録画後に後処理? 15 / 39

Slide 16

Slide 16 text

屋外でバッテリーで動かす 屋外でバッテリーで動かす ダイソー300円のモバイルバッテリー(スペック上2000mA)でストリ ーミング&SD録画しながら約3時間40分程稼働 バッテリーのみ防水を考えれば良い 袋に入れてみたが朝露がついていたのでもう少し防水を 設定したWi-Fiのない場所で電源を入れると毎回録画がUNITIME 0 になって録画が上書きされてしまう 後述のfactory modeでfakehwtime的なもを使って回避?(テザリン グ?) 16 / 39

Slide 17

Slide 17 text

factory mode でScriptを動かす factory mode でScriptを動かす こんな感じのファイル,ディレクトリを作成して, Test.tar とし てアーカイブを作成してmicroSDのrootに置くと起動時に test.sh が 実行される $ tree -F . ├── Test/ │ ├── checksum* │ ├── factoryTestProcess* │ ├── singleBoadTest* │ └── test.sh* └── factory* 17 / 39

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

run.sh run.sh scriptを書き換えるたびにarchiveするのが面倒なので run.sh を呼 ぶようにしてここにscriptの続きを書くことに # microSD PATH -> /media/mmc /media/mmc/run.sh 19 / 39

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

ifconfigやdateやsleepを挟むとうまくいった! ネットワーク設立後の起動がうまく行っているようなのでネッ トワーク設立後に叩かないといけない? Twitterで iCamera_app がtelnetd killしてると教えてもらう ひろみつさんはTwitterを使っています 「@matoken1 iCamera_app が無線確立の際にkillall telnetd してます。その後に起動すれば ok」 / Twitter 22 / 39

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

あとは何でもできそう (1つ書き換えるたびにmicroSD 指し直しで何度も抜き差ししてソケッ ト壊れないか怖かった.初代ならserial使うと良さそう) 25 / 39

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

gpio direction value 38 out 1 39 out 0 47 out 0 48 - 0 50 in 0 51 in 1 27 / 39

Slide 28

Slide 28 text

gpio direction value 52 out 0 53 out 0 77 out 1 28 / 39

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

/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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

RTSP RTSP 星空をRTSPで暖かな室内の大画面で見る $ ffplay rtsp://[IPADDR]:8554/unicast 流星も確認できた RTSPでライブストリーミング(YouTubeLive等へ) 時たま止まるような?(検証不足) 35 / 39

Slide 36

Slide 36 text

これからやりたいこと これからやりたいこと dropbear(sshd)動作 factory modeが塞がれても大丈夫 据え置き場所を探して設置 電源とWi-Fiが必要 Internetへストリーミング 安定度や帯域の問題 静止画? 仮想背景として利用 ATOM Cam2でSDカード上から自前Linux Kernelを動かす - honeylab’s blog 36 / 39

Slide 37

Slide 37 text

まとめ まとめ 本来はATOM CamはIoTエッジでクラウドでいろいろな感じな製品 factory mode で色々遊べて楽しい(なかなか塞がれない塞ぐ気がな い?) atomcam_tools を使うと実用的な範囲でとても便利になるのでおす すめ たまにおかしくなるのでクリティカルな場所には予備があるとよ さそう 37 / 39

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

奥付 奥付 発表 発表者 利用ソフトウェア ライセンス CC BY-NC-SA 4.0 鹿児島Linux勉強会 2021.12(オンライン開催) Kenichiro Matohara(matoken) Asciidoctor Reveal.js 39 / 39