20251217给飞凌OK3588-C开发板适配Rockchip原厂的Buildroot【linux-5.10】后调通ov5645【只能预览】

cat /sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl/pinmux-pins

cat /sys/kernel/debug/gpio

root@ok3588:/#

root@ok3588:/# v4l2-ctl --list-devices

root@ok3588:/# v4l2-ctl --list-formats-ext -d /dev/video22

root@ok3588:/# v4l2-ctl -V -d /dev/video22

【大概40s就会出错退出了!】

root@ok3588:/# gst-launch-1.0 v4l2src device=/dev/video22 num-buffers=54000 ! video/x-raw,format=NV12, width=1920,height=1080 ! tee name=t ! queue ! mpph264enc ! queue ! h264parse ! qtmux ! filesink location=ov5645-5400.mp4 t. ! queue ! waylandsink

20251217给飞凌OK3588-C开发板适配Rockchip原厂的Buildroot【linux-5.10】后调通ov5645【只能预览】

2025/12/17 10:16

缘起:给飞凌OK3588-C开发板适配Rockchip原厂的Buildroot【linux-5.10】后,调通了OV5645摄像头模块!

出现的问题:

1、颜色严重偏红。由于使用的是taobao淘宝货,非飞凌原厂的摄像头,可能余摄像头有关系。电话问过飞凌的FAE,他们回复:有点红,但是肯定不像你这样整体泛红。

2、预览的时候不能录像。【原因待查】

适配Rockchip原厂的Buildroot【linux-6.1】时,在预览的时候可以同步录像的!

gst-launch-1.0 v4l2src device=/dev/video22 ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! videoconvert ! waylandsink

https://forlinx-book.yuque.com/rh74yu/ok3588/d6548c12ee2743cf50c65ef5450ebbfa#Gt86m

5.4.3.3、摄像头预览

5.4.3 OV5645 测试

5.4.3.1、摄像头识别检测

5.4.3.2、查看支持格式

5.4.3.3、摄像头预览

gst-launch-1.0 v4l2src device=/dev/video22 ! video/x-raw, format=NV12, width=1920,height=1080, framerate=30/1 ! waylandsink

【飞凌魔改的驱动来自/搬运于:OK3588-C_Linux5.10.209+Qt5.15.10_用户资料_R1】

飞凌OK3588-C开发板跑Rockchip原厂的Buildroot【linux-6.1】系统时,适配ETH1接口的网卡。

当你把荣品RD-RK3588开发板重新适配一把,就相当于从头做了一个项目:【荣品RD-RK3588开发板】。

当然,开发板的功能都是好的,你免除了调试的过程,也就没有解决相关硬件出错的经验/机会了!

1、

Y:\new_disk_4t\wyb\RD-RK3588\RK3588_Linux5.10_V1.2.0_20230620\kernel\arch\arm64\configs\rockchip_linux_defconfig

CONFIG_GPIO_SYSFS=y

CONFIG_GPIO_GENERIC_PLATFORM=y

CONFIG_GPIO_SYSCON=y
CONFIG_GPIO_PCA953X=y
CONFIG_GPIO_PCA953X_IRQ=y

CONFIG_POWER_RESET_GPIO=y

CONFIG_POWER_RESET_GPIO_RESTART=y

CONFIG_VIDEO_OS04A10=y

CONFIG_VIDEO_OV4689=y

CONFIG_VIDEO_OV50C40=y
CONFIG_VIDEO_OV5645=y

CONFIG_VIDEO_OV5695=y

CONFIG_VIDEO_OV7251=y

CONFIG_VIDEO_OV13850=y

CONFIG_VIDEO_OV13855=y

2、【直接使用飞凌OK3588-C开发板的Anroid14系统中的ov5645的驱动程序,都是linux-6.1内核,同内核版本的驱动程序一般不会出现兼容性问题。】

Y:\new_disk_4t\wyb\RD-RK3588\rk3588_linux6.1_release_v1.2.0_20241220\kernel-6.1\drivers\media\i2c\ov5645.c

Z:\14TB\OK3588-C\OK3588-android14-source\kernel-6.1\drivers\media\i2c\ov5645.c

Y:\new_disk_4t\wyb\RD-RK3588\RK3588_Linux5.10_V1.2.0_20230620\kernel\drivers\media\i2c\ov5645.c

Y:\new_disk_4t\wyb\OK3588-C\OK3588-C_Linux5.10.209+Qt5.15.10R1\kernel\drivers\media\i2c\ov5645.c

【原版本的ov5645.c这个驱动程序是打不开摄像头的!虽然瑞芯微Rockchip的Anroid14系统SDK中有ov5645.c这个驱动程序,但是不能用/不完备!】

【需要使用飞凌魔改版本的!】

Y:\new_disk_4t\wyb\RD-RK3588\RK3588_Linux5.10_V1.2.0_20230620\kernel\drivers\media\i2c\ov5645.c

Y:\new_disk_4t\wyb\OK3588-C\OK3588-C_Linux5.10.209+Qt5.15.10R1\kernel\drivers\media\i2c\ov5645.c

但是你不能直接整体使用的飞凌Android14的DTS,会出现的问题有:

1、编译问题。dsi0/dsi1参数的问题。

2、处理好编译问题之后,不能进Android14系统的问题。

一般认为是飞凌魔改了Android14的kernel-6.1中的Makefile,使其直接支持linux-5.10【Android13】的DTS。

3、其它未知问题了!

Y:\new_disk_4t\wyb\OK3588-C\OK3588-C_Linux5.10.209+Qt5.15.10R1\kernel\drivers\media\i2c\Kconfig

Y:\new_disk_4t\wyb\RD-RK3588\RK3588_Linux5.10_V1.2.0_20230620\kernel\drivers\media\i2c\Kconfig

config VIDEO_OV5645
tristate "OmniVision OV5645 sensor support"
depends on OF
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 OmniVision
OV5645 camera.

To compile this driver as a module, choose M here: the
module will be called ov5645.

Y:\new_disk_4t\wyb\RD-RK3588\RK3588_Linux5.10_V1.2.0_20230620\kernel\drivers\media\i2c\Makefile

Y:\new_disk_4t\wyb\OK3588-C\OK3588-C_Linux5.10.209+Qt5.15.10R1\kernel\drivers\media\i2c\Makefile

obj-$(CONFIG_VIDEO_OG01A10) += og01a10.o

obj-$(CONFIG_VIDEO_OG02B10) += og02b10.o

obj-$(CONFIG_VIDEO_OS02G10) += os02g10.o

obj-$(CONFIG_VIDEO_OS02K10) += os02k10.o

obj-$(CONFIG_VIDEO_OS03B10) += os03b10.o

obj-$(CONFIG_VIDEO_OS04A10) += os04a10.o

obj-$(CONFIG_VIDEO_OS04D10) += os04d10.o

obj-$(CONFIG_VIDEO_OS04E10) += os04e10.o

obj-$(CONFIG_VIDEO_OS05A20) += os05a20.o

obj-$(CONFIG_VIDEO_OS08A20) += os08a20.o

obj-$(CONFIG_VIDEO_OV02B10) += ov02b10.o

obj-$(CONFIG_VIDEO_OV02K10) += ov02k10.o

obj-$(CONFIG_VIDEO_OV16885) += ov16885.o

obj-$(CONFIG_VIDEO_OV16A10) += ov16a10.o

obj-$(CONFIG_VIDEO_OV16A1Q) += ov16a1q.o

obj-$(CONFIG_VIDEO_OV2640) += ov2640.o

obj-$(CONFIG_VIDEO_OV2680) += ov2680.o

obj-$(CONFIG_VIDEO_OV2685) += ov2685.o

obj-$(CONFIG_VIDEO_OV2718) += ov2718.o

obj-$(CONFIG_VIDEO_OV2735) += ov2735.o

obj-$(CONFIG_VIDEO_OV2740) += ov2740.o

obj-$(CONFIG_VIDEO_OV2775) += ov2775.o

obj-$(CONFIG_VIDEO_OV4686) += ov4686.o

obj-$(CONFIG_VIDEO_OV4688) += ov4688.o

obj-$(CONFIG_VIDEO_OV4689) += ov4689.o

obj-$(CONFIG_VIDEO_OV50C40) += ov50c40.o

obj-(CONFIG_VIDEO_OV5640) += ov5640.o obj-(CONFIG_VIDEO_OV5645) += ov5645.o

obj-$(CONFIG_VIDEO_OV5647) += ov5647.o

obj-$(CONFIG_VIDEO_OV5648) += ov5648.o

obj-$(CONFIG_VIDEO_OV5670) += ov5670.o

obj-$(CONFIG_VIDEO_OV5675) += ov5675.o

obj-$(CONFIG_VIDEO_OV5695) += ov5695.o

obj-$(CONFIG_VIDEO_OV6650) += ov6650.o

obj-$(CONFIG_VIDEO_OV7251) += ov7251.o

obj-$(CONFIG_VIDEO_OV7640) += ov7640.o

obj-$(CONFIG_VIDEO_OV7670) += ov7670.o

obj-$(CONFIG_VIDEO_OV772X) += ov772x.o

obj-$(CONFIG_VIDEO_OV7740) += ov7740.o

obj-$(CONFIG_VIDEO_OV7750) += ov7750.o

obj-$(CONFIG_VIDEO_OV8856) += ov8856.o

obj-$(CONFIG_VIDEO_OV8858) += ov8858.o

obj-$(CONFIG_VIDEO_OV9281) += ov9281.o

obj-$(CONFIG_VIDEO_OV9640) += ov9640.o

obj-$(CONFIG_VIDEO_OV9650) += ov9650.o

obj-$(CONFIG_VIDEO_OV9750) += ov9750.o

obj-$(CONFIG_VIDEO_OV12D2Q) += ov12d2q.o

obj-$(CONFIG_VIDEO_OV13850) += ov13850.o

obj-$(CONFIG_VIDEO_OV13855) += ov13855.o

obj-$(CONFIG_VIDEO_OV13858) += ov13858.o

3、需要在I2C中挂载PCA953X的驱动。【如果I2C2挂载pca953x异常,或者摄像头ov5645打不开,请注意GPIO冲突的问题】

Y:\new_disk_4t\wyb\RD-RK3588\rk3588_linux6.1_release_v1.2.0_20241220\kernel-6.1\arch\arm64\boot\dts\rockchip\rk3588-evb7-v11.dtsi

Y:\new_disk_4t\wyb\RD-RK3588\RK3588_Linux5.10_V1.2.0_20230620\kernel\arch\arm64\boot\dts\rockchip\rk3588-evb7-v11.dtsi

&i2c2 {

status = "okay";

extio: tca6424@23 {
compatible = "ti,tca6424";
reg = <0x23>;
interrupt-parent = <&gpio1>;
interrupts = <RK_PA4 IRQ_TYPE_EDGE_FALLING>;
gpio-controller;
pinctrl-0 = <&extio_int_gpio>;
pinctrl-names = "default";
#gpio-cells = <2>;
status = "okay";
};

ft5x06_dsi0: ft5x06@38 { //dsi0 tp

compatible = "edt,edt-ft5406", "edt,edt-ft5x06";

reg = <0x38>;

pinctrl-names = "ft5x06_defaults";

pinctrl-0 = <&ft5x06_dsi1_gpio>;

// interrupt-parent = <&gpio3>;

// interrupts = <RK_PC0 IRQ_TYPE_EDGE_FALLING>;

irq-gpio = <&gpio3 RK_PC0 GPIO_ACTIVE_HIGH>;

touchscreen-size-x = <1024>;

touchscreen-size-y = <600>;

status = "okay";

};

};

&i2c4 {

status = "okay";

pinctrl-0 = <&i2c4m1_xfer>;

4、【直接使用飞凌OK3588-C开发板的Anroid14系统中的ov5645的驱动程序,都是linux-6.1内核,同内核版本的驱动程序一般不会出现兼容性问题。】

由于本DTSI体积大,如果不是适配开发板/需要全接口适配/兼容,实际上可以按需裁剪/定制本DTSI文件。

Y:\new_disk_4t\wyb\RD-RK3588\rk3588_linux6.1_release_v1.2.0_20241220\kernel-6.1\arch\arm64\boot\dts\rockchip\rk3588-evb7-v11-imx415.dtsi

Z:\14TB\OK3588-C\OK3588-android14-source\kernel-6.1\arch\arm64\boot\dts\rockchip\OK3588-C-Camera.dtsi

Y:\new_disk_4t\wyb\OK3588-C\OK3588-C_Linux5.10.209+Qt5.15.10R1\kernel\arch\arm64\boot\dts\rockchip89\OK3588-C-Camera.dtsi

Y:\new_disk_4t\wyb\RD-RK3588\RK3588_Linux5.10_V1.2.0_20230620\kernel\arch\arm64\boot\dts\rockchip\rk3588-evb7-v11-imx415.dtsi

5、用到pca953x这个I2C扩展芯片,但是不需要修改!

Y:\new_disk_4t\wyb\RD-RK3588\rk3588_linux6.1_release_v1.2.0_20241220\kernel-6.1\drivers\gpio\gpio-pca953x.c

Y:\new_disk_4t\wyb\RD-RK3588\RK3588_Linux5.10_V1.2.0_20230620\kernel\drivers\gpio\Kconfig

Y:\new_disk_4t\wyb\OK3588-C\OK3588-C_Linux5.10.209+Qt5.15.10R1\kernel\drivers\gpio\Kconfig

config GPIO_PCA953X
tristate "PCA95[357]x, PCA9698, TCA64xx, and MAX7310 I/O ports"
select REGMAP_I2C
help
Say yes here to provide access to several register-oriented
SMBus I/O expanders, made mostly by NXP or TI. Compatible
models include:

4 bits: pca9536, pca9537

8 bits: max7310, max7315, pca6107, pca9534, pca9538, pca9554,
pca9556, pca9557, pca9574, tca6408, tca9554, xra1202

16 bits: max7312, max7313, pca9535, pca9539, pca9555, pca9575,
tca6416

24 bits: tca6424

40 bits: pca9505, pca9698

Y:\new_disk_4t\wyb\RD-RK3588\RK3588_Linux5.10_V1.2.0_20230620\kernel\drivers\gpio\Makefile

Y:\new_disk_4t\wyb\OK3588-C\OK3588-C_Linux5.10.209+Qt5.15.10R1\kernel\drivers\gpio\Makefile

obj-(CONFIG_GPIO_PALMAS) += gpio-palmas.o obj-(CONFIG_GPIO_PCA953X) += gpio-pca953x.o

obj-$(CONFIG_GPIO_PCA9570) += gpio-pca9570.o

【头文件也需要修改的!编译设备树的时候需要用到这里!】

Y:\new_disk_4t\wyb\RD-RK3588\RK3588_Linux5.10_V1.2.0_20230620\kernel\include\dt-bindings\pinctrl\rockchip.h

Y:\new_disk_4t\wyb\OK3588-C\OK3588-C_Linux5.10.209+Qt5.15.10R1\kernel\include\dt-bindings\pinctrl\rockchip.h

/* SPDX-License-Identifier: GPL-2.0-or-later */

/*

* Header providing constants for Rockchip pinctrl bindings.

*

* Copyright (c) 2013 MundoReader S.L.

* Author: Heiko Stuebner <heiko@sntech.de>

*/

#ifndef DT_BINDINGS_ROCKCHIP_PINCTRL_H

#define DT_BINDINGS_ROCKCHIP_PINCTRL_H

#define RK_PA0 0

#define RK_PA1 1

#define RK_PA2 2

#define RK_PA3 3

#define RK_PA4 4

#define RK_PA5 5

#define RK_PA6 6

#define RK_PA7 7

#define RK_PB0 8

#define RK_PB1 9

#define RK_PB2 10

#define RK_PB3 11

#define RK_PB4 12

#define RK_PB5 13

#define RK_PB6 14

#define RK_PB7 15

#define RK_PC0 16

#define RK_PC1 17

#define RK_PC2 18

#define RK_PC3 19

#define RK_PC4 20

#define RK_PC5 21

#define RK_PC6 22

#define RK_PC7 23

#define RK_PD0 24

#define RK_PD1 25

#define RK_PD2 26

#define RK_PD3 27

#define RK_PD4 28

#define RK_PD5 29

#define RK_PD6 30

#define RK_PD7 31

#define RK_FUNC_GPIO 0

#define EXTIO_GPIO_P00 0
#define EXTIO_GPIO_P01 1
#define EXTIO_GPIO_P02 2
#define EXTIO_GPIO_P03 3
#define EXTIO_GPIO_P04 4
#define EXTIO_GPIO_P05 5
#define EXTIO_GPIO_P06 6
#define EXTIO_GPIO_P07 7
#define EXTIO_GPIO_P10 8
#define EXTIO_GPIO_P11 9
#define EXTIO_GPIO_P12 10
#define EXTIO_GPIO_P13 11
#define EXTIO_GPIO_P14 12
#define EXTIO_GPIO_P15 13
#define EXTIO_GPIO_P16 14
#define EXTIO_GPIO_P17 15
#define EXTIO_GPIO_P20 16
#define EXTIO_GPIO_P21 17
#define EXTIO_GPIO_P22 18
#define EXTIO_GPIO_P23 19
#define EXTIO_GPIO_P24 20
#define EXTIO_GPIO_P25 21
#define EXTIO_GPIO_P26 22
#define EXTIO_GPIO_P27 23

#endif

6、尝试改大cma预留内存无效:【128MB→256MB】

Y:\new_disk_4t\wyb\RD-RK3588\RK3588_Linux5.10_V1.2.0_20230620\kernel\arch\arm64\boot\dts\rockchip\rk3588-evb7-v11.dtsi

// SPDX-License-Identifier: (GPL-2.0+ OR MIT)

/*

* Copyright (c) 2022 Rockchip Electronics Co., Ltd.

*

*/

#include "dt-bindings/usb/pd.h"

#include "rk3588.dtsi"

#include "rk3588-evb.dtsi"

#include "rk3588-rk806-single.dtsi"

/ {

/* If hdmirx node is disabled, delete the reserved-memory node here. */

reserved-memory {

#address-cells = <2>;

#size-cells = <2>;

ranges;

/* Reserve 128MB memory for hdmirx-controller@fdee0000 */

cma {

compatible = "shared-dma-pool";

reusable;
reg = <0x0 (256 * 0x100000) 0x0 (128 * 0x100000)>;

linux,cma-default;

};

};

es8388_sound: es8388-sound {

Y:\new_disk_4t\wyb\RD-RK3588\rk3588_linux6.1_release_v1.2.0_20241220\kernel-6.1\arch\arm64\boot\dts\rockchip27gt911-\rk3588-evb7-v11.dtsi

// SPDX-License-Identifier: (GPL-2.0+ OR MIT)

/*

* Copyright (c) 2022 Rockchip Electronics Co., Ltd.

*

*/

#include "dt-bindings/usb/pd.h"

#include "rk3588.dtsi"

#include "rk3588-evb.dtsi"

#include "rk3588-rk806-single.dtsi"

/ {

/* If hdmirx node is disabled, delete the reserved-memory node here. */

reserved-memory {

#address-cells = <2>;

#size-cells = <2>;

ranges;

/* Reserve 256MB memory for hdmirx-controller@fdee0000 */

cma {

compatible = "shared-dma-pool";

reusable;
reg = <0x0 (256 * 0x100000) 0x0 (256 * 0x100000)>;

linux,cma-default;

};

};

es8388_sound: es8388-sound {

相关推荐
ulias2121 小时前
C++ 的容器适配器——从stack/queue看
开发语言·c++
Amewin2 小时前
window 11 安装pyenv-win管理不同的版本的python
开发语言·python
lionliu05192 小时前
WebAssembly (Wasm)
java·开发语言·wasm
咸鱼加辣2 小时前
【java面试题】springboot的生命周期
java·开发语言·spring boot
weixin_462446232 小时前
用 Go 快速搭建一个 Coze (扣子)API 流式回复模拟接口(Mock Server)
开发语言·golang·状态模式
小鸡吃米…2 小时前
Python编程语言面试问题二
开发语言·python·面试
谁动了我的代码?3 小时前
QT<34> 利用线程池处理耗时任务以及回调函数的使用
开发语言·qt
柒.梧.3 小时前
数据结构:二叉排序树构建与遍历的解析与代码实现
java·开发语言·数据结构
李迟3 小时前
Golang实践录:接口文档字段转结构体定义
开发语言·golang