¿La mejor manera de entrar en la programación del Kernel?


8

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)


44
Para empezar, se deletrea kernel con una e.
Caleb

Ya me di cuenta de eso cuando me estaba poniendo las etiquetas jajaja.

44
La próxima vez tómate el tiempo para arreglarlo. Es una buena manera de respetar a la comunidad aquí que se está tomando el tiempo para ayudarlo. Además, si desea codificar para el kernel, ¡tendrá que ser riguroso con detalles como ese!
Caleb

@Caleb, lo hará!

Gracias por hacer esta pregunta, siempre me he preguntado
Mike Pennington,

Respuestas:


11

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.


44
Buena respuesta para Linux, falta solo un recurso: LXR para explorar la fuente del núcleo.
Gilles 'SO- deja de ser malvado'

8

Hay muchos núcleos en existencia.

LinuxNo es el único juego que existe, pero es el más utilizado. Algunas personas recomiendan el minixnú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. 1

Encuentra 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 -nny / o usb id sudo lsusbprimero).

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. ;)


6

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.


1

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.