No es tanto preguntar qué libros (aunque si conoce guías / tutoriales que serían útiles), pero ¿cuál es la mejor manera de comenzar a hacer la programación del kernel y hay una distribución particular en la que sería mejor aprender?
Estoy principalmente interesado en la parte de Controladores de dispositivos, pero quiero aprender cómo se configura el Kernel también (Módulos y demás) Tengo alrededor de 4-5 años de experiencia con C / C ++ pero es principalmente conocimiento de la universidad (así que es no como 4-5 años de experiencia laboral, si sabes a lo que me refiero)
kernel
drivers
kernel-modules
Jeff Schaller
fuente
fuente
Respuestas:
Primeramente:
Para las etapas de bebé, la mejor manera de comenzar es escribir diversas variaciones en los módulos "hello world" y los controladores de hardware virtual (el hardware real presenta los problemas del mundo real que se enfrentan mejor cuando tienes más idea de lo que estás haciendo).
"Linux Device Drivers" es un excelente libro y vale la pena comenzar con: http://lwn.net/Kernel/LDD3/
LDD (solía, al menos) tener ejercicios en los que escribió controladores virtuales, por ejemplo, discos RAM y dispositivos de red virtual.
En segundo lugar:
suscríbete a https://lkml.org/ o a la lista de correo de un subsistema que estarás pirateando. Acecha un poco, escaneando hilos, leyendo la revisión del código (respuestas a parches) para ver qué tipo de cosas las personas tropezar o seguir adelante.
Vea si puede obtener hardware (barato) para un dispositivo que aún no es compatible o que aún no es compatible. Los buenos candidatos son NIC USB de bajo costo o periféricos USB de bajo costo similares. Algo con un controlador desactualizado o desactualizado, tal vez un proveedor escrito, tal vez para 2.4.x, es ideal, ya que puede comenzar con algo que funcione (más o menos) y adaptarlo / reescribirlo gradualmente probando sobre la marcha. Mi primer intento de controlador fue para un Davicom DM9601 USB NIC. Hubo un controlador de kernel escrito por el vendedor de la serie 2.4 que lentamente adapté a 2.6. (Nota: el controlador en la línea principal no es mi controlador, al final alguien más escribió uno desde cero).
Otra buena manera es mirar el sitio Kernel Newbies, específicamente el "conserje kernel" todo: http://kernelnewbies.org/KernelJanitors/Todo Esta es una lista de tareas que un principiante debería poder abordar.
fuente
Hay muchos núcleos en existencia.
Linux
No es el único juego que existe, pero es el más utilizado. Algunas personas recomiendan elminix
núcleo para comprender los conceptos del sistema operativo. Optaría por la serie Linux 2.6.x, ya que es la más común y no se desperdiciará en algo (casi) que nadie usa. Solaris, XNU (Mac), FreeBSD y Dragonfly son notables. 1Encuentra algo súper simple (puerto serie, usb, etc.) y haz que haga otra cosa. Para un desafío adicional, intente escribir un módulo de kernel para algo que aún no tiene uno. (Asegúrese de googlear al sospechoso por pci
sudo lspci -nn
y / o usb idsudo lsusb
primero).Actualización: No haga esto directamente en su sistema primario, use máquinas virtuales (VM) (computadora en una computadora) como se mencionó. VirtualBox puede proporcionar esto y es gratis. Además, no quiero que parezca abrumador, pero pruebe las instantáneas de VM para que pueda volver en caso de que algo rompa la VM.
Actualización 2 : La nota sobre Git (DVCSes inc. Mercurial, fósil, bazar, darcs) es una buena idea, principalmente para código y archivos pequeños e importantes. Intenta no usar Git para hacer copias de seguridad de música, videos y demás, a menos que conozcas las implicaciones. ;)
fuente
Encuentre un módulo o controlador que desee modificar o comience con un tipo de módulo nulo / hola mundo y construya desde allí. Específicamente trabaje con un módulo porque le permitirá cargar, descargar, recompilar y volver a cargar el código en un núcleo en ejecución. Más tarde, puede ingresar a los bits centrales, pero básicamente los módulos tienen todo tipo de y puede hacer prácticamente lo que quiera.
En segundo lugar, use una VM. Configure una máquina invitada en VirtualBox o alguna sobre VM y haga las pruebas de su núcleo allí por un tiempo. De esa manera no matará su sistema principal cuando rompa algo, y reiniciar, retroceder a una instantánea que funcione, etc. es realmente fácil.
Tercero, aprende
git
.fuente
Alguien ya menciona el libro "Controladores de dispositivos Linux": este es un recurso excelente y también lo recomiendo encarecidamente.
Aunque la pregunta menciona que el creador no está pidiendo libros específicamente, la última edición del libro "Comprender el kernel de Linux" ( http://oreilly.com/catalog/9780596005658/ ) es invaluable para aprender sobre el kernel de Linux en general , y también contiene una sección sobre controladores de dispositivos Linux.
fuente