盐都区城乡建设局网站,创立个网站专业卖手机,做静态网站选用什么服务器,湖北网站开发一、硬件设备 开发板#xff1a;香橙派 5Plus#xff0c;cpu#xff1a;RK3588#xff0c;带有 40pin 外接引脚。 屏幕#xff1a;SPI 协议 0.96 寸 OLED。 二、需求 主要是想给板子增加一个可视化的监视器#xff0c;并且主页面可调。 平时跑个模型或者服务#xff0c;…一、硬件设备 开发板香橙派 5PluscpuRK3588带有 40pin 外接引脚。 屏幕SPI 协议 0.96 寸 OLED。 二、需求 主要是想给板子增加一个可视化的监视器并且主页面可调。 平时跑个模型或者服务想查看状态和参数要么通过 SSH 远程连接要么开启 Docker 跑面板但是怎么会有抬头显示来的方便呢于是捣鼓单片机的心又开始跳动了准备手写一套完整的驱动和应用。 硬件 SPI 引脚刚好在风扇的出风口为了满足强迫症决定使用软件模拟 SPI直接手翻引脚。考虑到后期可能会增加新的设备于是直接将除 VCC 和 GND 以外的脚全部通过应用层传入可以随意更改。 三、驱动 0.96的 OLED 分辨率不高使用字符设备来实现足矣。
1、传统的字符设备注册流程 并在开头先完成了帧缓存的映射 这里我增加了缓冲区大小的自动调整内核在分配虚拟内存区域VMA时可能会出于性能或管理方便的考虑将映射大小调整为页面大小的整数倍在64位系统中一页是 4096 字节。 所以即使只请求了 1024 分辨率128 * 64 / 8字节内核也会分配一个完整的页面4096 字节。 vmalloc_user 函数注意带有 user 后缀专门为用户空间的映射而设计的。我一开始使用不带后缀的在内核的映射函数 remap_vmalloc_range 总是报错不知是不是因为 vmalloc 带有调试信息等额外的元数据导致用户空间无法映射。 2、file_operations 结构体 在驱动中我实现了读、写、ioctl和mmap。读时返回屏幕的硬件信息和帧大小写时可以直接将数据字节流写入到帧缓冲用于快速清屏。 ioctl 函数实现了简单的接口 可以传入引脚的编号开启和关闭OLED刷新帧缓存和清屏。
驱动实现的 mmap 函数 这里设置了 vma 的权限见注释。 重点讲一下 ioctl 接口实现的 GPIO 写时初始化 (1) 先进行 GPIO 检查如果已经初始化并且还没有释放引脚则退出。 (2) 将 GPIO 引脚结构体复制到内核保存到内核中的设备结构体 (3) 进行 GPIO 的初始化包括向内核申请引脚设置方向并标记已配置: (4) 进行 OLED 的初始化这里可能各不相同建议找购买渠道询问 以上是驱动的大概框架由于字符驱动本身比较基础开源资料也非常多所以只展示了我个人设计的地方代码具体实现细节我会放在 github 及 gitee。
1125962926/spi-oled-driver: Framebuffer drivers implemented by char-devices that can change pins at willhttps://github.com/1125962926/spi-oled-driverspi-oled-driver: 手写Linux FrameBuffer 0.96 寸 spi 屏幕驱动支持从 app 传入任意引脚https://gitee.com/lrf1125962926/spi-oled-driver 四、应用 目前还在开发中这部分根据原有的设想内容会很多所以会在完成后单独写一篇文章分享。 有关 0.96寸 OLED 的 UI 界面设计也欢迎各位小伙伴提供思路和建议我也在寻找优秀好看的 UI毕竟 htop 和 btop 的界面用习惯了top那密密麻麻的一片看着难受。