在我的主板上,我有一个存储配置信息的I2C EEPROM。 UBoot使用下面显示的read_eeprom函数读取它。我还想从Linux内核中访问这些信息,以便我的/ proc / cpuinfo输出正确显示。但是我在Linux内核中找不到i2c_probe和i2c_read的等效功能。如何从内核中执行以下功能?我正在使用Linux 3.2。
static int read_eeprom(void)
{
/* Check if baseboard eeprom is available */
if (i2c_probe(CONFIG_SYS_I2C_EEPROM_ADDR)) {
puts("Could not probe the EEPROM; something fundamentally "
"wrong on the I2C bus.\n");
return -ENODEV;
}
/* read the eeprom using i2c */
if (i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0, 2, (uchar *)&header,
sizeof(header))) {
puts("Could not read the EEPROM; something fundamentally"
" wrong on the I2C bus.\n");
return -EIO;
}
if (header.magic != 0xEE3355AA) {
/*
* read the eeprom using i2c again,
* but use only a 1 byte address
*/
if (i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0, 1,
(uchar *)&header, sizeof(header))) {
puts("Could not read the EEPROM; something "
"fundamentally wrong on the I2C bus.\n");
return -EIO;
}
if (header.magic != 0xEE3355AA) {
printf("Incorrect magic number (0x%x) in EEPROM\n",
header.magic);
return -EINVAL;
}
}
return 0;
}
答案 0 :(得分:1)
为了解决您的问题,需要考虑一些问题:
您自己构建内核吗?你的董事会是定制的吗?
你真的需要进入内核吗?
你真的需要把你的信息放在procfs中吗?特别是在cpuinfo或自定义procfs文件中可能是足够的(procfs interface,guide to procfs)?
使用i2c-tools或检查sysfs(/ sys / class / i2c *)获取有关EEPROM的信息
您的EEPROM I2C设备如何注册(many ways)?
确定您介绍代码的位置,并确保在设备注册后运行。你会在staging中创建自己的内核模块吗?你会修补你的EEPROM驱动程序吗?
了解如何访问和更新procfs' cpuinfo
根据您的实际需求和配置,解决问题的方法可能会发生变化。
答案 1 :(得分:1)
您是否尝试使用eeprog实用程序,我在过去使用它来阅读eeprom的内容。它可以在线获取,您可以将其移植到您的应用程序中。