v3s点RGB屏 40pin 800x480,不一样的点屏,不通过chosen。

一、背景、目的、简介。

一般来说,通过uboot将屏幕参数传给kernel,是通过修改设备树。

uboot和kernel都需要屏幕点亮。uboot侧重于显示一张图片。而kernel则多是动画。

在这里,我先是找到了一个裸机点屏的代码。将其编译成静态库后,给uboot来调用。而不是通过荔枝派已经适配好了的uboot。

这样做,只需要将uboot初始化好了的内存地址传给内核就好了,当然还包括屏幕大小等信息,因为已经提前知道,所以在内核中写死了。然后利于simple-framebuffer,将内容映射为屏幕。然后有了fb0,就可以骚操作了。

二、问题:

但是在实际操作过程中遇到了些问题。比如说将内存地址传给kernel后,内核需要将该物理地址转为虚拟地址。使用ioremap后,不能功,会出错,但还是会显示注册framebuffer成功。

以及成功后,有显示fb0,但是屏幕上有条纹,明显不是fb所指内存中的内容。如果正常的话,uboot已经配置了tcon,tcon将fb里面的数据(先经过了de和mixer处理),自动发送到屏幕上。应该看到random的内容,这内容应该是.text或是全黑屏。但是,实际上是uboot显示的内容会慢慢消失。猜测是tcon被关闭了。

三、解决:

为什么uboot传参后的屏幕显示正常呢?为什么我修改simplefb_probe后,kernel起动时报错?下面的内容全部在/drivers/video/fbdev/simplefb.c中进行。

其实需要修改的不是simplefb_probe这个函数,而是simplefb_parse_dt,这个函数。

99行 simplefb_parse_dt修改为:

static int simplefb_parse_dt(struct platform_device *pdev,struct simplefb_params *params)
{struct device_node *np = pdev->dev.of_node;int ret;const char *format;int i;//ret = of_property_read_u32(np, "width", &params->width);ret = 0;params->width	= 800;if (ret) {dev_err(&pdev->dev, "Can't parse width property\n");return ret;}//ret = of_property_read_u32(np, "height", &params->height);ret	= 0;params->height	= 480;if (ret) {dev_err(&pdev->dev, "Can't parse height property\n");return ret;}//ret = of_property_read_u32(np, "stride", &params->stride);ret	= 0;params->stride	= 3200;if (ret) {dev_err(&pdev->dev, "Can't parse stride property\n");return ret;}//ret = of_property_read_string(np, "format", &format);ret	= 0;if (ret) {dev_err(&pdev->dev, "Can't parse format property\n");return ret;}params->format = NULL;for (i = 0; i < ARRAY_SIZE(simplefb_formats); i++) {//if (strcmp(format, simplefb_formats[i].name))if (strcmp("x8r8g8b8", simplefb_formats[i].name))continue;params->format = &simplefb_formats[i];break;}if (!params->format) {dev_err(&pdev->dev, "Invalid format value\n");return -EINVAL;}return 0;
}

还需要修改设备树:

通过网盘分享的文件:v3s_mini_dts.tar
链接: https://pan.baidu.com/s/1gJZEUVp4DVJMtSWjHNpzpA?pwd=wqvc 提取码: wqvc 
--来自百度网盘超级会员v3的分享

/{panel: panel {#address-cells = <1>;#size-cells = <0>;compatible = "urt,umsh-8596md-t", "simple-panel";port@0 {reg = <0>;//backlight = <&backlight>;#address-cells = <1>;#size-cells = <0>;panel_input: endpoint@0 {reg = <0>;remote-endpoint = <&tcon0_out_lcd>;};};};
}&tcon0_out {tcon0_out_lcd: endpoint@0 {reg = <0>;remote-endpoint = <&panel_input>;};
};chosen {#address-cells = <1>;#size-cells = <1>;ranges;simplefb_lcd: framebuffer@0 {compatible = "allwinner,simple-framebuffer","simple-framebuffer";allwinner,pipeline = "de0-lcd0";clocks = <&ccu CLK_BUS_TCON0>, <&display_clocks 0>,<&display_clocks 6>, <&ccu CLK_TCON0>;status = "disabled";};};

四、其它问题

还遇到过什么问题吧,比如,使用mplayer播放视频,但是只显示第一帧,然后报错,说无法得到第2个缓存。这个问题是,只使用了 compatible = "urt,umsh-8596md-t", "simple-panel";这是一个drm,但是simple-framebuffer没有配置好,不能用导致。将simple-framebuffer配置好就可以了。

五、uboot传参,对kernel设备树还是有影响的:

比如我将fdt_simplefb里的设置修改,本来显示设备是在chosen里的,但是被我改成了在/节点下。

那么问题又来了,framebuffer的地址也是uboot传入的,修改其值,会有影响吗?

经过测试,@其它数值,没有什么变化。

六、实物实拍:

好想做个小电视呀,微缩模型放城堡里..._哔哩哔哩_bilibili

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

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

相关文章

密码学期末考试笔记

文章目录 公钥加密之前的部分 (非重点&#xff0c;关注工具怎么用&#xff0c;和性质)一、对称加密 (symmetric ciphers)1. 定义 二、PRG (伪随机数生成器)1. 定义2. 属性 三、语义安全 (Semantic Security)1. one-time key2. 流密码是语义安全的 四、分组密码 (Block Cipher)1…

用 gdbserver 调试 arm-linux 上的 AWTK 应用程序

很多嵌入式 linux 开发者都能熟练的使用 gdb/lldb 调试应用程序&#xff0c;但是还有不少朋友在调试开发板上的程序时&#xff0c;仍然在使用原始的 printf。本文介绍一下使用 gdbserver 通过网络调试开发板上的 AWTK 应用程序的方法&#xff0c;供有需要的朋友参考。 1. 下载 …

四种自动化测试模型实例及优缺点详解

一、线性测试 1.概念&#xff1a; 通过录制或编写对应应用程序的操作步骤产生的线性脚本。单纯的来模拟用户完整的操作场景。 &#xff08;操作&#xff0c;重复操作&#xff0c;数据&#xff09;都混合在一起。 2.优点&#xff1a; 每个脚本相对独立&#xff0c;且不产生…

【JetPack】Navigation知识点总结

Navigation的主要元素&#xff1a; 1、Navigation Graph&#xff1a; 一种新的XML资源文件,包含应用程序所有的页面&#xff0c;以及页面间的关系。 <?xml version"1.0" encoding"utf-8"?> <navigation xmlns:android"http://schemas.a…

链表的详解

1.单链表 1.1概念与结构 概念&#xff1a;链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 现实中数据结构&#xff1a; 1.1.1结点 与顺序表不同的是&#xff0c;链表里的每节“车厢 ”都是独立申请下…

项目实战——高并发内存池

一.项目介绍 本项目——高并发内存池&#xff0c;是通过学习并模仿简化 google 的一个开源项目 tcmalloc &#xff0c;全称 Thread-Caching Malloc&#xff0c;即线程缓存的malloc&#xff0c;模拟实现了一个自己的高并发内存池&#xff0c;用于高效的多线程内存管理&#xff…

【魅力golang】之-通道

昨天发布了golang的最大特色之一--协程&#xff0c;与协程密不可分的是通道&#xff08;channel&#xff09;&#xff0c;用来充当协程间相互通信的角色。通道是一种内置的数据结构&#xff0c;所以才造就了golang强大的并发能力。今天风云来爬一爬通道的详细用法。 通道在gol…

【论文复现】农作物病害分类(Web端实现)

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀ 农作物病害分类 概述演示效果核心逻辑使用方式部署方式 概述 农作物病害是国家粮食安全的一个主要威胁&#xff0c;是决定农作物产量和质量的…

Linux网络——网络基础

Linux网络——网络基础 文章目录 Linux网络——网络基础一、计算机网络的发展背景1、网络的定义&#xff08;1&#xff09; 独立模式&#xff08;2&#xff09;网络互联 2、局域网 LAN3、广域网 WAN4、比较局域网和广域网5、扩展 —— 域域网和互联网 二、协议1、协议的概念2、…

Reactor

文章目录 正确的理解发送double free问题 1.把我们的reactor进行拆分2.链接管理3.Reactor的理论 listensock只需要设置_recv_cb&#xff0c;而其他sock&#xff0c;读&#xff0c;写&#xff0c;异常 所以今天写nullptr其实就不太对&#xff0c;添加为空就没办法去响应事件 获…

Linux -- 线程的优点、pthread 线程库

目录 线程的优点 pthread 线程库 前言 认识线程库 简单验证线程的独立栈空间 线程的优点 与进程之间的切换相比&#xff0c;线程之间的切换需要操作系统做的工作要少得多。 调度进程时&#xff0c;CPU 中有一个 cache&#xff08;缓存&#xff0c;提高运行效率&#xff0…

centos权限大集合,覆盖多种权限类型,解惑权限后有“. + t s”问题!

在 CentOS 系统中&#xff0c;权限管理是操作系统的核心功能之一&#xff0c;确保不同用户和进程对文件、目录以及设备的访问被合理控制。 权限系统主要包括传统的 Unix 权限模型、特殊权限&#xff08;SetUID、SetGID、Sticky 位&#xff09;和更精细的访问控制列表&#xff…

pyinstaller打包资源文件和ini配置文件怎么放

1.如果出现无法成功完成操作&#xff0c;因为文件包含病毒或潜在的垃圾软件&#xff0c;说明你的版本太高&#xff0c;更换pyinstaller版本。 pip install pyinstaller6.2.02.一开始打包的时windows下尽量选择打成文件夹的并且要是带命令行窗口的&#xff0c;容易查看错误。 …

五种msvcr100.dll丢失的解决方法,有效修复msvcr100.dll丢失错误!跟msvcr100.dll错误问题说拜拜!

在日常电脑使用过程中&#xff0c;尤其是运行某些应用程序或游戏时&#xff0c;可能会遇到“msvcr100.dll丢失”的错误提示。这个动态链接库&#xff08;DLL&#xff09;文件是Microsoft Visual C Redistributable for Visual Studio 2010的一部分&#xff0c;对于许多程序的正…

【前端】入门指南:Vue中使用Node.js进行数据库CRUD操作的详细步骤

&#x1f4a5; 欢迎来到我的博客&#xff01;很高兴能在这里与您相遇&#xff01; 首页&#xff1a;GPT-千鑫 – 热爱AI、热爱Python的天选打工人&#xff0c;活到老学到老&#xff01;&#xff01;&#xff01;导航 - 人工智能系列&#xff1a;包含 OpenAI API Key教程, 50个…

【网络安全产品大调研系列】1. 漏洞扫描

1. 为什么会出现漏扫技术&#xff1f; 每次黑客攻击事件进行追溯的时候&#xff0c;根据日志分析后&#xff0c;我们往往发现基本都是系统、Web、 弱口令、配置这四个方面中的其中一个出现的安全问题导致黑客可以轻松入侵的。 操作系统的版本滞后&#xff0c;没有更新补丁&am…

Java爬虫:速卖通(AliExpress)商品评论获取指南

引言 在当今的电商时代&#xff0c;商品评论对于消费者决策有着举足轻重的影响。速卖通&#xff08;AliExpress&#xff09;&#xff0c;作为全球知名的在线零售平台之一&#xff0c;拥有海量的商品评论数据。对于商家而言&#xff0c;能够高效地获取这些评论数据&#xff0c;…

AIDD - 探索语言模型在药物分子生成方面的应用

AIDD - 探索语言模型在药物分子生成方面的应用 今天给大家讲一篇2024年10月在nature communications上发表的一篇关于分子生成的文章。现有的分子生成方法中往往只关注药物的特定属性&#xff0c;导致其适用性受限。因此作者提出了TamGen方法&#xff0c;用于针对特定靶点的分子…

【每日学点鸿蒙知识】AVCodec、SmartPerf工具、web组件加载、监听键盘的显示隐藏、Asset Store Kit

1、AVCodec 硬解咨询&#xff1f; 在做视频播放硬解适配&#xff0c;这是 demo&#xff1a;https://gitee.com/openharmony-sig/ohos_videocompressor/blob/master/videoCompressor/src/main/cpp/video/decoder/VideoDec.cpp 请问&#xff1a; int32_t VideoDec::SetOutputS…

怎么设置电脑密码?Windows和Mac设置密码的方法

为电脑设置密码是保护个人信息安全的重要措施。无论是Windows系统还是MacOS系统&#xff0c;设置密码的步骤都相对简单&#xff0c;但需要根据不同的操作系统选择不同的方法。 一、Windows系统电脑密码设置 方法一&#xff1a;通过控制面板设置账户密码 点击桌面左下角的“开…