视洞R33定制版改造自制IPC网络摄像头(可rtsp可web)
这期的主角是视洞R33智能摄像头,LT定制版。我们通过修改启动命令破解原系统,让它运行开放系统,并且搭建rkipc平台,通过WEB/VLC预览视频画面
硬件配置很高啊,主控使用RV1106G2(带0.5T NPU),传感器gc4023,宽视角分辨率2560x1440@30fps,实测4M分辨率能跑满。能连WiFi,支持双向对讲、红外夜视。咸鱼9.9捡回来一台(被绑定),目前被绑定的25左右,未绑定的要40+(不建议买,只能用LT平台,回放要开会员),不过画质真的比某些虚标的强
这个主控其实幸狐和Firefly也推过,因此可以将它们的系统移植到摄像头上。摄像头配置是内存128M,spi-nand 128M。需要准备电烙铁 USB转串口 一张空闲的TF卡
一.拆机飞出调试串口
收到货后拆开摄像头(上半部分的接缝翘一下),可以看到RX TX GND的丝印,飞出串口线,插上CH340,开搞~
二.制作SD卡根系统
一键刷入固件制作中(只适配8G/32G存储卡,某多15块钱左右的联想a2卡就够了)
下面的是手动刷入教程,比较繁琐,并且需要linux电脑/root过的手机
首先下载根系统,在幸狐SD 卡镜像烧录处下载buildroot镜像的sd卡版,解压缩后得到rootfs.img备用
在Firefly CT36B处下载CT36B的固件,解压缩后得到userdata.img oem.img备用
接下来需要将固件烧录进TF卡(为什么不烧录进设备?因为128M塞不下256M的系统,我不太懂rv的分区…如果有大佬能适配下就更好了)
唉,好麻烦,不写了,等我做包吧
三.修改启动参数 buildroot, 启动!
准备完成,接下来终于可以修改摄像头了~插入TF卡,接上串口线,打开PuTTY/Xterm,波特率115200,在终端内按住Ctrl+C,插上摄像头的电源。可以看到系统中断在了uboot阶段,接下来修改启动参数,输入以下命令
setenv sys_bootargs ' ubi.mtd=7 ubi.block=0,rootfs root=/dev/mmcblk1p3 rootfstype=ext4 rw rk_dma_heap_cma=66M'
saveenv
reset
系统应该会自动启动TF卡里的系统,当看到Luckfox login:时,恭喜系统启动成功!
四.调试摄像头
如果刷入了一键包,本步骤跳过
由于适配原因,默认的系统并没有很好的适配这款摄像头,WiFi模块也没有启用,因此我准备了一个一键patch脚本,以下: (建议先使用vi存进一个脚本里再执行,以防串口出现错误)
# 首先通过串口登录系统
# 挂载oem userdata分区
echo '/dev/mmcblk1p1 /oem ext4 defaults 0 0
/dev/mmcblk1p2 /userdata ext4 defaults 0 0
' >> /etc/fstab
mount -a
# 挂载原系统
mkdir -p /mtd/rootfs /mtd/oem
mount -t squashfs /dev/ubiblock0_0 /mtd/rootfs
# 拷贝原系统内的ubitool,挂载oem分区
cp /mtd/rootfs/usr/bin/ubi* /usr/bin
ubiattach -m 8
ubiblock -c /dev/ubi1_0
mount -t squashfs /dev/ubiblock1_0 /mtd/oem
# 拷贝原系统内的内核模块及启动脚本
rm -r /oem/usr/ko
cp -a /mtd/oem/usr/ko /oem/usr/ko
cp /mtd/oem/usr/bin/customer_insmod* /oem/usr/bin
# 删除系统内USB相关自启动(没找到usb焊盘...而且内核也没有相关的模块)
rm /etc/init.d/*usb*
# 写入WiFi启动脚本和配置
# S99done
echo '#!/bin/sh
case "$1" in
start)
/etc/rc.local &
;;
*)
exit 1
esac
exit 0' > /etc/init.d/S99done
chmod +x /etc/init.d/S99done
# rc.local
echo '#!/bin/sh
# rootfs
mount -t squashfs /dev/ubiblock0_0 /mtd/rootfs
# userdata
ubiattach -m 12
#mount -t ubifs /dev/ubi1_0 /mtd/userdata
# oem
ubiattach -m 8
ubiblock -c /dev/ubi2_0
mount -t squashfs /dev/ubiblock2_0 /mtd/oem
# resource
#ubiattach -m 10
#ubiblock -c /dev/ubi3_0
#mount -t squashfs /dev/ubiblock3_0 /mtd/resource
# gpio
# export ircut open gpio
echo 35 > /sys/class/gpio/export
# export ircut close gpio
echo 36 > /sys/class/gpio/export
# open green led in front of the camera
echo 3 > /sys/class/gpio/export
echo high > /sys/class/gpio/gpio3/direction
# wpa
chroot /mtd/rootfs mount -a
cp /etc/wpa_supplicant.conf /mtd/rootfs/tmp
cp /etc/start_wpa.sh /mtd/rootfs/tmp
chroot /mtd/rootfs /tmp/start_wpa.sh' > /etc/rc.local
chmod +x /etc/rc.local
# start_wpa.sh
echo '#!/bin/sh
mount -t devtmpfs udev /dev
# wait for insmod
while [ ! -d /sys/class/net/wlan0 ]
do
sleep 1
done
wpa_supplicant -Dnl80211 -i wlan0 -c /tmp/wpa_supplicant.conf &
sleep 5
udhcpc -i wlan0
exit 0' > /etc/start_wpa.sh
chmod +x /etc/start_wpa.sh
# wpa_supplicant.conf 根据自己wifi名称密码修改
echo 'ctrl_interface=/var/run/wpa_supplicant
update_config=1
network={
ssid="YOUR WIFI SSID"
psk="YOUR WIFI PASSWORD"
priority=1
}' > /etc/wpa_supplicant.conf
# 替换rkaiq rockit库为原系统带的版本
cp /mtd/oem/usr/lib/librockit.so /oem/usr/lib
cp /mtd/oem/usr/lib/librkaiq.so /oem/usr/lib
# 加载摄像头默认配置
cp /oem/usr/share/rkipc-400w.ini /userdata/rkipc.ini
sync
# 因为内存较小,请手动修改rkipc.ini,将audio.0里的enable项改为0
# 此外需要修改RkLunch.sh,将199到226行全部删掉(因为默认不支持gc4023,会导致配置被删)
执行完成后重启,打开摄像头所在IP,应该就能看到rkipc的WEB界面了,rtsp地址是rtsp://<IP地址>/live/0(第0码流, 高分辨率)和rtsp://<IP地址>/live/1(低分辨率),推荐的播放软件是VLC/Onvier。NPU及其他配置请参考瑞芯微rkipc手册和rkipc.ini
五.调用IR CUT和LED
方案A.使用命令修改
# ircut 红外光滤镜
# 打开
echo 35 > /sys/class/gpio/export
# high = out + high
echo high > /sys/class/gpio/gpio35/direction
sleep 1
echo 0 > /sys/class/gpio/gpio35/value
# 关闭
echo 36 > /sys/class/gpio/export
echo high > /sys/class/gpio/gpio36/direction
sleep 1
echo 0 > /sys/class/gpio/gpio36/value
# irled 红外灯
echo 0 > /sys/class/pwm/pwmchip3/export
# 参考值, duty_cycle越小,灯越亮
echo 10000 > /sys/class/pwm/pwmchip3/pwm0/period
echo 5000 > /sys/class/pwm/pwmchip3/pwm0/duty_cycle
echo 1 > /sys/class/pwm/pwmchip3/pwm0/enable
# led 普通灯
echo 0 > /sys/class/pwm/pwmchip7/export
# 可以将period调大至5000000ns以获得更精细的调节范围
echo 10000 > /sys/class/pwm/pwmchip7/pwm0/period
echo 0 > /sys/class/pwm/pwmchip7/pwm0/duty_cycle
echo 1 > /sys/class/pwm/pwmchip7/pwm0/enable
方案B.使用CGI在web侧修改(当然,也可以在rkipc的web界面-配置-图像-显示设置-日夜切换来手动开关ircut和黑白模式)
# 先在rc.local添加以下初始化命令
echo '# irled
echo 0 > /sys/class/pwm/pwmchip3/export
echo 10000 > /sys/class/pwm/pwmchip3/pwm0/period
echo 10000 > /sys/class/pwm/pwmchip3/pwm0/duty_cycle
echo 1 > /sys/class/pwm/pwmchip3/pwm0/enable
# led
echo 0 > /sys/class/pwm/pwmchip7/export
echo 10000 > /sys/class/pwm/pwmchip7/pwm0/period
echo 10000 > /sys/class/pwm/pwmchip7/pwm0/duty_cycle
echo 1 > /sys/class/pwm/pwmchip7/pwm0/enable' >> /etc/rc.local
# irled.cgi
echo '#!/bin/sh
exec 2>&1
echo "Status: 200 OK
X-Frame-Options: SAMEORIGIN
X-Frame-Options: SAMEORIGIN
Content-Type: text/html; charset=utf-8
Cache-Control: no-cache
Expires: 0"
echo
QUERY="$QUERY_STRING"
[ ! -f /sys/class/gpio/gpio35/value ] && echo 35 > /sys/class/gpio/export
[ ! -f /sys/class/gpio/gpio36/value ] && echo 36 > /sys/class/gpio/export
[ ! -f /sys/class/pwm/pwmchip7/pwm0/duty_cycle ] && echo 0 > /sys/class/pwm/pwmchip7/export
[ ! -f /sys/class/pwm/pwmchip3/pwm0/duty_cycle ] && echo 0 > /sys/class/pwm/pwmchip3/export
if [ "$QUERY" == "open" ]
then
echo 5000 > /sys/class/pwm/pwmchip3/pwm0/duty_cycle
echo 0 > /sys/class/gpio/gpio35/value
echo 0 > /sys/class/gpio/gpio36/value
echo high > /sys/class/gpio/gpio35/direction
sleep 1
echo 0 > /sys/class/gpio/gpio35/value
fi
if [ "$QUERY" == "close" ]
then
echo 10000 > /sys/class/pwm/pwmchip3/pwm0/duty_cycle
echo 0 > /sys/class/gpio/gpio35/value
echo 0 > /sys/class/gpio/gpio36/value
echo high > /sys/class/gpio/gpio36/direction
sleep 1
echo 0 > /sys/class/gpio/gpio36/value
fi
if [ "$QUERY" == "ledopen" ]
then
echo 0 > /sys/class/pwm/pwmchip7/pwm0/duty_cycle
fi
if [ "$QUERY" == "ledclose" ]
then
echo 10000 > /sys/class/pwm/pwmchip7/pwm0/duty_cycle
fi' > /oem/usr/www/cgi-bin/irled.cgi
chmod +x /oem/usr/www/cgi-bin/irled.cgi
# 食用方法: 访问http://<IP地址>/cgi-bin/irled.cgi?<指令>(open/close/ledopen/ledclose)
六.一些参考资料
分析得到的引脚分配:
gpio4 wifipwr
gpio35 ircut open
gpio36 ircut close
pwmchip3/pwm0 irled
pwmchip7/pwm0 led
gpio3 led (正面G)
gpio2 led (正面R)
gpio32 key (正面按钮 按下为0)
未完待续
不知道视洞其他款是否也为rv1106,不过应该都可以用类似的办法移植
--------------
你已经看完这篇博文了!
本文来自博客园,作者:星如雨yu,转载请注明原文链接:https://www.cnblogs.com/tianpanyu/p/19089781
另,建议转载手动看一眼,把代码块转过去呗(超小声嘀咕)

浙公网安备 33010602011771号