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

嵌入式项目:韦东山驱动开发第六篇 项目总结——显示系统(framebuffer编程)

各位好久不见了!!!  之前那个项目更新了三篇帖子就断更了…… 实在是抱歉

主要就是我转  嵌入式Linux驱动开发方向了!!!!!

研究生阶段嘛,人在江湖身不由己,导有一个RK3588的项目需求,我成了负责人,就转方向到嵌入式了…… ,学习的过程中觉得这个方向,还可以个人觉得,是有行业壁垒的,有些东西是需要时间去沉淀的,中年危机没有软件开发那么大,再者就是机器人未来肯定会火,就像汽车一样,所以all in了这个方向, 不知道明年秋招结果怎么样,反正就是加油吧。

不过你要是现在研一,大三,你问我走什么方向,去java、java、java 至少坑位多!!!

好了回归正题吧:跟着韦老师做了他这个应用开发的项目,在这里总结一些,我在做的过程中遇到的问题吧,会发几篇帖子,供大家参考,我使用的开发板就是 正点原子的RK3588

项目源码:https://gitee.com/Mu798/project/tree/master/%E7%94%B5%E5%AD%90%E4%BA%A7%E5%93%81%E9%87%8F%E4%BA%A7%E5%B7%A5%E5%85%B7

今天就针对显示系统部分总结一下吧:

具体软件架构我就不说了,韦老师课上已经讲的很清楚了,我这里讲一下遇到坑吧

这一部分主要就是framebuffer编程嘛。

对应用的mipi屏幕就是买开发板对应送的这个

首先针对:正点原子RK3588这一开发板 你要成功实验framebuffer编程,必须做以下部分工作:

(1)关闭开机动画Logcat

直接修改设备树里面的文件就行   (做到第六期的贴贴   五期的驱动应该是学完了哈  基本的设备树编译 烧写 应该是没啥坑点的  照着做就行)

因为我的开发板上只连接了这个mipi屏幕  在DSI0 这个上面插这的

在内核目录里面找到这个设备树文件,因为我这个烧录的buildroot系统 

然后把status设置一下就行      如果连接的有HDMI 就去找 &route_hdmi0或者1 这个节点 去给他disabled就行了   然后编译烧录进内核      开机动画就关了

(2)关闭Weston桌面:

开发板:进入目录:/etc/init.d   关闭这两个文件的 可执行 权限

关闭 Qt / Weston 桌面: 这个命令  /etc/init.d/S50systemui  stop  是关闭Qt显示桌面

但要让系统开机不再自动启动 Qt/Weston,还需要再做一步:

chmod  -x  /etc/init.d/S49weston

如果你有 Qt 启动脚本(比如 /etc/init.d/S50systemui),
也可以顺便禁止它开机启动:

chmod  -x  /etc/init.d/S50systemui

做完上面这两步,断电重启一下开发板,你的屏幕就是黑的了。致辞所有的准备工作完成了!!!

(3)framebuffer编程

这部分内容没啥坑,在我做的过程中都很顺利,主要问题就是开始遇到程序代码运行之后,屏幕不显示的问题,上面两步做完, 就没啥问题了。

下面就简单介绍一下 代码思想吧:

主要就是 open 和 ioctl这两函数,  应为LInux下一切皆文件嘛 , 所以屏幕这个设备注册进去,也是一个文件去打开就行,用ioctl函数获取参数后,var这个结构里面就是屏幕相关的参数了

struct fb_bitfield {__u32 offset;     // 起始位偏移__u32 length;     // 位宽__u32 msb_right;  // 位序:1 表示MSB在右(极少见)
};struct fb_var_screeninfo {__u32 xres;           // 可见分辨率:水平像素__u32 yres;           // 可见分辨率:垂直像素__u32 xres_virtual;   // 虚拟分辨率:水平像素(用于panning/双缓冲)__u32 yres_virtual;   // 虚拟分辨率:垂直像素__u32 xoffset;        // 可见区域相对虚拟缓冲的X偏移__u32 yoffset;        // 可见区域相对虚拟缓冲的Y偏移__u32 bits_per_pixel; // 每像素位数(如 16/24/32)__u32 grayscale;      // 灰度/颜色空间标志(0=彩色,1=灰度等)struct fb_bitfield red;    // 红色分量的位域描述struct fb_bitfield green;  // 绿色分量的位域描述struct fb_bitfield blue;   // 蓝色分量的位域描述struct fb_bitfield transp; // 透明度(alpha)位域描述__u32 nonstd;         // 非标准像素格式标志(一般为0)__u32 activate;       // 何时生效(如 FB_ACTIVATE_NOW 等)__u32 height;         // 物理高度(毫米,未知可为0)__u32 width;          // 物理宽度(毫米,未知可为0)__u32 accel_flags;    // 加速相关标志(已较少使用)// 时序参数(单位见注释)__u32 pixclock;       // 像素时钟周期(皮秒,ps)__u32 left_margin;    // 行同步前肩(像素)__u32 right_margin;   // 行同步后肩(像素)__u32 upper_margin;   // 场同步前肩(像素/行)__u32 lower_margin;   // 场同步后肩(像素/行)__u32 hsync_len;      // 行同步脉宽(像素)__u32 vsync_len;      // 场同步脉宽(行)__u32 sync;           // 同步极性/方式标志(如 FB_SYNC_HOR_HIGH_ACT 等)__u32 vmode;          // 扫描方式(如 FB_VMODE_NONINTERLACED/INTERLACED/DOUBLE 等)__u32 rotate;         // 旋转角度(0/90/180/270,依实现)__u32 colorspace;     // 颜色空间(如 sRGB 等,通常为0)__u32 reserved[4];    // 预留
};

然后后面就是,这个屏幕是属于硬件的,物理地址是不能直接访问的,得用mmap映射到虚拟地址才能进行访问。

走到这里基本没啥坑了,相信各位的试验已经做成功了!

那我们今天的文章就先到这里了 ,后面一次更新各个部分,可能会遇到的坑。

http://www.dtcms.com/a/574853.html

相关文章:

  • MySQL的NOW()函数详解
  • 郑州做网站企起广东建设官方网站
  • HTML5 中常用的语义化标签及其简要说明
  • 开源企业网站内容管理系统wordpress 虚拟数据
  • 网站制作方案和主要内容新网网站制作
  • 网站前台页面的设计与实现东阳自适应网站建设
  • 南山附近公司做网站建设多少钱wordpress站点地址和
  • CentOS7配置DHCP服务器全攻略
  • 做游戏网站需要哪些许可昆明百度推广开户费用
  • YAML的使用
  • 天天新网站网站开发 招聘
  • 毕业设计的网站商洛网站设计
  • 微小店网站建设价格为什么那么多人建网站做博客
  • 做自行车网站应该注意什么网页个人简历模板
  • pgsql:connection failed connection to server at
  • STM32H743-ARM例程38-UART-IAP
  • 深圳定制巴士怎么预约如何进行搜索引擎优化 简答案
  • 网站开发维护人员重庆seo杨洋
  • 如何推进网站建设html5网页制作案例
  • 全能网络工具箱:NETworkManager助力运维
  • 重庆市住建厅网站网站设置字体样式
  • 瑞安地区建设网站大连电力工程招标网
  • 石家庄有学校交做网站和优化的吗wordpress 页面评论 调用
  • 哈尔滨高端网站建设wordpress移动底部菜单
  • 免费SSL证书的更新流程
  • 查询网站域名泉州手机网站建设价格
  • Spring解决循环依赖其实就用了个递归
  • 成品网站管系统东莞想做网站
  • 重庆可做网站 APP租用服务器做视频网站
  • 全自动削皮机方案,果蔬去皮机/削皮机MCU控制方案开发设计