2009-06-18 23 views
36

La programación no es mi trabajo principal, aunque me gusta y a veces me pagan por ello. Durante muchos años he estado escuchando sobre Linux y mis amigos me han mostrado muchos * nixes (o * nici?), Aunque me quedo con Mac OS.¿Qué partes del núcleo de Linux puedo leer para divertirme?

¿Crees que hay partes del kernel de Linux que podría disfrutar mirando, que me ayudarían a entender de qué se trata todo esto? Por ejemplo, ¿cómo Linux es diferente de Darwin?

He crecido con ensamblador y DOS, por lo que cosas como interrupciones o C de bajo nivel no deberían ser barreras para la comprensión. Pero al final estoy más interesado en los conceptos de alto nivel, como el enhebrado o la pila de conexiones en red: sé que los diferentes sistemas operativos los hacen de forma diferente. Y estoy buscando algo divertido, fácil y agradable, como leer a altas horas de la noche.

(Nota: un hecho CW, por si acaso)

Actualización: Me puse a buscar algunos documentos y empecé a leer:

+3

probablemente mejor de la lectura del código de BSD * (un sistema operativo que, al igual Linux, está basado en Unix) *. No solo está mucho * mejor diseñado, sino que Mac OSX está basado en BSD ... ¡así que también leerás una gran parte del kernel de OSX! –

+1

Consulte también la Guía poco fiable de Rusty para Kernel Hacking, si lo que busca es diversión, tiene una buena sección de comentarios divertidos que se encuentran en el kernel. – ninjalj

Respuesta

30

Recomendaría mirar LXR. Hace que sea más fácil seguir el flujo del código (no es necesario buscar bien cada función que se llama —, pero el sitio lo hace por usted).

Algunos puntos de partida, para la versión actual (2.6.30):

  • start_kernel() — piensan que es el núcleo equivalente de main(). Esta función inicializa casi todos los subsistemas del kernel; sígalo para ver en código lo que ve desplazándose en la pantalla durante el arranque.
  • entry_32.S — llamadas e interrupciones del sistema (versión x86-32, que debería estar más cerca de lo que usted sabe; tenga en cuenta el uso del dialecto de ensamblaje AT & T en lugar del dialecto Intel al que podría estar más acostumbrado).
  • head_32.S — el punto de entrada del kernel. Aquí es donde comienza el núcleo después de cambiar al modo protegido; al final, llamará al start_kernel().
  • arch/x86/boot — código de arranque en modo real. Comienza en el ensamblaje (boot/header.S), pero rápidamente salta al código C (comenzando en boot/main.c). ¿La inicialización en modo real (principalmente llamadas BIOS que deben realizarse antes de pasar al modo protegido)? se compila utilizando un extraño truco de GCC (.code16gcc), que permite la generación de código de 32 bits en modo real.
  • arch/x86/boot/compressed — si alguna vez se preguntó de dónde viene el mensaje "Descomprimir Linux ...", es de aquí.
+0

Creo que la URL LXR que tiene ha cambiado. -> http://lxr.free-electrons.com/source/kernel/ –

11

mí mismo, siempre he encontrado el código de programación de tareas es un poco ululante: -/

Me parece que debes hacerte un pasatiempo fuera de la industria. O una vida :-)

+3

+1 de OP. Tienes razón :) –

8

Los comentarios en el kernel pueden ser bastante divertidos. Hay algunos tips on where to find the best ones en kerneltrap.

arco/SPARC/lib/checksum.S-/* Sun, que simplemente no puede vencer a mí, simplemente no se puede. Deje de intentarlo, arch/sparc/lib/checksum.S: * darse por vencido. Estoy hablando en serio, voy a patear la mierda viva arco/SPARC/lib/* checksum.S- de ti, más de juego, apagar las luces. */

+1

¡También iba a sugerir esto! –

1

Probablemente usted sacar más provecho de leer un libro sobre la teoría del sistema operativo. En cuanto al código fuente, no tengo ni idea, pero podría descargar fácilmente el Linux kernel source y ver si puede encontrar algo que atraiga.

+0

Me gusta Inglés no ... me gusta C :) –

+0

oh, entonces Pax tiene razón, necesitas una vida :-) –

3

Es posible que desee leer o leer un libro que describe el kernel de Linux antes de profundizar en el kernel de Linux.

Los libros que vienen a la mente son:

+0

¿Qué recomendarías entre las cosas que son (1) más cortas, (2) en Internet? –

+0

El segundo libro ("El diseño del sistema operativo UNIX") es bueno, pero no le dirá nada sobre Linux. Fue escrito hace más de veinte años, mucho antes de la creación de Linux. Lo que sí te ofrece es un recorrido por el kernel UNIX de la época, describiendo los diversos módulos y algoritmos sin sumergirse en el código. Está desactualizado, pero debido a que describe una versión más simple del kernel, también facilita el conocimiento de muchos de los conceptos clave. –

1

Esto debería aparecer algo de código interesante cuando se ejecuta en el directorio src:

grep -ir "fixme" * 

también intente con otros términos cómicos, mierda, mierda, f ***, pingüino, etc.

1

Necesita volver a definir la palabra 'diversión' en su contexto. :)

Dicho esto, el kernel de Linux puede ser demasiado monstruo para asumir. Es posible que desee comenzar con algunos núcleos académicos o más primitivos para familiarizarse primero con lo que está sucediendo.También es posible que desee considerar el libro Jolix.

1

Ha sido recomendado por algunas personas que v0.0.1 de Linux es el más fácil de entender.

Sin embargo, si buscas buena fuente de kernel para leer, no iría con Linux, es una bestia de pirateo (es como decir que las fuentes de GCC son "divertidas") En su lugar, es posible que desees probar Minix o uno de los BSD (Darwin es básicamente una rama de NetBSD iirc) o incluso uno de los muchos clones gratuitos de DOS si todo lo demás da un poco de miedo ...

0

Por diversión, supongo que también se puede ver a Minix, no es exactamente Linux, pero los sistemas operativos modernos de tenenbaum son una buena lectura.

1

tratar de leer el código que implementa estos dispositivos de caracteres: /dev/zero /dev/null /dev/full

Y tal vez los generadores de números aleatorios si está inclinado. El código es sencillo y más simple que todos los demás controladores de dispositivo ya que no toca ningún hardware.

Comience en drivers/char/mem.*

6

linux-0.01.tar.gz es Kernel histórico y bueno para el inicio
es simple y pequeña y mejor para empezar a leer
(también lo han void main (void) En lugar de start_kernel() lol: D)

1

kernel.h

Algunos trucos simples que podemos aprender, tales como

#define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0])) 
... 
#define min(x, y) ... 
... 
#define container_of 
Cuestiones relacionadas