¿Estoy en la dirección correcta para un sistema operativo Linux?

Recopilé el núcleo de Linux descargándolo de kernel.org, lo puse en mi escritorio y abrí la terminal. Cambié a la carpeta linux-3.2.13, tipeé mr proper .
Luego utilizo make menuconfig para configurar mi file .config. Después de que he terminado con eso y lo guardo, escribo make y el terminal comienza a comstackr los files. Después de 3 horas de compilation me preguntaba si hice algo mal.

Mis preguntas son:

  1. ¿Hice algo mal?
  2. Si no, ¿qué debería hacer ahora?
  3. ¿Cuál será la salida (por ejemplo, .bin, .elf)?
  4. Mi objective final es crear un sistema operativo que pueda colocar en un disco compacto, poner en otra computadora y ejecutar ( no un sistema operativo Ubuntu con un kernel diferente).

¿Hice algo mal?

No se ve así. Comstackr un kernel reciente consume muchos resources. Si su CPU no es reciente y no tiene mucha RAM, puede llevar mucho time.
Asegúrese de seleccionar solo los modules / características que realmente necesita, y si tiene una máquina multi-núcleo / hilo con un poco de RAM, use la opción -jX para que pueda ejecutar la compilation en paralelo. p.ej

 make -j4 

usará cuatro núcleos para la mayor parte de la compilation.

¿Cuál será la salida?

Será una image comprimida del kernel. No es un file ELF, ni realmente un ejecutable en el sentido ordinario. Está en un formatting apropiado para el gestor de arranque de su plataforma.

¿Qué debería hacer después?

Depende de lo que esté ttwigndo … (Vea aquí un CÓMO simple para instalar los modules y la image del kernel, suponiendo que esté utilizando Grub. Hay muchos otros disponibles con una búsqueda rápida, y está es mejor que busque en la documentation de su distribución actual si planea ejecutar realmente una distribución convencional con su nuevo kernel; existen requisitos de características y especificidades potencialmente initrd que deben tenerse en count).

[Mi objective es build mi propio sistema operativo]

Me temo que estás muy lejos de eso. La construcción de un sistema operativo es una tarea muy, muy compleja, y lograr que el kernel se construya es una de las partes más fáciles.

Sugeriría que vayas a Linux From Scratch y leas el "libro" estable actual. También busque en distrowatch y busque en la categoría de distribuciones "basada en la fuente", algunas pueden ser de su interés.

Estaba publicando comentarios importantes, y pensé que sería mejor publicar las cosas como una respuesta, porque la caja es más grande y puedo waffle todo lo que quiero. 🙂 Espero que disculpen mis desvaríos dementes.

Además, te advertiré ahora: soy un bastardo completo, y voy a estar recortando un poco tus alas.

Lo primero que debe decidir es: ¿qué tan buenas son sus habilidades de progtwigción? No puede escribir su propio sistema operativo sin buenas habilidades de progtwigción y una buena comprensión del hardware.

La segunda cosa que debes decidir es:

  1. ¿Estás haciendo una distribución de Linux? (por ejemplo, Debian, Ubuntu, Red Hat)
  2. ¿Estás haciendo un sistema operativo basado en Linux con un time de ejecución diferente? (por ejemplo, Android, Maemo)
  3. ¿Estás escribiendo un sistema operativo desde cero? (por ejemplo, VMS, CP / M, RT-11, Amoeba, Plan / 9)

Antes de siquiera responder estas preguntas, debe verificar nuevamente para asegurarse de que tiene sus términos caídos, para que sepa lo que está haciendo.

1. Una distribución de Linux (por ejemplo, Debian)

Si todo lo que quiere hacer es Otra distribución de Linux, comstackr el kernel es la menor de sus preocupaciones. El kernel prácticamente se comstack, dado el time suficiente y una computadora lo suficientemente grande.

Aquí hay un artículo que analiza algunos de los aspectos de hacer una distribución de Linux .

Por qué esto es más difícil de lo que piensas: cuanta más funcionalidad quieras agregar a tu distribución, más difícil será conseguir que tu distribución se construya correctamente. Tendrá que elegir entre redevise la rueda (crear su propio administrador de packages) o usar una rueda existente (RPM? APT? ¿Puertos?). En cualquier caso, estarás haciendo meses de trabajo molesto reconciliando packages mutuamente incompatibles, comstackndo, verificando que las cosas funcionen usando diferentes computadoras con diferentes CPU (no solo Intel o AMD), etcétera.

Dependiendo del scope, puede terminar teniendo que rehacer el trabajo de miles de personas por su count. ¿Aprenderías mucho de eso? ¡Absolutamente! Pero también aprenderías mucho ejecutando una distribución existente de Linux, y ocasionalmente comstackndo algunos packages por tu count para ver cómo funcionan las cosas. ¿Por qué tener que comstackr libc y cientos de otras bibliotecas si todo lo que desea ver es cómo se construye un server X?

Piénselo de esta manera: si quiere aprender a ensamblar una PC, ¿comenzaría con un cubo de transistores y un soldador, o obtendría componentes de PC y algo de documentation?

2. Un sistema operativo basado en Linux (por ejemplo, Android)

Existen bastantes sistemas operativos basados ​​en Linux con times de ejecución bastante diferentes de POSIX. Me vienen a la mente los sistemas operativos Maemo, Meego, Android y otros (a menudo integrados).

La ventaja de esto es que no necesita escribir su propio kernel. La desventaja de esto es que no solo necesita diseñar su propia distribución, sino que también deberá hacer la mayoría de los packages usted mismo. ¿ gcc comstackr gcc y libc era un dolor? Intente escribir su propio comstackdor de C compatible con ANSI-C y una stack completa de software desde cero. El hombre años escribiendo pequeñas funciones molestas (probablemente en Asamblea) que proporcionan pequeñas cantidades de satisfacción. También necesitaría aprender la mayoría de las funciones internas del kernel de Linux, y cómo se comunica con el espacio de usuario, porque esa interfaz es en lo que se basará. Debería conocer la mayoría de los numbers de syscall de memory al final de este. 🙂

¿Aprenderías mucho? ¡Absolutamente! Más de lo que creías posible. ¿Será frustrante y molesto? Oh si. Hay una razón por la que Android no fue creado por un tipo solitario con una computadora portátil en su time libre. Incluso gcc no fue construido de esa manera.

3. Un sistema operativo desde cero

Aquí es donde comienza con un comstackdor de Assembler y C y escribe su propio kernel, si su sistema operativo tiene incluso un kernel. No es universalmente el caso. Descargue todas las hojas de datos que puede encontrar para su hardware y listo. Una vez que tiene un kernel básico en ejecución, puede ver un time de ejecución. Podría escribir su propio time de ejecución, o podría asegurarse de que su kernel sea parcial o totalmente compatible con POSIX, y entonces tendrá un time de ejecución completo de GNU a su disposition. Tendrás que hacer la primera capa de bibliotecas y ejecutar gcc en tu nuevo sistema operativo.

Es esto gratificante? Sorprendentemente así. ¿Será difícil? Si los nombres Donald Knuth, Andrew Tanenbaum no significan nada para ti, probablemente deberías reconsiderarlo. Habrá muchos estudios de informática teórica. Existe una increíble cantidad de teoría que se usa para hacer que un sistema operativo sea verdaderamente desde cero. Desafortunadamente, también hay una cantidad increíble de tedio con los sistemas modernos.

Solía ​​ser, acababas de quemar una ROM con una instrucción JMP en el lugar correcto, la enchufabas, encendías y ya habías terminado. Los sistemas modernos necesitan grandes cantidades de trabajo solo para poner en funcionamiento un núcleo de CPU, configurar la memory, enumerar un dispositivo de input y comenzar un dispositivo de salida. Hay libros integers sobre cada una de estas tareas (tengo un libro en el VGA original de más de 1,000 páginas – creciendo con máquinas de 8 bits que asumí que progtwigr el VGA de 1987 hubiera sido simple, y estaba muy molesto, pero ¡Aprendí muchas cosas en el process!)

¿Por lo que debería?

Debes intentarlo . No tenga ideas erróneas sobre "tener éxito", a less que sus objectives estén establecidos desde el principio. Mantener una OS / distribución es una tarea abierta que generalmente es realizada por grandes grupos de personas. Pero incluso intentar hacer esto perfeccionará tus habilidades y te enseñará nuevas.

Por cierto, estoy hablando de (a menudo dolorosa) experiencia con respecto a la mayoría de estas cosas. He (co) escrito runtimes de bajo nivel integrados para algunas CPU (estudios / trabajo / diversión), y estoy escribiendo un sistema operativo de juguete para una CPU de juguete en este momento (eso es solo por diversión).

Siga los pasos dados en el siguiente tutorial para comstackr un kernel en Ubuntu:

Cómo comstackr un kernel: el Ubuntu Way "