[国嵌攻略][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 ...
随机推荐
- jquery $.fn $.fx是什么意思有什么用
$.fn是指jquery的命名空间,加上fn上的方法及属性,会对jquery实例每一个有效, .fn是指jquery的命名空间,加上fn上的方法及属性,会对jquery实例每一个有效. 如扩展$.fn ...
- html5 canvas画布尺寸与显示尺寸
我在用canvas制作画板时,遇到了绘图位置和鼠标位置不一致的问题,所以今天查阅了一下资料,解决了这个问题. canvas绘图原理 在Canvas元素的内部存在一个名为2d渲染环境(2d rederi ...
- 海外ubuntu,lamp,ftp,phpmyadmin配置
海外ubuntu,lamp,ftp,phpmyadmin配置 1. 更换源 1.1 clean /etc/apt/sources.list file 1.2 Ubuntu Sources List G ...
- SSH KEY 批量分发
代码 #!/bin/sh . /etc/init.d/functions ];then echo "sh $0 arg0" exit fi for ip in 172.23.216 ...
- Python day 3 (3)
一:判断语句: 1 if 语句 : 2 或者if 语句 : else : 3 或者if 语句 : elif 语句 : else : 4注意:的使用,缩进一般用4个空格来完成. 二:input 语 ...
- ping、traceroute原理
说明:忘记从哪里拉的博文了,感谢! ping 用类型码为0的ICMP发请 求,受到请求的主机则用类型码为8的ICMP回应. ping程序来计算间隔时间,并计算有多少个包被送达.用户就可以判断网络大致的 ...
- golang map
Our friend Monk has been made teacher for the day today by his school professors . He is going to te ...
- Django入门实战【3步曲】
环境准备 junhongdeMacBook-Air:site-packages junhongchen$ python -V Python 2.7.10 junhongdeMacBook-Air: ...
- vue2.0 微信oauth认证的正确调用位置
运行在微信端的项目,很重要的环节是oauth认证:那在vue项目中,在何时何地调用oauth认证最合适呢? 经过观察,在项目启动过程中,会执行main.js文件:所以我将认证放在main.js中操作: ...
- 左边label随着右边textarea高度自适应
左边label随着右边自适应 近期项目中,有表单需求 默认展示两列,当内容多的时候,可以展示一列 左边列 <div> <label>备注</label> <s ...