Compilé el kernel de Linux descargándolo de kernel.org, lo puse en mi escritorio y abrí la terminal. Cambié a la carpeta linux-3.2.13, escribí mr proper
.
Luego lo uso make menuconfig
para configurar mi archivo .config. Una vez que termino con eso y lo guardo, escribo make
y la terminal comienza a compilar los archivos. Después de 3 horas de compilación me preguntaba si había hecho algo mal.
Mis preguntas son:
- ¿Hice algo mal?
- Si no, ¿qué debo hacer a continuación?
- ¿Cuál será el resultado (por ejemplo, .bin, .elf)?
- Mi objetivo final es crear un sistema operativo que pueda colocar en un disco compacto, colocarlo en otra computadora y ejecutar (noun sistema operativo Ubuntu con un kernel diferente).
Respuesta1
¿Hice algo mal?
No lo parece. Compilar un kernel reciente consume muchos recursos. Si su CPU no es reciente y no tiene mucha RAM, puede tardarmuylargo.
Asegúrese de seleccionar solo los módulos/características que realmente necesita y, si tiene una máquina multinúcleo/hilo con un poco de RAM, use la -jX
opción para make
que pueda ejecutar la compilación en paralelo. p.ej
make -j4
Utilizará cuatro núcleos para la mayor parte de la construcción.
¿Cuál será el resultado?
Será una imagen del núcleo comprimida. No es un archivo ELF, ni tampoco un ejecutable en el sentido habitual. Está en un formato apropiado para que lo maneje el gestor de arranque de su plataforma.
¿Qué debería hacer después?
Depende de lo que estés haciendo... (Veraquípara obtener un CÓMO sencillo para instalar los módulos y la imagen del kernel, suponiendo que esté utilizando Grub. Hay muchas otras disponibles con una búsqueda rápida, y es mejor que busques en la documentación de tu distribución actual si realmente planeas ejecutar una distribución principal con tu nuevo kernel; existen requisitos de funciones y potencialmente especificidades de initrd que deben tenerse en cuenta. ser tomado en cuenta.)
[Mi objetivo es construir mi propio sistema operativo]
Me temo que estás muy lejos de eso. Construir un sistema operativo es una tarea muy, muy compleja, y lograr que se construya el kernel es una de las partes más fáciles.
Te sugiero que te dirijas aLinux desde ceroy lea el "libro" estable actual. también miradistribucióny busque en la categoría de distribuciones "Basadas en fuentes", algunas podrían ser de su interés.
Respuesta2
Estaba publicando comentarios importantes y pensé que sería mejor publicar cosas como respuesta, porque el cuadro es más grande y puedo decir todo lo que quiera. :) Espero que disculpen mis desvaríos locos.
Además, te lo advierto ahora: soy un completo bastardo y te cortaré un poco las alas.
Lo primero que debes decidir es: ¿qué tan buenas son tus habilidades de programación? No puedes escribir tu propio sistema operativo sin buenas habilidades de programación y una buena comprensión del hardware.
Lo segundo que debes decidir es:
- ¿Estás haciendo una distribución de Linux? (por ejemplo, Debian, Ubuntu, Red Hat)
- ¿Está creando un sistema operativo basado en Linux con un tiempo de ejecución diferente? (por ejemplo, Android, Maemo)
- ¿Estás escribiendo un sistema operativo desde cero? (por ejemplo, VMS, CP/M, RT-11, Amoeba, Plan/9)
Antes incluso de responder estas preguntas, debes verificar dos veces para asegurarte de que tienes los términos establecidos, para saber lo que estás ganando.
1. Una distribución de Linux (por ejemplo, Debian)
Si todo lo que quiere hacer es otra distribución de Linux, compilar el kernel es la menor de sus preocupaciones. El kernel prácticamente se compila solo, si se le da suficiente tiempo y una computadora lo suficientemente grande.
Aquí hay unArtículo que analiza algunos de los aspectos de la creación de distribuciones de Linux..
Por qué esto es más difícil de lo que piensas: cuantas más funciones quieras agregar a tu distribución, más difícil será lograr que tu distribución se construya correctamente. Tendrás que elegir si reinventar la rueda (crear tu propio administrador de paquetes) o usar una rueda existente (¿RPM? ¿APT? ¿Puertos?). En cualquier caso, estarás haciendo meses de trabajo molesto reconciliando paquetes mutuamente incompatibles, compilando, verificando que las cosas funcionen usando diferentes computadoras con diferentes CPU (no solo Intel o AMD), etcétera.
Dependiendo del alcance, es posible que tengas que rehacer el trabajo de miles de personas por tu cuenta. ¿Aprenderías mucho de ello? ¡Absolutamente! Pero también aprenderá mucho ejecutando una distribución existente de Linux y, ocasionalmente, compilando algunos paquetes por su cuenta para ver cómo funcionan las cosas. ¿Por qué tener que construir libc y cientos de otras bibliotecas si lo único que quieres ver es cómo se construye un servidor X?
Piénselo de esta manera: si quiere aprender a ensamblar una PC, ¿comenzaría con un cubo de transistores y un soldador, o adquiriría componentes de PC y alguna documentación?
2. Un sistema operativo basado en Linux (por ejemplo, Android)
Hay bastantes sistemas operativos basados en Linux con tiempos de ejecución bastante o drásticamente diferentes de POSIX. Me vienen a la mente Maemo, Meego, Android y otros sistemas operativos (la mayoría de las veces integrados).
La ventaja de esto es que no es necesario escribir su propio kernel. La desventaja de esto es que no sólo necesitarás diseñar tu propia distribución, sino que también tendrás que crear la mayoría de los paquetes tú mismo. ¿Pensaste en compilar gcc
y libc
fue un fastidio? Intente escribir su propio compilador de C compatible con ANSI-Cyuna pila de software completa desde cero. Muchos años de escribir pequeñas funciones molestas (probablemente en ensamblaje) que brindan pequeñas cantidades de satisfacción. También necesitarás aprender la mayoría de los aspectos internos del kernel de Linux y cómo se relaciona con el espacio de usuario, porque esa interfaz es sobre la que construirás. Deberías saber de memoria la mayoría de los números de llamadas al sistema al final de este artículo. :)
¿Aprenderías mucho? ¡Absolutamente! Más de lo que jamás creíste posible. ¿Será frustrante y molesto? Oh sí. Hay una razón por la que Android no fue creado por un hombre solitario con una computadora portátil en su tiempo libre. Incluso gcc
no fue construido de esa manera.
3. Un Sistema Operativo desde cero
Aquí es donde comienzas con un ensamblador y un compilador de C y escribes tu propio kernel, si es que tu sistema operativo tiene un kernel. No es el caso universal. Descargue todas las hojas de datos que pueda encontrar para su hardware y listo. Una vez que tenga un kernel básico ejecutándose, podrá ver el tiempo de ejecución. Podría escribir su propio tiempo de ejecución, o podría asegurarse de que su kernel sea total o parcialmente compatible con POSIX, y entonces tendrá un tiempo de ejecución GNU completo a su disposición. "Simplemente" tendrás que crear la primera capa de bibliotecas y comenzar gcc
a ejecutar tu nuevo sistema operativo.
¿Es esto gratificante? Sorprendentemente. ¿Será difícil? Si los nombres Donald Knuth y Andrew Tanenbaum no significan nada para usted, probablemente debería reconsiderarlo. Habrá mucho estudio de informática teórica. Hay una cantidad increíble de teoría que se necesita para crear un sistema operativo realmente desde cero. Desafortunadamente, los sistemas modernos también resultan increíblemente aburridos.
Solía ser que simplemente grababas una ROM con una instrucción JMP en el lugar correcto, la conectabas, la encendías y listo. Los sistemas modernos necesitan grandes cantidades de trabajo solo para poner en funcionamiento un núcleo de CPU, configurar la memoria, enumerar un dispositivo de entrada e iniciar un dispositivo de salida. Hay libros completos sobre cada una de estas tareas (tengo un libro sobreoriginalVGA que tiene más de 1000 páginas; al crecer con máquinas de 8 bits, supuse que programar el VGA de 1987 habría sido simple y estaba muy molesto, ¡pero aprendí muchas cosas en el proceso!)
¿Por lo que debería?
absolutamente deberíasintentar. No tenga conceptos erróneos sobre "tener éxito", a menos que sus objetivos estén establecidos desde el principio. Mantener un SO/distribución es unaAbiertotarea que normalmente realizan grandes grupos de personas. Pero incluso intentar hacer esto perfeccionará tus habilidades y te enseñará otras nuevas.
Por cierto, hablo por experiencia (a menudo dolorosa) con respecto a la mayoría de estas cosas. He (co)escrito tiempos de ejecución integrados de bajo nivel para algunas CPU (estudios/trabajo/diversión), y en este momento estoy escribiendo un sistema operativo de juguete para una CPU de juguete (eso es todo por diversión).
Respuesta3
Siga los pasos indicados en el siguiente tutorial para compilar un kernel en Ubuntu: