[Buildroot] [PATCH 08/12] package/freescale-imx/isp-imx: add package

Chris Dimich chris.dimich at boundarydevices.com
Wed Oct 6 20:41:31 UTC 2021


i.MX Verisilicon Software ISP.

Signed-off-by: Chris Dimich <chris.dimich at boundarydevices.com>
---
 package/freescale-imx/Config.in               |   1 +
 .../isp-imx/0001-run.sh-fix-bashisms.patch    | 201 ++++++++++++++++++
 ...rt_isp.sh-refine-device-tree-parsing.patch |  28 +++
 package/freescale-imx/isp-imx/Config.in       |  15 ++
 package/freescale-imx/isp-imx/S80isp          |  18 ++
 package/freescale-imx/isp-imx/isp-imx.hash    |   4 +
 package/freescale-imx/isp-imx/isp-imx.mk      |  65 ++++++
 7 files changed, 332 insertions(+)
 create mode 100644 package/freescale-imx/isp-imx/0001-run.sh-fix-bashisms.patch
 create mode 100644 package/freescale-imx/isp-imx/0001-start_isp.sh-refine-device-tree-parsing.patch
 create mode 100644 package/freescale-imx/isp-imx/Config.in
 create mode 100755 package/freescale-imx/isp-imx/S80isp
 create mode 100644 package/freescale-imx/isp-imx/isp-imx.hash
 create mode 100644 package/freescale-imx/isp-imx/isp-imx.mk

diff --git a/package/freescale-imx/Config.in b/package/freescale-imx/Config.in
index 5f02d24909..0f0f5c50fd 100644
--- a/package/freescale-imx/Config.in
+++ b/package/freescale-imx/Config.in
@@ -117,6 +117,7 @@ source "package/freescale-imx/imx-sc-firmware/Config.in"
 source "package/freescale-imx/imx-seco/Config.in"
 source "package/freescale-imx/imx-vpu-hantro-vc/Config.in"
 source "package/freescale-imx/isp-vvcam-module/Config.in"
+source "package/freescale-imx/isp-imx/Config.in"
 if (BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX51 || BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX53)
 source "package/freescale-imx/gpu-amd-bin-mx51/Config.in"
 source "package/freescale-imx/libz160/Config.in"
diff --git a/package/freescale-imx/isp-imx/0001-run.sh-fix-bashisms.patch b/package/freescale-imx/isp-imx/0001-run.sh-fix-bashisms.patch
new file mode 100644
index 0000000000..cbbc31906c
--- /dev/null
+++ b/package/freescale-imx/isp-imx/0001-run.sh-fix-bashisms.patch
@@ -0,0 +1,201 @@
+From 7c5c07a24c9e77d69002c6a9aefd1cc5a7a0615f Mon Sep 17 00:00:00 2001
+From: Chris Dimich <Chris.Dimich at boundarydevices.com>
+Date: Tue, 28 Sep 2021 17:27:33 -0700
+Subject: [PATCH 1/1] run.sh: fix bashisms
+
+---
+ imx/run.sh | 63 ++++++++++++++++++++++++++----------------------------
+ 1 file changed, 30 insertions(+), 33 deletions(-)
+
+diff --git a/imx/run.sh b/imx/run.sh
+index d3bb03a08..bab13c370 100755
+--- a/imx/run.sh
++++ b/imx/run.sh
+@@ -15,17 +15,17 @@ LOCAL_RUN="0" # search modules in /lib/modules and libraries in /usr/lib
+ RUN_OPTION=""
+ LOCAL_RUN="0"
+ # an array with the modules to load, insertion order
+-declare -a MODULES=("imx8-media-dev" "vvcam-video" "vvcam-dwe" "vvcam-isp")
++MODULES="imx8-media-dev vvcam-video vvcam-dwe vvcam-isp"
+ 
+ USAGE="Usage:\n"
+-USAGE+="run.sh -c <isp_config> &\n"
+-USAGE+="Supported configurations:\n"
+-USAGE+="\tbasler_1080p60         - single basler camera on MIPI-CSI1, 1920x1080, 60 fps\n"
+-USAGE+="\tdual_basler_1080p60    - dual basler cameras on MIPI-CSI1/2, 1920x1080, 60 fps\n"
+-USAGE+="\tbasler_4k              - single basler camera on MIPI-CSI1, 3840x2160, 30 fps\n"
+-USAGE+="\tbasler_1080p60hdr      - single basler camera on MIPI-CSI1, 1920x1080, 60 fps, HDR configuration\n"
+-USAGE+="\tdual_basler_1080p60hdr - dual basler cameras on MIPI-CSI1/2, 1920x1080, 60 fps, HDR configuration\n"
+-USAGE+="\tbasler_4khdr           - single basler camera on MIPI-CSI1, 3840x2160, 30 fps, HDR configuration\n"
++USAGE=$USAGE"run.sh -c <isp_config> &\n"
++USAGE=$USAGE"Supported configurations:\n"
++USAGE=$USAGE"\tbasler_1080p60         - single basler camera on MIPI-CSI1, 1920x1080, 60 fps\n"
++USAGE=$USAGE"\tdual_basler_1080p60    - dual basler cameras on MIPI-CSI1/2, 1920x1080, 60 fps\n"
++USAGE=$USAGE"\tbasler_4k              - single basler camera on MIPI-CSI1, 3840x2160, 30 fps\n"
++USAGE=$USAGE"\tbasler_1080p60hdr      - single basler camera on MIPI-CSI1, 1920x1080, 60 fps, HDR configuration\n"
++USAGE=$USAGE"\tdual_basler_1080p60hdr - dual basler cameras on MIPI-CSI1/2, 1920x1080, 60 fps, HDR configuration\n"
++USAGE=$USAGE"\tbasler_4khdr           - single basler camera on MIPI-CSI1, 3840x2160, 30 fps, HDR configuration\n"
+ 
+ 
+ # parse command line arguments
+@@ -182,21 +182,18 @@ load_module () {
+ 
+ load_modules () {
+ 	# remove any previous instances of the modules
+-	n=${#MODULES_TO_REMOVE[*]}
+-	for (( i = n-1; i >= 0; i-- ))
++	for i in "${MODULES_TO_REMOVE}"
+ 	do
+-		echo "Removing ${MODULES_TO_REMOVE[i]}..."
+-		rmmod ${MODULES_TO_REMOVE[i]} &>/dev/null
+-		#LSMOD_STATUS=`lsmod | grep "${MODULES[i]}"`
+-		#echo "LSMOD_STATUS=$LSMOD_STATUS"
+-		if lsmod | grep "${MODULES_TO_REMOVE[i]}" ; then
+-			echo "Removing ${MODULES_TO_REMOVE[i]} failed!"
++		echo "Removing $i..."
++		rmmod $i &>/dev/null
++		if lsmod | grep "$i" ; then
++			echo "Removing $i failed!"
+ 			exit 1
+ 		fi
+ 	done
+ 
+ 	# and now clean load the modules
+-	for i in "${MODULES[@]}"
++	for i in "${MODULES}"
+ 	do
+ 		echo "Loading module $i ..."
+ 		load_module $i
+@@ -206,10 +203,10 @@ load_modules () {
+ write_default_mode_files
+ 
+ echo "Trying configuration \"$ISP_CONFIG\"..."
+-MODULES_TO_REMOVE=( "basler-camera-driver-vvcam" "os08a20" "ov2775" "${MODULES[@]}")
++MODULES_TO_REMOVE="basler-camera-driver-vvcam os08a20 ov2775 ${MODULES}"
+ case "$ISP_CONFIG" in
+ 		basler_4k )
+-			MODULES=("basler-camera-driver-vvcam" "${MODULES[@]}")
++			MODULES="basler-camera-driver-vvcam ${MODULES}"
+ 			RUN_OPTION="CAMERA0"
+ 			CAM_NAME="basler-vvcam"
+ 			DRV_FILE="DAA3840_30MC_4K.drv"
+@@ -218,7 +215,7 @@ case "$ISP_CONFIG" in
+ 			write_sensor_cfg_file "Sensor0_Entry.cfg" $CAM_NAME $DRV_FILE $MODE_FILE $MODE
+ 			;;
+ 		basler_1080p60 )
+-			MODULES=("basler-camera-driver-vvcam" "${MODULES[@]}")
++			MODULES="basler-camera-driver-vvcam ${MODULES}"
+ 			RUN_OPTION="CAMERA0"
+ 			CAM_NAME="basler-vvcam"
+ 			DRV_FILE="DAA3840_30MC_1080P.drv"
+@@ -227,7 +224,7 @@ case "$ISP_CONFIG" in
+ 			write_sensor_cfg_file "Sensor0_Entry.cfg" $CAM_NAME $DRV_FILE $MODE_FILE $MODE
+ 			;;
+ 		dual_basler_1080p60 )
+-			MODULES=("basler-camera-driver-vvcam" "${MODULES[@]}")
++			MODULES="basler-camera-driver-vvcam ${MODULES}"
+ 			RUN_OPTION="DUAL_CAMERA"
+ 			CAM_NAME="basler-vvcam"
+ 			DRV_FILE="DAA3840_30MC_1080P.drv"
+@@ -237,7 +234,7 @@ case "$ISP_CONFIG" in
+ 			write_sensor_cfg_file "Sensor1_Entry.cfg" $CAM_NAME $DRV_FILE $MODE_FILE $MODE
+ 			;;
+ 		basler_4khdr )
+-			MODULES=("basler-camera-driver-vvcam" "${MODULES[@]}")
++			MODULES="basler-camera-driver-vvcam ${MODULES}"
+ 			RUN_OPTION="CAMERA0"
+ 			CAM_NAME="basler-vvcam"
+ 			DRV_FILE="DAA3840_30MC_4K.drv"
+@@ -246,7 +243,7 @@ case "$ISP_CONFIG" in
+ 			write_sensor_cfg_file "Sensor0_Entry.cfg" $CAM_NAME $DRV_FILE $MODE_FILE $MODE
+ 			;;
+ 		basler_1080p60hdr )
+-			MODULES=("basler-camera-driver-vvcam" "${MODULES[@]}")
++			MODULES="basler-camera-driver-vvcam ${MODULES}"
+ 			RUN_OPTION="CAMERA0"
+ 			CAM_NAME="basler-vvcam"
+ 			DRV_FILE="DAA3840_30MC_1080P.drv"
+@@ -255,7 +252,7 @@ case "$ISP_CONFIG" in
+ 			write_sensor_cfg_file "Sensor0_Entry.cfg" $CAM_NAME $DRV_FILE $MODE_FILE $MODE
+ 			;;
+ 		dual_basler_1080p60hdr )
+-			MODULES=("basler-camera-driver-vvcam" "${MODULES[@]}")
++			MODULES="basler-camera-driver-vvcam ${MODULES}"
+ 			RUN_OPTION="DUAL_CAMERA"
+ 			CAM_NAME="basler-vvcam"
+ 			DRV_FILE="DAA3840_30MC_1080P.drv"
+@@ -265,7 +262,7 @@ case "$ISP_CONFIG" in
+ 			write_sensor_cfg_file "Sensor1_Entry.cfg" $CAM_NAME $DRV_FILE $MODE_FILE $MODE
+ 			;;
+ 		dual_basler_1080p25hdr )
+-			MODULES=("basler-camera-driver-vvcam" "${MODULES[@]}")
++			MODULES="basler-camera-driver-vvcam ${MODULES}"
+ 			RUN_OPTION="DUAL_CAMERA"
+ 			CAM_NAME="basler-vvcam"
+ 			DRV_FILE="DAA3840_30MC_1080P.drv"
+@@ -275,7 +272,7 @@ case "$ISP_CONFIG" in
+ 			write_sensor_cfg_file "Sensor1_Entry.cfg" $CAM_NAME $DRV_FILE $MODE_FILE $MODE
+ 			;;
+ 		ov2775_1080p30 )
+-			MODULES=("ov2775" "${MODULES[@]}")
++			MODULES="ov2775 ${MODULES}"
+ 			RUN_OPTION="CAMERA0"
+ 			CAM_NAME="ov2775"
+ 			DRV_FILE="ov2775.drv"
+@@ -284,7 +281,7 @@ case "$ISP_CONFIG" in
+ 			write_sensor_cfg_file "Sensor0_Entry.cfg" $CAM_NAME $DRV_FILE $MODE_FILE $MODE
+ 			;;
+ 		dual_ov2775_1080p30 )
+-			MODULES=("ov2775" "${MODULES[@]}")
++			MODULES="ov2775 ${MODULES}"
+ 			RUN_OPTION="DUAL_CAMERA"
+ 			CAM_NAME="ov2775"
+ 			DRV_FILE="ov2775.drv"
+@@ -294,7 +291,7 @@ case "$ISP_CONFIG" in
+ 			write_sensor_cfg_file "Sensor1_Entry.cfg" $CAM_NAME $DRV_FILE $MODE_FILE $MODE
+ 			;;
+ 		ov2775_1080p30hdr )
+-			MODULES=("ov2775" "${MODULES[@]}")
++			MODULES="ov2775 ${MODULES}"
+ 			RUN_OPTION="CAMERA0"
+ 			CAM_NAME="ov2775"
+ 			DRV_FILE="ov2775.drv"
+@@ -303,7 +300,7 @@ case "$ISP_CONFIG" in
+ 			write_sensor_cfg_file "Sensor0_Entry.cfg" $CAM_NAME $DRV_FILE $MODE_FILE $MODE
+ 			;;
+ 		dual_ov2775_1080p30hdr )
+-			MODULES=("ov2775" "${MODULES[@]}")
++			MODULES="ov2775 ${MODULES}"
+ 			RUN_OPTION="DUAL_CAMERA"
+ 			CAM_NAME="ov2775"
+ 			DRV_FILE="ov2775.drv"
+@@ -313,7 +310,7 @@ case "$ISP_CONFIG" in
+ 			write_sensor_cfg_file "Sensor1_Entry.cfg" $CAM_NAME $DRV_FILE $MODE_FILE $MODE
+ 			;;
+ 		ov2775_1080p30hdr_native )
+-			MODULES=("ov2775" "${MODULES[@]}")
++			MODULES="ov2775 ${MODULES}"
+ 			RUN_OPTION="CAMERA0"
+ 			CAM_NAME="ov2775"
+ 			DRV_FILE="ov2775.drv"
+@@ -322,7 +319,7 @@ case "$ISP_CONFIG" in
+ 			write_sensor_cfg_file "Sensor0_Entry.cfg" $CAM_NAME $DRV_FILE $MODE_FILE $MODE
+ 			;;
+ 		ov2775_720p )
+-			MODULES=("ov2775" "${MODULES[@]}")
++			MODULES="ov2775 ${MODULES}"
+ 			RUN_OPTION="CAMERA0"
+ 			CAM_NAME="ov2775"
+ 			DRV_FILE="ov2775.drv"
+@@ -331,7 +328,7 @@ case "$ISP_CONFIG" in
+ 			write_sensor_cfg_file "Sensor0_Entry.cfg" $CAM_NAME $DRV_FILE $MODE_FILE $MODE
+ 			;;
+ 		os08a20_4k )
+-			MODULES=("os08a20" "${MODULES[@]}")
++			MODULES="os08a20 ${MODULES}"
+ 			RUN_OPTION="CAMERA0"
+ 			CAM_NAME="os08a20"
+ 			DRV_FILE="os08a20.drv"
+-- 
+2.31.1
+
diff --git a/package/freescale-imx/isp-imx/0001-start_isp.sh-refine-device-tree-parsing.patch b/package/freescale-imx/isp-imx/0001-start_isp.sh-refine-device-tree-parsing.patch
new file mode 100644
index 0000000000..cc98460b5f
--- /dev/null
+++ b/package/freescale-imx/isp-imx/0001-start_isp.sh-refine-device-tree-parsing.patch
@@ -0,0 +1,28 @@
+From ee98a802554a6a962b78bc65a951d84b5d60d526 Mon Sep 17 00:00:00 2001
+From: Chris Dimich <chris.dimich at boundarydevices.com>
+Date: Sun, 3 Oct 2021 10:29:31 -0700
+Subject: [PATCH 1/1] start_isp.sh: refine device tree parsing
+
+Signed-off-by: Chris Dimich <chris.dimich at boundarydevices.com>
+---
+ imx/start_isp.sh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/imx/start_isp.sh b/imx/start_isp.sh
+index 6daabc59c..892b7c061 100755
+--- a/imx/start_isp.sh
++++ b/imx/start_isp.sh
+@@ -7,8 +7,8 @@
+ #
+ 
+ RUNTIME_DIR="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
+-NR_DEVICE_TREE_BASLER=$(grep basler-camera-vvcam /sys/firmware/devicetree/base/soc at 0/*/i2c@*/*/compatible -l | wc -l 2> /dev/null)
+-NR_DEVICE_TREE_OV5640=$(grep ov5640 /sys/firmware/devicetree/base/soc at 0/*/i2c@*/*/compatible -l | wc -l 2> /dev/null)
++NR_DEVICE_TREE_BASLER=$(grep basler-camera-vvcam `find /sys/firmware/devicetree/base/soc at 0/ -name compatible | grep i2c` -l | wc -l 2> /dev/null)
++NR_DEVICE_TREE_OV5640=$(grep ov5640 `find /sys/firmware/devicetree/base/soc at 0/ -name compatible | grep i2c` -l | wc -l 2> /dev/null)
+ 
+ # check if the basler device has been enabled in the device tree
+ if [ $NR_DEVICE_TREE_BASLER -eq 1 ]; then
+-- 
+2.31.1
+
diff --git a/package/freescale-imx/isp-imx/Config.in b/package/freescale-imx/isp-imx/Config.in
new file mode 100644
index 0000000000..04d17284d4
--- /dev/null
+++ b/package/freescale-imx/isp-imx/Config.in
@@ -0,0 +1,15 @@
+comment "isp-imx requires aarch64"
+	depends on !BR2_aarch64
+
+comment "isp-imx requires g2d library"
+	depends on !BR2_PACKAGE_IMX_GPU_G2D
+
+config BR2_PACKAGE_ISP_IMX
+	bool "isp-imx"
+	depends on BR2_aarch64 # Only relevant for i.MX8
+	depends on BR2_PACKAGE_IMX_GPU_G2D
+	select BR2_PACKAGE_LIBDRM
+	select BR2_PACKAGE_LINUX_IMX_HEADERS
+	select BR2_PACKAGE_PYTHON3
+	help
+	  i.MX Verisilicon Software ISP.
diff --git a/package/freescale-imx/isp-imx/S80isp b/package/freescale-imx/isp-imx/S80isp
new file mode 100755
index 0000000000..a41028fde8
--- /dev/null
+++ b/package/freescale-imx/isp-imx/S80isp
@@ -0,0 +1,18 @@
+#! /bin/sh
+
+case "$1" in
+	start|"")
+		/bin/sh /opt/imx8-isp/bin/start_isp.sh &
+		;;
+	stop)
+		;;
+	restart|reload)
+		$0 stop
+		sleep 1
+		$0 start
+		;;
+	*)
+		echo "Usage: $0 {start|stop}" >&2
+		exit 1
+		;;
+esac
diff --git a/package/freescale-imx/isp-imx/isp-imx.hash b/package/freescale-imx/isp-imx/isp-imx.hash
new file mode 100644
index 0000000000..03bc61347f
--- /dev/null
+++ b/package/freescale-imx/isp-imx/isp-imx.hash
@@ -0,0 +1,4 @@
+# Locally computed:
+sha256  e775975684aab4211f0bf8c5e2c6604ba46b83c5586937000675e044a50d77b8  isp-imx-4.2.2.13.0.bin
+sha256  ea58636bf34f589048fcd46e38497c47229fde8498df086ff5fb52f9ef8e15ee  COPYING
+sha256  50099e283cfd307f84f159aeb1a6f462351320273dbcdb80d7f2c9db0494b71c  EULA
diff --git a/package/freescale-imx/isp-imx/isp-imx.mk b/package/freescale-imx/isp-imx/isp-imx.mk
new file mode 100644
index 0000000000..a05b7749b1
--- /dev/null
+++ b/package/freescale-imx/isp-imx/isp-imx.mk
@@ -0,0 +1,65 @@
+################################################################################
+#
+# isp-imx
+#
+################################################################################
+
+ISP_IMX_VERSION = 4.2.2.13.0
+ISP_IMX_SITE = $(FREESCALE_IMX_SITE)
+ISP_IMX_SOURCE = isp-imx-$(ISP_IMX_VERSION).bin
+ISP_IMX_DEPENDENCIES = linux linux-imx-headers python3 libdrm imx-gpu-g2d
+ISP_IMX_LICENSE = NXP Semiconductor Software License Agreement
+ISP_IMX_LICENSE_FILES = EULA COPYING
+ISP_IMX_REDISTRIBUTE = NO
+ISP_IMX_SUBDIR = appshell
+
+ISP_IMX_CONF_OPTS += \
+    -DCMAKE_BUILD_TYPE=release \
+    -DISP_VERSION=ISP8000NANO_V1802 \
+    -DPLATFORM=ARM64 \
+    -DAPPMODE=V4L2 \
+    -DQTLESS=1 \
+    -DFULL_SRC_COMPILE=1 \
+    -DWITH_DRM=1 \
+    -DWITH_DWE=1 \
+    -DSERVER_LESS=1 \
+    -DSUBDEV_V4L2=1 \
+    -DENABLE_IRQ=1 \
+    -DPARTITION_BUILD=0 \
+    -D3A_SRC_BUILD=0 \
+    -Wno-dev
+
+ISP_IMX_CONF_ENV += SDKTARGETSYSROOT=$(STAGING_DIR)
+
+define ISP_IMX_EXTRACT_CMDS
+	$(call FREESCALE_IMX_EXTRACT_HELPER,$(ISP_IMX_DL_DIR)/$(ISP_IMX_SOURCE))
+endef
+
+define ISP_IMX_INSTALL_TARGET_CMDS
+	mkdir -p $(TARGET_DIR)/opt/imx8-isp/bin
+	cp -r $(@D)/$(ISP_IMX_SUBDIR)/generated/release/bin/*2775* $(TARGET_DIR)/opt/imx8-isp/bin
+	cp -r $(@D)/$(ISP_IMX_SUBDIR)/generated/release/bin/isp_media_server $(TARGET_DIR)/opt/imx8-isp/bin
+	cp -r $(@D)/$(ISP_IMX_SUBDIR)/generated/release/bin/*_test $(TARGET_DIR)/opt/imx8-isp/bin
+	cp -r $(@D)/$(ISP_IMX_SUBDIR)/generated/release/bin/vvext $(TARGET_DIR)/opt/imx8-isp/bin
+	cp -r $(@D)/dewarp/dewarp_config $(TARGET_DIR)/opt/imx8-isp/bin
+	cp -r $(@D)/mediacontrol/case/ $(TARGET_DIR)/opt/imx8-isp/bin
+	cp -r $(@D)/$(ISP_IMX_SUBDIR)/generated/release/lib/*.so* $(TARGET_DIR)/usr/lib/
+
+	cp $(@D)/imx/run.sh $(TARGET_DIR)/opt/imx8-isp/bin
+	cp $(@D)/imx/start_isp.sh $(TARGET_DIR)/opt/imx8-isp/bin
+
+	chmod +x $(TARGET_DIR)/opt/imx8-isp/bin/run.sh
+	chmod +x $(TARGET_DIR)/opt/imx8-isp/bin/start_isp.sh
+endef
+
+define ISP_IMX_INSTALL_INIT_SYSTEMD
+	$(INSTALL) -D -m 644 $(@D)/imx/imx8-isp.service \
+		$(TARGET_DIR)/usr/lib/systemd/system/imx8-isp.service
+endef
+
+define ISP_IMX_INSTALL_INIT_SYSV
+	$(INSTALL) -D -m 755 package/freescale-imx/isp-imx/S80isp \
+		$(TARGET_DIR)/etc/init.d/S80isp
+endef
+
+$(eval $(cmake-package))
-- 
2.31.1



More information about the buildroot mailing list