[国嵌攻略][156][I2C自编设备驱动设计]
AT24C08的驱动在Linux内核中已经提供,在/drivers/misc/eeprom/at24.c文件中。在对应的probe函数中有一个创建/sys/.../eeprom文件的函数,应用程序通过调用/sys/.../eeprom设备文件来对设备进行读写操作。
移植AT24C08驱动
1.修改内核注册eeprom设备
在kernel/linux-mini2440/arch/arm/mach-s3c2440.c中的machine_init下注册IIC设备。
mach-mini2440.c
static struct at24_platform_data at24c08 = {
.byte_len = / , //字节长度
.page_size = , //每页大小
.flags =
}; static struct i2c_board_info __initdata mini2440_i2c_devices[] = {
{
I2C_BOARD_INFO("24c08", 0x50), //"24c08"表示型号,0x50表示地址
.platform_data = &at24c08
}
}; static void __init mini2440_machine_init(void){
i2c_register_board_info(,mini2440_i2c_devices,ARRAY_SIZE(mini2440_i2c_devices));
}
2.配置内核支持eeprom驱动
make menuconfig ARCH=arm
device drivers->[*]misc devices->eeprom support->
<*>i2c eeproms form most venders->exit->save
make uImage ARCH=arm CROSS_COMPILE=arm-linux-
3.下载内核到开发板
/sys/bus/i2c/devices/0-0050/eeprom文件就是内核注册的eeprom设备文件。0x50对应0-0050文件夹,24c08对应eeprom文件。
i2capp.c
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h> int main(int argc, char **argv){
//打开文件
int fd; fd = open("/sys/bus/i2c/devices/0-0050/eeprom", O_RDWR);
if(fd < ){
printf("error\n");
return -;
} //写入数据
int i;
unsigned char wrData[]; for(i = ; i < ; i++){
wrData[i] = i;
} lseek(fd, , SEEK_SET);
write(fd, wrData, ); //读取数据
unsigned char rdData[]; lseek(fd, , SEEK_SET);
read(fd, rdData, ); for(i = ; i < ; i++){
printf("%d ", rdData[i]);
}
printf("\n"); //关闭文件
close(fd); return ;
}
[国嵌攻略][156][I2C自编设备驱动设计]的更多相关文章
- I2C自编设备驱动设计
一.自编设备驱动模型 at24.c: static int __init at24_init(void) { io_limit = rounddown_pow_of_two(io_limit); re ...
- [国嵌攻略][155][I2C用户态驱动设计]
用户态驱动模型 用户态驱动模型首先是一个应用程序,其次是在这个用户程序中通过内核调用来驱动设备. IIC通用驱动代码 IIC通用驱动程序的代码在/drivers/i2c/i2c-dev.c中.一次读操 ...
- [国嵌攻略][153][I2C裸机驱动设计]
eeprom简介 eeprom电可擦除可编程只读存储器,是一种类似于flash的固态存储器,但是与flash相比又存在一些区别: 1.eeprom可以按位擦写,而flash只能大片擦除. 2.eepr ...
- [国嵌攻略][152][I2C总线介绍]
IIC电气特性 I2C(inter intergrated circuit)总线是由philps公司开发的两线式串行总线,用于连接微控制器及其外围设备. I2C总线只有两根双向信号线: SDA:ser ...
- [国嵌攻略][154][Linux-I2C子系统]
IIC子系统架构 device driver层: 1.device driver,由用户开发. 2.i2c-dev由内核实现,但是需要配合应用模式驱动才能使用. i2c core层: 1.总线驱动,也 ...
- [国嵌攻略][045-046][一跃进入C大门]
[一跃进入C大门] 跳转方式 1.相对跳转:b或bl指令,通过计算两个地址之间的差值来给pc赋值相对跳转 2.绝对跳转:ldr指令,通过给pc直接赋值,完成绝对跳转 代码编写 1.在汇编代码中直接使用 ...
- [国嵌攻略][182][Sqlite嵌入式数据库移植]
数据库系统构成 在计算机系统中,保存数据的方式一般有两种: 1.普通文件方式 2.数据库方式 相比于普通文件方式,使用数据库来管理大批量数据具有更高的效率与安全性. 数据库系统一般由三个部分构成 1. ...
- [国嵌攻略][179][OpenSSL加密系统]
未加密传输的安全弊端 如果在网络传输中没有加密,就是以明文传输.传输的数据可以被抓包软件直接截获,并能读取里面的数据. 加密基本原理 1.对称加密 2.非对称加密 2.1.公钥私钥 公钥和私密要配对. ...
- [国嵌攻略][174][CGI快速入门-网页控制LED]
CGI程序(Common Gate Way Interface) 在服务器外部供服务器调用的程序,CGI程序与服务器配合后能让服务器完成更强大的功能. 1.浏览器通过HTML表单或超链接请求指向一个C ...
随机推荐
- 使用 Kafka 和 ELK 搭建测试日志系统(1)
本文仅供自己学习,不合适转载. 这是两篇文章的第一部分. 1. 安装 ELK 1.1 安装 ElasticSearch 在海航云上创建一个 Ubutu 16.4 虚机,2核4GB内存. (1)执行以下 ...
- BOOTPROTO=[none|static|bootp|dhcp](引导时不使用协议|静态分配|BOOTP协议|DHCP协议)
BOOTPROTO=[none|static|bootp|dhcp](引导时不使用协议|静态分配|BOOTP协议|DHCP协议)
- DNS查询的工作原理
二.DNS查询的工作原理 1.DNS查询过程按两部分进行 1.名称查询从客户端计算机开始, 并传送给本机的DNS客户服务程序进行解析 2.如果不能再本机解析查询, 可根据设定的查询DN ...
- java方向及学习方法
随笔:由于回首最近刚刚上班的缘故,平时基本没时间上播客了,所以回首会定期的抽时间分享一些干货给朋友们,就是周期不会像之前那么频繁了.最近有朋友跟回首说想没事儿的时候自学Java,但苦于不知道怎么去学, ...
- 【http转https】其之一:腾讯云 DV SSL证书申请实验
文:铁乐猫 2016年1月 前言 大概2017年12月28日左右公司提出以后需要将公司网站由http提升到https级别,以便谷歌和火狐浏览器将之认定为安全网站. 主要是出于客户.用户那边用火狐或谷歌 ...
- 删除redis 失效节点
cluster forget命令 cluster forget nodeid
- Linux小记
一.在vim中如何查看正在编辑的文件名 在正常模式下: :f 或 CTRL+G 查看文件的路径 用:!pwd 可以看当前的详细路径. 二.crontab 在crontab中, 命令crontab -e ...
- S2 深入.NET和C#编程 三:使用集合组织相关数据
三:使用集合组织相关数据 集合概念: ArrayList:非常类似于数组,也有人称他为数组的列表.ArrayList可以动态维护,数组的容量是固定的 和数组类似,ArrayList中存储的是数据成为元 ...
- IO流之字符流知识总结
字符流:读写字符的 顶级父类是Reader和Writer 操作流程 在Java中IO操作也是有相应步骤的,以文件操作为例,主要的操作流程如下: 使用File类打开一个文件 通过字节流或字符流的子类,指 ...
- swift4.0 正则表达式判断手机号
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px Menlo; color: #ffffff; background-color: #282b3 ...