当前位置: 首页 > news >正文

【Linux入坑(一)—全志T133开发板适配欣瑞达LVDS 7寸(800*480)屏幕】

文章目录

  • 前言
  • 一、修改dts参数
  • 二、修改boot显示参数
    • 1.进入boot显示界面
    • 2.打开display_menu.c
  • 三、编译
  • 遇到的问题


前言

前期准备:
1、解压完成飞凌的对应linux系统文件和虚拟机环境。
2、连接好屏幕硬件连接线
3、屏幕手册(关键)


一、修改dts参数

1、进入屏幕对应的修改文件夹

cd /home/forlinx/senye/01_source/ok113i/OK113i-linux-sdk/kernel/linux-5.4/arch/arm/boot/dts

在这里插入图片描述
2、查找文件OK113I-C-Linux.dts
在这里插入图片描述
3、修改对应的分辨率和参数,我的是lvds的显示方式,原本驱动中有对应的lvds(1280*800)的屏,可以直接在上面根据自己的屏幕参数修改,修改的屏幕参数根据屏幕手册来计算
在这里插入图片描述

#elif (DISP_TYPE == 5)
// lvds 1280x800
&lcd0 {lcd_used            = <1>;status              = "okay";lcd_driver_name     = "default_lcd";lcd_backlight       = <150>;//150lcd_if              = <3>;// lcd_x             = <1280>;// lcd_y             = <800>;lcd_x               = <800>;lcd_y               = <480>;lcd_width           = <155>;lcd_height          = <85>;lcd_dclk_freq       = <34>;//71lcd_lvds_colordepth = <0>;lcd_lvds_mode       = <1>;lcd_pwm_used        = <1>;lcd_pwm_ch          = <3>;lcd_pwm_freq        = <20000>;//20000lcd_pwm_pol         = <1>;lcd_pwm_max_limit   = <255>;//HBP 46//HSW 1-40//HFP 210//VSW 1-20//VBP 23//VFP 22lcd_hbp             = <66>;//66				   // 对应屏厂HBP+HSW//lcd_ht            = <1056>;//HSD period time // 对应屏厂Width + HSW + HBP + HFPlcd_ht              = <1076>;//HSD period time // 对应屏厂Width(800) + HSW + HBP(46) + HFP(210)lcd_hspw            = <20>;//20HSD Puls Width  // 对应屏厂HSWlcd_vbp             = <33>;//17   	     // 对应屏厂VBP+VSWlcd_vt              = <535>;//VSD period time  // 对应屏厂Height(480) + VSW + VBP(23) + VFP(22)lcd_vspw            = <10>;//VSD pulse width   // 对应屏厂VSWlcd_frm             = <1>;		// 1:rgb666lcd_bl_en = <&pio PB 1 GPIO_ACTIVE_HIGH>;
};

二、修改boot显示参数

1.进入boot显示界面

cd brandy/brandy-2.0/u-boot-2018/drivers/video/sunxi/bootGUI

2.打开display_menu.c

修改对应函数参数

void  bootup_menu_setprop_by_lcd_lvds_1280_800(int kernel)
{int offset_node = 0;unsigned int phandle0 = 0;unsigned int phandle1 = 0;unsigned long buffer = env_get_ulong("board", 10, 0);bootup_hal_save_lcd_to_kernel("lcd_used", FDT_UINT_VALUE, 1, NULL);bootup_hal_save_lcd_to_kernel("lcd_if", FDT_UINT_VALUE, 3, NULL);bootup_hal_save_lcd_to_kernel("lcd_driver_name", FDT_STRING_VALUE, 0, "default_lcd");bootup_hal_save_lcd_to_kernel("lcd_x", FDT_UINT_VALUE, 800, NULL);// bootup_hal_save_lcd_to_kernel("lcd_x", FDT_UINT_VALUE, 1280, NULL);bootup_hal_save_lcd_to_kernel("lcd_y", FDT_UINT_VALUE, 480, NULL);// bootup_hal_save_lcd_to_kernel("lcd_y", FDT_UINT_VALUE, 800, NULL);//bootup_hal_save_lcd_to_kernel("lcd_width", FDT_UINT_VALUE, 210, NULL);// bootup_hal_save_lcd_to_kernel("lcd_height", FDT_UINT_VALUE, 135, NULL);// bootup_hal_save_lcd_to_kernel("lcd_dclk_freq", FDT_UINT_VALUE, 71, NULL);#if 0bootup_hal_save_lcd_to_kernel("lcd_hbp", FDT_UINT_VALUE, 20, NULL);bootup_hal_save_lcd_to_kernel("lcd_ht", FDT_UINT_VALUE, 1440, NULL);bootup_hal_save_lcd_to_kernel("lcd_hspw", FDT_UINT_VALUE, 10, NULL);bootup_hal_save_lcd_to_kernel("lcd_vbp", FDT_UINT_VALUE, 17, NULL);bootup_hal_save_lcd_to_kernel("lcd_vt", FDT_UINT_VALUE, 823, NULL);bootup_hal_save_lcd_to_kernel("lcd_vspw", FDT_UINT_VALUE, 10, NULL);#endifbootup_hal_save_lcd_to_kernel("lcd_width", FDT_UINT_VALUE, 154, NULL);bootup_hal_save_lcd_to_kernel("lcd_height", FDT_UINT_VALUE, 86, NULL);bootup_hal_save_lcd_to_kernel("lcd_dclk_freq", FDT_UINT_VALUE, 34, NULL);bootup_hal_save_lcd_to_kernel("lcd_hbp", FDT_UINT_VALUE, 66, NULL);bootup_hal_save_lcd_to_kernel("lcd_ht", FDT_UINT_VALUE, 1076, NULL);bootup_hal_save_lcd_to_kernel("lcd_hspw", FDT_UINT_VALUE, 20, NULL);bootup_hal_save_lcd_to_kernel("lcd_vbp", FDT_UINT_VALUE, 33, NULL);bootup_hal_save_lcd_to_kernel("lcd_vt", FDT_UINT_VALUE, 535, NULL);bootup_hal_save_lcd_to_kernel("lcd_vspw", FDT_UINT_VALUE, 10, NULL);bootup_hal_save_lcd_to_kernel("lcd_lvds_if", FDT_UINT_VALUE, 0, NULL);bootup_hal_save_lcd_to_kernel("lcd_lvds_colordepth", FDT_UINT_VALUE, 0, NULL);//bootup_hal_save_lcd_to_kernel("lcd_lvds_mode", FDT_UINT_VALUE, 0, NULL);bootup_hal_save_lcd_to_kernel("lcd_lvds_mode", FDT_UINT_VALUE, 1, NULL);bootup_hal_save_lcd_to_kernel("lcd_hv_clk_phase", FDT_UINT_VALUE, 0, NULL);bootup_hal_save_lcd_to_kernel("lcd_hv_sync_polarity", FDT_UINT_VALUE, 0, NULL);bootup_hal_save_lcd_to_kernel("lcd_frm", FDT_UINT_VALUE, 1, NULL);bootup_hal_del_lcd_to_kernel("lcd_io_phase");bootup_hal_del_lcd_to_kernel("lcd_dsi_lane");bootup_hal_del_lcd_to_kernel("lcd_dsi_if");bootup_hal_del_lcd_to_kernel("lcd_dsi_format");if (kernel) {offset_node = fdt_path_offset(working_fdt, KERNEL_OFFSET_NAME"lvds0@0");assert(offset_node >= 0);fdt_getprop_u32(working_fdt, offset_node, "phandle", &phandle0);offset_node = fdt_path_offset(working_fdt, KERNEL_OFFSET_NAME"lvds0@1");assert(offset_node >= 0);fdt_getprop_u32(working_fdt, offset_node, "phandle", &phandle1);} else {offset_node = fdt_path_offset(working_fdt, UBOOT_OFFSET_NAME"lvds0@0");assert(offset_node >= 0);fdt_getprop_u32(working_fdt, offset_node, "phandle", &phandle0);offset_node = fdt_path_offset(working_fdt, UBOOT_OFFSET_NAME"lvds0@1");assert(offset_node >= 0);fdt_getprop_u32(working_fdt, offset_node, "phandle", &phandle1);}bootup_hal_save_lcd_to_kernel("pinctrl-0", FDT_UINT_VALUE, phandle0, NULL);bootup_hal_save_lcd_to_kernel("pinctrl-1", FDT_UINT_VALUE, phandle1, NULL);if (kernel) {if(buffer == 1)offset_node = fdt_path_offset(working_fdt, "/soc@3000000/twi@2502c00/gt928@14");else if(buffer == 2)offset_node = fdt_path_offset(working_fdt, "/soc@3000000/twi@2502000/gt928@14");assert(offset_node >= 0);fdt_delprop(working_fdt, offset_node, "status");fdt_setprop_string(working_fdt, offset_node, "status", "okay");if(buffer == 1)offset_node = fdt_path_offset(working_fdt, "/soc@3000000/twi@2502c00/gt911@14");else if(buffer == 2)offset_node = fdt_path_offset(working_fdt, "/soc@3000000/twi@2502000/gt911@14");assert(offset_node >= 0);fdt_delprop(working_fdt, offset_node, "status");fdt_setprop_string(working_fdt, offset_node, "status", "disabled");if(buffer == 1)offset_node = fdt_path_offset(working_fdt, "/soc@3000000/twi@2502c00/ft5x06@38");else if(buffer == 2)offset_node = fdt_path_offset(working_fdt, "/soc@3000000/twi@2502000/ft5x06@38");assert(offset_node >= 0);fdt_delprop(working_fdt, offset_node, "status");fdt_setprop_string(working_fdt, offset_node, "status", "disabled");}//bootup_setprop_by_lcd_disp_type(1280, 800);bootup_setprop_by_lcd_disp_type(800,480);
}

三、编译

//编译配置,选择显示方式为lvds1280800,实际内容已经修改为800480

./build.sh config

在这里插入图片描述
//全部编译

./build.sh

//打包

./build.sh pack

烧写界面完成后
在这里插入图片描述


遇到的问题

1、修改OK113I-C-Linux.dts分辨率,没有修改display_menu.c分辨率
启动后黑屏

2、修改完成OK113I-C-Linux.dts分辨率和display_menu.c分辨率。但是没有适配显示屏参数,显示屏出现分辨率正确,但是屏幕缺色
在这里插入图片描述
3、修改完成OK113I-C-Linux.dts分辨率和display_menu.c分辨率。同时适配完OK113I-C-Linux.dts屏幕参数(即使屏幕参数是对的),display_menu.c参数没有修改。也会出现下面现象
在这里插入图片描述
使用调试指令测试正常,但是显示不正常
//花屏测试(正常)

cat /dev/urandom > /dev/fb0

colorbar测试:

cat /dev/zero > /dev/fb0
echo 8 > /sys/class/disp/disp/attr/colorba

在这里插入图片描述

4、只有修改了display_menu.c分辨率和屏幕参数才能显示正常。关键还是在display_menu.c修改

http://www.lryc.cn/news/603299.html

相关文章:

  • 函数对象 vs 函数指针 vs lambda:该用哪个才高效?
  • python学习DAY26打卡
  • Java高级技术知识点
  • GitLab的安装及使用
  • 路由器路由协议详解:从 RIP 到 OSPF 的技术演进
  • 理解Transformer解码器
  • 【术语扫盲】MCU与MPU
  • 《HCIA-Datacom 认证》希赛三色笔记:Vlan间三层通信过程解析
  • 高级08-Java JVM调优:优化你的Java应用
  • 面向对象系统的单元测试层次
  • 医疗AI新基建:MCP与A2A协议的破局与前瞻
  • MySQL——MVCC
  • Django自带的加密算法
  • 汇总10个高质量免费AI生成论文网站,支持GPT4.0和DeepSeek-R1
  • 云端文档管理新纪元:Paperless-ngx与cpolar打造的无边界文件生态
  • PHP性能优化与高并发处理:从基础到高级实践
  • 深入理解Java Map的entrySet()方法
  • VLA--Gemini Robotics On-Device: 将AI带到本地机器人设备上
  • 在WSL中配置VS Code C++开发环境完整教程
  • LeetCode 1616.分割两个字符串得到回文串
  • 【21】C# 窗体应用WinForm ——图片框PictureBox属性、方法、实例应用
  • 【MySQL学习|黑马笔记|Day2】SQL|DML、DGL、DCL,函数,约束
  • redis得到shell的几种方法
  • 搭建专属AI聊天网站:NextChat + 蓝耘MaaS平台完整部署指南
  • 《C++初阶之STL》【list容器:详解 + 实现】
  • 夯实家庭基石本质上是一场“缓慢的革命”
  • 【Redis实现基础的分布式锁及Lua脚本说明】
  • 使用 Canvas 替代 <video> 标签加载并渲染视频
  • 【深度学习】独热编码(One-Hot Encoding)
  • 怎么提升服务器的防攻击能力!