Al escribir controladores para sistemas Linux, cómo utilizar el lenguaje C para acceder al hardware
Para acceder al hardware al escribir un controlador en un sistema Linux, primero se requiere la asignación de direcciones. Debido a que con el sistema Linux, las direcciones utilizadas en el programa son todas direcciones virtuales, por lo que es necesario reasignarlas con ioremap. para obtener la dirección virtual requerida y luego usar ioread32 e iowrite32 para realizar operaciones de lectura y escritura. El siguiente es el funcionamiento del LED:
int init_led_device(struct led_dev_t *l)
{
l->phys = 0x7F008000;
l->virt = ioremap(l->phys, SZ_4K);
l->gpmcon = l->virt + 0x820;
l->gpmdat = l- >virt + 0x824;
devuelve 0;
}
void led_config(struct led_dev_t *l)
{
l->reg = ioread32(l->gpmcon);
l->reg &= ~(0xf << 0);
l->reg |= (0x1 << 0);
iowrite32(l->reg, l->gpmcon);
}