print last know linux-kernel linux-device-driver u-boot

linux-kernel - last - print kernel version linux



Enfoque basado en BBB DT (2)

Implementé con éxito un controlador basado en GPIO para mi protocolo personalizado usando un modelo de dispositivo de plataforma. Quiero actualizarlo usando el enfoque de árbol de dispositivo. Entonces, para empezar, tengo un beaglebone negro, y he compilado el kernel utilizando la configuración de árbol del dispositivo habilitada y verificada durante los mensajes de la consola uboot que muestran

Verificando la suma de verificación ... OK

Blob del árbol del dispositivo aplanado en 80f80000

Arranque usando la burbuja fdt en 0x80f80000

Imagen Kernel XIP ... OK

DE ACUERDO

Usando Device Tree en su lugar en 80f80000, final 80f899de

Agregué mi entrada en el tablero nombre de nodo de archivo común my_gpio {compatible = "my_gpio"}

Luego construyo el proceso habitual make uImages dtbs LOADADDR ....

Finalmente obtengo mi uImage con dtb. En mi controlador, he usado la misma cadena "my_gpio" como propiedad .name.

pero mi método de prueba no se llama, lo que AFAIK es porque no está encontrando ningún dispositivo compatible.

Cualquier sugerencia de ayuda sería genial.

En mi controlador:

static struct platform_driver d_driver = { .driver = { .name = "d_gpio", .of_match_table = d_of_match, }, .probe = D_probe, .remove = D_remove };

Gracias


Necesita preparar una estructura de tipo struct of_device_id y usar la propiedad compatible en eso. Pruebe de la siguiente manera:

static struct of_device_id my_devs[] = { { .compatible = "my_gpio" }, /* This should be the name given in the device tree */ { } }; MODULE_DEVICE_TABLE(of, my_devs);

Ahora construye la estructura platform_driver y pasa la tabla de arriba a ella:

static struct platform_driver my_plat_driver = { .probe = my_probe, .remove = my_remove, .driver = { .name = "my_gpio_driver", /* This name is for sysfs, not for matching */ .of_match_table = my_devs /* This turns out as the matching logic */ } };


Puede ser que el soporte de su placa no entienda este protocolo, por lo que se necesita un nodo para colocarlo en un lugar donde el código de la plataforma realmente lo procese. Pase a la siguiente discusión y agregue un nodo de "dispositivos virtuales" en dtb, espero que ayude.

http://web.archiveorange.com/archive/v/9IQA2s6aeZUFXdm6P87Z