20260116让天启AIO-3576Q38开发板在天启Android14下适配摄像头模块8ms1m为8M拍照
2026/1/15 18:04
缘起:给飞凌OK3588-C开发板适配Rockchip原厂的Android14后,需要适配CAM3接口的摄像头OV5645。
给飞凌OK3588-C开发板适配Rockchip原厂的Android14后,需要适配CTP触摸屏FT5X06。
当你把荣品RD-RK3588开发板重新适配一把,就相当于从头做了一个项目:【荣品RD-RK3588开发板】。
当然,开发板的功能都是好的,你免除了调试的过程,也就没有解决相关硬件出错的经验/机会了!
https://wiki.t-firefly.com/CAM-8MS1M/cam-8ms1m.html
800W单目摄像头
YUV的话,我们适配的只有这个
开发板收到。今天 要进行全接口功能测试。请提供 测试 步骤?
请提供 icore-3576JQ38开发板的 全套SDK(Andorid14/Buildroot Linux-6.1内核?)?
链接: https://pan.baidu.com-s/1ixM4N83KRiArLLKPkgCyVg
提取码: 1234
收到。应该 3576的 buildroot。
Android14也发一下。方便我司比对。
还有就是 预编译 固件 等相关资料也发一下
【全套的相关资料都发一下。我一次性搞定!】
麻烦看下客户要的资料,这边出差了
Baidu Drive: 链接:https://pan.baidu.com-s/1G9o8UTuO3Zkyq7YW4452_w?pwd=1234 PASSWD:1234
再更新bundle后选中rk3576_firefly_aio_3576q38-userdebug后编译
我在官网看了一下。没有 看到 Buildroot/Linux的预编译固件呀?
https://wiki.t-firefly.com/zh_CN/AIO-3576Q38/linux_compile.html
1.3.2. 编译前配置
https://www.t-firefly.com/doc/download/293.html
AIO-3576Q
https://www.t-firefly.com/doc/download/327.html
ICORE-3576Q38
https://www.t-firefly.com/doc/download/320.html#other_825
需要把bundle也下载更新
一、天启AIO-3576Q38开发板在天启Android14下是不能启动的,刷机就进入MASKROM模式。
更新为天启的buildroot的rkbin目录即可!【整体替换】
二、天启AIO-3576Q38开发板在天启Buildroot下无法打开摄像头模块8ms1m
1、将摄像头 接入 哪一个接口?CSI1/2 还是CSI3/4
还是都可以?
2、SDK中的DTS需要 改不?默认 有加入 摄像头吗??@梁凯迪
默认有加的
CSI3/4不能用
其他都可以
已经 接到CSI1/2了。
按个试一下 /dev/video节点。都不能显示呀!

Microsoft Windows [版本 10.0.19045.6466]
(c) Microsoft Corporation。保留所有权利。
C:\Users\QQ>adb shell
* daemon not running; starting now at tcp:5037
* daemon started successfully
root@rk3576-buildroot:/# v4l2-ctl --list-devices
rkisp-statistics (platform: rkisp):
/dev/video28
/dev/video29
rkcif-mipi-lvds (platform:rkcif-mipi-lvds):
/dev/media0
rkcif-mipi-lvds1 (platform:rkcif-mipi-lvds1):
/dev/media1
rkisp_mainpath (platform:rkisp-vir1):
/dev/video22
/dev/video23
/dev/video24
/dev/video25
/dev/video26
/dev/video27
/dev/video30
/dev/media2
rkvpss_scale0 (platform:rkvpss-vir1):
/dev/video32
/dev/video33
/dev/video34
/dev/video35
/dev/media3
Failed to open /dev/video0: No such device
root@rk3576-buildroot:/#

<!-- ******************PSL specific section end **************************************************************-->
</Profiles>
<Profiles cameraId="0" name="xc7160" moduleId="m00">
<Supported_hardware>
<hwType value="SUPPORTED_HW_RKISP1"/>
</Supported_hardware>
<Android_metadata> <!-- Android static metadata only -->
<!-- Color Correction -->
<colorCorrection.availableAberrationModes value="OFF"/>
<!-- Control -->
<control.availableModes value="AUTO"/>
<control.aeAvailableAntibandingModes value="OFF,50HZ,60Hz,AUTO"/>
<control.aeAvailableModes value="ON,OFF"/>
<control.aeLockAvailable value="FALSE"/>
<!-- <control.aeAvailableTargetFpsRanges value="15,30,30,30,60,60"/> -->
<control.aeAvailableTargetFpsRanges value="15,30,30,30,60,60"/>
<control.aeCompensationRange value="-6,6"/>
<control.aeCompensationStep value="1,3"/>
<control.afAvailableModes value="OFF,AUTO,MACRO,CONTINUOUS_VIDEO,CONTINUOUS_PICTURE,EDOF"/>
<control.availableEffects value="OFF"/>
<!-- <control.awbAvailableModes value="AUTO"/> -->
<control.awbAvailableModes value="AUTO,INCANDESCENT,FLUORESCENT,DAYLIGHT,CLOUDY_DAYLIGHT"/>
<control.awbLockAvailable value="true"/>
<control.availableSceneModes value="DISABLED"/>
<control.availableVideoStabilizationModes value="OFF"/>
<control.maxRegions value="1,0,1"/>
<!-- JPEG -->
<jpeg.maxSize value="19267584"/> <!-- 2688*1520*1.5 -->
<jpeg.availableThumbnailSizes value="0,0,160,120,320,180,320,240"/> <!-- INCREASING ORDER -->
<!-- Lens Info-->
<!-- TODO: availableApertures now is fake for we do not get the real apertures -->
<lens.info.availableApertures value="2.0"/> <!-- HAL may override this value from CMC for RAW sensors -->
<lens.info.availableFocalLengths value="70"/> <!-- HAL may override this value from CMC for RAW sensors -->
<lens.info.availableOpticalStabilization value="OFF"/> <!-- OPTIONS: OFF, ON -->
<lens.info.hyperfocalDistance value="0.0"/> <!-- HAL may override this value from CMC for RAW sensors -->
<lens.info.minimumFocusDistance value="0.1"/> <!-- HAL may override this value from CMC for RAW sensors -->
<!-- Lens -->
<lens.facing value="BACK"/>
<!-- Request -->
<request.maxNumOutputStreams value="1,2,1"/>
<request.pipelineMaxDepth value="4"/>
<request.maxNumInputStreams value="0"/>
<request.partialResultCount value="1"/>
<!-- <request.availableCapabilities value="BACKWARD_COMPATIBLE,YUV_REPROCESSING,PRIVATE_REPROCESSING"/> -->
<request.availableCapabilities value="BACKWARD_COMPATIBLE"/>
<request.availableRequestKeys value="blackLevel.lock,
colorCorrection.aberrationMode,
colorCorrection.gains,
colorCorrection.transform,
control.aeAntibandingMode,
control.aeExposureCompensation,
control.aeLock,
control.aeMode,
control.aeTargetFpsRange,
control.aePrecaptureTrigger,
control.afMode,
control.aeRegions,
control.afRegions,
control.afTrigger,
control.awbLock,
control.awbMode,
control.captureIntent,
control.effectMode,
control.mode,
control.sceneMode,
control.videoStabilizationMode,
edge.mode,
flash.mode,
jpeg.gpsLocation,
jpeg.orientation,
jpeg.quality,
jpeg.thumbnailQuality,
jpeg.thumbnailSize,
lens.aperture,
lens.focalLength,
lens.opticalStabilizationMode,
noiseReduction.mode,
scaler.cropRegion,
statistics.faceDetectMode,
statistics.hotPixelMapMode,
statistics.sceneFlicker,
statistics.lensShadingMapMode
"/>
<request.availableResultKeys value="colorCorrection.mode,
colorCorrection.transform,
colorCorrection.gains,
colorCorrection.aberrationCorrectionMode,
control.aeAntibandingMode,
control.aeExposureCompensation,
control.aeLock,
control.aeMode,
control.aeTargetFpsRange,
control.aePrecaptureTrigger,
control.afMode,
control.aeRegions,
control.afRegions,
control.afTrigger,
control.awbLock,
control.awbMode,
control.captureIntent,
control.effectMode,
control.mode,
control.sceneMode,
control.videoStabilizationMode,
control.aeState,
control.afState,
control.awbState,
sync.frameNumber,
edge.mode,
flash.mode,
jpeg.gpsLocation,
jpeg.orientation,
jpeg.quality,
jpeg.thumbnailQuality,
jpeg.thumbnailSize,
lens.focalLength,
lens.aperture,
lens.opticalStabilizationMode,
request.pipelineDepth,
scaler.cropRegion,
sensor.testPatternData,
sensor.testPatternMode,
sensor.timestamp,
sensor.rollingShutterSkew,
statistics.faceDetectMode,
statistics.hotPixelMapMode,
statistics.faces,
noiseReduction.mode,
statistics.sceneFlicker,
statistics.lensShadingMapMode
"/>
<request.availableCharacteristicsKeys value="0"/>
<!-- Scaler -->
<scaler.availableMaxDigitalZoom value="4.0"/>
<scaler.availableInputOutputFormatsMap value="IMPLEMENTATION_DEFINED,2,YCbCr_420_888,BLOB,YCbCr_420_888,2,YCbCr_420_888,BLOB"/>
<scaler.availableStreamConfigurations value="
BLOB,3840x2160,OUTPUT,
BLOB,1920x1080,OUTPUT,
BLOB,1280x960,OUTPUT,
BLOB,1280x720,OUTPUT,
BLOB,640x480,OUTPUT,
BLOB,320x240,OUTPUT,
BLOB,176x144,OUTPUT,
YCbCr_420_888,3840x2160,OUTPUT,
YCbCr_420_888,1920x1080,OUTPUT,
YCbCr_420_888,1280x960,OUTPUT,
YCbCr_420_888,1280x720,OUTPUT,
YCbCr_420_888,640x480,OUTPUT,
YCbCr_420_888,320x240,OUTPUT,
YCbCr_420_888,176x144,OUTPUT,
IMPLEMENTATION_DEFINED,3840x2160,OUTPUT,
IMPLEMENTATION_DEFINED,1920x1080,OUTPUT,
IMPLEMENTATION_DEFINED,1280x960,OUTPUT,
IMPLEMENTATION_DEFINED,1280x720,OUTPUT,
IMPLEMENTATION_DEFINED,640x480,OUTPUT,
IMPLEMENTATION_DEFINED,320x240,OUTPUT,
IMPLEMENTATION_DEFINED,176x144,OUTPUT"/>
<scaler.availableMinFrameDurations value="
BLOB,3840x2160,33333333,
BLOB,1920x1080,16666667,
BLOB,1280x960,33333333,
BLOB,1280x720,33333333,
BLOB,640x480,33333333,
BLOB,320x240,33333333,
BLOB,176x144,33333333,
YCbCr_420_888,3840x2160,33333333,
YCbCr_420_888,1920x1080,16666667,
YCbCr_420_888,1280x960,33333333,
YCbCr_420_888,1280x720,33333333,
YCbCr_420_888,640x480,33333333,
YCbCr_420_888,320x240,33333333,
YCbCr_420_888,176x144,33333333,
IMPLEMENTATION_DEFINED,3840x2160,33333333,
IMPLEMENTATION_DEFINED,1920x1080,16666667,
IMPLEMENTATION_DEFINED,1280x960,33333333,
IMPLEMENTATION_DEFINED,1280x720,33333333,
IMPLEMENTATION_DEFINED,640x480,33333333,
IMPLEMENTATION_DEFINED,320x240,33333333,
IMPLEMENTATION_DEFINED,176x144,33333333" />
<scaler.availableStallDurations value="
BLOB,3840x2160,33333333,
BLOB,1920x1080,16666667,
BLOB,1280x960,33333333,
BLOB,1280x720,33333333,
BLOB,640x480,33333333,
BLOB,320x240,33333333,
BLOB,176x144,33333333" />
<scaler.croppingType value="CENTER_ONLY"/>
<!-- Sensor Info -->
<sensor.info.activeArraySize value="0,0,3840,2160"/>
<sensor.info.sensitivityRange value="32,2400"/>
<sensor.info.colorFilterArrangement value="BGGR"/> <!-- HAL may override this value from CMC for RAW sensors -->
<sensor.info.exposureTimeRange value="100000,15000000"/>
<sensor.info.maxFrameDuration value="66666666"/>
<sensor.info.physicalSize value="5.5,4.5"/> <!-- 4224x1.12um 3136x1.12um -->
<sensor.info.pixelArraySize value="3840x2160"/>
<sensor.info.whiteLevel value="0"/> <!-- HAL may override this value from CMC for RAW sensors -->
<sensor.info.timestampSource value="UNKNOWN"/>
<!-- Sensor -->
<sensor.baseGainFactor value="0,1"/> <!-- HAL may override this value from CMC for RAW sensors -->
<sensor.blackLevelPattern value="0,0,0,0"/>
<sensor.maxAnalogSensitivity value="2400"/> <!-- HAL may override this value from CMC for RAW sensors -->
<sensor.orientation value="0"/>
<sensor.profileHueSatMapDimensions value="0,0,0"/>
<sensor.availableTestPatternModes value="OFF,COLOR_BARS"/>
<!-- Info -->
<info.supportedHardwareLevel value="LIMITED"/>
<!-- shading -->
<!-- <shading.availableModes value="OFF"/> -->
<!-- Statistics Info -->
<statistics.info.availableFaceDetectModes value="OFF"/>
<statistics.info.histogramBucketCount value="0"/>
<statistics.info.maxFaceCount value="0"/>
<statistics.info.availableHotPixelMapModes value="OFF"/>
<statistics.info.availableLensShadingMapModes value="OFF"/>
<!-- Flash -->
<flash.colorTemperature value="0"/>
<flash.maxEnergy value="0"/>
<!-- Flash info -->
<flash.info.available value="FALSE"/>
<flash.info.chargeDuration value="1000000"/>
<flash.maxEnergy value="10"/>
<!-- Sync -->
<sync.maxLatency value="PER_FRAME_CONTROL"/>
<!-- maxCaptureStall -->
<reprocess.maxCaptureStall value="4"/>
<!-- Edge -->
<edge.availableEdgeModes value="OFF,FAST,HIGH_QUALITY"/>
<!-- Noise Reduction -->
<noiseReduction.availableNoiseReductionModes value="OFF,FAST,HIGH_QUALITY"/>
</Android_metadata>
<!-- ******************PSL specific section start **************************************************************-->
<Hal_tuning_RKISP1> <!-- Parameters to tune the HAL and hacks for the HAL that are camera dependent -->
<flipping value="" value_v=""/> <!-- value: SENSOR_FLIP_H or "", value_v: SENSOR_FLIP_V or "" -->
<supportIsoMap value="false"/>
<supportTuningSize value="3840x2160,1920x1080"/>
</Hal_tuning_RKISP1>
<Sensor_info_RKISP1> <!-- Information that parametrizes the behavior or qualities of the physical sensor -->
<sensorType value="SENSOR_TYPE_SOC"/> <!-- SENSOR_TYPE_SOC or SENSOR_TYPE_RAW -->
<exposure.sync value="true"/> <!-- compensate expsure sync-->
<sensor.digitalGain value="false"/> <!-- digital gain support on sensor-->
<gain.lag value="2"/> <!-- camera3 HAL CPF parameters moved here start-->
<exposure.lag value="2"/>
<fov value= "54.8" value_v="42.5"/>
<statistics.initialSkip value="1"/> <!-- camera3 HAL CPF parameters moved here end-->
<frame.initialSkip value="3"/> <!-- should equal actual skipFrames - 2 for driver dropped 2 frames -->
<isoAnalogGain1 value="75"/> <!--Pseudo ISO corresponding analog gain value 1.0. -->
<cITMaxMargin value="10"/> <!--coarse integration time max margin -->
<aiq.workingMode value="NORMAL"/> <!-- NORMAL or HDR2 or HDR3 -->
</Sensor_info_RKISP1>




三、天启AIO-3576Q38开发板在天启Android14下测试摄像头模块8ms1m拍照默认为2M,录像为480p
刷机了 你们提供的Android14,我默认编译的固件 摄像头可以亮。
拍照分辨率 最大8M?
录像 分辨率?最大4K。
请帮忙修改一下!
固件没上传最新的.
默认摄像头8MS1M拍照是200w像素
Android14/Buildroot的测试 固件都给一下!
我看这个 摄像头 最大分辨率?8M,请将 拍照录像 都改一下为8M,并提供方法!


四、【重新/更新编译Android14】让天启AIO-3576Q38开发板在天启Android14下适配摄像头模块8ms1m为8M拍照
改下hardware/rockchip/camera/etc/camera/camera3_profiles_rk3576.xml
xc7160里面的scaler.availableStreamConfigurations
scaler.availableMinFrameDurations
scaler.availableStallDurations
sensor.info.activeArraySize , 改成3840x2160
替换Android系统里的/vendor/etc/camera/camera3_profiles.xml
【感觉通过adb推进不行,更新编译之后有用!】
https://wiki.t-firefly.com/zh_CN/AIO-3576Q38/android_compile_android14.0_firmware.html
3.2.2. 分步编译
编译 kernel:
cd ~/proj/RK3576_Android14.0/kernel-6.1
export PATH=../prebuilts/clang/host/linux-x86/clang-r487747c/bin:$PATH
alias msk='make CROSS_COMPILE=aarch64-linux-gnu- LLVM=1 LLVM_IAS=1'
msk ARCH=arm64 firefly_defconfig android-14.config rk3576.config
msk ARCH=arm64 BOOT_IMG=../rockdev/Image-rk3576_firefly_aio_3576q38/boot.img rk3576-firefly-aio-3576q38.img -j8
编译 uboot:
cd ~/proj/RK3576_Android14.0/u-boot/
make rk3576_defconfig
./make.sh --spl-new
编译 Android:
cd ~/proj/RK3576_Android14.0/
source build/envsetup.sh
lunch rk3576_firefly_aio_3576q38-userdebug
make installclean
make -j8
./mkimage.sh
3.2.3. 打包成统一固件 update.img
编译完可以用Firefly官方的脚本打包成统一固件,执行如下命令:
./FFTools/mkupdate/mkupdate.sh -l rk3576_firefly_aio_3576q38-userdebug
打包完成后将在rockdev/Image-rk3576_firefly_aio_3576q38/ 目录下生成统一固件: product名XXX_XXX_日期XXX.img
在 Windows 下打包统一固件 update.img 也很简单,将编译生成的文件拷贝到 AndroidTool 的 rockdev\Image 目录中,然后运行 rockdev 目录下的 mkupdate.bat 批处理文件即可创建 update.img 并存放到 rockdev\Image 目录里。

五、拍照8M分辨率的效果图:






