您尚未登录。

楼主 # 2026-05-30 11:19:42

QL2017
会员
注册时间: 2026-02-19
已发帖子: 37
积分: 27

[求助]全志Tinalinux屏幕驱动不调用问题

需求/疑问:为什么内核启动时没有调用屏幕的init

我的平台是F133,我在内核屏幕驱动里基于ST7701S驱动改动初始化阵列实现适配我的屏幕,我的Uboot也是这样做的,我两份驱动仅仅修改了初始化阵列,编译也能通过,但是在init那里我加了log输出,并区分出uboot和kernel,然后上电时可以看到uboot输出的log,但是到内核就没有log输出,但是能看到屏幕的dclk和设备树一样,所以因该不是设备树问题?我内核和uboot用的是同一份设备树,完整log我感觉没必要放了,毕竟我的疑问就是为什么内核启动时没有调用屏幕的init,我以前用这个平台搭配这个屏幕可以点亮,但是时间可能有点长,现在操作不怎么熟练,清各位大佬帮我想想办法,谢谢!

离线

#1 2026-05-30 19:07:48

陆苹果
会员
注册时间: 2026-05-27
已发帖子: 13
积分: 13

Re: [求助]全志Tinalinux屏幕驱动不调用问题

这个现象建议不要先从“dclk 有了所以设备树没问题”这个方向判断,dclk 只能说明 DE/TCON/LCD 时钟链路起来了,不等于内核已经匹配并执行了你改的 panel init 阵列。F133/Tina 这套 disp2 里,panel init 通常是在 open flow 里被调用的,前提是内核选中的 lcd panel 驱动和你改的那个驱动真正匹配上了。可以按下面顺序排一下:

  1. 先确认内核实际加载/匹配的是不是你改的 ST7701S 驱动
    看设备树里的 lcd_driver_name 是否和 panel 驱动结构体里的 .name 完全一致,比如 st7701s / default_lcd / 自己改的名字,大小写、下划线都要一致。很多时候 u-boot 能亮,是因为 u-boot 里的 panel 名和流程对了;到 kernel 这边虽然用“同一份 dts”,但 kernel 的 panel 注册表/宏开关/名字没对上,最后走了别的 panel 或者默认流程。

  2. 确认该 panel 文件真的被编进当前运行的 kernel
    不只是编译通过,还要确认 Makefile/Kconfig 里这个 panel 被选中,panels.c 或对应注册入口里有调用/注册到你的 panel。建议在更靠前的位置加 log:

  • panel 文件的注册函数/模块 init 处;

  • sunxi_lcd_set_panel_funs() 附近;

  • LCD_open_flow() / LCD_panel_init() 入口。
    如果注册处都没打印,说明文件没进镜像或没被注册;如果注册了但 open flow 没进,再查 disp/lcd enable 流程。

  1. 确认运行的是新 kernel/dtb,不是旧镜像
    Tina 上很容易只更新了源码目录或 rootfs,实际 boot 分区里的 boot.img / kernel / dtb 还是旧的。可以临时在内核启动早期或 panel 文件全局入口加一个非常独特的 log 字符串,确认启动日志里能看到。看不到的话,先别继续怀疑屏参。

  2. 检查内核阶段是否启用了 lcd0,以及是否被 simplefb/bootlogo 接管
    u-boot 点亮屏以后,内核可能只是继承 framebuffer/时钟状态,或者只初始化了显示控制器,没重新跑 panel 初始化序列。可以看启动 log 里的 disp, lcd, panel 相关输出,也可以检查 /sys/class/disp/disp/attr/sys 里 lcd0/屏幕状态。若 lcd0 没 enable,panel init 不会被调用。

  3. dts 重点看这些项
    lcd_used = <1>lcd_iflcd_driver_name、reset/power/enable gpio、pinctrl、电源 regulator 这些都要和 kernel 驱动期望一致。尤其是 lcd_driver_name,它决定走哪个 panel 函数表;dclk 对了只能证明时序参数大体生效,不能证明 MIPI/DBI/8080/SPI panel init 发出去了。

我建议你先在内核里加三处 log 定位:

// 1. panel 文件注册入口
printk("QL2017: st7701s panel registered in kernel\n");

// 2. LCD_open_flow 入口
printk("QL2017: LCD_open_flow sel=%d\n", sel);

// 3. 真正发送初始化数组前
printk("QL2017: ST7701S kernel init array start\n");

然后根据结果分叉:

  • 1 都没有:当前运行镜像不是你编译的,或该 panel 文件没编进内核。

  • 1 有、2 没有:panel 注册了,但 lcd 没有被 open,查 lcd_used / disp enable / framebuffer 流程。

  • 1、2 有、3 没有:open flow 里没有走到 panel init,查 open flow 配置或条件分支。

  • 3 有但屏不亮:这时才回到初始化数组、reset 时序、电源、lane/format 等屏参问题。

总之,这个问题大概率不是“设备树完全没问题/有问题”这么简单,而是要确认 kernel 阶段实际匹配到的 panel 函数表和 open flow。先把调用链打穿,基本很快能定位。

离线

#3 今天 10:51:46

jkl
会员
注册时间: 2019-11-18
已发帖子: 271
积分: 154.5

Re: [求助]全志Tinalinux屏幕驱动不调用问题

全志sdk是这样的呀,你uboot开屏后,不会跑内核的初始化代码了,全志代码里面有做判断。想要跑内核的初始化代码就把uboot开屏关掉就好了

离线

#4 今天 10:52:55

jkl
会员
注册时间: 2019-11-18
已发帖子: 271
积分: 154.5

Re: [求助]全志Tinalinux屏幕驱动不调用问题

这是全志针对uboot到内核显示的一个平滑过渡流程,避免闪屏黑屏。

离线

楼主 #5 今天 12:24:20

QL2017
会员
注册时间: 2026-02-19
已发帖子: 37
积分: 27

Re: [求助]全志Tinalinux屏幕驱动不调用问题

jkl 说:

这是全志针对uboot到内核显示的一个平滑过渡流程,避免闪屏黑屏。

您好,我确实是这样想的,但是我感觉cboot后menuconfig可能不是针对当前uboot的,我关了sunxi-disp2(可能打错了) support之后并且uboot-borad.dts里的disp和lcd都设为0(关闭)了,启动时依然有LCD open finish,于是我直接修改sun20iw1p1_defconfig,确实奏效,但是启动的时候直接卡死了,日志:
0.257825] [DISP] Fb_copy_boot_fb,line:1445:
[ 0.257830] no boot_fb0
[ 0.258392] disp_al_manager_apply ouput_type:0
[ 0.258812] [DISP] lcd_clk_config,line:774:
[ 0.258826] disp 0, clk: pll(504000000),clk(504000000),dclk(63000000) dsi_rate(63000000)
[ 0.258826] clk real:pll(504000000),clk(504000000),dclk(126000000) dsi_rate(150000000)
[ 0.258861] [DISP] disp_sys_pwm_config,line:509:
[ 0.258864] disp_sys_pwm_Config, handle is NULL!
[ 0.258873] [DISP] disp_sys_pwm_set_polarity,line:528:
[ 0.258876] disp_sys_pwm_Set_Polarity, handle is NULL!
[ 0.267913] [DISP]disp_module_init finish
[ 0.268876] sunxi_sid_init()783 - insmod ok
[ 0.269770] pwm-regulator: supplied by regulator-dummy
[ 0.271667] sun8iw20-pinctrl 2000000.pinctrl: 2000000.pinctrl supply vcc-pe not found, using dummy regulator
[ 0.272159] uart uart0: uart0 supply uart not found, using dummy regulator
[ 0.272607] uart0: ttyS0 at MMIO 0x2500000 (irq = 18, base_baud = 1500000) is a SUNXI
[ 0.272637] sw_console_setup()1807 - console setup baud 115200 parity n bits 8, flow n
[ 1.706232] printk: console [ttyS0] enabled
[ 1.728335] sun8iw20-pinctrl 2000000.pinctrl: 2000000.pinctrl supply vcc-pg not found, using dummy regulator
[ 1.747928] uart uart1: uart1 supply uart not found, using dummy regulator
[ 1.755976] uart1: ttyS1 at MMIO 0x2500400 (irq = 19, base_baud = 1500000) is a SUNXI
[ 1.788691] misc dump reg init
[ 1.793146] sunxi-rfkill soc@3000000:rfkill@0: module version: v1.0.9
[ 1.807441] sunxi-rfkill soc@3000000:rfkill@0: get gpio chip_en failed
[ 1.814725] sunxi-rfkill soc@3000000:rfkill@0: get gpio power_en failed
[ 1.837427] sunxi-rfkill soc@3000000:rfkill@0: wlan_busnum (1)
[ 1.843930] sunxi-rfkill soc@3000000:rfkill@0: Missing wlan_power.
[ 1.867455] sunxi-rfkill soc@3000000:rfkill@0: wlan_regon gpio=137 assert=1
[ 1.875289] sunxi-rfkill soc@3000000:rfkill@0: wlan_hostwake gpio=202 assert=1
[ 1.897461] sunxi-rfkill soc@3000000:rfkill@0: wakeup source is enabled
[ 1.917500] sunxi-rfkill soc@3000000:rfkill@0: Missing bt_power.
[ 1.924244] sunxi-rfkill soc@3000000:rfkill@0: bt_rst gpio=133 assert=0
[ 1.948147] [ADDR_MGT] addr_mgt_probe: module version: v1.0.11
[ 1.955842] [ADDR_MGT] addr_mgt_probe: success.
[ 1.968714] spi-nor spi0.0: w25q128 (16384 Kbytes)
[ 1.989470] 7 sunxipart partitions found on MTD device spi0.0
[ 1.995872] Creating 7 MTD partitions on "spi0.0":
[ 2.017433] 0x000000000000-0x000000180000 : "uboot"

这里就结束了,但是以前我开发的时候uboot也提示LCD open finish并且选择了和内核不符的驱动,内核阶段依然能启动,我也不知道为什么

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn


东莞哇酷科技有限公司开发