Add Support for Luckfox Pico Zero (#310)

* sysdrv/source/kernel/arch/arm/boot/dts : Add Luckfox Pico Zero device tree files

Signed-off-by: eng29 <eng29@luckfox.com>

* project/cfg/BoardConfig_IPC : Add Luckfox Pico Zero BoardConfig file

Signed-off-by: eng29 <eng29@luckfox.com>

* project/build.sh : Add the lunch menu item of Luckfox Pico Zero

Signed-off-by: eng29 <eng29@luckfox.com>

* project/cfg/BoardConfig_IPC/overlay/overlay-luckfox-config/usr/bin/luckfox-config : Add support for Luckfox Pico Zero

Signed-off-by: eng29 <eng29@luckfox.com>

* sysdrv/drv_ko/wifi/insmod_wifi.sh : Use the device ID as the basis for loading the AIC8800DC driver

Signed-off-by: eng29 <eng29@luckfox.com>

* sysdrv/source/kernel/drivers/media/i2c : Add the ISG1321 sensor driver

Signed-off-by: eng29 <eng29@luckfox.com>

* sysdrv/source/kernel/drivers/media/i2c/imx415.c : Add 4-lane 15fps mode for Luckfox Pico Zero

Signed-off-by: eng29 <eng29@luckfox.com>

* sysdrv/source/kernel/drivers/media/platform/rockchip/isp/hw.c : Add the "rockchip,unite" parameters

Signed-off-by: eng29 <eng29@luckfox.com>

* sysdrv/source/kernel/arch/arm/configs/luckfox_rv1106_linux_defconfig : Add IMX415 and ISG1321 support

Signed-off-by: eng29 <eng29@luckfox.com>

* project/app/rkipc/rkipc/common/network/network.c : Cancel the status monitoring for wlan0 and usb0

Signed-off-by: eng29 <eng29@luckfox.com>

* project/app/rkipc/rkipc/src/rv1106_ipc : Add IMX415 and ISG1321 support for Luckfox Pico Zero

Signed-off-by: eng29 <eng29@luckfox.com>

* media/isp/release_camera_engine_rkaiq_rv1106_arm-rockchip830-linux-uclibcgnueabihf/isp_iqfiles : Add ISG1321 iqfile

Signed-off-by: eng29 <eng29@luckfox.com>

* sysdrv/drv_ko/insmod_ko.sh : Register ISG1321 driver during boot process

Signed-off-by: eng29 <eng29@luckfox.com>

* sysdrv/tools/board/buildroot/luckfox_pico_defconfig : Add rsync command for backup

Signed-off-by: eng29 <eng29@luckfox.com>

---------

Signed-off-by: eng29 <eng29@luckfox.com>
This commit is contained in:
luckfox-eng29
2025-08-14 14:38:50 +08:00
committed by GitHub
parent e2b0ffa22e
commit 9942437537
20 changed files with 5960 additions and 43 deletions

View File

@@ -0,0 +1,129 @@
#!/bin/bash
#################################################
# Board Config
#################################################
export LF_ORIGIN_BOARD_CONFIG=BoardConfig-EMMC-Buildroot-RV1106_Luckfox_Pico_Zero-IPC.mk
# Target CHIP
export RK_CHIP=rv1106
# app config
export RK_APP_TYPE=RKIPC_RV1106
# Config CMA size in environment
export RK_BOOTARGS_CMA_SIZE="100M"
# Kernel dts
export RK_KERNEL_DTS=rv1106g-luckfox-pico-zero.dts
#################################################
# BOOT_MEDIUM
#################################################
# Target boot medium
export RK_BOOT_MEDIUM=emmc
# Uboot defconfig fragment
export RK_UBOOT_DEFCONFIG_FRAGMENT="rk-emmc.config"
# specify post.sh for delete/overlay files
# export RK_PRE_BUILD_OEM_SCRIPT=rv1103-spi_nor-post.sh
# config partition in environment
# RK_PARTITION_CMD_IN_ENV format:
# <partdef>[,<partdef>]
# <partdef> := <size>[@<offset>](part-name)
# Note:
# If the first partition offset is not 0x0, it must be added. Otherwise, it needn't adding.
export RK_PARTITION_CMD_IN_ENV="32K(env),512K@32K(idblock),256K(uboot),32M(boot),512M(oem),256M(userdata),6G(rootfs)"
# config partition's filesystem type (squashfs is readonly)
# emmc: squashfs/ext4
# nand: squashfs/ubifs
# spi nor: squashfs/jffs2
# RK_PARTITION_FS_TYPE_CFG format:
# AAAA:/BBBB/CCCC@ext4
# AAAA ----------> partition name
# /BBBB/CCCC ----> partition mount point
# ext4 ----------> partition filesystem type
export RK_PARTITION_FS_TYPE_CFG=rootfs@IGNORE@ext4,userdata@/userdata@ext4,oem@/oem@ext4
# config filesystem compress (Just for squashfs or ubifs)
# squashfs: lz4/lzo/lzma/xz/gzip, default xz
# ubifs: lzo/zlib, default lzo
# export RK_SQUASHFS_COMP=xz
# export RK_UBIFS_COMP=lzo
#################################################
# TARGET_ROOTFS
#################################################
# Target rootfs
export LF_TARGET_ROOTFS=buildroot
# Buildroot defconfig
export RK_BUILDROOT_DEFCONFIG=luckfox_pico_w_defconfig
#################################################
# Defconfig
#################################################
# Target arch
export RK_ARCH=arm
# Target Toolchain Cross Compile
export RK_TOOLCHAIN_CROSS=arm-rockchip830-linux-uclibcgnueabihf
#misc image
export RK_MISC=wipe_all-misc.img
# Uboot defconfig
export RK_UBOOT_DEFCONFIG=luckfox_rv1106_uboot_defconfig
# Kernel defconfig
export RK_KERNEL_DEFCONFIG=luckfox_rv1106_linux_defconfig
# Kernel defconfig fragment
export RK_KERNEL_DEFCONFIG_FRAGMENT=rv1106-bt.config
# Config sensor IQ files
# RK_CAMERA_SENSOR_IQFILES format:
# "iqfile1 iqfile2 iqfile3 ..."
# ./build.sh media and copy <SDK root dir>/output/out/media_out/isp_iqfiles/$RK_CAMERA_SENSOR_IQFILES
#export RK_CAMERA_SENSOR_IQFILES="sc4336_OT01_40IRC_F16.json sc3336_CMK-OT2119-PC1_30IRC-F16.json mis5001_CMK-OT2115-PC1_30IRC-F16.json"
#export RK_CAMERA_SENSOR_IQFILES="sc4336_OT01_40IRC_F16.json sc3336_CMK-OT2119-PC1_30IRC-F16.json sc530ai_CMK-OT2115-PC1_30IRC-F16.json"
export RK_CAMERA_SENSOR_IQFILES="mia1321_MIA1321_30IRC-F16.json imx415_CMK-OT2022-PX1_IR0147-36IRC-8M-F20.json"
# Config sensor lens CAC calibrattion bin files
#export RK_CAMERA_SENSOR_CAC_BIN="CAC_sc4336_OT01_40IRC_F16"
#export RK_CAMERA_SENSOR_CAC_BIN="CAC_sc4336_OT01_40IRC_F16 CAC_sc530ai_CMK-OT2115-PC1_30IRC-F16"
# build ipc web backend
#export RK_APP_IPCWEB_BACKEND=y
# enable install app to oem partition
export RK_BUILD_APP_TO_OEM_PARTITION=y
# enable rockchip test
export RK_ENABLE_ROCKCHIP_TEST=y
# enable rockchip wifi
export RK_ENABLE_WIFI=y
export RK_ENABLE_WIFI_CHIP=AIC8800DC
# config wifi ssid and passwd
export LF_WIFI_SSID="Your wifi ssid"
export LF_WIFI_PSK="Your wifi password"
#################################################
# PRE and POST
#################################################
# specify pre.sh for delete/overlay files
export RK_PRE_BUILD_OEM_SCRIPT=luckfox-buildroot-oem-pre.sh
# specify post.sh for delete/overlay files
export RK_PRE_BUILD_USERDATA_SCRIPT=luckfox-userdata-pre.sh
# declare overlay directory
export RK_POST_OVERLAY="overlay-luckfox-config overlay-luckfox-buildroot-init overlay-luckfox-buildroot-shadow"

View File

@@ -201,6 +201,34 @@ function luckfox_pico_pi_pin_diagram_file() {
EOF
}
function luckfox_pico_zero_pin_diagram_file() {
cat >$LUCKFOX_PIN_DIAGRAM_FILE <<EOF
Luckfox_Pico_Zero
+ - + - +
- - - 3V3 | | 5V
- I2C2_M0_SCL - UART3_M0_TX - GPIO1_A0 | | 5V
PWM4_M0 - I2C2_M0_SDA - UART3_M0_RX - GPIO1_A1 | | GND
PWM3_M1 - - UART4_M0_RX - GPIO1_B0 | | GPIO1_B2 - FIQtty_TX
- - - GND | | GPIO1_B3 - FIQtty_RX
- - UART4_M0_TX - GPIO1_B1 | | GPIO1_C6 - - - PWM10_M1
PWM3_M2 - - UART3_M1_TX - GPIO1_D0 | | GND
PWM10_M2- - UART3_M1_RX - GPIO1_D1 | | GPIO2_A7 - UART0_M1_CTS- I2C3_M0_SDA - PWM4_M1
- - - 3V3 | | GPIO2_A6 - UART0_M1_RTS- I2C3_M0_SCL - PWM2_M1
PWM5_M2 - I2C4_M1_SCL - SPI0_M0_MOSI- GPIO1_C2 | | GND
PWM6_M2 - I2C4_M1_SDA - SPI0_M0_MISO- GPIO1_C3 | | GPIO1_D3 - - - PWM11_M2
PWM4_M2 - - SPI0_M0_CLK - GPIO1_C1 | | GPIO1_C0 - SPI0_M0_CS0 - - PWM2_M2
GND | | GPIO1_D2 - SPI0_M0_CS1 - - PWM0_M1
PWM6_M1 - I2C1_M1_SDA - UART0_M1_TX - GPIO2_B1 | | GPIO2_B0 - UART0_M1_RX - I2C2_M1_SCL - PWM5_M1
- I2C3_M2_SDA - UART5_M2_RTS- GPIO3_D2 | | GND - - -
- I2C3_M2_SCL - UART5_M2_CTS- GPIO3_D1 | | GPIO1_C5 - UART4_M1_TX - - PWM9_M1
PWM8_M1 - - UART4_M1_RX - GPIO1_C4 | | GND - - -
PWM2_M0 - - UART0_M0_TX - GPIO0_A1 | | GPIO1_C7 - - - PWM11_M1
- - UART0_M0_RX - GPIO0_A0 | | GPIO0_A3 - - -
- - - GND | | GPIO0_A4 - - - PWM1_M0
+ - + - +
EOF
}
################################################################
# ------------------------ Initialize --------------------------
################################################################
@@ -252,6 +280,8 @@ function luckfox_config_init() {
luckfox_pico_ultra_pin_diagram_file
elif [ "$LUCKFOX_CHIP_MODEL" == "Luckfox Pico Pi" ] || [ "$LUCKFOX_CHIP_MODEL" == "Luckfox Pico Pi W" ]; then
luckfox_pico_pi_pin_diagram_file
elif [ "$LUCKFOX_CHIP_MODEL" == "Luckfox Pico Zero" ]; then
luckfox_pico_zero_pin_diagram_file
fi
fi
@@ -2022,6 +2052,7 @@ function luckfox_usb_app() {
function luckfox_csi_app() {
#region
local action="$1"
local unite="$2"
# update fdt
luckfox_update_fdt
@@ -2035,6 +2066,12 @@ function luckfox_csi_app() {
local csi_action=disbaled
fi
if [ "$unite" == 1 ]; then
local unite_state=1
else
local unite_state=0
fi
if [ "$action" == 1 ]; then
local i2c_content="
/dts-v1/;
@@ -2043,6 +2080,10 @@ function luckfox_csi_app() {
status=\"$csi_action\";
pinctrl-0 = <$i2c_pinctrl_addr>;
};
&{/rkisp@ffa00000}{
rockchip,unite = <$unite_state>;
};
"
else
local i2c_content="
@@ -2060,6 +2101,8 @@ function luckfox_csi_app() {
# update cfg
luckfox_set_pin_cfg "CSI_ENABLE" "$action"
luckfox_set_pin_parameter "CSI_ENABLE" "$action"
luckfox_set_pin_cfg "CSI_UNITE_ENABLE" "$action"
luckfox_set_pin_parameter "CSI_UNITE_ENABLE" "$action"
luckfox_set_pin_mark "I2C4_M0_SCL" 0
luckfox_set_pin_mark "I2C4_M0_SDA" 0
@@ -2877,7 +2920,8 @@ function luckfox_show_menu() {
esac
done
# Only support Luckfox Pico Ultra /Luckfox Pico Ultra W
elif [ "$LUCKFOX_CHIP_MODEL" == "Luckfox Pico Ultra" ] || [ "$LUCKFOX_CHIP_MODEL" == "Luckfox Pico Ultra W" ]; then
elif [ "$LUCKFOX_CHIP_MODEL" == "Luckfox Pico Ultra" ] || [ "$LUCKFOX_CHIP_MODEL" == "Luckfox Pico Ultra W" ] ||
[ "$LUCKFOX_CHIP_MODEL" == "Luckfox Pico Zero" ]; then
while true; do
option=$(dialog --title "$LUCKFOX_CHIP_MODEL Config" \
--menu "Choose an option" 80 50 6 \
@@ -2894,21 +2938,41 @@ function luckfox_show_menu() {
esac
done
else
while true; do
option=$(dialog --title "$LUCKFOX_CHIP_MODEL Config" \
--menu "Choose an option" 80 50 6 \
1 "Compatible Devices" \
2 "Advanced Options" \
3 "About Luckfox" \
2>&1 >/dev/tty)
if [ "$LUCKFOX_CHIP_MEDIA_CLASS" == "sdmmc" ]; then
while true; do
option=$(dialog --title "$LUCKFOX_CHIP_MODEL Config" \
--menu "Choose an option" 80 50 6 \
1 "Compatible Devices" \
2 "Advanced Options" \
3 "Backup" \
4 "About Luckfox" \
2>&1 >/dev/tty)
case $option in
1) luckfox_compatible_devices ;;
2) luckfox_advanced_options ;;
3) luckfox_about ;;
*) luckfox_exit ;;
esac
done
case $option in
1) luckfox_compatible_devices ;;
2) luckfox_advanced_options ;;
3) luckfox_backup ;;
4) luckfox_about ;;
*) luckfox_exit ;;
esac
done
else
while true; do
option=$(dialog --title "$LUCKFOX_CHIP_MODEL Config" \
--menu "Choose an option" 80 50 6 \
1 "Compatible Devices" \
2 "Advanced Options" \
3 "About Luckfox" \
2>&1 >/dev/tty)
case $option in
1) luckfox_compatible_devices ;;
2) luckfox_advanced_options ;;
3) luckfox_about ;;
*) luckfox_exit ;;
esac
done
fi
fi
}
@@ -3028,11 +3092,12 @@ function luckfox_advanced_options() {
function luckfox_backup() {
option=$(dialog --title "Advanced Options" \
--menu "Choose an option" 80 50 6 \
1 "rootfs" \
0 "rootfs" \
2>&1 >/dev/tty)
if [ $option == 1 ]; then
if [ "$LUCKFOX_CHIP_MODEL" == "Luckfox Pico Pi" ] || [ "$LUCKFOX_CHIP_MODEL" == "Luckfox Pico Pi W" ]; then
if [ "$option" == "0" ]; then
if [ "$LUCKFOX_CHIP_MODEL" == "Luckfox Pico Pi" ] || [ "$LUCKFOX_CHIP_MODEL" == "Luckfox Pico Pi W" ] || \
[ "$LUCKFOX_CHIP_MODEL" == "Luckfox Pico Zero" ]; then
media_class=$(dialog --menu "Select Backup Image Location" 80 50 6 \
0 "local" \
1 "usb_disk" \
@@ -3043,6 +3108,13 @@ function luckfox_backup() {
0 "local" \
1 "usb_disk" \
2>&1 >/dev/tty)
else
if [ "$LUCKFOX_CHIP_MEDIA_CLASS" == "sdmmc" ]; then
media_class=$(dialog --menu "Select Backup Image Location" 80 50 6 \
0 "local" \
1 "usb_disk" \
2>&1 >/dev/tty)
fi
fi
luckfox_rootfs_BACKUP "$media_class"
else
@@ -3279,6 +3351,7 @@ function luckfox_USB() {
function luckfox_CSI() {
local csi_enable
local unite_enable
csi_enable=$(dialog --menu "CSI Enable Config" 10 40 2 \
0 "disable" \
1 "enable" \
@@ -3286,7 +3359,18 @@ function luckfox_CSI() {
if [ -z "$csi_enable" ]; then
luckfox_advanced_options
fi
luckfox_csi_app "$csi_enable"
if [ "$csi_enable" == 1 ]; then
unite_enable=$(dialog --menu "CSI Unite Mode Config(for 3840x2160 input)" 10 40 2 \
0 "disable" \
1 "enable" \
2>&1 >/dev/tty)
if [ -z "$unite" ]; then
luckfox_advanced_options
fi
fi
luckfox_csi_app "$csi_enable" "$unite_enable"
dialog --msgbox "CSI Effective after restart" 10 30
echo "Set CSI enable status : $csi_enable." >>"$LUCKFOX_CHANGE_TXT"
luckfox_advanced_options
@@ -3492,13 +3576,22 @@ function luckfox_4G() {
1 "CTCC(ctnet)" \
2 "CMCC(cmnet)" \
3 "CUCC(3gwap)" \
4 "custom" \
2>&1 >/dev/tty)
case $card_type in
1) apn="ctnet" ;;
2) apn="cmnet" ;;
3) apn="3gwap" ;;
esac
if [ "$card_type" == 4 ]; then
apn=$(dialog --inputbox "4G Module PPP Mode APN:" 10 30 2>&1 >/dev/tty)
if [ -z "apn" ]; then
dialog --msgbox "Invalid inputs" 10 30
luckfox_advanced_options
fi
else
case $card_type in
1) apn="ctnet" ;;
2) apn="cmnet" ;;
3) apn="3gwap" ;;
esac
fi
fi
fi
@@ -3520,7 +3613,11 @@ function luckfox_rootfs_BACKUP() {
luckfox_result_handle "$LF_ERR" "The rsync is not installed"
fi
if [ "$media_class" == 1 ]; then
if [ "$media_class" == 0 ]; then
AVAILABLE_SPACE=$(df -k /mnt | tail -1 | awk '{print $4}')
IMAGE_NAME="/mnt/backup_rootfs.img"
MOUNT_POINT="/mnt/backup_img"
elif [ "$media_class" == 1 ]; then
if ! mount | grep "/mnt/udisk"; then
luckfox_result_handle "$LF_ERR" "USB disk is not mounted"
fi
@@ -3535,9 +3632,7 @@ function luckfox_rootfs_BACKUP() {
IMAGE_NAME="/mnt/sdcard/backup_rootfs.img"
MOUNT_POINT="/mnt/sdcard/backup_img"
else
AVAILABLE_SPACE=$(df -k /mnt | tail -1 | awk '{print $4}')
IMAGE_NAME="/mnt/backup_rootfs.img"
MOUNT_POINT="/mnt/backup_img"
luckfox_show_menu
fi
used_kb=$(df -k / | tail -1 | awk '{print $3}')
@@ -3560,7 +3655,10 @@ function luckfox_rootfs_BACKUP() {
if mountpoint -q "$MOUNT_POINT"; then
umount "$MOUNT_POINT"
fi
rm -rf "$MOUNT_POINT"
if [ -d "$MOUNT_POINT" ]; then
rm -rf "$MOUNT_POINT"
fi
mkdir -p "$MOUNT_POINT"
{
@@ -3590,9 +3688,9 @@ function luckfox_rootfs_BACKUP() {
echo 80
echo "Copying rootfs with rsync..."
echo "XXX"
rsync -aX --exclude={"/oem","/userdata","/mnt","/tmp","/proc"} / "$MOUNT_POINT" >>"$LOG_FILE" 2>&1
rsync -aX --exclude={"/oem","/userdata","/sys","/mnt","/tmp","/proc"} / "$MOUNT_POINT" >>"$LOG_FILE" 2>&1
mkdir -p "$MOUNT_POINT/mnt" "$MOUNT_POINT/tmp" "$MOUNT_POINT/proc" "$MOUNT_POINT/userdata" "$MOUNT_POINT/oem"
mkdir -p "$MOUNT_POINT/sys" "$MOUNT_POINT/mnt" "$MOUNT_POINT/tmp" "$MOUNT_POINT/proc" "$MOUNT_POINT/userdata" "$MOUNT_POINT/oem"
echo "XXX"
echo 100
@@ -3603,7 +3701,6 @@ function luckfox_rootfs_BACKUP() {
dialog --title "Backup Succeeded" --msgbox "The image is saved at $IMAGE_NAME" 10 60
luckfox_show_menu
}
################################################################
@@ -3653,7 +3750,6 @@ elif [ "$1" == "rgb_switch" ]; then
echo "****************************************************"
echo "***Switch the RGB screen resolution to 720 x 720.***"
echo "****************************************************"
luckfox_csi_app 1
luckfox_rgb_app 1 "reset" "30000000" \
"720" "720" \
"44" "46" \
@@ -3666,7 +3762,6 @@ elif [ "$1" == "rgb_switch" ]; then
echo "****************************************************"
echo "***Switch the RGB screen resolution to 480 x 480.***"
echo "****************************************************"
luckfox_csi_app 1
luckfox_rgb_app 1 "reset" "16500000" \
"480" "480" \
"10" "50" \
@@ -3678,7 +3773,6 @@ elif [ "$1" == "rgb_switch" ]; then
echo "****************************************************"
echo "***Switch the RGB screen resolution to 480 x 480.***"
echo "****************************************************"
luckfox_csi_app 1
luckfox_rgb_app 1 "reset" "16500000" \
"480" "480" \
"10" "50" \
@@ -3690,6 +3784,33 @@ elif [ "$1" == "rgb_switch" ]; then
else
luckfox_result_handle "$RK_ERR" "This Luckchip Pico Model does not support RGB switch."
fi
elif [ "$1" == "get_csi_unite" ]; then
LF_GUI_ENABLE=0
luckfox_config_init
luckfox_update_fdt
csi_unite_status=$(grep -A 9 "rkisp@ffa00000 {" $LUCKFOX_FDT_DUMP_TXT | grep 'rockchip,unite' | awk '{print $3}' | sed 's/[<>;]//g')
if [ -z "$csi_unite_status" ]; then
csi_unite_status=0
fi
echo $(($csi_unite_status))
elif [ "$1" == "set_csi_unite" ]; then
LF_GUI_ENABLE=0
luckfox_config_init
csi_status=$(luckfox_get_pin_mark "CSI_ENABLE")
if [ -z "$csi_status" ]; then
csi_status=1
fi
#csi_unite_status=$(luckfox_get_pin_mark "CSI_UNITE_ENABLE")
csi_unite_status="$2"
if [ -z "csi_unite_status" ]; then
csi_unite_status=0
fi
luckfox_csi_app "$csi_status" "$csi_unite_status"
elif [ -z "$1" ]; then
LF_GUI_ENABLE=1
luckfox_config_init