----------------------------------------------------------------------------------------------------------------------------
开发板 :NanoPC-T4
开发板
eMMC
:16GB
LPDDR3
:4GB
显示屏 :15.6
英寸HDMI
接口显示屏
u-boot
:2023.04
linux
:6.3
----------------------------------------------------------------------------------------------------------------------------
在《Rockchip RK3399 - DRM eDP
驱动程序》中我们介绍了eDP
相关设备树的配置,并对eDP
相关驱动程序源码进行了分析,本节我们将进行内核烧录和调试。
一、烧录内核
1.1 内核配置
在linux
内核根目录下执行make menuconfig
配置以下内容。
1.1.1 eDP
驱动配置
eDP
驱动实现主要位于:
drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
;drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c
;drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
;drivers/phy/rockchip/phy-rockchip-dp.c
;
如果需要使以上文件生效,首先需要配置CONFIG_ROCKCHIP_ANALOGIX_DP
,具体参考drivers/gpu/drm/rockchip/Makefile
;
rockchipdrm-$(CONFIG_ROCKCHIP_ANALOGIX_DP) += analogix_dp-rockchip.o
......
obj-$(CONFIG_DRM_ROCKCHIP) += rockchipdrm.o
接着需要配置CONFIG_PHY_ROCKCHIP_DP
,具体参考drivers/gpu/drm/rockchip/Makefile
;
obj-$(CONFIG_PHY_ROCKCHIP_DP) += phy-rockchip-dp.o
因此,我们需要在linux
内核根目录下执行make menuconfig
配置以下选项:
Device Drivers --->
Graphics support --->
<*> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) --->
<*> DRM Support for Rockchip (DRM_ROCKCHIP [=y])
[*] Rockchip VOP driver # CONFIG_ROCKCHIP_VOP2
[ ] Rockchip VOP2 driver # CONFIG_ROCKCHIP_VOP
[*] Rockchip specific extensions for Analogix DP driver # CONFIG_ROCKCHIP_ANALOGIX_DP
[*] Rockchip cdn DP # CONFIG_ROCKCHIP_CDN_DP
[*] Rockchip specific extensions for Synopsys DW HDMI # CONFIG_ROCKCHIP_DW_HDMI
[*] Rockchip specific extensions for Synopsys DW MIPI DSI # CONFIG_ROCKCHIP_DW_MIPI_DSI
[*] Rockchip specific extensions for Innosilicon HDMI # CONFIG_ROCKCHIP_INNO_HDMI 实际上RK3399并没有使用Innosilicon IP,可以不选
[*] Rockchip LVDS support # CONFIG_ROCKCHIP_LVDS
[ ] Rockchip RGB support # CONFIG_ROCKCHIP_RGB
Display Interface Bridges ---> # CONFIG_DRM_DW_HDMI取决于CONFIG_DRM_BRIDGE、DRM_DRM(默认开启)
<M> Synopsys Designware AHB Audio interface # CONFIG_DRM_DW_HDMI_AHB_AUDIO
<*> Synopsys Designware I2S Audio interface # CONFIG_DRM_DW_HDMI_I2S_AUDIO HDMI音频
<M> Synopsys Designware GP Audio interface # CONFIG_DRM_DW_HDMI_I2S_AUDIO
<*> Synopsis Designware CEC interface # CONFIG_DRM_DW_HDMI_CEC
Device Drivers --->
PHY Subsystem --->
<*> Rockchip Display Port PHY Driver
1.1.2 配置backlight
驱动
backlight
驱动实现位于drivers/video/backlight/pwm_bl.c
,如果需要使该文件生效,需要配置CONFIG_BACKLIGHT_PWM
,具体参考drivers/video/backlight/Makefile
;
obj-$(CONFIG_BACKLIGHT_PWM) += pwm_bl.o
因此,我们需要配置内核:
Device Drivers --->
Graphics support --->
Backlight & LCD device support --->
-*- Lowlevel Backlight controls
<*> Generic PWM based Backlight Driver
1.1.3 配置pwm
驱动
PWM
驱动位于drivers/pwm/pwm-rockchip.c
,如果需要使该文件生效,需要配置CONFIG_PWM_ROCKCHIP
,具体参考drivers/pwm/Makefile
;
obj-$(CONFIG_PWM_ROCKCHIP) += pwm-rockchip.o
因此,我们需要配置内核:
Device Drivers --->
[*] Pulse-Width Modulation (PWM) Support --->
<*> Rockchip PWM support // CONFIG_PWM_ROCKCHIP
1.1.4 配置panel
驱动
panel
驱动位于drivers/gpu/drm/panel/panel-simple.c
,如果需要使该文件生效,需要配置CONFIG_PWM_ROCKCHIP
,具体参考drivers/gpu/drm/panel/Makefile
;
obj-$(CONFIG_DRM_PANEL_SIMPLE) += panel-simple.o
因此,我们需要配置内核:
Device Drivers --->
Graphics support --->
Display Panels --->
<*> support for simple panels (other than eDP ones)
< > support for simple Embedded DisplayPort panels
1.1.5 配置gt9xx
驱动
在内核中,配置gt9xx
有多种方式,比如I2C HID
驱动程序、Generic input layer
,我们采用其中一种即可。
(1) ``Generic input layer`
在linux
内核中中有一个通用输入层子系统,用于处理和管理各种输入设备,例如键盘、鼠标、触摸屏和游戏手柄等。通用输入层提供了一个统一的接口,使应用程序可以以一致的方式与不同类型的输入设备进行交互。
gt9xx
驱动位于:
drivers/input/touchscreen/goodix.c
;drivers/input/touchscreen/goodix_fwupload.c
;
如果需要使该文件生效,需要配置CONFIG_TOUCHSCREEN_GOODIX
,具体参考drivers/input/touchscreen/Makefile
;
goodix_ts-y := goodix.o goodix_fwupload.o
obj-$(CONFIG_TOUCHSCREEN_GOODIX) += goodix_ts.o
因此,我们需要配置内核:
Device Drivers --->
Input device support --->
-*- Generic input layer (needed for keyboard, mouse, ...)
[*] Touchscreens --->
<*> Goodix I2C touchscreen
注意:这里我才用这种方式;
(2) I2C HID
驱动程序
如果要使用I2C
接口的HID
设备,那么就需要配置 I2C HID support
;
Device Drivers --->
[*] HID bus support --->
<*> I2C HID support --->
<*> Driver for Goodix hid-i2c based devices on OF systems
注意:该方式未测试。
1.2 保存配置
配置完内核之后记得保存配置:
存档:
root@zhengyang:/work/sambashare/rk3399/linux-6.3# mv rk3399_defconfig ./arch/arm64/configs/
重新配置内核(如果不想重新编译内核,可以存档一份到.config
):
root@zhengyang:/work/sambashare/rk3399/linux-6.3# make rk3399_defconfig
1.3 编译内核
在linux
内核根目录下执行如下命令进行编译内核:
root@zhengyang:/work/sambashare/rk3399/linux-6.3# make -j8
u-boot-2023.04
路径下的mkimage
工具拷贝过来,然后在命令行使用mkimage
工具编译即可:
root@zhengyang:/work/sambashare/rk3399/linux-6.3# cp ../u-boot-2023.04/tools/mkimage ./
root@zhengyang:/work/sambashare/rk3399/linux-6.3# ./mkimage -f kernel.its kernel.itb
1.4 通过tftp
烧录内核
给开发板上电,同时连接上网线,进入uboot
命令行。我们将内核拷贝到tftp
文件目录:
root@zhengyang:/work/sambashare/rk3399/linux-6.3# cp kernel.itb /work/tftpboot/
接着给开发板上电。通过uboot
命令行将kernel.itb
下到内存地址0x10000000
处:
=> tftp 0x10000000 kernel.itb
通过mmc write
命令将内核镜像烧录到eMMC
第0x8000
个扇区处:
=> mmc erase 0x8000 0xA000
=> mmc write 0x10000000 0x8000 0xA000
=> bootm
1.5 启动内核
将开发板和HD702E
显示屏通过eDP 30PIN
接口引脚连接起来,同时将开发板和hdmi
显示器通过hdmi
线缆连接起来,然后给开发板上电启动。内核输入有关edp
日志:
root@rk3399:~# dmesg | grep -E "hdmi|edp|drm|Goodix"
[ 0.551098] platform ff940000.hdmi: Fixed dependency cycle(s) with /vop@ff900000/port/endpoint@2
[ 0.561496] platform ff970000.edp: Fixed dependency cycle(s) with /vop@ff8f0000/port/endpoint@1
[ 0.669022] platform edp-panel: Fixed dependency cycle(s) with /edp@ff970000/ports/port@1/endpoint@0
[ 3.413841] Goodix-TS 4-005d: ID 9271, version: 1020
[ 3.419508] Goodix-TS 4-005d: Direct firmware load for goodix_9271_cfg.bin failed with error -2
[ 3.438411] input: Goodix Capacitive TouchScreen as /devices/platform/ff3d0000.i2c/i2c-4/4-005d/input/input0
[ 5.060616] [drm] Initialized panfrost 1.2.0 20180908 for ff9a0000.gpu on minor 0
[ 5.417080] rockchip-dp ff970000.edp: no DP phy configured
[ 5.425681] rockchip-drm display-subsystem: bound ff8f0000.vop (ops vop_component_ops)
[ 5.434692] [drm] unsupported AFBC format[3231564e]
[ 5.441264] rockchip-drm display-subsystem: bound ff900000.vop (ops vop_component_ops)
[ 5.451078] rockchip-drm display-subsystem: bound ff970000.edp (ops rockchip_dp_component_ops)
[ 5.460949] dwhdmi-rockchip ff940000.hdmi: supply avdd-0v9 not found, using dummy regulator
[ 5.470491] dwhdmi-rockchip ff940000.hdmi: supply avdd-1v8 not found, using dummy regulator
[ 5.480056] dwhdmi-rockchip ff940000.hdmi: Detected HDMI TX controller v2.11a with HDCP (DWC HDMI 2.0 TX PHY)
[ 5.495963] rockchip-drm display-subsystem: bound ff940000.hdmi (ops dw_hdmi_rockchip_ops)
[ 5.507029] [drm] Initialized rockchip 1.0.0 20140818 for display-subsystem on minor 1
[ 5.573242] rockchip-dp ff970000.edp: AUX CH error happened: 0x2 (1)
[ 5.574257] rockchip-dp ff970000.edp: AUX CH error happened: 0x0 (1)
[ 5.759654] rockchip-drm display-subsystem: [drm] fb0: rockchipdrmfb frame buffer device
[ 5.771274] asoc-simple-card hdmi-sound: ASoC: binding ff8a0000.i2s-i2s-hifi
[ 5.783063] asoc-simple-card hdmi-sound: ASoC: CPU DAI (null)registered
[ 5.790541] asoc-simple-card hdmi-sound: ASoC: CODEC DAI i2s-hifi registered
[ 5.800032] asoc-simple-card hdmi-sound: connected DAI link ff8a0000.i2s:Playback -> hdmi-audio-codec.6.auto:I2S Playback
[ 5.818546] asoc-simple-card hdmi-sound: connected DAI link hdmi-audio-codec.6.auto:Capture -> ff8a0000.i2s:Capture
[ 5.833667] dev hdmi-audio-codec.6.auto
[ 5.859644] #1: hdmi-sound
[ 10.198950] systemd[1]: Starting Load Kernel Module drm...
标签:hdmi,Rockchip,ROCKCHIP,---,eDP,RK3399,内核,rockchip,CONFIG
From: https://www.cnblogs.com/zyly/p/18167577