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

@@ -696,6 +696,13 @@ int rk_network_get_cable_state() {
ifinfo = NLMSG_DATA(nh);
if_indextoname(ifinfo->ifi_index, name);
if (strcmp(name, "usb0") == 0) {
continue;
}
if (strcmp(name, "wlan0") == 0) {
continue;
}
LOG_INFO("\n[%s] link %s\n", name, (ifinfo->ifi_flags & IFF_LOWER_UP) ? "up" : "down");
memset(cmd1, 0, 32);

View File

@@ -66,6 +66,7 @@ add_executable(${PROJECT_NAME} ${SRCS})
target_link_libraries(${PROJECT_NAME} pthread rockit rockchip_mpp rkaiq rtsp rkaudio_detect aec_bf_process wpa_client m rkmuxer freetype rockiva iconv rknnmrt rga stdc++ rksysutils rkaudio)
install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION bin)
install(FILES rkipc-mia1321-100w.ini DESTINATION share)
install(FILES rkipc-300w.ini DESTINATION share)
install(FILES rkipc-400w.ini DESTINATION share)
install(FILES rkipc-500w.ini DESTINATION share)

View File

@@ -73,6 +73,10 @@ post_chk() {
default_rkipc_ini=/tmp/rkipc-factory-config.ini
if [ ! -f "/oem/usr/share/rkipc.ini" ]; then
lsmod | grep mia1321
if [ $? -eq 0 ]; then
ln -s -f /oem/usr/share/rkipc-mia1321-100w.ini $default_rkipc_ini
fi
lsmod | grep mis5001
if [ $? -eq 0 ]; then
ln -s -f /oem/usr/share/rkipc-mis5001-500w.ini $default_rkipc_ini
@@ -126,6 +130,24 @@ post_chk() {
rk_mpi_ao_test -i /oem/usr/share/speaker_test.wav --sound_card_name=hw:0,0 --device_ch=2 --device_rate=8000 --input_rate=8000 --input_ch=2 --set_volume 50
fi
csi_unite=$(( $(luckfox-config get_csi_unite) ))
if [ -z csi_unite ]; then
csi_unite=0
fi
if lsmod | grep 'imx415' | awk '{print $3}' | grep -w 1; then
if [ $csi_unite == "0" ]; then
luckfox-config set_csi_unite 1
echo "[rkipc] Set rockchip,unite to 1; rkipc requires a reboot to function properly."
return
fi
else
if [ $csi_unite == "1" ]; then
luckfox-config set_csi_unite 0
echo "[rkipc] Set rockchip,unite to 0; rkipc requires a reboot to function properly."
return
fi
fi
if [ -d "/oem/usr/share/iqfiles" ]; then
rkipc -a /oem/usr/share/iqfiles &
else

View File

@@ -1,5 +1,5 @@
[audio.0]
enable = 1
enable = 0
card_name = hw:0,0
encode_type = G711A
format = S16
@@ -19,14 +19,14 @@ enable_aiq = 1
enable_vo = 0
vo_dev_id = 3 ; 0 is hdmi, 3 is mipi
enable_ivs = 1
enable_jpeg = 1
enable_jpeg = 0
enable_venc_0 = 1
enable_venc_1 = 0
enable_venc_2 = 0
enable_npu = 1
enable_npu = 0
npu_fps = 10
enable_rtsp = 1
enable_rtmp = 1
enable_rtmp = 0
rotation = 0 ; available value:0 90 180 270
[video.0]

View File

@@ -0,0 +1,376 @@
[audio.0]
enable = 0
card_name = hw:0,0
encode_type = G711A
format = S16
sample_rate = 8000
channels = 1
frame_size = 1152
bit_rate = 16000
input = mic_in
volume = 50
enable_aed = 0
enable_bcd = 0
enable_vqe = 1
vqe_cfg = /oem/usr/share/vqefiles/config_aivqe.json
[video.source]
enable_aiq = 1
enable_vo = 0
vo_dev_id = 3 ; 0 is hdmi, 3 is mipi
enable_ivs = 0
enable_jpeg = 0
enable_venc_0 = 1
enable_venc_1 = 0
enable_venc_2 = 0
enable_npu = 0
npu_fps = 0
enable_rtsp = 1
enable_rtmp = 0
rotation = 0 ; available value:0 90 180 270
[video.0]
buffer_size = 691200 ; w * h / 2
buffer_count = 4
enable_refer_buffer_share = 1
stream_type = mainStream
video_type = compositeStream
max_width = 1280
max_height = 1080
width = 1280
height = 1080
rc_mode = CBR
rc_quality = high
src_frame_rate_den = 1
src_frame_rate_num = 60
dst_frame_rate_den = 1
dst_frame_rate_num = 60
target_rate = 0
mid_rate = 2048
max_rate = 4096
min_rate = 0
output_data_type = H.265
smart = close
h264_profile = high
gop = 50
smartp_viridrlen = 25
gop_mode = normalP
stream_smooth = 50
enable_motion_deblur = 1
motion_deblur_strength = 3
enable_motion_static_switch = 0
frame_min_i_qp = 26
frame_min_qp = 28
frame_max_i_qp = 51
frame_max_qp = 51
scalinglist = 0
enable_debreath_effect = 0
debreath_effect_strength = 16
thrd_i = 0,0,0,0,3,3,5,5,8,8,8,15,15,20,25,25
thrd_p = 0,0,0,0,3,3,5,5,8,8,8,15,15,20,25,25
aq_step_i = -8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,7,8
aq_step_p = -8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,7,8
qbias_enable = 1
qbias_i = 171
qbias_p = 85
flt_str_i = 0
flt_str_p = 0
cu_dqp = 1
anti_ring = 2
anti_line = 2
lambds = 4
[video.1]
max_width = 704
max_height = 576
width = 704
height = 576
[video.2]
max_width = 960
max_height = 540
width = 960
height = 540
[ivs]
smear = 0
weightp = 0
md = 1
od = 0
md_sensibility = 3 ;available: 1 2 3,max 3
[video.jpeg]
width = 1280
height = 1080
jpeg_buffer_size = 1048576 ; 1024KB
jpeg_qfactor = 70
enable_cycle_snapshot = 0
snapshot_interval_ms = 1000
[isp]
scenario = normal ; normal or custom1
init_form_ini = 1
normal_scene = day
; isp.0
[isp.0.adjustment]
contrast = 50
brightness = 50
saturation = 50
sharpness = 50
fps = 60
hue = 50
[isp.0.enhancement]
noise_reduce_mode = close
denoise_level = 50
spatial_denoise_level = 50
temporal_denoise_level = 50
dehaze = close
dehaze_level = 0
dis = close
gray_scale_mode = [0-255]
distortion_correction = close
ldch_level = 0
[isp.0.video_adjustment]
image_flip = close
scene_mode = indoor
power_line_frequency_mode = PAL(50HZ)
[storage]
mount_path = /userdata
free_size_del_min = 500; MB
free_size_del_max = 1000; MB
num_limit_enable = 1; limit by file num
[storage.0]
enable = 0
folder_name = video0
file_format = mp4 ; flv,ts
file_duration = 60
video_quota = 30
file_max_num = 300
[storage.1]
enable = 0
folder_name = video1
file_format = mp4 ; flv,ts
file_duration = 60
video_quota = 30
file_max_num = 300
[storage.2]
enable = 0
folder_name = video2
file_format = mp4 ; flv,ts
file_duration = 60
video_quota = 30
file_max_num = 300
[system.device_info]
deivce_name = RK IP Camera
telecontrol_id = 88
model = RK-003
serial_number = RK-003-A
firmware_version = V0.2.6 build 202108
encoder_version = V1.0 build 202108
web_version = V2.12.2 build 202108
plugin_version = V1.0.0.0
channels_number = 1
hard_disks_number = 1
alarm_inputs_number = 0
alarm_outputs_number = 0
firmware_version_info = CP-3-B
manufacturer = Rockchip
hardware_id = c3d9b8674f4b94f6
user_num = 1
[capability.video]
0 = {"disabled":[{"name":"sStreamType","options":{"subStream":{"sSmart":"close"},"thirdStream":{"sSmart":"close"}},"type":"disabled/limit"},{"name":"sRCMode","options":{"CBR":{"sRCQuality":null}},"type":"disabled"},{"name":"sOutputDataType","options":{"H.265":{"sH264Profile":null}},"type":"disabled"},{"name":"unspport","options":{"iStreamSmooth":null,"sVideoType":null},"type":"disabled"}],"dynamic":{"sSmart":{"open":{"iMinRate":{"dynamicRange":{"max":"iMaxRate","maxRate":1,"min":"iMaxRate","minRate":0.125},"type":"dynamicRange"}}},"sStreamType":{"mainStream":{"iMaxRate":{"options":[256,512,1024,2048,3072,4096,6144],"type":"options"},"sResolution":{"options":["2880*1616","1920*1080","1280*720","960*540","640*360","320*240"],"type":"options"}},"subStream":{"iMaxRate"
1 = :{"options":[128,256,512],"type":"options"},"sResolution":{"options":["704*576","640*480","352*288","320*240"],"type":"options"}},"thirdStream":{"iMaxRate":{"options":[256,512],"type":"options"},"sResolution":{"options":["416*416"],"type":"options"}}}},"layout":{"encoder":["sStreamType","sVideoType","sResolution","sRCMode","sRCQuality","sFrameRate","sOutputDataType","sSmart","sH264Profile","sGOPMode","iMaxRate","iGOP","iStreamSmooth"]},"static":{"iGOP":{"range":{"max":400,"min":1},"type":"range"},"iStreamSmooth":{"range":{"max":100,"min":1,"step":1},"type":"range"},"sFrameRate":{"dynamicRange":{"max":"sFrameRateIn","maxRate":1},"options":["1/2","1","2","4","6","8","10","12","14","16","18","20","25","30"],"type":"options/dynamicRange"},"sH264Profile":{"options":["high","main","baseline"],"type":"options"},"sOutputDataType":{"options"
2 = :["H.264","H.265"],"type":"options"},"sRCMode":{"options":["CBR","VBR"],"type":"options"},"sRCQuality":{"options":["lowest","lower","low","medium","high","higher","highest"],"type":"options"},"sGOPMode":{"options":["normalP","smartP"],"type":"options"},"sSmart":{"options":["open","close"],"type":"options"},"sStreamType":{"options":["mainStream","subStream","thirdStream"],"type":"options"},"sVideoType":{"options":["videoStream","compositeStream"],"type":"options"}}}
[capability.image_adjustment]
0 = {"layout":{"image_adjustment":["iBrightness","iContrast","iSaturation","iSharpness","iHue"]},"static":{"iBrightness":{"range":{"max":100,"min":0,"step":1},"type":"range"},"iContrast":{"range":{"max":100,"min":0,"step":1},"type":"range"},"iHue":{"range":{"max":100,"min":0,"step":1},"type":"range"},"iSaturation":{"range":{"max":100,"min":0,"step":1},"type":"range"},"iSharpness":{"range":{"max":100,"min":0,"step":1},"type":"range"}}}
[capability.image_blc]
0 = {"disabled":[{"name":"sHLC","options":{"open":{"sBLCRegion":null}},"type":"disabled"},{"name":"sBLCRegion","options":{"open":{"iDarkBoostLevel":null,"iHLCLevel":null,"sHLC":null}},"type":"disabled"}],"dynamic":{"sBLCRegion":{"open":{"iBLCStrength":{"range":{"max":100,"min":0,"step":1},"type":"range"}}},"sHDR":{"HDR2":{"iHDRLevel":{"options":[1,2,3,4],"type":"options"}},"close":{"sBLCRegion":{"options":["close","open"],"type":"options"},"sHLC":{"options"
1 = :["close","open"],"type":"options"}}},"sHLC":{"open":{"iDarkBoostLevel":{"range":{"max":100,"min":0,"step":1},"type":"range"},"iHLCLevel":{"range":{"max":100,"min":0,"step":1},"type":"range"}}},"sWDR":{"open":{"iWDRLevel":{"range":{"max":100,"min":0,"step":1},"type":"range"}}}},"layout":{"image_blc":["sHDR","iHDRLevel","sBLCRegion","iBLCStrength","sHLC","iHLCLevel"]},"static":{"sHDR":{"options":["close","HDR2"],"type":"options"}}}
[capability.image_enhancement]
0 = {"dynamic":{"sDehaze":{"open":{"iDehazeLevel":{"range":{"max":10,"min":0,"step":1},"type":"range"}}},"sDistortionCorrection":{"FEC":{"iFecLevel":{"range":{"max":100,"min":0,"step":1},"type":"range"}},"LDCH":{"iLdchLevel":{"range":{"max":100,"min":0,"step":1},"type":"range"}}},"sNoiseReduceMode":{"2dnr":{"iSpatialDenoiseLevel":{"range":{"max":100,"min":0,"step":1},"type":"range"}},"3dnr":{"iTemporalDenoiseLevel":{"range":{"max":100,"min":0,"step":1},"type":"range"}},"mixnr":{"iSpatialDenoiseLevel":{"range":{"max":100,"min":0,"step":1},"type":"range"},"iTemporalDenoiseLevel":{"range":{"max":100,"min":0,"step":1},"type":"range"}}}},"layout"
1 = :{"image_enhancement":["sNoiseReduceMode","iSpatialDenoiseLevel","iTemporalDenoiseLevel","sDehaze","iDehazeLevel","sGrayScaleMode","sDistortionCorrection","iLdchLevel","iFecLevel"]},"static":{"sDIS":{"options":["open","close"],"type":"options"},"sDehaze":{"options":["open","close","auto"],"type":"options"},"sDistortionCorrection":{"options":["LDCH","close"],"type":"options"},"sFEC":{"options":["open","close"],"type":"options"},"sGrayScaleMode":{"options":["[0-255]","[16-235]"],"type":"options"},"sNoiseReduceMode":{"options":["close","2dnr","3dnr","mixnr"],"type":"options"}}}
[capability.image_exposure]
0 = {"dynamic":{"sExposureMode":{"auto":{"iAutoIrisLevel":{"range":{"max":100,"min":0,"step":1},"type":"range"}},"manual":{"sExposureTime":{"options":["1","1/3","1/6","1/12","1/25","1/50","1/100","1/150","1/200","1/250","1/500","1/750","1/1000","1/2000","1/4000","1/10000","1/100000"],"type":"options"},"sGainMode":{"options":["auto","manual"],"type":"options"}}},"sGainMode":{"manual":{"iExposureGain":{"range":{"max":100,"min":1,"step":1},"type":"range"}}}},"layout":{"image_exposure":["sExposureMode","sExposureTime","sGainMode","iExposureGain","iFPS"]},"static":{"sExposureMode":{"options":["auto","manual"],"type":"options"},"iFPS":{"range":{"max":30,"min":0,"step":1},"type":"range"}}}
[capability.image_night_to_day]
0 = {"disabled":[{"name":"sNightToDay","options":{"day":{"iLightBrightness":null,"sFillLightMode":null},"night":{"iDarkBoostLevel":null,"iHDRLevel":null,"iHLCLevel":null,"sHDR":null,"sHLC":"close"}},"type":"disabled"}],"dynamic":{"sNightToDay":{"auto":{"iNightToDayFilterLevel":{"options":[0,1,2,3,4,5,6,7],"type":"options"},"iNightToDayFilterTime":{"range":{"max":10,"min":3,"step":1},"type":"range"}},"schedule":{"sDawnTime":{"input":"time","type":"input"},"sDuskTime":{"input":"time","type":"input"}}},"sOverexposeSuppress":{"open"
1 = :{"sOverexposeSuppressType":{"options":["auto","manual"],"type":"options"}}},"sOverexposeSuppressType":{"manual":{"iDistanceLevel":{"range":{"max":100,"min":0,"step":1},"type":"range"}}}},"layout":{"image_night_to_day":["sNightToDay","iNightToDayFilterLevel","iNightToDayFilterTime","sDawnTime","sDuskTime","sFillLightMode","iLightBrightness"]},"static":{"iLightBrightness":{"range":{"max":100,"min":0,"step":10},"type":"range"},"sNightToDay":{"options":["day","night"],"type":"options"},"sFillLightMode":{"type":"options","options":["IR"]}}}
[capability.image_video_adjustment]
0 = {"layout":{"image_video_adjustment":["sPowerLineFrequencyMode","sImageFlip","iImageRotation"]},"static":{"sImageFlip":{"options":["close","flip","mirror","centrosymmetric"],"type":"options"},"sPowerLineFrequencyMode":{"options":["PAL(50HZ)","NTSC(60HZ)"],"type":"options"},"sSceneMode":{"options":["indoor","outdoor"],"type":"options"},"iImageRotation":{"options":[0,90,180,270],"type":"options"}}}
[capability.image_white_blance]
0 = {"dynamic":{"sWhiteBlanceStyle":{"manualWhiteBalance":{"iWhiteBalanceBlue":{"range":{"max":100,"min":0,"step":1},"type":"range"},"iWhiteBalanceGreen":{"range":{"max":100,"min":0,"step":1},"type":"range"},"iWhiteBalanceRed":{"range":{"max":100,"min":0,"step":1},"type":"range"}}}},"layout":{"image_white_blance":["sWhiteBlanceStyle","iWhiteBalanceRed","iWhiteBalanceGreen","iWhiteBalanceBlue"]},"static":{"sWhiteBlanceStyle":{"options":["manualWhiteBalance","autoWhiteBalance","lockingWhiteBalance","fluorescentLamp","incandescent","warmLight","naturalLight"],"type":"options"}}}
[user.0]
user_name = admin
password = YWRtaW4=
user_level = 1 ; administrator=0 operator=1 user=2
[osd.common]
enable_osd = 1
is_presistent_text = 1
attribute = transparent/not-flashing
font_size = 32
font_color_mode = customize
font_color = fff799
alignment = customize
boundary = 0
font_path = /oem/usr/share/simsun_en.ttf
normalized_screen_width = 704
normalized_screen_height = 480
[osd.0]
type = channelName
enabled = 0
position_x = 1104
position_y = 640
display_text = Camera 01
[osd.1]
type = dateTime
enabled = 1
position_x = 16
position_y = 16
date_style = CHR-YYYY-MM-DD
time_style = 24hour
display_week_enabled = 0
[osd.2]
type = character
enabled = 0
position_x = 0
position_y = 0
display_text = null
[osd.3]
type = character
enabled = 0
position_x = 0
position_y = 0
display_text = null
[osd.4]
type = privacyMask
enabled = 0
position_x = 0
position_y = 0
width = 0
height = 0
[osd.5]
type = privacyMask
enabled = 0
position_x = 0
position_y = 0
width = 0
height = 0
[osd.6]
type = image
enabled = 0
position_x = 16
position_y = 640
image_path = /userdata/image.bmp
[event.regional_invasion]
enabled = 1
position_x = 0
position_y = 0
width = 700
height = 560
proportion = 1
sensitivity_level = 90
time_threshold = 1
rockiva_model_type = small ;big medium small
[roi.0]
stream_type = mainStream
id = 1
enabled = 0
name = test
position_x = 0
position_y = 0
width = 0
height = 0
quality_level = 3
[roi.1]
stream_type = mainStream
id = 2
enabled = 0
name = test
position_x = 0
position_y = 0
width = 0
height = 0
quality_level = 3
[roi.2]
stream_type = subStream
id = 1
enabled = 0
name = test
position_x = 0
position_y = 0
width = 0
height = 0
quality_level = 3
[roi.3]
stream_type = subStream
id = 2
enabled = 0
name = test
position_x = 0
position_y = 0
width = 0
height = 0
quality_level = 3
[roi.4]
stream_type = thirdStream
id = 1
enabled = 0
name = test
position_x = 0
position_y = 0
width = 0
height = 0
quality_level = 3
[roi.5]
stream_type = thirdStream
id = 2
enabled = 0
name = test
position_x = 0
position_y = 0
width = 0
height = 0
quality_level = 3
[region_clip.1]
enabled = 0
position_x = 0
position_y = 0
width = 640
height = 480
[network.ntp]
enable = 1
refresh_time_s = 60
ntp_server = 119.28.183.184

View File

@@ -158,7 +158,8 @@ function choose_target_board() {
"RV1106_Luckfox_Pico_Pi"
"RV1106_Luckfox_Pico_Pi_W"
"RV1106_Luckfox_Pico_86Panel"
"RV1106_Luckfox_Pico_86Panel_W")
"RV1106_Luckfox_Pico_86Panel_W"
"RV1106_Luckfox_Pico_Zero")
local LF_BOOT_MEDIA=("SD_CARD" "SPI_NAND" "EMMC")
local LF_SYSTEM=("Buildroot" "Custom")
local cnt=0 space8=" "
@@ -192,6 +193,8 @@ function choose_target_board() {
LUNCH_NUM=$((LUNCH_NUM + 1))
echo "${space8}${space8}[${LUNCH_NUM}] RV1106_Luckfox_Pico_86Panel_W"
LUNCH_NUM=$((LUNCH_NUM + 1))
echo "${space8}${space8}[${LUNCH_NUM}] RV1106_Luckfox_Pico_Zero"
LUNCH_NUM=$((LUNCH_NUM + 1))
echo "${space8}${space8}[${LUNCH_NUM}] custom"
read -p "Which would you like? [0~${LUNCH_NUM}][default:0]: " HW_INDEX
@@ -276,7 +279,7 @@ function choose_target_board() {
range_sd_card=(0)
range_sd_card_spi_nand=(1 2 3 4)
range_emmc=(5 6 7 8 9 10)
range_emmc=(5 6 7 8 9 10 11)
if __IS_IN_ARRAY "$HW_INDEX" "${range_sd_card[@]}"; then
echo "${space8}${space8}[0] SD_CARD"

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

View File

@@ -14,7 +14,7 @@ __insmod()
__rmmod_camera_sensor()
{
for item in `echo "imx415 os04a10 sc4336 sc3336 sc530ai gc2053 sc200ai sc401ai sc450ai techpoint mis5001"`
for item in `echo "imx415 os04a10 sc4336 sc3336 sc530ai gc2053 sc200ai sc401ai sc450ai techpoint mis5001 mia1321"`
do
if lsmod | grep $item | awk '{print $3}' |grep -w 0;then
rmmod $item
@@ -57,6 +57,7 @@ __insmod sc401ai.ko
__insmod sc450ai.ko
__insmod techpoint.ko
__insmod mis5001.ko
__insmod mia1321.ko
__insmod video_rkcif.ko
__insmod video_rkisp.ko

View File

@@ -107,7 +107,8 @@ if [ $? -eq 0 ]; then
fi
#aic8800
if [ -n "$(cat /proc/device-tree/model | grep "W")" ]; then
if [ -n "$(cat /proc/device-tree/model | grep "W")" ] || \
[ -n "$(cat /sys/bus/sdio/devices/*/uevent | grep "C8A1\:C18D")" ]; then
insmod cfg80211.ko
insmod libarc4.ko
insmod ctr.ko

View File

@@ -0,0 +1,445 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (c) 2022 Rockchip Electronics Co., Ltd.
*/
#include "rv1106-evb.dtsi"
#include <dt-bindings/input/input.h>
#include <dt-bindings/display/media-bus-format.h>
/ {
chosen {
bootargs = "earlycon=uart8250,mmio32,0xff4c0000 console=ttyFIQ0 root=/dev/mmcblk0p7 rootwait snd_soc_core.prealloc_buffer_size_kbytes=16 coherent_pool=0";
};
reserved_memory: reserved-memory {
status = "okay";
#address-cells = <1>;
#size-cells = <1>;
ranges;
mmc_ecsd: mmc@3f000 {
reg = <0x3f000 0x00001000>;
};
};
acodec_sound: acodec-sound {
compatible = "simple-audio-card";
simple-audio-card,name = "rv1106-acodec";
simple-audio-card,format = "i2s";
simple-audio-card,mclk-fs = <256>;
simple-audio-card,cpu {
sound-dai = <&i2s0_8ch>;
};
simple-audio-card,codec {
sound-dai = <&acodec>;
};
};
dsm_sound: dsm-sound {
status = "disabled";
compatible = "simple-audio-card";
simple-audio-card,format = "i2s";
simple-audio-card,mclk-fs = <256>;
simple-audio-card,name = "rockchip,dsm-sound";
simple-audio-card,bitclock-master = <&sndcodec>;
simple-audio-card,frame-master = <&sndcodec>;
sndcpu: simple-audio-card,cpu {
sound-dai = <&i2s0_8ch>;
};
sndcodec: simple-audio-card,codec {
sound-dai = <&dsm>;
};
};
vcc_1v8: vcc-1v8 {
compatible = "regulator-fixed";
regulator-name = "vcc_1v8";
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
};
vcc_3v3: vcc-3v3 {
compatible = "regulator-fixed";
regulator-name = "vcc_3v3";
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
};
vdd_arm: vdd-arm {
compatible = "regulator-fixed";
regulator-name = "vdd_arm";
regulator-min-microvolt = <800000>;
regulator-max-microvolt = <1000000>;
regulator-init-microvolt = <900000>;
regulator-always-on;
regulator-boot-on;
};
leds: leds {
compatible = "gpio-leds";
work_led: work{
gpios = <&gpio3 RK_PC6 GPIO_ACTIVE_HIGH>;
linux,default-trigger = "activity";
default-state = "on";
};
};
out_osc_mia1321: out-osc-mia1321 {
compatible = "fixed-clock";
clock-output-names = "out-osc-mia1321";
clock-frequency = <26000000>;
#clock-cells = <0>;
};
out_osc_imx415: out-osc-imx415 {
compatible = "fixed-clock";
clock-output-names = "out-osc-imx415";
clock-frequency = <37125000>;
#clock-cells = <0>;
};
cam_ircut0: cam_ircut {
status = "okay";
compatible = "rockchip,ircut";
rockchip,camera-module-index = <0>;
rockchip,camera-module-facing = "back";
};
};
/***************************** audio ********************************/
&i2s0_8ch {
#sound-dai-cells = <0>;
status = "okay";
};
&acodec {
#sound-dai-cells = <0>;
status = "okay";
};
/************************* FIQ_DUBUGGER ****************************/
&fiq_debugger {
rockchip,irq-mode-enable = <1>;
status = "okay";
};
/***************************** USB *********************************/
&u2phy {
status = "okay";
};
&u2phy_otg {
status = "okay";
};
&usbdrd {
status = "okay";
};
&usbdrd_dwc3 {
extcon = <&u2phy>;
status = "okay";
};
/***************************** DSM *********************************/
&dsm {
status = "disabled";
};
&cpu0 {
cpu-supply = <&vdd_arm>;
};
/*************************** CSI *********************************/
&csi2_dphy_hw {
status = "okay";
};
&csi2_dphy0 {
status = "okay";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
#address-cells = <1>;
#size-cells = <0>;
//mia1321
csi_dphy_input0: endpoint@0 {
reg = <0>;
remote-endpoint = <&mia1321_out>;
data-lanes = <1 2>;
};
//imx415
csi_dphy_input1: endpoint@1 {
reg = <1>;
remote-endpoint = <&imx415_out>;
data-lanes = <1 2 3 4>;
};
};
port@1 {
reg = <1>;
#address-cells = <1>;
#size-cells = <0>;
csi_dphy_output: endpoint@0 {
reg = <0>;
remote-endpoint = <&mipi_csi2_input>;
};
};
};
};
&i2c4 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&i2c4m2_xfer>;
mia1321: mia1321@60 {
compatible = "imagedesign,mia1321";
reg = <0x60>;
clocks = <&out_osc_mia1321>;
clock-names = "xvclk";
reset-gpios = <&gpio3 RK_PC5 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&cam_io_1>;
rockchip,camera-module-index = <0>;
rockchip,camera-module-facing = "back";
rockchip,camera-module-name = "MIA1321";
rockchip,camera-module-lens-name = "30IRC-F16";
port {
mia1321_out: endpoint {
remote-endpoint = <&csi_dphy_input0>;
data-lanes = <1 2 3 4>;
};
};
};
imx415: imx415@37 {
compatible = "sony,imx415";
status = "okay";
reg = <0x37>;
clocks = <&out_osc_imx415>;
clock-names = "xvclk";
reset-gpios = <&gpio3 RK_PC5 GPIO_ACTIVE_LOW>;
pinctrl-names = "default";
pinctrl-0 = <&cam_io_1>;
rockchip,camera-module-index = <0>;
rockchip,camera-module-facing = "back";
rockchip,camera-module-name = "CMK-OT2022-PX1";
rockchip,camera-module-lens-name = "IR0147-36IRC-8M-F20";
lens-focus = <&cam_ircut0>;
port {
imx415_out: endpoint {
remote-endpoint = <&csi_dphy_input1>;
data-lanes = <1 2 3 4>;
};
};
};
};
&mipi0_csi2 {
status = "okay";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
#address-cells = <1>;
#size-cells = <0>;
mipi_csi2_input: endpoint@1 {
reg = <1>;
remote-endpoint = <&csi_dphy_output>;
};
};
port@1 {
reg = <1>;
#address-cells = <1>;
#size-cells = <0>;
mipi_csi2_output: endpoint@0 {
reg = <0>;
remote-endpoint = <&cif_mipi_in>;
};
};
};
};
&rkcif {
status = "okay";
};
&rkcif_mipi_lvds {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&mipi_pins>;
port {
/* MIPI CSI-2 endpoint */
cif_mipi_in: endpoint {
remote-endpoint = <&mipi_csi2_output>;
};
};
};
&rkcif_mipi_lvds_sditf {
status = "okay";
port {
/* MIPI CSI-2 endpoint */
mipi_lvds_sditf: endpoint {
remote-endpoint = <&isp_in>;
};
};
};
&rkisp {
status = "okay";
};
&rkisp_vir0 {
status = "okay";
port@0 {
isp_in: endpoint {
remote-endpoint = <&mipi_lvds_sditf>;
};
};
};
/***************************** ADC ********************************/
&saradc {
status = "okay";
vref-supply = <&vcc_1v8>;
};
&tsadc {
status = "okay";
};
/**************************** PINCTRL ******************************/
// SPI
&spi0 {
pinctrl-0 = <&spi0m0_clk &spi0m0_miso &spi0m0_mosi &spi0m0_cs0>;
#address-cells = <1>;
#size-cells = <0>;
spidev@0 {
compatible = "rockchip,spidev";
spi-max-frequency = <50000000>;
reg = <0>;
};
};
// I2C
&i2c1 {
pinctrl-0 = <&i2c1m1_xfer>;
};
&i2c2 {
pinctrl-0 = <&i2c2m0_xfer>;
};
&i2c3 {
pinctrl-0 = <&i2c3m0_xfer &i2c3m1_xfer &i2c3m2_xfer>;
};
&i2c4 {
pinctrl-names = "default", "config";
pinctrl-0 = <&i2c4m2_xfer>;
pinctrl-1 = <&i2c4m0_xfer &i2c4m1_xfer>;
};
// UART
&uart0 {
pinctrl-0 = <&uart0m0_xfer &uart0m1_xfer>;
};
&uart1 {
pinctrl-0 = <&uart1m1_xfer>;
};
&uart3 {
pinctrl-0 = <&uart3m0_xfer &uart3m1_xfer>;
};
&uart4 {
pinctrl-0 = <&uart4m0_xfer &uart4m1_xfer>;
};
&uart5 {
pinctrl-0 = <&uart5m1_xfer>;
};
// PWM
&pwm0 {
pinctrl-0 = <&pwm0m1_pins>;
};
&pwm1 {
pinctrl-0 = <&pwm1m0_pins &pwm1m1_pins &pwm1m2_pins>;
};
&pwm2 {
pinctrl-0 = <&pwm2m0_pins &pwm2m1_pins &pwm2m2_pins>;
};
&pwm3 {
pinctrl-0 = <&pwm3m1_pins &pwm3m2_pins>;
};
&pwm4 {
pinctrl-0 = <&pwm4m0_pins &pwm4m1_pins &pwm4m2_pins>;
};
&pwm5 {
pinctrl-0 = <&pwm5m1_pins &pwm5m2_pins>;
};
&pwm6 {
pinctrl-0 = <&pwm6m1_pins &pwm6m2_pins>;
};
&pwm7 {
pinctrl-0 = <&pwm7m0_pins &pwm7m1_pins>;
};
&pwm8 {
pinctrl-0 = <&pwm8m1_pins>;
};
&pwm9 {
pinctrl-0 = <&pwm9m1_pins>;
};
&pwm10 {
pinctrl-0 = <&pwm10m1_pins &pwm10m2_pins>;
};
&pwm11 {
pinctrl-0 = <&pwm11m1_pins &pwm11m2_pins>;
};
&pinctrl {
cam {
cam_io_0: cam-io-0 {
rockchip,pins = <3 RK_PC4 RK_FUNC_GPIO &pcfg_pull_up>;
};
cam_io_1: cam-io-1 {
rockchip,pins = <3 RK_PC5 RK_FUNC_GPIO &pcfg_pull_up>;
};
};
spi0 {
spi0m0_clk: spi0m0-clk {
rockchip,pins = <1 RK_PC1 4 &pcfg_pull_none>;
};
spi0m0_mosi: spi0m0-mosi {
rockchip,pins = <1 RK_PC2 6 &pcfg_pull_none>;
};
spi0m0_miso: spi0m0-miso {
rockchip,pins = <1 RK_PC3 6 &pcfg_pull_none>;
};
spi0m0_cs0: spi0m0-cs0 {
rockchip,pins = <1 RK_PC0 4 &pcfg_pull_none>;
};
};
};

View File

@@ -0,0 +1,161 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (c) 2022 Rockchip Electronics Co., Ltd.
*/
/dts-v1/;
#include "rv1106.dtsi"
#include "rv1106-luckfox-pico-zero-ipc.dtsi"
#include <dt-bindings/input/input.h>
#include <dt-bindings/display/media-bus-format.h>
/ {
model = "Luckfox Pico Zero";
compatible = "rockchip,rv1103g-38x38-ipc-v10", "rockchip,rv1106g3";
restart-poweroff {
compatible = "restart-poweroff";
};
sdio_pwrseq: sdio-pwrseq {
compatible = "mmc-pwrseq-simple";
pinctrl-names = "default";
reset-gpios = <&gpio1 RK_PA2 GPIO_ACTIVE_LOW>;
};
wireless_bluetooth: wireless-bluetooth {
compatible = "bluetooth-platdata";
uart_rts_gpios = <&gpio0 RK_PA5 GPIO_ACTIVE_LOW>;
pinctrl-names = "default", "rts_gpio";
pinctrl-0 = <&uart1m0_rtsn>;
pinctrl-1 = <&uart1_gpios>;
BT,wake_gpio = <&gpio0 RK_PA2 GPIO_ACTIVE_HIGH>;
BT,wake_host_irq = <&gpio1 RK_PA2 GPIO_ACTIVE_HIGH>;
status = "okay";
};
};
/**********CRU**********/
&cru {
assigned-clocks =
<&cru PLL_GPLL>, <&cru PLL_CPLL>,
<&cru ARMCLK>,
<&cru ACLK_PERI_ROOT>, <&cru HCLK_PERI_ROOT>,
<&cru PCLK_PERI_ROOT>, <&cru ACLK_BUS_ROOT>,
<&cru PCLK_TOP_ROOT>, <&cru PCLK_PMU_ROOT>,
<&cru HCLK_PMU_ROOT>, <&cru CLK_500M_SRC>;
assigned-clock-rates =
<1188000000>, <700000000>,
<1104000000>,
<400000000>, <200000000>,
<100000000>, <300000000>,
<100000000>, <100000000>,
<200000000>, <700000000>;
};
/**********NPU**********/
&npu {
assigned-clock-rates = <700000000>;
};
/**********EMMC**********/
&emmc {
bus-width = <8>;
cap-mmc-highspeed;
non-removable;
// mmc-hs200-1_8v;
rockchip,default-sample-phase = <90>;
no-sdio;
no-sd;
memory-region-ecsd = <&mmc_ecsd>;
post-power-on-delay-ms = <0>;
status = "okay";
};
&fiq_debugger {
rockchip,irq-mode-enable = <1>;
status = "okay";
};
/**********SDIO-WIFI**********/
&sdmmc {
max-frequency = <50000000>;
bus-width = <4>;
cap-sd-highspeed;
cap-sdio-irq;
keep-power-in-suspend;
//non-removable;
rockchip,default-sample-phase = <90>;
// no-sd;
// no-mmc;
supports-sdio;
mmc-pwrseq = <&sdio_pwrseq>;
pinctrl-names = "default";
pinctrl-0 = <&sdmmc0_clk &sdmmc0_cmd &sdmmc0_bus4 &sdmmc0_det>;
status = "okay";
};
&pinctrl{
sdmmc0{
sdmmc0_det: sdmmc0-det {
rockchip,pins =
/* sdmmc0_det */
<3 RK_PA1 1 &pcfg_pull_up>;
};
};
};
/**********SD_CARD**********/
&sdio {
max-frequency = <50000000>;
no-sdio;
no-mmc;
supports-sd;
bus-width = <4>;
cap-mmc-highspeed;
cap-sd-highspeed;
disable-wp;
pinctrl-names = "default";
pinctrl-0 = <&sdmmc1m0_cmd &sdmmc1m0_clk &sdmmc1m0_bus4>;
status = "okay";
};
/**********ETH**********/
&gmac {
status = "disabled";
};
/**********USB**********/
&usbdrd_dwc3 {
status = "okay";
dr_mode = "peripheral";
//dr_mode = "host";
};
/**********RTC**********/
&rtc {
status = "okay";
};
/**********BT**********/
&uart1 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&uart1m0_xfer &uart1m0_ctsn>;
};
&pinctrl {
wireless-bluetooth {
uart1_gpios: uart1-gpios {
rockchip,pins = <0 RK_PA5 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
};
/**********SPI**********/
&spi0 {
status = "disabled";
spidev@0 {
spi-max-frequency = <50000000>;
};
};

View File

@@ -196,7 +196,9 @@ CONFIG_V4L_PLATFORM_DRIVERS=y
CONFIG_VIDEO_ROCKCHIP_CIF=m
CONFIG_VIDEO_ROCKCHIP_ISP=m
CONFIG_VIDEO_RK_IRCUT=y
CONFIG_VIDEO_IMX415=m
CONFIG_VIDEO_MIS5001=m
CONFIG_VIDEO_MIA1321=m
CONFIG_VIDEO_SC3336=m
CONFIG_DRM=y
CONFIG_DRM_EDID=y

View File

@@ -1864,6 +1864,17 @@ config VIDEO_MIS5001
This is a Video4Linux2 sensor driver for the ImageDesign
MIS5001 camera.
config VIDEO_MIA1321
tristate "ImageDesign mia1321 sensor support"
depends on I2C && VIDEO_V4L2
depends on I2C && VIDEO_V4L2
select MEDIA_CONTROLLER
select VIDEO_V4L2_SUBDEV_API
select V4L2_FWNODE
help
This is a Video4Linux2 sensor driver for the ImageDesign
MIA1321 camera.
config VIDEO_MT9M001
tristate "mt9m001 support"
depends on I2C && VIDEO_V4L2

View File

@@ -120,6 +120,7 @@ obj-$(CONFIG_VIDEO_OV13858) += ov13858.o
obj-$(CONFIG_VIDEO_MIS2031) += mis2031.o
obj-$(CONFIG_VIDEO_MIS4001) += mis4001.o
obj-$(CONFIG_VIDEO_MIS5001) += mis5001.o
obj-$(CONFIG_VIDEO_MIA1321) += mia1321.o
obj-$(CONFIG_VIDEO_MT9M001) += mt9m001.o
obj-$(CONFIG_VIDEO_MT9M032) += mt9m032.o
obj-$(CONFIG_VIDEO_MT9M111) += mt9m111.o

View File

@@ -76,6 +76,7 @@
#define IMX415_XVCLK_FREQ_37M 37125000
#define IMX415_XVCLK_FREQ_27M 27000000
#define IMX415_XVCLK_FREQ_24M 24000000
/* TODO: Get the real chip id from reg */
#define CHIP_ID 0xE0
@@ -680,6 +681,41 @@ static __maybe_unused const struct regval imx415_linear_10bit_3864x2192_891M_reg
{REG_NULL, 0x00},
};
static __maybe_unused const struct regval imx415_linear_10bit_3864x2192_594M_regs[] = {
{0x3020, 0x00},
{0x3021, 0x00},
{0x3022, 0x00},
{0x3024, 0xCA},
{0x3025, 0x08},
{0x3028, 0x72},
{0x3029, 0x06},
{0x302C, 0x00},
{0x302D, 0x00},
{0x3033, 0x07},
{0x3050, 0x08},
{0x3051, 0x00},
{0x3054, 0x19},
{0x3058, 0x3E},
{0x3060, 0x25},
{0x3064, 0x4a},
{0x30CF, 0x00},
{0x3118, 0xC0},
{0x3260, 0x01},
{0x400C, 0x00},
{0x4018, 0x67},
{0x401A, 0x27},
{0x401C, 0x27},
{0x401E, 0xB7},
{0x401F, 0x00},
{0x4020, 0x2F},
{0x4022, 0xB7},
{0x4024, 0x2F},
{0x4026, 0x47},
{0x4028, 0x27},
{0x4074, 0x01},
{REG_NULL, 0x00},
};
static __maybe_unused const struct regval imx415_linear_12bit_1932x1096_594M_regs[] = {
{0x3020, 0x01},
{0x3021, 0x01},
@@ -758,6 +794,152 @@ static __maybe_unused const struct regval imx415_hdr2_12bit_1932x1096_891M_regs[
{REG_NULL, 0x00},
};
/*
* Xclk 37Mhz
* 15fps
* CSI-2_2lane
* AD:10bit Output:10bit
* 891Mbps
* Master Mode
* Time 9.988ms Gain:6dB
* All-pixel
*/
static __maybe_unused const struct regval imx415_linear_10bit_3864x2192_891M_regs_2lane[] = {
{0x3008, 0x5D},
{0x300A, 0x42},
{0x3028, 0x98},
{0x3029, 0x08},
{0x3031, 0x00},
{0x3033, 0x05},
{0x3050, 0x79},
{0x3051, 0x07},
{0x3090, 0x14},
{0x30C1, 0x00},
{0x3116, 0x23},
{0x3118, 0xC6},
{0x311A, 0xE7},
{0x311E, 0x23},
{0x32D4, 0x21},
{0x32EC, 0xA1},
{0x344C, 0x2B},
{0x344D, 0x01},
{0x344E, 0xED},
{0x344F, 0x01},
{0x3450, 0xF6},
{0x3451, 0x02},
{0x3452, 0x7F},
{0x3453, 0x03},
{0x358A, 0x04},
{0x35A1, 0x02},
{0x35EC, 0x27},
{0x35EE, 0x8D},
{0x35F0, 0x8D},
{0x35F2, 0x29},
{0x36BC, 0x0C},
{0x36CC, 0x53},
{0x36CD, 0x00},
{0x36CE, 0x3C},
{0x36D0, 0x8C},
{0x36D1, 0x00},
{0x36D2, 0x71},
{0x36D4, 0x3C},
{0x36D6, 0x53},
{0x36D7, 0x00},
{0x36D8, 0x71},
{0x36DA, 0x8C},
{0x36DB, 0x00},
{0x3720, 0x00},
{0x3724, 0x02},
{0x3726, 0x02},
{0x3732, 0x02},
{0x3734, 0x03},
{0x3736, 0x03},
{0x3742, 0x03},
{0x3862, 0xE0},
{0x38CC, 0x30},
{0x38CD, 0x2F},
{0x395C, 0x0C},
{0x39A4, 0x07},
{0x39A8, 0x32},
{0x39AA, 0x32},
{0x39AC, 0x32},
{0x39AE, 0x32},
{0x39B0, 0x32},
{0x39B2, 0x2F},
{0x39B4, 0x2D},
{0x39B6, 0x28},
{0x39B8, 0x30},
{0x39BA, 0x30},
{0x39BC, 0x30},
{0x39BE, 0x30},
{0x39C0, 0x30},
{0x39C2, 0x2E},
{0x39C4, 0x2B},
{0x39C6, 0x25},
{0x3A42, 0xD1},
{0x3A4C, 0x77},
{0x3AE0, 0x02},
{0x3AEC, 0x0C},
{0x3B00, 0x2E},
{0x3B06, 0x29},
{0x3B98, 0x25},
{0x3B99, 0x21},
{0x3B9B, 0x13},
{0x3B9C, 0x13},
{0x3B9D, 0x13},
{0x3B9E, 0x13},
{0x3BA1, 0x00},
{0x3BA2, 0x06},
{0x3BA3, 0x0B},
{0x3BA4, 0x10},
{0x3BA5, 0x14},
{0x3BA6, 0x18},
{0x3BA7, 0x1A},
{0x3BA8, 0x1A},
{0x3BA9, 0x1A},
{0x3BAC, 0xED},
{0x3BAD, 0x01},
{0x3BAE, 0xF6},
{0x3BAF, 0x02},
{0x3BB0, 0xA2},
{0x3BB1, 0x03},
{0x3BB2, 0xE0},
{0x3BB3, 0x03},
{0x3BB4, 0xE0},
{0x3BB5, 0x03},
{0x3BB6, 0xE0},
{0x3BB7, 0x03},
{0x3BB8, 0xE0},
{0x3BBA, 0xE0},
{0x3BBC, 0xDA},
{0x3BBE, 0x88},
{0x3BC0, 0x44},
{0x3BC2, 0x7B},
{0x3BC4, 0xA2},
{0x3BC8, 0xBD},
{0x3BCA, 0xBD},
{0x4001, 0x01},
{0x4004, 0xC0},
{0x4005, 0x06},
{0x400C, 0x00},
{0x4018, 0x7F},
{0x401A, 0x37},
{0x401C, 0x37},
{0x401E, 0xF7},
{0x401F, 0x00},
{0x4020, 0x3F},
{0x4022, 0x6F},
{0x4024, 0x3F},
{0x4026, 0x5F},
{0x4028, 0x2F},
{0x4074, 0x01},
{0x3002, 0x00},
//{0x3000, 0x00},
{REG_DELAY, 0x1E},//wait_ms(30)
{REG_NULL, 0x00},
};
/*
* Xclk 27Mhz
* 15fps
@@ -1080,6 +1262,25 @@ static const struct imx415_mode supported_modes[] = {
* frame rate = 1 / (Vtt * 1H) = 1 / (VMAX * 1H)
* VMAX >= (PIX_VWIDTH / 2) + 46 = height + 46
*/
{
.bus_fmt = MEDIA_BUS_FMT_SGBRG10_1X10,
.width = 3864,
.height = 2192,
.max_fps = {
.numerator = 10000,
.denominator = 200000,
},
.exp_def = 0x08ca - 0x08,
.hts_def = 0x044c * IMX415_4LANES * 2,
.vts_def = 0x08ca,
.global_reg_list = imx415_global_10bit_3864x2192_regs,
.reg_list = imx415_linear_10bit_3864x2192_594M_regs,
.hdr_mode = NO_HDR,
.mipi_freq_idx = 1,
.bpp = 10,
.vc[PAD0] = V4L2_MBUS_CSI2_CHANNEL_0,
.xvclk = IMX415_XVCLK_FREQ_37M,
},
{
.bus_fmt = MEDIA_BUS_FMT_SGBRG10_1X10,
.width = 3864,
@@ -1337,6 +1538,26 @@ static const struct imx415_mode supported_modes_2lane[] = {
.vc[PAD0] = V4L2_MBUS_CSI2_CHANNEL_0,
.xvclk = IMX415_XVCLK_FREQ_27M,
},
{
/* 1H period = (1100 clock) = (1100 * 1 / 74.25MHz) */
.bus_fmt = MEDIA_BUS_FMT_SGBRG10_1X10,
.width = 3864,
.height = 2192,
.max_fps = {
.numerator = 10000,
.denominator = 150000,
},
.exp_def = 0x08ca - 0x08,
.hts_def = 0x0898 * IMX415_2LANES * 2,
.vts_def = 0x08ca,
.global_reg_list = NULL,
.reg_list = imx415_linear_10bit_3864x2192_891M_regs_2lane,
.hdr_mode = NO_HDR,
.mipi_freq_idx = 1,
.bpp = 10,
.vc[PAD0] = V4L2_MBUS_CSI2_CHANNEL_0,
.xvclk = IMX415_XVCLK_FREQ_37M,
},
};
static const s64 link_freq_items[] = {

File diff suppressed because it is too large Load Diff

View File

@@ -1076,6 +1076,7 @@ static int rkisp_hw_probe(struct platform_device *pdev)
struct resource *res;
int i, ret, mult = 1;
bool is_mem_reserved = true;
u32 unite_state;
u32 clk_rate = 0;
match = of_match_node(rkisp_hw_of_match, node);
@@ -1146,6 +1147,11 @@ static int rkisp_hw_probe(struct platform_device *pdev)
hw_dev->isp_ver = match_data->isp_ver;
if (match_data->unite) {
hw_dev->unite = ISP_UNITE_TWO;
} else if (!device_property_read_u32(dev, "rockchip,unite", &unite_state)) {
if ( unite_state == 1 ) {
hw_dev->unite = ISP_UNITE_ONE;
hw_dev->base_next_addr = hw_dev->base_addr;
}
} else if (device_property_read_bool(dev, "rockchip,unite-en")) {
hw_dev->unite = ISP_UNITE_ONE;
hw_dev->base_next_addr = hw_dev->base_addr;

View File

@@ -40,6 +40,7 @@ BR2_PACKAGE_DTC=y
BR2_PACKAGE_DTC_PROGRAMS=y
BR2_PACKAGE_LIBV4L=y
BR2_PACKAGE_LIBV4L_UTILS=y
BR2_PACKAGE_LIBRSYNC=y
BR2_PACKAGE_PCRE2=y
BR2_PACKAGE_PCRE2_16=y
BR2_PACKAGE_PCRE2_32=y
@@ -48,6 +49,7 @@ BR2_PACKAGE_IPERF3=y
BR2_PACKAGE_LRZSZ=y
BR2_PACKAGE_NTP=y
BR2_PACKAGE_OPENSSH=y
BR2_PACKAGE_RSYNC=y
BR2_PACKAGE_SOCAT=y
BR2_PACKAGE_BASH=y
BR2_PACKAGE_BASH_LOADABLE_EXAMPLES=y