Skip to content

Commit f82ae8f

Browse files
committed
不要ファイルの削除
README.md修正 build.md追加
1 parent c78392b commit f82ae8f

File tree

4 files changed

+296
-21
lines changed

4 files changed

+296
-21
lines changed

.gitignore

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
*.BAK
2-
scripts/alarmhook.sh
3-
private_scripts
42
openmiko/*
53
factory_t31_ZMC6tiIDQN
64
rootfs_hack.ext2
5+
*.xcodeproj/
6+

README.md

+1-2
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,8 @@ ATOMCamアプリで設定した検出時にクラウドサーバーに保存さ
7878
!!! このファイルは自動的には削除されないため、CIFSサーバ機能などを使って随時削除する必要があります。!!!
7979
または、「SD-Card消去」を押すことによってもファイル削除が行えます。
8080

81-
###
8281

83-
##### #### ローカル録画スケジュール
82+
##### ローカル録画スケジュール
8483

8584
スケジュールを選ぶと、曜日と時間帯を指定する項目が追加されます。
8685

atomcam_configs/overlay_rootfs/etc/boa.conf

-17
This file was deleted.

build.md

+293
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,293 @@
1+
# SD-Cardイメージのbuild方法
2+
3+
## 必要なbuild環境
4+
5+
- Window / MacOS / Linux
6+
7+
- githubへのアクセスできる環境
8+
9+
- Dockerの実行環境
10+
11+
12+
13+
※ 以下MacOS Montereyで確認しています。
14+
15+
16+
17+
## build方法
18+
19+
適当なdirectoryで下記を実行します。
20+
21+
```shell
22+
# git clone atomcam_tools
23+
# cd atomcam_tools
24+
# ./make.sh
25+
```
26+
27+
環境に依存しますが1時間程度でatomcam_tools.zipが出来上がります。
28+
29+
zipの中身は
30+
31+
- authorized_keys
32+
- hostname
33+
- factory_t31_ZMC6tiIDQN
34+
- rootfs_hack.ext2
35+
36+
で、atomcam_tools/ 以下に出来ているものと同じです。
37+
38+
remote loginするなら、sshのpublic.keyをauthorized_keysに追加してください。
39+
40+
```shell
41+
# cat ~/.ssh/id_rsa.pub >> ./authorized_keys
42+
```
43+
44+
デバイス名を変更するなら、hostnameを修正してください。(default : atomcam)
45+
46+
```shell
47+
# echo "hogehoge" > ./hostname
48+
```
49+
50+
上記4つのファイルをSD-CardにコピーしてAtomCamに入れて起動します。
51+
52+
初回起動時はswap fileの作成とsshのhost-keyを作成するのに少し時間がかかるので40秒程度かかります。
53+
54+
build環境は一度buildするとopenmiko/のdirectoryができて、docker上にコンテナが起動した状態になっています。
55+
56+
```shell
57+
# cd openmiko
58+
# docker-compose exec builder bash
59+
```
60+
61+
でコンテナに入れます。
62+
dockerコンテナが落ちてるときは
63+
64+
```shell
65+
# cd openmiko
66+
# docker-compose up -d
67+
```
68+
69+
で起動してください。
70+
71+
72+
73+
## Target(ATOMCam内部)の環境
74+
75+
ここで作ったイメージでATOMCamを起動すると、glibcで生成されたmipsel版のlinux環境が起動します。
76+
77+
この環境の中で/atom以下に本来のATOMCamのシステムを起動してchroot環境に閉じ込めています。
78+
79+
システム構成は
80+
81+
- SoC: Ingenic T31 SoC
82+
83+
- CPU: MIPS32R5 I\$32K/D\$32K/L2\$128K
84+
- kernel: linux 3.10.14 mipsel
85+
86+
です。
87+
88+
WiFiはatom側のシステムが起動しているので、rootfs側は起動していません。
89+
90+
91+
92+
### 起動シーケンス
93+
94+
##### u-boot -> kernelが内のinitramfsの/init_atomcam
95+
96+
*initramfsはopenmiko/initramfs_skeletonにatomcam_configs/overlay_initramfsを重ねています。*
97+
98+
 initramfsはkernel 起動時のcmdlineで/init_atomcamを実行するようにしています。
99+
100+
​ この中でSD-Card上のrootfs_hack.ext2をrootにswitch_rootして、/sbin/init(busybox)を起動します。
101+
102+
##### rootfs_hack.ext2
103+
104+
 *rootfs_hack.ext2はopenmikoのrootfs_minimalにatomcam_configs/openmiko.configで追加されたイメージにatomcam_configs/overlay_rootfsを重ねたものになります。*
105+
106+
​ /sbin/initがinittabに従って/etc/init.d/rcSを起動して、rcSで/etc/init.d/S*を順番に実行します。
107+
108+
 S35wifi,S45ntpdはAtomCamのシステム側で処理しているので実行しないほうが良いのですが、openmikoのskeletonに起動スクリプトがあるため、atomcam_config/overlay_rootfsで中身の無いものを上書きして無効にしています。
109+
/etc/init.dを最後まで実行すると、serialを繋いでいればgettyでlogin promptが出ます。AtomCamの後ろ側のLEDが青点滅ー>青点灯になるとsshでloginできる状態になります。
110+
111+
​ 途中でATOMCamのシステムを起動する環境を整える/etc/init.d/S48atomcamを呼び出しています。
112+
113+
##### S48atomcam
114+
115+
​ /atom/以下に本来のATOMCamのシステムと幾つかのmount-pointを共通でアクセスできるようにmountします。また、hackのために/tmp/system/bin/にscriptをコピーしています。
116+
117+
​ その後、chrootで/atomの/tmp/system/bin/atom_init.shを呼び出します。
118+
119+
##### atom_init.sh
120+
121+
​ 本来のATOMCamの初期化シーケンスを実行します。
122+
123+
​ iCamera_appの実行時にlibcallback.soを噛ませて映像の横流しとwebHookのためのctorsへのsetlinebufの設定をしています。
124+
125+
​ さらにwebHookのためにlogを/tmp/log/に出力させています。
126+
127+
​ これを実行するとwatchdogが起動するため、assisとiCamera_appは止められなくなります。
128+
129+
 iCamera_appは起動すると/configsの設定情報を読み込んで、wifiの起動、時刻の設定が行なっています。
130+
131+
 ただし、外部コマンドは直接iCamera_appで実行されるのではなくassisにメッセージ通信経由で投げてassisが実行しています。
132+
133+
 また、recognition等の機能はiCamera_appにあるわけではなく、cloudから読み込まれて実行されているようです。
134+
135+
136+
137+
### 各種script
138+
139+
##### /scripts/mv.sh, /scripts/rm.sh
140+
141+
​ ATOMCamのiCloud_appが動体検知をcloudに送信後に削除する時のrmコマンド、1分ごとのSD-Cardへの記録ファイルを/tmpから移動するmvコマンドを置き換えてNASへの記録やwebHookのeventを送信するためのscriptです。起動時に/tmp/system/bin/rm, mvにコピーしています。
142+
143+
​ iCound_appからmessage経由で外部コマンドを実行するassisの起動時のPATHの先頭に/tmp/system/binを挿入することでrm, mvコマンドを置き換えています。
144+
145+
##### /scripts/reboot.sh
146+
147+
​ WebUIの定期reboot設定をcrontabで指定時間に実行するためのscriptです。
148+
149+
​ syncしてrebootを実行します。
150+
151+
##### /scripts/rtspserver.sh
152+
153+
​ init.d/S58rtspserverとWebUIのRTSPのon/offから呼ばれます。
154+
155+
​ v4l2rtspserverをon/offします。
156+
157+
##### /scripts/webcmd.sh
158+
159+
​ /var/www/cgi-bin/exec.cgiからnamed-FIFO経由でコマンドを実行します。
160+
161+
​ cgiの実行はwww-dataアカウントでの実行なのでシステム制御系のコマンドは直接実行できないので、コマンドを受けて実行して問題ないものだけ実行する構造にしています。
162+
163+
##### /scripts/webhook.sh
164+
165+
​ iCamera_appのlogを受けてwebHookのイベントを拾っています。
166+
167+
 iCamera_appの実行環境は制限があるため、logを一旦/tmp/log/atomcam.logに記録して、そのlogをここで受けてパースしてcurlでpostしています。
168+
169+
 iCamera_appの出力をそのまま/tmp/log/atomcam.logにpipeで出力するとbufferされて遅延するため、libcallback.soにConstructorのhookを入れてsetlinebufでlineごとのbufferingに変更しています。
170+
171+
##### /var/www/cgi-bin/exec.cgi
172+
173+
​ WebUIからのコマンドをnamed-pipe経由でwebcmd.shに投げています。
174+
175+
##### /var/www/cgi-bin/get_jpeg.cgi
176+
177+
​ WebUIで表示するjpeg画像を取得しています。
178+
179+
##### /var/www/cgi-bin/get_time.cgi
180+
181+
​ WebUIで表示するATOMCamの時刻を1秒ごとに取得しています。
182+
183+
##### /var/www/cgi-bin/hack_ini.cgi
184+
185+
​ WebUIで使用している設定値の取得、設定をします。
186+
187+
188+
189+
## WebUI
190+
191+
artomcam_configs/web/以下にWebUIのソースコードがあります。
192+
193+
WebUIはVue.jsとElementUIで記述しています。
194+
195+
Target環境はmipselなのでnode.jsの最近のバージョンは未対応になります。
196+
197+
そのため、frontend側のみbuildして、backend側はlighttpdとcgiで対応し、frontendからaxios経由でアクセスする構造にしています。
198+
199+
WebUIの画面はatomcam_configs/web/source/vue/Setting.vueに記述しています。
200+
201+
202+
203+
## Docker環境
204+
Docker環境では/srcがopenmiko/にmapされています。
205+
206+
以下、基本的にDocker内のコマンドは下記のDirectoryから実行します。
207+
208+
```shell
209+
root@ac0375635c01:/openmiko# cd /openmiko/build/buildroot-2016.02
210+
```
211+
212+
rootfsはglibc環境でopenmikoのDocker内のgccを使用します。
213+
build時にgccも生成されます。
214+
gccのprefixは
215+
**/openmiko/build/buildroot-2016.02/output/host/usr/bin/mipsel-ingenic-linux-gnu-**
216+
です。
217+
218+
ATOMCam本来のシステムのカメラアプリiCamera_appはuClibcの環境でbuildされています。
219+
220+
そのためiCamera_appのhack用のlibcallback.soのbuildにはuClibc環境が必要なので別途cloneしている
221+
**/openmiko/build/mips-gcc472-glibc216-64bit/bin/mips-linux-uclibc-gnu-**
222+
を使用しています。
223+
224+
225+
226+
### 各種変更時のbuild方法
227+
228+
initramfs, kernelのconfigを変更した場合
229+
230+
```shell
231+
root@ac0375635c01:/openmiko# make linux-rebuild
232+
root@ac0375635c01:/openmiko# cp output/images/uImage.lzma /src
233+
```
234+
235+
でbuildされてopenmiko/にコピーされます。
236+
237+
238+
239+
rootfs内のファイルやopenmiko、busyboxのmenuconfigを修正した場合
240+
```shell
241+
root@ac0375635c01:/openmiko# make
242+
root@ac0375635c01:/openmiko# cp output/images/rootfs.ex2 /src
243+
```
244+
245+
でbuildされてopenmiko/にコピーされます。
246+
247+
それぞれfactory_t31_ZMC6tiIDQN, rootfs_hack.ex2の名前でSDCardにコピーしてください。
248+
249+
250+
251+
rootfsに含まれるpackageの変更した場合
252+
253+
```shell
254+
root@ac0375635c01:/openmiko# make menuconfig
255+
root@ac0375635c01:/openmiko# make
256+
```
257+
258+
でrootfsがbuildされます。
259+
260+
261+
262+
個別のpackegeのrebuildの場合
263+
264+
```shell
265+
root@ac0375635c01:/openmiko# make <package>-rebuild
266+
```
267+
268+
です。
269+
270+
271+
272+
busyboxのコマンド等の設定変更の場合
273+
274+
```shell
275+
root@ac0375635c01:/openmiko# make busybox-menuconfig
276+
root@ac0375635c01:/openmiko# make
277+
```
278+
279+
でrootfsがbuildされます。
280+
281+
282+
283+
kernelの設定変更の場合
284+
285+
```shell
286+
root@ac0375635c01:/openmiko# make linux-menuconfig
287+
root@ac0375635c01:/openmiko# make linux-rebuild
288+
```
289+
290+
でuImage.lzmaが生成されます。
291+
292+
293+

0 commit comments

Comments
 (0)