Qué sucede si un dispositivo está en un árbol de dispositivos pero no está presente físicamente

0

Probablemente una pregunta muy nueva:

Tengo una placa Zynq 7100, zc706. Estoy jugando con el sistema de procesamiento ARM con la distro PetaLinux de Xilinx. ¿Qué pasaría si añadiera un dispositivo al árbol de dispositivos, por ejemplo, y EEPROM en el bus I2C, pero en realidad nunca conecté físicamente la EEPROM al bus? Luego trato de usar el controlador I2C Linux para leer y escribir en la dirección en el árbol de dispositivos donde se encuentra la EEPROM. ¿El intento de abrir el archivo simplemente fracasará? Si ese es el caso, ¿cuál es el punto del árbol de dispositivos, solo para decirle al núcleo que busque los dispositivos / incluya el controlador y construya de cierta manera?

if((file = open(I2C_ADAPTER, O_RDWR)) < 0) {
        printf("Failed to open the bus\n");
        return -1;
    }
buf[0] = addr;
buf[1] = reg_addr;
buf[2] = 0x10;
if(write(file, buf, 3) != 3) {
    printf("Failed to write to bus %s.\n\n", strerror(errno));
}
else {
    printf("Successful write\n");
    printf(buf);
    printf("\n\n");
}

if(read(file, buf, 3) != 3) {
    printf("Failed to read from the i2c bus.\n %s\n\n", strerror(errno));
}
else {
    printf("Successful read\n");
    printf("Buf = [%02X,%02X,%02X]\n", buf[0], buf[1], buf[2]);
    printf("\n\n");
}

Digamos que paso el código a una dirección de bus I2C (addr) de 0x5d y escribo en el registro base reg_addr es 0x00, que es donde mi EEPROM está en el árbol de dispositivos. ¿Cómo sabe el sistema la ubicación del dispositivo si tuviera que conectar una EEPROM?

    
pregunta John Frye

1 respuesta

1

Un dispositivo puede fallar en cualquier momento , y los controladores deben manejar estos problemas con gracia. Por lo tanto, no hagas y no te encuentres en bucles interminables. En su lugar, informe un código de error al espacio de usuario o al controlador de dispositivo ascendente. (Esto generalmente no es un problema a menos que un dispositivo tenga RAM asignada a la máquina virtual o realice transferencias DMA).

El propósito del árbol de dispositivos es eliminar el conocimiento de los diseños de tableros individuales de los controladores, por lo que un controlador puede manejar cualquier tablero que tenga un cierto tipo de dispositivo.

Si nunca planeas adjuntar un determinado chip I²C a la placa, es mejor eliminarlo de la definición del árbol de dispositivos y recompilarlo. Si es opcional, es mejor que lo coloques en un archivo de superposición para que el usuario pueda decidir si tiene ese hardware o no.

Busca las cosas del árbol de dispositivos de Raspberry Pi, tiene numerosas superposiciones para todo tipo de cosas para adjuntar.

    
respondido por el Janka

Lea otras preguntas en las etiquetas