Quiero aprender la programación del controlador del dispositivo del kernel de Linux. Entonces, ¿alguien puede publicar buenas páginas de tutoriales o enlaces aquí? Soy nuevo en el entorno Linux kernel. Lo he buscado pero no sé cómo comenzar y cuál leer para comprender los conceptos básicos. Gracias por adelantado.Programación del controlador del dispositivo del kernel de Linux
Respuesta
Depende de sus habilidades actuales. Si es realmente nuevo en Linux, quizás debería comenzar con la programación del sistema de espacio de usuario con Advanced Linux Programming. Obtendrá un buen conocimiento de las llamadas al sistema Unix y otros conceptos como señales, procesos/hilos, etc. con este recurso gratuito. Esto es imprescindible (entendiendo la API de espacio de usuario) si está desarrollando desde el punto de vista del núcleo, ya que la función de un núcleo es proporcionar servicios a los usuarios de forma segura.
De lo contrario, uno de los libros citados es Linux Device Drivers, Third Edition (LDD3). Tenga en cuenta que esta edición se escribió en el momento de Linux 2.6.10 y algunas cosas cambiaron desde entonces. This article muestra las diferencias según evolucionó 2.6 (hasta 2.6.31, es decir, no es muy útil). Debo mencionar martinezjavier/ldd3, que contiene controladores de ejemplo de LDD3 actualizados para núcleos más recientes (gracias a 42n4 para señalar eso).
Otro libro interesante que no se cita tantas veces es Essential Linux Device Drivers. No encontrarás una versión gratuita de esta, pero todavía presenta un enfoque interesante. Lo que me gusta de este es que cubre muchos tipos diferentes de dispositivos y está actualizado a partir de 2.6.24, que es un poco mejor que LDD.
Finalmente, un gran libro sobre el núcleo en sí (no específicamente para los controladores) es Understanding the Linux Kernel, 3rd Edition. Esto cubre las instalaciones de kernel en profundidad y los mecanismos internos. Está actualizado a partir de 2.6.11.
En cuanto a los tutoriales en línea, encontré this post on Pete's Blog es un gran ejemplo. No sólo se muestra cómo crear un dispositivo de caracteres (el más fácil de tipo controlador del núcleo, es decir, el que debe comenzar con), que utiliza modernas características del kernel de Linux en un formato fácil de entender la moda, incluyendo:
- uso de udev
- uso de una estructura de datos del núcleo (FIFO)
- uso de la sincronización del kernel (mutex)
- uso de Sysfs con atributos personalizados
- opciones de módulos para
insmod
Plus: está dirigido a Linux 3.0, lo que significa que es más actualizado en comparación con otros recursos.
También le puede interesar this post sobre cómo crear entradas Sysfs manualmente, aunque el modelo de dispositivo Linux se encargará de registrar su dispositivo como una entrada Sysfs si no necesita nodos o atributos adicionales.
Editar: Debo añadir que la mejor manera de aprender la programación del controlador de dispositivo real de Linux es mirar los controladores reales. Hay miles de controladores en drivers
. Comience a leer y comprender el concepto de los simples como drivers/leds
y verá cuán gratificante es esto.
mejor libro para aprender a programar controlador de dispositivo es
"LDD"
que podría estar interesado en la recién estrenada Linux Driver Templates. Como su nombre lo indica, proporciona plantillas y demuestra instalaciones Linux de uso frecuente para comenzar rápidamente.
Oye, ¿podrías explicarme cómo pasar por LDT? – const
Entiendo que es una respuesta tardía !!
Puede elegir cualquier libro, esos son realmente buenos libros sugeridos anteriormente.
Pero realmente tiene que trabajar prácticamente. Intenta involucrarte en Kernel tanto como sea posible.
En su mayoría, debe buscar en el código fuente del núcleo.
Y el documento más interesante que puede encontrar en la carpeta Documentación en Kernel tree.
Professional Linux Kernel Architecture es una buena lectura también.
El sitio con enlaces muy importantes: http://elinux.org/Device_drivers
gran tutorial con ejemplos reales (termina con una usbpen formateado con nuestro propio sistema de archivos - Búsqueda de autor Otros artículos):
- http://www.linuxforu.com/tag/linux-device-drivers-series/
- http://sysplay.in/index.php?pagefile=lfy_articles
Código fuente del famoso LDD3 libro portado a nuevos núcleos: https://github.com/martinezjavier/ldd3/
Vídeos:
Tal vez otros cources:
Algunos ejemplos:
- http://www.staerk.de/thorsten/index.php/My_Tutorials/Writing_Linux_kernel_modules
- http://www.freesoftwaremagazine.com/articles/drivers_linux
- http://techblog.aasisvinayak.com/kernel-module-programming-tutorial/
- http://www.linuxforu.com/2009/05/a-voyage-to-the-kernel-day-11/
Books (sin menciona en este LDD3 hilo):
- http://www.coopj.com/ con un código fuente actualizado http://www.coopj.com/LPD/
KernelHacking: http://kernelnewbies.org/KernelHacking
Visual mapa del núcleo de Linux: http://www.makelinux.net/kernel_map/
Linux y kernel libros para principiantes:
+1, aunque tenga en cuenta que las preguntas antiguas de este tipo son, según las directrices modernas de desbordamiento de pila, fuera del tema, ya que se considera demasiado amplio. – halfer
La mejor fuente son las páginas del manual de Linux, pero son un tanto fundamentales para los principiantes, la programación directa de los controladores del dispositivo no es una tarea fácil. Le recomiendo que vaya a través de punteros y estructuras a través de los libros siguientes
básicos C Libros 1. Programación C - Byron Gottfried 2. El lenguaje de programación C - Dennis Ritchie
Intermedio Libros 1. Punteros en C Kenneth Olor 2.Programación Profunda C Secretos Profundos - Linden
Llegando al dispositivo Controladores He cargado la documentación de Kernel Source en formato pdf https://drive.google.com/folderview?id=0B7iRyndFhHldR3hjOHpOZTdKTjA&usp=sharing Puede descargar desde este enlace.
controladores de dispositivos Conceptos básicos (Programación del modo de usuario)
la interfaz de programación de Linux - Michael Kerrisk A partir de Programación Linux Wrox Editores controladores de dispositivos (Kernel) Deleopment 1. Desarrollo del Kernel de Linux - Robert Amor 2. Linux Kernel Internals - m Beck
controladores de dispositivos (Programación del controlador) 1. Linux Device Drivers - Tercera Edición (Descargar gratis está disponible para 2.6 Kernel) 2. Esenciales Linux Device Drivers - Venkateswaran
para el conductor conocimientos básicos Fol low this site http://www.tldp.org/LDP/khg/HyperNews/get/devices/devices.html
Mi experiencia es Primero que nada debemos obtener un buen conocimiento de la programación C, principalmente Estructuras y Punteros antes de pasar por la Programación de Conductores; de lo contrario será un poco engorroso comprender la programación del controlador.
comming y puesta en marcha: -
espacio de usuario de programación fundamentos de la generación de gcc proprocessed, ensamblador y archivos de objetos utilizando los comandos del CCG de análisis de archivos de objetos utilizando diferentes herramientas de objetos, programación básica en Linux, hilos (cerraduras , técnicas de sincronización), señales, procesos (fork, exec), temporizadores (Posix). Esto te ayudará mucho a comprender los conceptos del kernel.
Kernel Programming Comprender el árbol de código fuente del kernel, las diferentes ramas y su importancia, usar ctags y cscope para navegar por el código fuente del kernel, esto lo ayudará en la búsqueda de fuentes del kernel.
controlador de programación En primer lugar, conocer distintas clases de conducir, carbón, etc. bloque, Siguiente protocolos del dispositivo, la transmisión y la recepción, el manual del producto es la mejor fuente para pasar por esto. Luego, comience a escribir el controlador de carga simple, por ejemplo, RTC (un dispositivo mapeado por puerto), IOAPIC (un dispositivo de memoria mapeada), luego vaya a USB, PCI, Red, I2C, SPI, etc., si desea la ayuda puede encontrar el código de esqueleto para todo esto en el árbol fuente del kernel.
- 1. Programación del kernel de Linux
- 2. Nuevo en el desarrollo del kernel/controlador de Linux
- 3. desarrollo del kernel de Linux
- 4. módulo del kernel Linux compilar
- 5. ¿Cómo sabe Linux Kernel dónde buscar el firmware del controlador?
- 6. Programación del kernel para 1024 CPUs
- 7. ¿Impresiones de depuración del kernel de Linux?
- 8. Símbolo exportado del kernel de Linux
- 9. Ubicación del Módulo Kernel de Linux
- 10. Motivo para pasar datos utilizando struct inode y struct file en la programación del controlador del dispositivo Linux
- 11. Programación del núcleo de Linux para principiantes
- 12. Obligando al controlador a la coincidencia del dispositivo
- 13. Cómo comenzar con el desarrollo del kernel de Linux
- 14. ¿Cómo se lee el búfer de anillo dentro del espacio del kernel de Linux?
- 15. ¿Cuál es la diferencia entre devm_kzalloc() y kzalloc() en la programación del controlador de Linux
- 16. Libro sobre la programación del shell Linux
- 17. C Linux dispositivo de programación - Lectura Directamente desde/dev
- 18. ¿La lista de hilos del kernel de Linux es segura?
- 19. Linux controlador de dispositivo del núcleo de DMA desde un dispositivo de memoria en el espacio de usuario
- 20. Strip fuentes del kernel de Linux según .config
- 21. ¿Cómo detener los hilos del kernel de Linux en rmmod?
- 22. ¿Cómo funciona copy_from_user del kernel de Linux internamente?
- 23. ¿Lees la versión del kernel de Linux usando C?
- 24. Depurar etapa previa a la descompresión del kernel de Linux
- 25. ¿Tengo que escribir mi propio controlador USB del lado del host para un dispositivo CDC
- 26. Medición del tiempo de ejecución de una función dentro del kernel de Linux
- 27. Cómo usar ioctl() desde el espacio del kernel en Linux?
- 28. Implementación de llamadas/trampas del sistema dentro del kernel fuente de Linux
- 29. Identificador del dispositivo del emulador de Android
- 30. Comprensión del programador de Linux
Esto también ayuda un poco http://linuxseekernel.blogspot.ie/2015/08/linux-kernel-module-programming.html – Jeyaram
configuración automatizada Mínimo módulo del núcleo QEMU + + Buildroot BusyBox: https: // github.com/cirosantilli/linux-kernel-module-cheat –