mtk 6580平台uboot logo与kernel logo绘制

本文详细解析了MTK平台下预加载器(preloader)、LK(Low Level Kernel)及Kernel启动流程,重点介绍了ubootlogo与kernellogo的绘制过程。通过分析lk和kernel的启动,展示了logo资源如何被编译并显示,以及如何通过修改索引实现多logo的切换。

要了解uboot logo与kernel logo的绘制,先了解lk和kernel的启动。要了解系统的启动步骤,最好的方式就打印uart log。

在启动uboot之前,我们先了解下preloader的启动。

大家可以看这篇文章《mtk preloader流程简介》https://blog.youkuaiyun.com/MrDongShiYi/article/details/85243751?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.compare&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.compare

这里简单说一下,

preloader流程简介

1、启动流程 (1)设备上电起来后,跳转到Boot ROM(不是flash)中的bootcode中执行把pre-loader加载起到ISRAM, 因为当前DRAM(RAM分SRAM跟DRAM,简单来说SRAM就是cache,DRAM就是普通内存)还没有准备好,所以要先把pre-loaderload到芯片内部的ISRAM(Internal SRAM)中。

(2)preloder的主要工作是初始化环境,包括c环境,timer,gpio,pmic,uart,i2c等以及装载LK镜像至DRAM中。

(3)如果实现了ATF,prelo

<think>嗯,用户的问题是关于MT6835开机不显示uboot logokernel logo的解决方案。用户提供了几个引用资料,我需要仔细分析这些信息并结合MTK平台通用调试方法给出解决方案。 用户给出的引用[1]和[2]详细说明了Android开机logo的显示机制,分为uboot logokernel logo两个阶段。引用[3]提到了修改uboot logo的具体代码位置,引用[4]则描述了preloader加载uboot的流程。这些信息都很关键。 从技术角度看,开机logo不显示可能有几个关键原因:首先是图片文件本身的问题,比如格式或路径错误;其次是显示驱动初始化失败;还有可能是显示时序配置不当。用户特别提到MT6835平台,这个平台和之前引用的MT6765/MT6763应该有很多相似之处。 我注意到引用[2]中提到的代码位置很有参考价值,虽然路径是mt6765,但MT6835的代码结构应该类似。特别是cust_display.h这个配置文件很重要,它决定了uboot阶段是否开启logo显示功能。另外mt_logo.c这个文件负责实际加载图片,需要重点检查。 考虑到用户可能正在做底层开发,我会提供具体的代码检查点和调试步骤。比如建议用户先确认CFG_ENABLE_LOGO宏是否开启,再检查图片资源是否编译进镜像。还会提醒时序参数的重要性,因为即使图片加载成功,如果刷新率或分辨率设置错误,屏幕也可能无显示。 用户没有说明具体开发阶段,但既然是调试开机logo,应该是系统工程师或驱动开发人员。因此回复要包含技术细节,比如如何dump内存验证图片加载、如何检查framebuffer初始化状态等。同时要注意避免太专业的术语,毕竟用户可能正在焦头烂额地调试。 最后要给出清晰的排查步骤:从配置开关检查开始,到图片格式验证,再到驱动初始化状态确认,最后是时序参数调试。这样用户就能按顺序排查问题。另外补充常见陷阱,比如忘记make clean导致旧图片残留,这个细节很容易被忽略。 </think>针对MT6835开机不显示uboot logokernel logo的问题,综合引用资料和MTK平台通用调试方法,解决方案如下: --- ### **核心排查步骤** #### 1. **确认LOGO配置开关** - 检查`ProjectConfig.mk`中的关键配置项: ```makefile MTK_BOOTLOGO_SUPPORT = yes # 必须开启 CFG_ENABLE_LOGO = 1 # uboot显示开关 ``` - 验证`cust_display.h`是否启用LOGO支持: ```c #define CFG_ENABLE_LOGO 1 // 确保定义为1 ``` *引用位置MT6765类似(见引用[2])* #### 2. **验证图片资源状态** - **路径检查** 确认LOGO图片路径正确(通常位于`vendor/mediatek/proprietary/bootable/bootloader/lk/dev/logo`) - **格式要求** 图片必须为 **未压缩的RGB565位图**(`.bmp`),分辨率需屏参一致 - **编译验证** 检查编译日志,确认LOGO图片被正确打包进`boot.img`: ```bash pack_bootimages: LOGO binary found at vendor/.../logo.bin ``` #### 3. **驱动初始化诊断** - 在`mt_logo.c`**添加调试日志**,确认代码执行流程: ```c void display_logo() { printf("[LOGO] Enter display_logo\n"); // 添加日志 ... if (logo_load_success) printf("[LOGO] Image loaded at 0x%x\n", fb_addr); else printf("[LOGO] Load failed!\n"); // 失败定位 } ``` - 检查`platform.c`中**显示驱动初始化**: ```c void platform_init(void) { ... display_init(); // 必须调用 } ``` #### 4. **时序参数校准** - 在`cust_display.h`检查**屏幕时序参数**是否硬件匹配: ```c #define FRAME_WIDTH 1080 // 实际屏幕宽度 #define FRAME_HEIGHT 2400 // 实际屏幕高度 #define VSYNC_WIDTH 10 // 同步信号脉宽 ``` *参数错误会导致信号无法输出(引用[2]时序配置)* #### 5. **硬件级排查** - **背光控制**:测量背光电路电压,确认PWM信号是否使能 - **信号探测**:用示波器检查MIPI-DSI时钟信号,确认数据传输 - **替换测试**:尝试显示纯色块(非LOGO图片)验证硬件通路: ```c fill_screen(0xFFFF); // 填充白色测试 ``` --- ### **常见问题根源** 1. **图片格式错误** - 使用Photoshop另存为时勾选`16位RGB565`,禁用Alpha通道 2. **屏参配置冲突** - 核对`cust_display.h`LCM规格书(重点检查`lcm_params`) 3. **内存地址越界** - 确认LOGO加载地址在FB分配范围内(`mt_logo.h`中`FB_START_ADDR`) 4. **编译版本残留** - 执行`make clean`后重新编译,避免旧配置干扰 > **调试建议**:通过串口日志观察启动流程,若出现`[LOGO] Enter display_logo`但无后续输出,重点检查图片加载函数;若函数未进入,则排查初始化流程是否被跳过。 --- ### **进阶排查工具** | 方法 | 命令/操作 | 作用 | |-----------------------|-----------------------------|--------------------------| | **LK阶段日志** | `dmesg | grep "display"` | 过滤显示初始化日志 | | **内存地址dump** | `adb shell dd if=/proc/fb` | 导出帧缓存分析内容 | | **LK调试模式** | 修改Makefile添加`-g`编译选项 | 允许JTAG单步调试 | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值