linux I2C设备驱动实例——EEPROM

开发板:优龙公司的fs2410
内核版本:linux2.6.28.6
开发环境:Ubuntu12.04
交叉编译器:arm-none-linux-gnueabi-gcc 4.3.2

目标:在fs2410上驱动EEPROM,实现应用层对EEPROM的读写操作

一、linux2.6.28.6 系统上 I2C 总线驱动

进入到你的内核文件根目录
配置内核,添加I2C总线驱动
# make menuconfig
Device Driver -->
  <*>I2C support -->
       I2C Hardware Bus support --->
          <*>S3C2410 I2C Drive

二、AT24xx EEPROM 的 I2C 设备驱动

配置内核,添加EEPROM驱动
# make menuconfig
Device Driver -->
  <*>I2C support -->
Miscellaneous I2C Chip support  --->
   <*> EEPROMs from most vendors  

三、修改板文件信息

1、在fs2410对应的板文件中添加i2c_board_info,板文件为arch/arm/mach-s3c2410/mach-smdk2410.c 

# vim arch/arm/mach-s3c2410/mach-smdk2410.c 

 添加如下结构定义
static struct i2c_board_info s3c2410_i2c_devs[] __initdata = {
{
I2C_BOARD_INFO("24c02", 0x50),
},
};

说明:"24c02"要和at24驱动程序中的 i2c_device_id 某一成员的name一致,0x50为EEPROM设备的地址,
I2c设备地址由7位构成,高4位固定,低三位由设备的三个地址引脚来决定,经查看芯片手册得知其高4位为1010,根据开发板原理图可见该芯片的三个地址引脚全接地,即000,因此EEPROM设备的地址为1010000,即0x50。

在函数smdk2410_init()中调用 I2C 设备的注册函数 i2c_register_board_info,即
static void __init smdk2410_init(void)
{
platform_add_devices(smdk2410_devices, ARRAY_SIZE(smdk2410_devices));
smdk_machine_init();


i2c_register_board_info(0, s3c2410_i2c_devs,
ARRAY_SIZE(s3c2410_i2c_devs));
}

四、编译内核
# make zImage

将镜像烧写到开发板并启动。

你可能感兴趣的:(Linux)