Buildroot显示kernel logo

buildroot开机时DSI屏幕变成跟uart一样输出log,现在想显示logo 

1、failed to show loader logo 

[    2.467479]  mmcblk1: p1 p2 p3 p4 p5 p6 p7 p8 p9
[    2.468827] rockchip-drm display-subsystem: can't not find any loader display
[    2.468859] rockchip-drm display-subsystem: failed to show loader logo
[    2.472110] rockchip-vop ff8f0000.vop: [drm:vop_crtc_atomic_enable] Update mode to 1024x600p75, type: 16
[    2.472439] dw-mipi-dsi ff960000.dsi: [drm:dw_mipi_dsi_encoder_enable] final DSI-Link bandwidth: 504 x 4 Mbps
[    2.474823] panel_simple_prepare p->prepared=1
[    2.474828] sn65dsi84_is_connected  sn65dsi84 connect = 0
[    2.474834] panel_simple_enable p->enabled=1

static void show_loader_logo(struct drm_device *drm_dev) 

添加打印看看情况

@@ -993,21 +993,27 @@ static void show_loader_logo(struct drm_device *drm_dev)state->acquire_ctx = mode_config->acquire_ctx;for_each_child_of_node(root, route) {
-               if (!of_device_is_available(route))
+               if (!of_device_is_available(route)) {
+                       dev_warn(drm_dev->dev, "route->name=%s not available, route->type=%s, route->full_name=%s\n", route->name, route->type, route->full_name);continue;
+               }set = of_parse_display_resource(drm_dev, route);
-               if (!set)
+               if (!set) {
+                       dev_warn(drm_dev->dev, "route->name=%s not set\n", route->name);continue;
+               }if (setup_initial_state(drm_dev, state, set)) {drm_framebuffer_put(set->fb);INIT_LIST_HEAD(&set->head);list_add_tail(&set->head, &mode_unset_list);
+                       dev_warn(drm_dev->dev, "route->name=%s add to mode_unset_list\n", route->name);continue;}INIT_LIST_HEAD(&set->head);list_add_tail(&set->head, &mode_set_list);
+               dev_warn(drm_dev->dev, "route->name=%s add to mode_set_list\n", route->name);}/*
@@ -1020,6 +1026,7 @@ static void show_loader_logo(struct drm_device *drm_dev)list_for_each_entry_safe(set, tmp_set, &mode_set_list, head) {if (set->crtc == unset->crtc) {
+                               dev_warn(drm_dev->dev, "find_used_crtc:%s\n", set->crtc->name);find_used_crtc = 1;continue;}
@@ -1031,6 +1038,7 @@ static void show_loader_logo(struct drm_device *drm_dev)struct rockchip_drm_private *priv =drm_dev->dev_private;+                       dev_warn(drm_dev->dev, "unset crtc:%s\n", crtc->name);if (unset->hdisplay && unset->vdisplay) {if (priv->crtc_funcs[pipe] &&priv->crtc_funcs[pipe]->loader_protect)

 加了打印后就有了这些输出,不过还是没看到kernel的logo,继续查找Console: switching

 2、Console: switching

[    2.443211] rockchip-drm display-subsystem: route->name=route-dsi add to mode_set_list
[    2.467159] Freeing drm_logo memory: 260K
[    2.482948] Console: switching to colour frame buffer device 128x37
[    2.497465] usb 3-1: New USB device found, idVendor=05e3, idProduct=06Populating /dev using udev: 10, bcdDevice=93.11
[    2.497480] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[    2.497492] usb 3-1: Product: USB2.1 Hub
[    2.497502] usb 3-1: Manufacturer:
[    2.502957] rockchip-drm display-subsystem: fb0:  frame buffer device

 添加dump_stack()查看调用过程

+++ b/drivers/tty/vt/vt.c
@@ -3562,6 +3562,8 @@ static int do_bind_con_driver(const struct consw *csw, int first, int last,clear_buffer_attributes(vc);}+       dump_stack();
+pr_info("Console: switching ");
[    2.452309] Freeing drm_logo memory: 260K
[    2.468135] CPU: 4 PID: 43 Comm: kworker/4:1 Not tainted 4.19.193 #17
[    2.468138] Hardware name: ASUS Tinker Board 2Populating /dev using udev: /2S (DT)
[    2.468152] Workqueue: events deferred_probe_work_func
[    2.468156] Call trace:
[    2.468163]  dump_backtrace+0x0/0x188
[    2.468167]  show_stack+0x24/0x30
[    2.468173]  dump_stack+0x8c/0xb4
[    2.468179]  do_bind_con_driver+0x140/0x2f4
[    2.468182]  do_take_over_console+0x194/0x1d8
[    2.468186]  do_fbcon_takeover+0x78/0xe0
[    2.468189]  fbcon_event_notify+0x458/0x898
[    2.468194]  notifier_call_chain+0x70/0x90
[    2.468197]  __blocking_notifier_call_chain+0x58/0x84
[    2.468201]  blocking_notifier_call_chain+0x3c/0x4c
[    2.468206]  fb_notifier_call_chain+0x30/0x3c
[    2.468209]  register_framebuffer+0x2b4/0x2ec
[    2.468214]  __drm_fb_helper_initial_config_and_unlock+0x2b8/0x360
[    2.468218]  drm_fb_helper_initial_config+0x3c/0x50
[    2.468223]  rockchip_drm_fbdev_init+0xf0/0x120
[    2.468227]  rockchip_drm_bind+0x550/0x1958
[    2.468232]  try_to_bring_up_master+0x224/0x270
[    2.468235]  component_add+0xe4/0x13c
[    2.468238]  cdn_dp_probe+0x1b0/0x1c0
[    2.468242]  platform_drv_probe+0x58/0xa4
[    2.468245]  really_probe+0x2a8/0x3a4
[    2.468248]  driver_probe_device+0x124/0x134
[    2.468251]  __device_attach_driver+0xc8/0x100
[    2.468254]  bus_for_each_drv+0xb0/0xd4
[    2.468257]  __device_attach+0xdc/0x16c
[    2.468260]  device_initial_probe+0x24/0x30
[    2.468262]  bus_probe_device+0x38/0x98
[    2.468265]  deferred_probe_work_func+0xb8/0xcc
[    2.468269]  process_one_work+0x200/0x330
[    2.468272]  worker_thread+0x258/0x2fc
[    2.468275]  kthread+0x120/0x130
[    2.468279]  ret_from_fork+0x10/0x18
[    2.468281] Console: switching to colour frame buffer device 128x37

从rockchip_drm_bind分析,刚好执行完show_loader_logo后就到rockchip_drm_fbdev_init 

 

执行到nb->notifier_call(nb, val, v);也就是fbcon_event_notify(struct notifier_block *self, unsigned long action, void *data) 

kernel/drivers/video/fbdev/core/Makefile有CONFIG_FRAMEBUFFER_CONSOLE宏用来编译fbcon.o的,直接屏蔽

@@ -796,4 +796,4 @@ CONFIG_VT=yCONFIG_DUMMY_CONSOLE=yCONFIG_DUMMY_CONSOLE_COLUMNS=80CONFIG_DUMMY_CONSOLE_ROWS=25
-CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE is not set

 3、正常显示

buildroot显示kernel logo

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/641825.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows Service 2008 r2的安装

创建虚拟机–(操作非常简单,跟着图片的数据下一步即可) 选择自己要安装的虚拟机版本 在这里可以更改虚拟机存放的位置 这里的40个G并不会马上占用,当虚拟机里的东西到40个G的大小就不会再存储东西了 选择和自己虚拟…

每日一练 | 华为认证真题练习Day169

1、使用手工链路聚合模式时,下列选项中关于加入成员接口的描述,错误的是: A. Eth-Trunk接口不能嵌套,即成员接口不能是Eth-Trunk。 B. 一个以太网接口只能加入到一个任th-Trunk接口,如果需要加入其他Eth-Trunk接口,必…

第二百八十一回

文章目录 1. 概念介绍2. 方法与细节2.1 实现方法2.2 具体细节 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何混合选择多个图片和视频文件"相关的内容,本章回中将介绍如何通过相机获取图片文件.闲话休提,让我们一起Talk Flutter吧。 1. …

内网环境pip使用代理服务器安装依赖库

目录 使用proxy参数配置pip代理 使用配置文件配置pip代理 其他 由于公司内部网络无法访问外网导致安装依赖库失败,现将安装方法如下记录。 使用proxy参数配置pip代理 如不使用离线安装方法,可利用pip的--proxy参数进行代理的配置,使用方法…

春运倒计时,AR 引领铁路运输安全新风向

根据中国交通新闻网发布最新消息,今年春运全国跨区域人员流动量预计达 90 亿人次。 随着春运期间旅客数量不断创下新高,铁路运输面临着空前的挑战与压力。 图源:pixabay 聚焦铁路运输效率与旅客安全保障问题,本期行业趋势将探讨 …

Android 基于Fragment的权限封装

文章目录 Android 基于Fragment的权限封装原理代码PermissionUtils.javaPermissionsFragment.javaPermissionHelper.javaSettingsFragment.javaActivity中使用Fragment中使用 源码 Android 基于Fragment的权限封装 原理 业内普遍比较认可使用另外一种小技巧来进行实现。是什么…

51-16 FusionAD 用于自动驾驶预测与规划任务的多模态融合论文精读

今天要分享的是基于BEV的多模态、多任务、端到端自动驾驶模型FusionAD,其专注于自动驾驶预测和规划任务。这项工作首次发表于2023年8月2日,性能超越了2023 CVPR最佳论文UniAD模型。论文题目是FusionAD: Multi-modality Fusion for Prediction and Planni…

记录一些随机约束的控制方法

文章目录 前言一、内嵌约束控制二、控制rand变量是否随机三、选择随机控制的变量四、控制约束块是否随机五、约束的嵌套控制总结 前言 在运用UVM验证过程中,经常会用到大量的随机,这个时候我们需要控制随机约束的打开或者关闭,来实现不同模式…

linux显示系统内存使用情况--free命令

free 命令是Linux系统中用于显示系统内存使用情况的一个常用工具。通过该命令,用户可以轻松了解系统的内存分配、使用情况以及性能状况。本文将深入介绍free命令的各个方面,并提供详细的示例。 安装与基本用法 通常来说,free命令已经预装在大…

汽车数据解决方案:通过更好的数据提高速度

无论您是负责数字化转型的 CIO 或 IT 团队,还是实施 IoT 和 AI 洞察的工厂经理,或者是管理复杂数据管道的 ADAS 和无人驾驶团队,我们都可以帮您在数据发展曲线上保持领先。 全球数字化浪潮下,传统汽车行业生产模式、制造模式、服…

基于Python实现人脸识别相似度对比

目录 引言背景介绍目的和意义 人脸识别的原理人脸图像获取人脸检测与定位人脸特征提取相似度计算 基于Python的人脸相似度对比实现数据集准备人脸图像预处理特征提取相似度计算 引言 背景介绍 人脸识别技术是一种通过计算机对人脸图像进行分析和处理,从而实现自动识…

2023.1.17 关于 Redis 持久化 AOF 策略详解

目录 引言 AOF 策略 实例演示一 缓冲区 重写机制 手动触发 自动触发 AOF 重写流程 实例演示二 引言 Redis 实现持久化的两大策略 RDB ——> Redis DataBase(定期备份)AOF ——> Append Only File(实时备份) 注意&…

JavaEE:多线程(2):线程状态,线程安全

目录 线程状态 线程安全 线程不安全 加锁 互斥性 可重入 死锁 死锁的解决方法 Java标准库中线程安全类 内存可见性引起的线程安全问题 等待和通知机制 线程饿死 wait notify 线程状态 就绪:线程随时可以去CPU上执行,也包含在CPU上执行的…

漏洞补丁修复之openssl版本从1.1.1q升级到1.1.1t以及python版本默认2.7.5升级到2.7.18新版本和Nginx版本升级到1.24.0

​ 一、Openssl升级 1、查看Openssl安装的版本 openssl version 2、查看Openssl路径 which openssl 3、上传openssl安装包到服务器:openssl-1.1.1t.tar.gz,并且解压,安装: mv /usr/local/openssl /usr/local/backup_openssl_1.1.1q_20240120 mkdir /usr/local/openssl tar…

强化学习:MuJoCo机器人强化学习仿真入门

声明:我们跳过mujoco环境的搭建,搭建环境不难,可自行百度 下面开始进入正题(需要有一定的python基础与xml基础): 下面进入到建立机器人模型的部分: 需要先介绍URDF模型文件和导出MJCF格式 介绍完…

K8S--安装Nginx

原文网址:K8S--安装Nginx-CSDN博客 简介 本文介绍K8S安装Nginx的方法。 1.创建Nginx目录及配置文件 mkdir -p /work/devops/k8s/app/nginx/{config,html} 在config目录下创建nginx.conf配置文件,内容如下: # events必须要有 events {wo…

PALWORLD linux centos7开服教程

开放端口8211 iptables -A INPUT -p udp -p tcp --dport 8211 -j ACCEPT iptables -A INPUT -p udp -p udp --dport 8211 -j ACCEPT yum -y install glibc.i686 libstdc.i686 screen libcurl.i686 yum install glibc-devel.i686 yum install libstdc-devel.i686 yum -y ins…

C#设计模式教程(18):中介者模式

中介者模式的定义 中介者模式(Mediator Pattern)是一种行为设计模式,它允许一组对象相互通信,而不需要知道彼此的内部结构。这样做可以降低多个对象和类之间的通信复杂性,将多对多的通信转变为一对多的通信,使得对象之间的耦合松散,并且可以更容易地独立地改变和复用这…

逆序对数量(归并排序做法)

先给出上一篇文章归并排序模板-CSDN博客里的归并排序模板&#xff1a; #include<iostream> using namespace std;const int N 100010;int n; int q[N], temp[N];void merge_sort(int q[], int l, int r) {if(l > r) return;int mid (lr) >> 1;merge_sort(q, …

【代码随想录算法训练营-第十天】【栈与队列】232.用栈实现队列,225. 用队列实现栈

写在最前面&#xff0c;目前Java已经推荐使用Deque来实现栈和队列了&#xff0c;原因&#xff1a; https://www.cnblogs.com/jiading/articles/12452830.html 232.用栈实现队列 第一遍 思路 pop&#xff1a;出栈&#xff1b;push&#xff1a;入栈&#xff1b;peek&#xff1…