Add hi3516cv200_lite_spezvision-svi-252b-k202 device profile (SpezVision SVI-252B K202, IMX323, Ethernet only) (#161)

SpezVision SVI-252B K202 on board BLK16CV-0323-38X38-V1.01: HiSilicon Hi3516CV200,
Sony IMX323 on the I2C/DC 1080p configuration, 8 MiB SPI NOR, wired Ethernet only.

The board's day/night path is what needs describing. The hardware daylight sensor
is GPIO3_0 (legacy HiSilicon numbering 24) and the bistable IR-cut filter is
GPIO4_2 / GPIO4_1 (34 and 33), which the customizer seeds into majestic. GPIO3_0
has to be muxed to function 0 at 0x200f0034 before it can be read, and
load_hisilicon's imx323 branch does not touch that register, so the board ships a
muxes.sh for it — S30customizer runs that on every boot, independently of which
streamer is in use, so the pin contract holds for anything running on the camera.
No backlightPin is set: a separate software-controlled IR illuminator GPIO was not
proven on this board.

Rather than forking the whole hi3516cv200.generic.config into the device directory
the way the other CV200 profile does, the board carries a kernel config fragment
naming only its own hardware facts — no SD/MMC socket, no Wi-Fi radio, no used USB
path, NOR only — so it keeps tracking upstream kernel changes instead of shadowing
them. This is the first device here to use BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES.
Together with an exclude list trimmed to the one sensor this camera has, the image
lands at 3956736 B of rootfs, leaving 1256 KB of rootfs headroom and 524 KB of
kernel headroom on the 8 MiB layout.

Tested on physical hardware by the author: builds, flashes and boots, with IMX323
video, Ethernet, the hardware daylight sensor and automatic IR-cut switching all
working. A brief purple frame can still appear during the colour-to-grayscale
transition; that is tracked upstream in OpenIPC/majestic#325 and no board-specific
workaround is carried here.
This commit is contained in:
ArthurKoba
2026-09-19 15:47:44 +03:00
committed by GitHub
parent 5e1bb92866
commit ca991733a4
7 changed files with 217 additions and 0 deletions
+1
View File
@@ -58,6 +58,7 @@ RunCam WiFiLink SSC338Q IMX415 NOR_16M done
RVi-1NCMW2028 (2.8) HI3516EV300 SC2330 RTL8188FU_USB NAND testing
Smartwares CIP-37210 HI3518EV200 OV9732 RTL8188FU_USB NOR_16M done
Smartwares CIP-37210AT T21N JXF37 RTL8188FU_USB NOR_16M done
SpezVision SVI-252B K202 HI3516CV200 IMX323 - NOR_8M done
Switcam HS303 v1 HI3518EV200 JXF22 RTL8188FU_USB NOR_16M done
Switcam HS303 v2 HI3518EV200 OV9732 RTL8188EU_USB NOR_16M done
Tiandy TC-C321N GK7205V200 OS02G10 - NOR_8M done
@@ -0,0 +1,39 @@
# SVI-252B K202 hardware population on BLK16CV-0323-38X38-V1.01:
# no SD/MMC socket, no Wi-Fi radio, no used USB path, NOR flash only.
# Keep Ethernet, UART, GPIO/I2C and the HiSilicon media/audio path.
# No SD/MMC controller on this camera. HIMCI otherwise stalls boot probing it.
# CONFIG_MMC is not set
# CONFIG_HIMCI is not set
# No Wi-Fi hardware. Drop cfg80211/mac80211 and the generic USB Wi-Fi drivers.
# CONFIG_WIRELESS is not set
# CONFIG_WLAN is not set
# CONFIG_CFG80211 is not set
# CONFIG_MAC80211 is not set
# CONFIG_MT7601U is not set
# CONFIG_RTL_CARDS is not set
# CONFIG_RTL8192CU is not set
# CONFIG_RTLWIFI is not set
# CONFIG_RTLWIFI_USB is not set
# CONFIG_RTL8XXXU is not set
# CONFIG_R8188EU is not set
# The retail camera does not use the module's optional USB expansion interface.
# CONFIG_USB_SUPPORT is not set
# CONFIG_USB is not set
# CONFIG_USB_GADGET is not set
# CONFIG_USB_HISI_UDC is not set
# CONFIG_USB_MASS_STORAGE is not set
# CONFIG_PHY_HISI_USB2 is not set
# With no USB/SD storage there is no SCSI disk or FAT filesystem consumer.
# CONFIG_SCSI is not set
# CONFIG_BLK_DEV_SD is not set
# CONFIG_FAT_FS is not set
# CONFIG_VFAT_FS is not set
# This board is 8 MiB SPI NOR only; do not probe the absent SPI NAND controller.
# CONFIG_MTD_NAND is not set
# CONFIG_MTD_SPI_NAND_HISI_BVT is not set
# CONFIG_MTD_SPI_NAND_HIFMC100 is not set
@@ -0,0 +1,60 @@
# Architecture
BR2_arm=y
# Toolchain
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y
BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y
BR2_TOOLCHAIN_EXTERNAL_URL="https://github.com/openipc/firmware/releases/download/$(OPENIPC_TOOLCHAIN).tgz"
BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="arm-openipc-linux-musleabi"
BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_9=y
BR2_TOOLCHAIN_EXTERNAL_CUSTOM_MUSL=y
BR2_TOOLCHAIN_EXTERNAL_CXX=y
# Kernel
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_TARBALL=y
BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="https://github.com/openipc/linux/archive/$(OPENIPC_KERNEL).tar.gz"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(EXTERNAL_VENDOR)/board/$(OPENIPC_SOC_FAMILY)/hi3516cv200.generic.config"
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(EXTERNAL_VENDOR)/board/$(OPENIPC_SOC_FAMILY)/spezvision-svi-252b-k202.fragment"
BR2_LINUX_KERNEL_UIMAGE=y
BR2_LINUX_KERNEL_XZ=y
# Filesystem
BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL)/package/busybox/busybox.config"
BR2_PACKAGE_UBOOT_TOOLS=y
BR2_PACKAGE_ZLIB=y
# BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set
BR2_PACKAGE_WIREGUARD_LINUX_COMPAT=y
BR2_PACKAGE_WIREGUARD_TOOLS=y
BR2_TARGET_ROOTFS_CPIO=y
BR2_TARGET_ROOTFS_SQUASHFS=y
BR2_TARGET_ROOTFS_SQUASHFS4_XZ=y
# OpenIPC
BR2_OPENIPC_SOC_VENDOR="hisilicon"
BR2_OPENIPC_SOC_MODEL="hi3516cv200"
BR2_OPENIPC_SOC_FAMILY="hi3516cv200"
BR2_OPENIPC_VARIANT="lite"
BR2_OPENIPC_FLASH_SIZE="8"
# Packages
BR2_PACKAGE_DROPBEAR_OPENIPC=y
BR2_PACKAGE_HISILICON_OPENSDK=y
BR2_PACKAGE_HISILICON_OSDRV_HI3516CV200=y
BR2_PACKAGE_IPCTOOL=y
BR2_PACKAGE_LIBCURL_OPENIPC=y
BR2_PACKAGE_LIBCURL_OPENIPC_CURL=y
# BR2_PACKAGE_LIBCURL_OPENIPC_PROXY_SUPPORT is not set
# BR2_PACKAGE_LIBCURL_OPENIPC_COOKIES_SUPPORT is not set
# BR2_PACKAGE_LIBCURL_OPENIPC_EXTRA_PROTOCOLS_FEATURES is not set
BR2_PACKAGE_LIBEVENT_OPENIPC=y
BR2_PACKAGE_LIBOGG_OPENIPC=y
BR2_PACKAGE_MAJESTIC_FONTS=y
BR2_PACKAGE_MAJESTIC_WEBUI=y
BR2_PACKAGE_MAJESTIC=y
BR2_PACKAGE_MBEDTLS_OPENIPC=y
BR2_PACKAGE_OPUS_OPENIPC=y
BR2_PACKAGE_VTUND_OPENIPC=y
BR2_PACKAGE_YAML_CLI=y
@@ -0,0 +1,2 @@
# SVI-252B K202 has no removable storage.
# Override OpenIPC's common /etc/modules (vfat, exfat), so S35modules loads nothing here.
@@ -0,0 +1,35 @@
#!/bin/sh
#
# OpenIPC profile for SpezVision SVI-252B K202
# Board: BLK16CV-0323-38X38-V1.01
# SoC: HiSilicon Hi3516CV200
# Sensor: Sony IMX323, I2C/DC
# Flash: 8 MiB SPI NOR
#
# Majestic uses legacy HiSilicon GPIO numbering: bank * 8 + bit.
#
# Stock Sofia's IMX323 day/night path for product NID 0x11 uses:
# - GPIO3_0 = 24 as the digital daylight sensor input;
# - GPIO4_2 = 34 and GPIO4_1 = 33 as the bistable IR-cut outputs.
#
# Stock code muxes GPIO3_0 with 0x200f0034 = 0 before reading it.
# The board pinmux is reapplied on every boot by /usr/share/openipc/muxes.sh,
# independently of the selected streamer.
#
# The IR illuminator control is still unresolved, so backlightPin remains
# intentionally unset.
#
fw_setenv upgrade 'https://github.com/OpenIPC/builder/releases/download/latest/hi3516cv200_lite_spezvision-svi-252b-k202-nor.tgz'
fw_setenv sensor imx323
cli -s .isp.sensorConfig /etc/sensors/imx323_i2c_dc_1080p.ini
cli -s .nightMode.lightMonitor true
cli -s .nightMode.lightSensorPin 24
cli -s .nightMode.lightSensorInvert false
cli -s .nightMode.irCutPin1 34
cli -s .nightMode.irCutPin2 33
cli -s .video0.codec h264
cli -s .video0.fps 25
exit 0
@@ -0,0 +1,11 @@
#!/bin/sh
#
# SpezVision SVI-252B K202 board pinmux preset.
# S30customizer runs this script on every boot.
#
# Stock Sofia configures GPIO3_0 as the digital daylight sensor input by
# selecting mux function 0 at 0x200f0034. Keep this board contract outside
# Majestic so another streamer/runtime sees the same hardware setup.
#
devmem 0x200f0034 32 0
@@ -0,0 +1,69 @@
/etc/sensors/ar0130_i2c_720p.ini
/etc/sensors/ar0237_i2c_dc_1080p.ini
/etc/sensors/gc1034_i2c_720p.ini
/etc/sensors/gc2023_mipi_1080p.ini
/etc/sensors/imx222_i2c_1080p.ini
/etc/sensors/imx222_i2c_720p.ini
/etc/sensors/imx291_i2c_lvds_1080p.ini
/etc/sensors/imx323_spi_dc_1080p.ini
/etc/sensors/jxf22_i2c_1080p.ini
/etc/sensors/jxf23_i2c_1080p.ini
/etc/sensors/jxh62_i2c_720p.ini
/etc/sensors/jxh65_i2c_960p.ini
/etc/sensors/ov2710_dc_1080p.ini
/etc/sensors/ov2710_mipi_1080p.ini
/etc/sensors/ov2735_i2c_1080p.ini
/etc/sensors/ov2735_mipi_1080p.ini
/etc/sensors/ov9712_i2c_720p.ini
/etc/sensors/ov9732_i2c_720p.ini
/etc/sensors/ov9750_i2c_960p.ini
/etc/sensors/sc1135_i2c_720p.ini
/etc/sensors/sc1145_i2c_720p.ini
/etc/sensors/sc1235_i2c_dc_960p.ini
/etc/sensors/sc2035_i2c_1080p.ini
/etc/sensors/sc2135_i2c_1080p.ini
/etc/sensors/sc2235_i2c_dc_1080p.ini
#
/etc/sensors/iq/default.ini
/etc/sensors/iq/ar0130.ini
/etc/sensors/iq/ar0230.ini
/etc/sensors/iq/imx222.ini
/etc/sensors/iq/ov2710.ini
/etc/sensors/iq/ov9732.ini
/etc/sensors/iq/ov9750.ini
#
/usr/lib/sensors/libsns_9m034.so
/usr/lib/sensors/libsns_ar0130.so
/usr/lib/sensors/libsns_ar0230.so
/usr/lib/sensors/libsns_ar0237.so
/usr/lib/sensors/libsns_gc1034.so
/usr/lib/sensors/libsns_gc2023.so
/usr/lib/sensors/libsns_imx122.so
/usr/lib/sensors/libsns_imx222.so
/usr/lib/sensors/libsns_imx291.so
/usr/lib/sensors/libsns_jxf22.so
/usr/lib/sensors/libsns_jxf23.so
/usr/lib/sensors/libsns_jxh42.so
/usr/lib/sensors/libsns_jxh62.so
/usr/lib/sensors/libsns_jxh65.so
/usr/lib/sensors/libsns_mn34222.so
/usr/lib/sensors/libsns_ov2710.so
/usr/lib/sensors/libsns_ov2710_dc.so
/usr/lib/sensors/libsns_ov2710_mipi.so
/usr/lib/sensors/libsns_ov2718.so
/usr/lib/sensors/libsns_ov2735.so
/usr/lib/sensors/libsns_ov9712.so
/usr/lib/sensors/libsns_ov9732.so
/usr/lib/sensors/libsns_ov9750.so
/usr/lib/sensors/libsns_ov9752.so
/usr/lib/sensors/libsns_sc1135.so
/usr/lib/sensors/libsns_sc1145.so
/usr/lib/sensors/libsns_sc1235.so
/usr/lib/sensors/libsns_sc2035.so
/usr/lib/sensors/libsns_sc2135.so
/usr/lib/sensors/libsns_sc2235.so
#
/usr/bin/ircut_demo
/lib/modules/4.9.37/hisilicon/ir.ko
/lib/modules/4.9.37/hisilicon/hi_rtc.ko
/lib/modules/4.9.37/hisilicon/piris.ko