2018年9月22日土曜日

NBD8008Rケース完成

コントロールパネル作成して、ダイソーのスタックボックスに収めました。

HDDは2.5インチ500GBが余ってたのでそれ使いました。静かで良いです。
カメラ3台H.246常時録画で40日くらい持ちそう。
マウス用にUSBコネクタをフロント出ししても良かったかも
PP樹脂の加工が難しくてなんだかぼろっちいです。。
LEDは上から青、黄、赤なのですがちゃんと撮れてません



このボックス5インチベイ用のHDDリムーバルがすっぽり収まるし、自作のものをスタック追加していっても面白いかも知れません。

適当に加工した背面



角のボードと電池が飛び出すので穴あけ、丁度フックになって固定ネジを減らせました:-)

Rasberry-pi:StretchでSPIが変だったのが解決

Rasberry-piのSPI接続でFlashROMを読む際、
最新OS(Stretch:Debian9)では変な値が帰り、チップ誤判定されて使えないので
しかたなく1つ前の(Jessie:Debian8)を使っていました。

公式掲示板で「スピードの問題じゃないの?」みたいに書かれていたけど、
Debian8では動作しているし、別の問題かとおもっていました。
Debian9.4でSPI使ってる記事があったので、よく見るとspeed指定が。。

flashrom -V -p linux_spi:dev=/dev/spidev0.0
↓
flashrom -V -p linux_spi:dev=/dev/spidev0.0,spispeed=1000

思い込みってダメだな
https://www.flashrom.org/RaspberryPi ここの最後のとこにも書いてあったわorz

でもずっと引っかかってた事が解決してスッキリ

2018年9月20日木曜日

NVR基板 コネクタこねこね

メーカーのドキュメントに内部コネクタのヒントがありました。

外部コネクタ
JT1: DC12V電源ジャック 5.5mm/内径2.1mm/センター+
J4 : USB3.0x2 + RJ45
J5 : アナログRGB(VGA)
J2 : RCA 音声出力 モノラル
J3 : HDMI出力

内部コネクタ
J6 : ヒートシンク取付穴
J7 : HDD電源 (12V,GND,GND,5V)
CN1 : SATA HDD
CN4 : USB ※未確認
CN6 : 12V出力
CN11 : シリアルポート (1=RX,2=TX,3=GND,4=5V) 5V.TTLlevel
CN5 : ASサービスコネクタ 10PIN (コンパネ
 1:+3.3 2:GND 3:IR 4:COL2 5:COL1
 6:ROW2 7:COL3 8:ROW1 9:ALARM_LED(-) 10:REC_LED(-)
CN3 : TSサービスコネクタ 10PIN (パイロットランプ?
 1:+5 2:GND 3:+5_STB 4:GND 5:NC
 6:NC 7:RXD_FRONT 8:TXD_FRONT 9:PWR_S 10:GND
CN3 : TSサービスコネクタのTXD/RXDには何も来てない感じでした。
CN5 : ASサービスコネクタにキーマトリクスがありそうなので、コネクタを交換して、ブレッドボードでいじってみる事にしました

FlashROMはソケット化してます

     COL1  COL2  COL3
ROW1 RIGHT  ESC  LEFT
ROW2  UP   ENTER DOWN
こんな感じで6ボタンアサインされてました。
ボタンはそれほど有用性を感じませんが、RECORDやALARM状態がモニタ消しててもわかるのは良いですね!
LEDは負論理ですが、TS8OB_7K4Lパネルを選ぶとALARM_LED のみ有効、GFDS_11K4Lではどちらも無効で起動時にぼんやり点灯とあぶなげな感じです。パネルによって正論理になってるのかな?
とりあえずデフォルトのGeneralでOK

以下、回路図起こしてみました。

NVR基板 NBD8008R-PL

NVR基板 NBD8008R-PL

AliExpressで送込2300円くらいでした。
Webmoneyが6万円分くらいあまってたのでWebmoney cardを作りました。マスターカードとして普通に使えます。
チャージに4%取られますが、Webmoneyは15%OFFで購入したものなのでOKです。
到着まで2-3週間掛かりますが気長に待ちます。
商品説明はNBD8008RA-GLだったはずなのに、到着したのはNBD8008R-PLでした、さすがです。
ヒートシンクも付いてるしSATA-HDDケーブルとHDD用電源ケーブルもありました。
部品レイアウトがちょっと違う程度で性能的には大差無いので気にしない事にして、
壊れても惜しくない値段なので色々いじってみます。


ファームアップデート

カメラはOnvifで簡単に繋がったのですが、モーション検出がぜんぜん利かないのでアップデートしてみ事にしました。
ファームウェアのアップデートはOnlineの自動更新が便利そうですが、
IPカメラとNVRは外に繋いでいないので手動更新になります。

手動更新の手順は、アップデートファイルを手に入れます。
まず、最新版の
メーカーの製品ページ Hangzhou Xiongmai Technolog
8ch 1080P H.265 NVR Board NBD8008R-PL
http://www.xiongmaitech.com/en/index.php/product/product-detail/4/110/273
Firmware で NBD8008R-PL(General)かNBD8008R-PL(YK)をクリックして
(General)と(YK)の違いは画面のアイコンなどの違いで、(General)は絵のアイコン、(YK)はwindows8のようなモダンスタイル、機能的にはほぼ同じだと思います。
最新版downloadページへ進み、「点?下載 / Click To Download」を押します。
得たzipを解凍すると、
YK_HZXM_NBD8008R-PL_V4.02.R11.7601.Nat.OnvifC.20180905.bin とMD5.txtが出てきます。
これをUSBメモリに入れてNBD8008Rに挿し、メニュー>管理>アップデートで
/dev/sdb1のbinファイルが表示されていると思います。「アドバンス」で即座に更新がはじまります。
※更新中にトラブルがあるとNVRがゴミになるので慎重に行って下さい。


シリアルポート

CN11がシリアルポートらしので調べてみました、(1=RX,2=TX,3=GND,4=5V) で5V TTL levelみたいです。
駄菓子菓子、カーネル起動以降途絶えてしまいます。見えるのはローダーのubootのみ
とりあえずログおいときますね
System startup.........
System startup

U-Boot 2010.06-svn701 (Nov 29 2017 - 08:39:49)

Check Flash Memory Controller v100 ... Found
SPI Nor(cs 0) ID: 0xc2 0x20 0x18
Block:64KB Chip:16MB Name:"MX25L128XX"
at hifmc100_setTB() mid:0xc2,chipsize:0x1000000 {no}.
lk[9 =} 0x1000000]
SPI Nor total size: 16MB
In:    serial
Out:   serial
Err:   serial
USB:   scanning bus for devices... 2 USB Device(s) found
0 Storage Device(s) found
Press CTRL-C to abort autoboot in 2 seconds16384 KiB hi_fmc at 0:0 is now current device

CFG_BOOT_ADDR:0x0 argc 2 argv[0] logoload
### h264dvr.jpg UbootLogoload complete:bytes  oadaddr0x84000000 loaded to 0x87000000 
### h264dvr.jpg UbootLogoload complete: 59577 bytes loaded to 0x87000000
jpeg decoding ...
{{addr=0x87000000, size=0xb85f9, vobuf=0x8711fc00}}
{{imgwidth=800, imgheight=600, linebytes=1600}}
decode success!!!!
decode jpeg success. 
decode jpeg!
stMaxRect.u32Width:800, stMaxRect.u32Height:600. 
HDMI_INFO:DispFmt2HdmiTiming[383] ,Non CEA video timing:16
HDMI_INFO:Hdmi_PixelFreqSearch[127] ,u32Fmt16. 

srcAddr 0x82000000, dstAddr 0x81000000
find_squashfs_file: name bin, start_block 0, offset 2639, type 1
find_squashfs_file: name boot, start_block 0, offset 2747, type 1
read inode: name boot, sb 0, of 2747, type 1
find_squashfs_file: name zImage.img, start_block 0, offset 2671, type 2
read inode: name zImage.img, sb 0, of 2671, type 2
### FS load complete: 2821971 bytes loaded to 0x81000000
## Booting kernel from Legacy Image at 81000000 ...
   Image Name:   Linux-4.9.37
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    2821907 Bytes = 2.7 MiB
   Load Address: 80008000
   Entry Point:  80008000
   Loading Kernel Image ... OK
OK

Starting kernel ...

その後ぐぐってると、ipcamtalk.comでいろいろやってる人がいて、
updateファイルにツールを仕込んでbusyboxやtelnetまで動いているようです。

2018年9月18日火曜日

Loosafe LS-F2 の調教 その2

squashfsイメージのmountしてReadonryだのう...からの続き

squashfsイメージファイルの中身を取り出す
$sudo su -
(owner:rootが変ってしまうのでrootで作業)
$sudo unsquashfs -d rootfs rootfs.bin
(デフォルトではsquashfs-root/に展開される)

中身を修正
rootfsの所は主にパスワードの再設定。
/etc/passwd のdefaultを1行削除
/etc/shadow のdefaultを1行削除
root,adminの暗号化されたパスワードを別のLinuxで作成したコードに置き換える。
(カメラにvipwコマンドが無い、busyboxにリンク貼ると使えるのかも知れないけど、無かった)
パスワード関連が丸見えなのでパーミッション設定
chmod 644 /etc/passwd
chmod 644 /etc/group
chmod 640 /etc/shadow

再構成の前に、Compression-typeとBlock sizeを確認。
unsquashfs -s rootfs.bin
Found a valid SQUASHFS 4:0 superblock on rootfs.bin.
Creation or last append time Tue Aug 15 11:34:04 2017
Filesystem size 1817.96 Kbytes (1.78 Mbytes)
Compression xz
Block size 262144
Filesystem is exportable via NFS
Inodes are compressed
Data is compressed
Fragments are compressed
Always-use-fragments option is not specified
Xattrs are not stored
Duplicates are removed
Number of fragments 3
Number of inodes 178
Number of ids 1
パラメータ指定してsquashfs作成
$sudo mksquashfs rootfs rootfs.new -comp xz -b 262144

-rw-rw-r--  1 ub     ub      1900544  5月  5 10:52 rootfs.bin
-rw-r--r--  1 root   root    1863680  9月 17 16:53 rootfs.new
パーテーションサイズ1900544に満たない部分36864byteを0x00で埋める必要がある。
cp rootfs.new rootfs.fil
head -c 36864 /dev/zero >> rootfs.fil
mtd.binも同様にsquashfs展開して修正して再構成して0x00埋め。
修正内容はwebとかSDカード突っ込むと強制フォーマットされるとことか、
conf.binはjffs2なのでカメラにLoginして逐次修正します。

修正が終わったら結合
cp boot.bin new.bin
dd if=bootenv.bin bs=1024 seek=192 of=new.bin
dd if=kernel.bin   bs=1024 seek=256 of=new.bin
dd if=rootfs.fil   bs=1024 seek=1600 of=new.bin
dd if=mtd.bin      bs=1024 seek=3456 of=new.bin
dd if=conf.bin     bs=1024 seek=6528 of=new.bin
#逆エンディアン
byteorder4 new.bin new.rom
W25Q128-SOPが安かった(送料込み5個で425円)のでテスト用に買ってて、
せっかくなので0xFFで後半8MB埋めて焼いてみる。
0xffのfilは「ddで0xffを書き込む方法」とかぐぐってください。
えいっ
#焼き(Raspberry-pi
sudo flashrom -V -p linux_spi:dev=/dev/spidev0.0 -c "W25Q128.V" -E
sudo flashrom -V -p linux_spi:dev=/dev/spidev0.0 -c "W25Q128.V" -w new.rom
起動してrootloginできるようになりました。

Loosafe LS-F2 の調教 その1

KKMoon HR06/s468のあとLSF2やろうと思いつつも、めんどくさくなってすっかり放置しておりました。

Loosafe LS-F2のハードはだいたいの所、HR06と同じで、
CMOS SC1135 1.3Mpix センサ
Wifi:RTL8188FTV
FlashROM:W25Q64JVSIQ 64Mbit(8MB)
出荷シール18年01月
ファームV13.1.6.1.23-20171020
このへんがちょっぴり違います。
こちらのほうが新しいのですが、ROMイメージのmount方式がjffs2からsquashfsに一部変更され、高圧縮となったため8MBに収まったのかと思います。

HR06と同じように空きランドJ3にシリアル接続します。
1-TX
2-GND
3-RX
ホーレートは115200bps-8bit-none です。

起動ログにROMのパーテーションとmount情報が見つかります。
[    0.820000] [W25Q64FV] USE 1X mode read and 1X mode write
[    0.830000] gk_flash gk_flash.0: W25Q64FV (8192 Kbytes)
[    0.840000] 7 cmdlinepart partitions found on MTD device gk_flash
[    0.840000] Creating 7 MTD partitions on "gk_flash":
[    0.850000] 0x000000000000-0x000000030000 : "boot"    192k   0x30000
[    0.860000] 0x000000030000-0x000000040000 : "bootenv"    64k   0x10000
[    0.870000] 0x000000040000-0x000000190000 : "kernel"   1344k  0x150000
[    0.870000] 0x000000190000-0x000000360000 : "rootfs"      1856k  0x1D0000
[    0.880000] 0x000000360000-0x000000660000 : "mtd"         3072k  0x300000
[    0.890000] 0x000000660000-0x000000800000 : "conf"        1664k  0x1A0000
[    0.900000] 0x000000000000-0x000000800000 : "all"   8192k  0x800000
。
。
。
rootfs : mount -t squashfs /dev/mtdblock3 /
mtd    : mount -t squashfs /dev/mtdblock4 /mnt/mtd/ipc
conf   : mount -t jffs2 /dev/mtdblock5 /mnt/mtd/ipc/conf

吸い出したROMイメージをbyteorder4(4byte単位でbyte順を並び替え)したのち分割します。
dd if=lsf2.bin bs=1024 skip=0 count=192 of=boot.bin
dd if=lsf2.bin bs=1024 skip=192 count=64 of=bootenv.bin
dd if=lsf2.bin bs=1024 skip=256 count=1344 of=kernel.bin
dd if=lsf2.bin bs=1024 skip=1600 count=1856 of=rootfs.bin
dd if=lsf2.bin bs=1024 skip=3456 count=3072 of=mtd.bin
dd if=lsf2.bin bs=1024 skip=6528 count=1664 of=conf.bin
squashfsイメージのmount
$sudo mount -t squashfs rootfs.bin mnt
※mountしてもReadonryなので修正できないけど、ちゃんと取り出せたのが確認できました。
とりあえずumount
$sudo umount mnt
後半に続く。。

2018年7月7日土曜日

FlashROMの書き込み

ROMファイルを再構成する。
cp uboot.rom new.rom
dd if=ubootenv.rom bs=1024 seek=256 of=new.rom
dd if=kernel.rom   bs=1024 seek=320 of=new.rom
dd if=rootfs.rom   bs=1024 seek=2048 of=new.rom

Long word(4byte)の逆エンディアン変換を行う

FlashROMの書き込み
消去して書込みする
sudo flashrom -V -p linux_spi:dev=/dev/spidev0.0 -c "W25Q128.V" -E
sudo flashrom -V -p linux_spi:dev=/dev/spidev0.0 -c "W25Q128.V" -w new.rom

EEPROMなどと同じく消去すると0xffで埋まる。
消去を繰り返すと素子が劣化して消去に時間が掛かるようになるらしい。
UVROMやEEPROMは劣化すると不定ビット(読むたびに異なる値)が増えたり、0xffに戻ってくれなかったりしたけど、 10万回くらい大丈夫らしいです。

NBD8008Rケース完成

コントロールパネル作成して、ダイソーのスタックボックスに収めました。 HDDは2.5インチ500GBが余ってたのでそれ使いました。静かで良いです。 カメラ3台H.246常時録画で40日くらい持ちそう。 マウス用にUSBコネクタをフロント出ししても良かったかも PP樹脂の...