¿Cómo comenzar a cambiar el código fuente de Linux para hacer un SO personalizado? [cerrado]

15

He oído que podemos personalizar Linux (digamos Ubuntu) como lo deseamos cambiando su código fuente y podemos crear un sistema operativo completamente nuevo. He descargado el código fuente del kernel de Linux desde el sitio web www.kernel.org. Pero al verlo, no puedo entender nada, hay tantos directorios, archivos dentro de los archivos (ya que creo que habría un solo programa grande). Quiero hacer esto como un proyecto universitario y también quiero contribuir a Linux haciendo los cambios necesarios en él. Pero después de hacer esta pregunta en algunos sitios, dijeron que el código fuente de Linux es muy grande. Puedes probar minix. Ahora estoy muy confundido.

Déme sugerencias con detalles sobre cómo debería comenzar este viaje (de cambiar el código fuente para personalizar Linux) con los pasos necesarios, junto con algunos libros para principiantes.

dubex
fuente
¿Cuál es tu objetivo? ¿Cómo te gustaría contribuir?
Spidey
Para hacer mi propio sistema operativo personalizado cambiando su código fuente (linux) ... y para aprender cómo funciona el sistema operativo y también para divertirme
dubex
El kernel llamado Linux no es Gnu / Linux (Ubuntu, Debian, RedHat, Suse, etc. distrowatch.com ) Sin embargo, la mayoría de las personas confusamente usan el término Linux para referirse a GNU / Linux + X11 +. Sin embargo, Linux es solo uno de los núcleos, que se puede usar con GNU y otros sistemas operativos. Si desea modificar Ubuntu o similar, no es lo mismo que modificar el kernel llamado Linux.
ctrl-alt-delor

Respuestas:

29

¡Bienvenido a unix.stackexchange.com!

No hay una respuesta fácil a su pregunta, y personas mucho mejores que yo han escrito libros completos sobre el tema del kernel de Linux y los sistemas operativos en general.

Sobre el alcance del proyecto: ¡escribir un sistema operativo no es una tarea simple! ¡Incluso un sistema operativo deliberadamente mínimo como Minix es algo bastante complejo! Para darle una idea sobre Linux, piense en los programas C que ha escrito hasta ahora. El promedio de cursos universitarios tiende a ser de unos pocos miles de líneas de C como máximo. Creo que mi proyecto de año final fue de alrededor de 30–35,000 líneas de C ++. El kernel de Linux tiene aproximadamente 13,000,000 líneas de código C.

¿Por qué está todo en archivos separados? Los proyectos importantes se almacenan en archivos separados por razones logísticas y prácticas. ¡Solo considere cargar un archivo de 13,000,000 líneas en un editor! Antes de abordar un gran proyecto como Linux, definitivamente debes perfeccionar tus habilidades en C hasta el punto en que la pregunta 'por qué varios archivos' se responda a sí misma. También debe poder leer el código C , no solo escribirlo. (más difícil de lo que parece al principio)

Definitivamente deberías ser muy competente en C. El núcleo lo mantienen miles de personas, y se te llamará a comprender los modismos de C personales de cada uno de ellos (concedido, dentro de los estándares de codificación del núcleo bastante rígidos, pero aún así, todos tienen su propio estilo de resolución de problemas).

Después de obtener su C fu, asegúrese de comprender los sistemas operativos. Esto te ayudará a entender el código. No todo Linux es esencial. ¡El núcleo propiamente dicho es bastante pequeño! Que hincha es:

  • Miles de controladores de hardware para varios dispositivos.
  • Capas de abstracción para varias clases de dispositivos para simplificar las API y la escritura de controladores. Por ejemplo, tenemos el VFS para sistemas de archivos, la capa de eventos para dispositivos de entrada, etc.
  • Sorprendentes cantidades de código compilado condicionalmente y archivos que atienden a las diversas arquitecturas que ejecutan Linux (no todas las máquinas Linux son PC con Intel, y algunas son increíblemente diferentes de lo que cabría esperar). El núcleo tiene que lidiar con estas diferencias, y eso significa más código.

Un problema que encontrará de inmediato es que estos componentes no son tan fáciles de desconectar, cambiar y volver a conectar. Existen numerosas interrelaciones. En resumen, cambiar los bits del núcleo es complicado.

La razón por la que la gente te sugirió Minix es simple: es un sistema operativo completo, pero no está agobiado por las necesidades de un sistema tan complejo como Linux. El código es pequeño, pero aún ofrece una funcionalidad completa. Después de todo, las primeras versiones de Linux fueron inspiradas por Minix.

Claro, Minix tiene menos soporte de hardware en estos días. ¿Y qué? Eso es una bendición! Las computadoras modernas virtualizan muy bien. Use eso para su ventaja: una VM para ejecutar Minix es tan ligera que hará que el desarrollo sea un reto.

Si su proyecto es construir un sistema operativo, podría hacer algo peor que comenzar estudiando Minix. También es posible que desee comprar y leer el libro que Minix fue escrito para acompañar, ' Sistemas operativos modernos de Andrew Tanenbaum '.

También debe establecer sus objetivos y definir sus términos con precisión . Si su propia definición de un SO es la de Microsoft (un SO con una GUI y un paquete de software completo), ¡es posible que tenga un proyecto muy largo! Cientos de miles de personas han trabajado desde la década de 1960 para llevarnos a donde estamos ahora, después de todo.

Finalmente, recuerde el grito de batalla del informático: '¡ nunca reinvente la rueda! '(por supuesto, nos gusta hacer excepciones al aprender. Y por diversión :))

Alexios
fuente
1
ordenadores del [link] (www.linuxfromscratch.org) de llenado completo mi sueño ... gracias por mostrar interés mi pregunta
Dubex
LFS es fantástico para aprender cómo funciona el espacio de usuario de un sistema POSIX. Hasta donde sé, es específico de Linux, por lo que no se trata de modificar el núcleo en una dirección inusual (como lo haría al hacer su propio núcleo). Pero está fuera del punto, porque una vez que su núcleo se aleje de POSIX, el espacio de usuario será incompatible y tendrá que ser portado o reimplementado.
Alexios
Perdón por la incomprensión ... Pero no quise decir que haré mi propio núcleo (ya que no tengo mucho talento :)). Quiero hacer un cambio en el código fuente para que pueda verse diferente de los demás y parece que esa es mi propia creatividad. Por ejemplo: quisiera algún tipo de animación con sonido (que he hecho), en la pantalla cuando Linux (digamos ubuntu) se inicia con algún software de reconocimiento de voz instalado en él. Una vez más gracias.
dubex
1
En ese caso, está haciendo su propia distribución de Linux, y no un sistema operativo diferente. LFS es la herramienta adecuada para eso. ¡Buena suerte!
Alexios
1
@Alexios, muy buena y descriptiva respuesta, gracias.
0xAF
7

Verifique el proyecto Linux From Scratch . Como su nombre indica, contiene todos los detalles necesarios para construir su propia distribución de Linux

Matcheek
fuente
4

Creo que lo primero que debe definir es "cuáles son los cambios que desea traer al sistema operativo". Hasta que decida esto, realmente no llegará a ninguna parte. No hay un "camino único" de aprendizaje.

Además, creo que deberías definir mejor qué quieres decir con SO. Una gran parte (una parte importante) del código fuente de Ubuntu está fuera de Linux. Linux es solo el núcleo (a veces se lo conoce como sistema operativo , especialmente en los círculos académicos, de ahí la confusión), y por lo tanto tiene el trabajo "simple" de:

  • gestionando recursos.
  • comunicando con el hardware.

Cualquier otro cambio que ocurriría en un nivel diferente, si se trata de las utilidades de espacio de usuario básico (a menudo referido como utils ), la interfaz gráfica de usuario, las aplicaciones básicas de una distribución, etc.

Sin embargo, si todavía está decidido a aprender cómo hackear el kernel, tal vez debería comenzar con esta pregunta , la pregunta más votada en este sitio;)

rahmu
fuente
lo siento por no ser tan específico al hacer una pregunta ... pero en realidad no tengo idea de todo esto en detalle. En realidad, quiero algún tipo de animación (con sonido) en la pantalla cuando Linux (por ejemplo, ubuntu) se está iniciando ... por favor, dame una idea sobre cómo explorar todos estos campos y cómo avanzar en cualquier campo específico (por ejemplo, gui con la comunicación con el hardware ) ...
dubex
@dubex comienza con plymouth y mira las bibliotecas de Linux para reproducir sonido. SDL_mixer podría ser fácil.
sourcejedi
2

Esto puede ser un poco fuera de lugar, pero si desea aprender sobre el kernel de Linux y comenzar a desarrollarlo, realmente debería buscar en los novatos del kernel . Es un sitio que le da una idea de la mecánica del kernel (como Alexios lo hizo de una manera excelente), pero también le permite elegir una pequeña tarea para manejar (ser un llamado conserje del kernel). Es una excelente manera de aprender, ¡y lo recomiendo encarecidamente!

Tommy
fuente