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 ;
}

最新文章

  1. flex学习小结
  2. D3中selection之使用
  3. [C#解惑] #2 对象的初始化顺序
  4. PHP数组处理函数的使用array_push(一)
  5. 如何激活webstorm 11
  6. [HDOJ1231]最大连续子序列
  7. ARC以及MRC中setter方法
  8. 避免使用CreateThread函数,导致的内存泄露
  9. Educational Codeforces Round 13 D. Iterated Linear Function (矩阵快速幂)
  10. SCGHR 系统设计
  11. bug终结者 团队作业第四、五周
  12. Go语言系列文章
  13. 问题:Linux报swap空间占用过高,但物理内存还有空余
  14. Linux环境变量详解与应用
  15. TCP与UDP各自优缺点与区别
  16. JavaScript可视化框架——Echarts
  17. About HDFS blocks
  18. MySql——查询题目练习
  19. Linux -&gt;&gt; Ubuntu 14.04 LTE下配置SSH免密码登录
  20. git error:【fatal: unable to access &#39;https://github.com/userId/prjName.git/&#39;: err or setting certificate verify locations:】

热门文章

  1. PXE+Kickstart 全自动安装部署CentOS7.4
  2. Python中range()和len()
  3. 数组a[n]中存放1-n中的n-1个数,给出算法找出重复的那一个数
  4. vue的挖坑和爬坑之vuex的简单入门
  5. python sklearn PCA源码阅读:参数n_components的设置(设为‘mle’出错的原因)
  6. python pandas stack和unstack函数
  7. vue2 computed set与get函数
  8. HTML 中有用的字符实体
  9. 理解SynchronizationContext,如何在Winform里面跨线程访问UI控件
  10. 【二分图】ZJOI2007小Q的游戏