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", ¶ms->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", ¶ms->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", ¶ms->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

相关文章:
v3s点RGB屏 40pin 800x480,不一样的点屏,不通过chosen。
一、背景、目的、简介。 一般来说,通过uboot将屏幕参数传给kernel,是通过修改设备树。 uboot和kernel都需要屏幕点亮。uboot侧重于显示一张图片。而kernel则多是动画。 在这里,我先是找到了一个裸机点屏的代码。将其编译成静态库后&#x…...
某科技局国产服务器PVE虚拟化技术文档
环境介绍 硬件配置 服务器品牌:黄河 型号:Huanghe 2280 V2 Cpu型号:kunpeng-920 磁盘信息 :480SSD * 2 ,4T*4 网卡:板载四口千兆 如下表 四台服务器同等型号配置,均做单节点虚拟化,数据保护采用底层r…...
中科岩创边坡自动化监测解决方案
行业现状 由于边坡不稳定性因素,可能会造成斜坡上的岩土体沿着某个面不均匀向下向外滑动,形成滑坡;陡峭山坡上岩土体在重力作用下,发生陡然倾落运动,造成崩塌;在沟谷或山坡上产生的夹带大量泥沙、石块等固体…...
GPT-O3:简单介绍
GPT-O3:人工智能领域的重大突破 近日,OpenAI发布了其最新的AI模型GPT-O3,这一模型在AGI评估中取得了惊人的成绩,展现出强大的能力和潜力。GPT-O3的出现标志着人工智能领域的重大进步,预计将在2025年实现更大的突破。 …...
cudnn版本gpu架构
nvcc --help 可以看 --gpu-architecture 写到的支持的架构 NVIDIA 的 GPU 架构是按代次发布的,以下是这些架构的对应说明: NVIDIA Hopper: 这是 NVIDIA 于 2022 年推出的架构之一,面向高性能计算(HPC)和人工智能&…...
数据库安全-redisCouchdb
1.redis未授权访问 默认端口:6379 1.1 Redis沙盒逃逸漏洞RCE-CVE-2022-0543 介绍:Redis 是一套开源的使用 ANSI C编写、支持网络、可基于内存亦可持久化的日志型、键值存储数据库,并提供多种语言的API。Redis 如果在没有开启认证的情况下,…...
ubuntu22.04安装PaddleX3
PaddleOCR 安装过程可以参考PaddleX本地安装教程 我的电脑环境配置: ubuntu22.04 cuda11.8(之前安装的是12.4没有匹配的paddle-gpu;这里改成11.8) 一、安装基础环境 1、 conda create -n ppx1 python3.10 2、 conda activate ppx1 3、…...
Flutter 实现全局悬浮按钮学习
Flutter 代码如何实现了一个全局悬浮按钮,当点击按钮时,会显示一个可以拖动并且通过长按可以移除的悬浮控件。 前置知识点学习 Offset Offset 是 Flutter 中的一个类,用于表示二维平面中的位置或位移。它通常用于描述坐标系中的一个点&…...
14-C语言多文件编程
一、各种变量 在学习多文件编程之前,先要了解清楚各种变量的作用范围以及生命周期。 1.普通变量 1.1普通局部变量 定义形式:在复合语句{}里面定义的变量为普通局部变量;作用范围:在复合语句{}里面有效;生命周期&am…...
基于Springboot的在线问卷调查系统【附源码】
基于Springboot的在线问卷调查系统 效果如下: 系统主页面 问卷列表页面 个人中心页面 系统登陆页面 管理员主页面 问卷管理页面 研究背景 随着互联网技术的飞速发展,传统的问卷调查方式因其时间和地点的限制,难以高效地收集到足够的数据。…...
Redis热点数据管理全解析:从MySQL同步到高效缓存的完整解决方案
1. 引言 1.1 背景介绍:MySQL与Redis在高性能场景下的结合 在现代互联网应用中,MySQL作为关系型数据库,承担了大量业务数据的存储任务。然而,随着业务的增长,海量数据的查询性能成为一个瓶颈。为了应对高并发和低延迟…...
【图书介绍】】几本Linux C\C++编程图书
Linux C\C编程,是IT领域比较稳定的职业发展方向,本文介绍几本Linux开发方面的图书。 《Linux C与C一线开发实践(第2版)》 《Linux C与C一线开发实践(第2版)(Linux技术丛书)》(朱文…...
MFC/C++学习系列之简单记录7
MFC/C学习系列之简单记录7 前言句柄的介绍句柄的使用AFX开头的函数都是干什么用的?总结 前言 在MFC的使用中发现了句柄,今天来详细学习一下MFC中如何使用句柄吧! 句柄的介绍 句柄的使用是资源管理和传递的关键机制,通过句柄将系…...
使用GPT进行SCI论文润色常用语句
声明:本文仅作为本人记录学习使用。 You are now a professional academic touch-up specialist. Please polish the English draft I am sending you next. After analyzing the paragraph, give suggestions for polishing in terms of sentence structure, gram…...
Redis密码设置与访问限制(网络安全)
现在用redis缓存热数据越来越常见了,甚至一些配置,开关等等的东西也写到redis里。原因就是redis简单高效。redis里的数据也越来越重要了,例如一些业务的中间数据会暂时存放在redis里,所以限制redis的访问还是很有必要。 本文通过…...
php的线程安全与非线程安全版本的区别
PHP的线程安全(Thread Safe,简称TS)与非线程安全(Non-Thread Safe,简称NTS)版本主要在多线程环境下的行为特性、性能、以及适用场景上存在差异。以下是两者的详细对比: 一、定义与概念 线程安…...
标贝科技受邀出席2024ADD数据应用场景大会 共议数据要素发展新契机
12月13日,由北京市通州区人民政府主办,通州区经济和信息化局、通州区台湖镇人民政府承办的2024-ADD数据应用场景大会成功举办。标贝科技作为AI数据领域代表企业受邀出席大会,与数据要素创业者、投资人一起走进通州台湖,共话数据要…...
electron-vite打包后图标不生效问题
在electron-builder.yml中,通过icon配置自己的图标,以下是正确代码 win:executableName: 名称icon: build/icon.ico nsis:artifactName: ${name}-${version}.${ext}shortcutName: ${productName}uninstallDisplayName: ${productName}createDesktopShor…...
systemverilog中的unique if
1 基本概念 在 SystemVerilog 中,unique if是一种条件判断结构。它用于检查多个互斥的条件,以确保在给定的情况下只有一个条件分支被执行。这有助于提高代码的可读性和可维护性,同时也能帮助发现潜在的逻辑错误,报错原因有以下两个…...
【MySQL篇】事务的认识以及四大特性
何为事务? 事务(Transaction)是指一组操作的集合,这些操作要么全部执行成功,要么全部不执行。事务通常用于保证数据库的一致性、完整性和可靠性,确保数据的完整性与正确性。 有效避免部分执行࿰…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
基于Java+VUE+MariaDB实现(Web)仿小米商城
仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...
