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

使用i2c子系统驱动i2c oled模块

1、使用linux内核里面的i2c子系统来驱动i2c oled 屏幕
代码如下:

#include "linux/i2c.h"
#include <linux/module.h>
#include <linux/poll.h>#include <linux/fs.h>
#include <linux/errno.h>
#include <linux/miscdevice.h>
#include <linux/kernel.h>
#include <linux/major.h>
#include <linux/mutex.h>
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
#include <linux/stat.h>
#include <linux/init.h>
#include <linux/device.h>
#include <linux/tty.h>
#include <linux/kmod.h>
#include <linux/gfp.h>
#include <linux/gpio/consumer.h>
#include <linux/platform_device.h>
#include <linux/of_gpio.h>
#include <linux/of_irq.h>
#include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/slab.h>
#include <linux/fcntl.h>
#include <linux/timer.h>
#include <linux/delay.h>
#include "font.h"
typedef struct i2cmsg
{int row;int col;int buf_len;void *buf;
} i2cmsg_type;
struct i2c_client *g_client;
static int major = 0;
struct class *i2c_cls;
#define OLED_I2C_ADDRESS 0x3c
#define OLED_CMD 0x00
#define OLED_DATA 0x40
static void Oled_Clear(struct i2c_client *client);
static int i2c_transfer_char(struct i2c_client *client, unsigned char data, unsigned char oled_ctrl);
static void Oled_Show_Str(char row, char col, char *str);
static long i2c_oled_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{return 0;
}
static ssize_t i2c_oled_write(struct file *file, const char __user *buf, size_t size, loff_t *filp)
{int ret;void *kernel_buf;// 分配内存i2cmsg_type *msg = kzalloc(sizeof(i2cmsg_type), GFP_KERNEL);if (!msg) {printk(KERN_ERR "Failed to allocate memory for i2cmsg_type\n");return -ENOMEM;}// 从用户空间复制 i2cmsg_type 结构体ret 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 基于移动互联网的校内物业报修管理系统设计与实现(论文+源码)_kaic
  • FFmpeg读取文件列表
  • 【Android面试八股文】你能说说FragmentPagerAdapter 和 FragmentStatePagerAdapter的区别吗?
  • Go 语言的优势
  • Hash Table、HashMap、HashSet学习
  • nvm详细安装使用教程和详细命令,以及提示” ‘nvm‘ 不是内部或外部命令,也不是可运行的程序或批处理文件“处理办法
  • Arduino IDE(集成开发环境)的安装过程
  • 应用层简单实现udp / tcp网络通信
  • 网络学习-eNSP配置NAT
  • 《JavaEE进阶》----12.<SpringIOCDI【扫描路径+DI详解+经典面试题+总结】>
  • ArcGIS的8个“合并”功能要分清——矢量:编辑器合并,复制粘贴,工具合并、追加、联合——栅格:镶嵌、镶嵌至新栅
  • GNSS CTS GNSS Start and Location Flow of Android15
  • Spring框架IOC
  • vulhub远程执行命令漏洞CVE-2022-22963
  • flutter的入口和原生交互
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 2017 年终总结 —— 在路上
  • co模块的前端实现
  • JS 面试题总结
  • mysql 数据库四种事务隔离级别
  • React-flux杂记
  • SQLServer之创建数据库快照
  • vue学习系列(二)vue-cli
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 基于axios的vue插件,让http请求更简单
  • 如何在 Tornado 中实现 Middleware
  • 说说动画卡顿的解决方案
  • Java性能优化之JVM GC(垃圾回收机制)
  • 仓管云——企业云erp功能有哪些?
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ​你们这样子,耽误我的工作进度怎么办?
  • #控制台大学课堂点名问题_课堂随机点名
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (Java数据结构)ArrayList
  • (NSDate) 时间 (time )比较
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (回溯) LeetCode 77. 组合
  • (接口封装)
  • (四)Controller接口控制器详解(三)
  • (学习日记)2024.02.29:UCOSIII第二节
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • .Net Core 微服务之Consul(二)-集群搭建
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • []指针
  • [2015][note]基于薄向列液晶层的可调谐THz fishnet超材料快速开关——
  • [20180224]expdp query 写法问题.txt
  • [Angular] 笔记 20:NgContent
  • [HJ56 完全数计算]
  • [IE技巧] IE8中HTTP连接数目的变化
  • [ios]准备好app后使用xcode发布ios操作
  • [LeetCode] 148. Sort List 链表排序