Wie zu Lesen vom I2C-EEPROM von Linux-kernel - ARM-TI AM3352
Auf meinem board habe ich ein I2C EEPROM speichert Konfigurationsdaten. UBoot liest mit den read_eeprom Funktion unten dargestellt. Ich würde auch gerne Zugriff auf diese Informationen aus dem inneren der Linux-kernel so, dass mein /proc/cpuinfo Ausgabe zeigt richtig. Aber ich kann nicht finden, die gleichwertige Funktionen i2c_probe und i2c_read in den Linux-kernel. Wie mache ich das unter Funktionen innerhalb des Kernels? Ich bin mit 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;
}
- Können Sie das Linux-kernel-version Sie verwenden?
- Können Sie auch erklären, was Sie tun möchten. Tun Sie wirklich brauchen, zu Lesen, das EEPROM aus dem kernel? Sie möchten, ändern Sie die /proc/cpuinfo Ausgabe?
- Linux-kernel 3.2. Ich will /proc/cpuinfo auf display board-Typ und Serien-Nr., beide sind gespeichert im EEPROM.
- Sie können dies tun, in ein u-boot-Skript setzt die ATAGS oder DT, das an den Linux-kernel. Andernfalls müssen Sie die setup-Adressen, etc von einem i2c-controller und dann auf einrichten der Peripheriegeräte zum Lesen dieser Werte. Sprich, Sie benötigen eine i2c-controller-Treiber und einen
EEPROM_ADDR
Treiber und dann müssen Sie füllen Sie die cpuinfo Variablen; schon fertig mit ATAGS. - Das ist ein guter Kommentar @artlessnoise ich werde untersuchen, die ATAGS Ansatz.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es einige Fragen zu berücksichtigen, um die Adresse zu deinem problem:
Bauen Sie Ihren kernel selbst? Ist dein board eine benutzerdefinierte?
Tun, die Sie wirklich brauchen, um in den kernel?
Tun, die Sie wirklich brauchen, um setzen Sie Ihre Informationen im procfs? vor allem in cpuinfo oder eine benutzerdefinierte procfs-Datei könnte sufficiant (procfs interface, Leitfaden für procfs)?
Holen Sie sich Informationen zu Ihren EEPROM mit i2c-tools oder für die überprüfung sysfs (/sys/class/i2c -*)
Wie ist dein EEPROM I2C-Gerät registriert (viele Möglichkeiten)?
Bestimmen, wo Sie Ihren code und achten Sie nach der Registrierung Ihres Geräts. Erstellen Sie Ihr eigenes kernel-Modul zum Beispiel in der Inszenierung? Wird Sie den patch Ihres EEPROM-Treiber?
Finden Sie unter zugreifen auf und aktualisieren das procfs ist cpuinfo
Je nach Ihren konkreten Bedarf und Ihre Konfiguration, die Art und Weise, um Ihr problem ändern kann.
Haben Sie versucht, mit eeprog-Dienstprogramm, ich habe es in der Vergangenheit zu Lesen, der Inhalt des eeprom .Seine Quelle ist Online verfügbar, die Sie können die Schnittstelle in Ihre Anwendung .
http://www.codesink.org/eeprog.html