视洞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,不过应该都可以用类似的办法移植

posted @ 2025-09-14 22:23  星如雨yu  阅读(192)  评论(0)    收藏  举报