Todos los procesadores tienen alguna forma de arranque específica del procesador. Por lo general, hay alguna dirección en el espacio de direcciones del procesador, por ejemplo, 0xFFFF0000, donde el procesador lee esa memoria. El valor que encuentra utiliza como una dirección para codificar y comienza a ejecutar código en esa dirección.
Lo que harían los diseñadores de chips o placas es asegurarse de que un flash o alguna otra forma de memoria no volátil (ROM) esté asignada a ese espacio de direcciones, de modo que el código de arranque del procesador y esa dirección al código de arranque en ese especial dirección, estará allí para que el procesador la lea cuando se encienda la alimentación y se libere el reinicio (la RAM es volátil, apague la alimentación y perderá los datos, vuelva a encenderla y obtendrá algunos datos aleatorios hasta el momento RAM se escribe con otra cosa).
Entonces, el primer código que ejecuta un procesador a menudo se llama cargador de arranque, y algunos pueden debatir que la segunda mitad del cargador de palabras implica que este código puede “arrancar” el sistema operativo o cualquier aplicación que se ejecute, y también como un segundo La función proporciona una capacidad de “cargador” para los desarrolladores. Si alguna vez ha utilizado U-Boot o incluso GRUB o muchos otros cargadores de arranque, puede entender que si no toca nada, arrancará el valor predeterminado, la aplicación integrada o el sistema operativo, lo que sea.
- ¿Por qué la programación de sistemas integrados parece más difícil que la programación de sistemas?
- Cómo aprender RTOS
- ¿Puede un estudiante de BBA estudiar Sistemas Embebidos, Microcontrolador, Nanotecnología para hacer algo creativo pero relacionado con la tecnología?
- ¿Cuál es el mejor centro de capacitación para sistemas integrados en India?
- ¿Qué controlador es mejor para desarrollar productos?
Pero si interrumpe el proceso de arranque, e interrumpir ese proceso es muy específico para la plataforma y el software, a veces tiene que presionar un botón o dos pines juntos o enviar un escape o algún otro personaje en un puerto serie / UART, etc. ., y luego entra en el modo de cargador donde puede cambiar lo que arranca y / o en lugar de que el cargador de arranque cargue el programa predeterminado desde flash / ROM, podría permitirle, por ejemplo, usar XMODEM o ZMODEM o un puerto Ethernet y protocolo para cargar un programa de prueba en la RAM, luego le permite ejecutar ese programa en lugar del programa predeterminado.
Algunas personas llaman al software de arranque un gestor de arranque, incluso si no le permite interrumpir el proceso y cargar algún programa alternativo, porque ese código de arranque podría estar “cargando” la aplicación en la RAM desde el almacenamiento no volátil de todos modos.
No todos los gestores de arranque necesitan copiar la aplicación desde un almacenamiento no volátil (flash / ROM, disco duro, CD-ROM, etc.) a la RAM. Algunos sistemas y algunas aplicaciones se ejecutan desde la memoria flash / ROM. Una PC, por ejemplo: el verdadero gestor de arranque en una PC es el BIOS, que es un programa que vive y se ejecuta desde flash / ROM. Para sistemas con DRAM como una PC, de todos modos debe abrir el sistema DRAM. Se requiere una gran cantidad de código para configurar el hardware de modo que la DRAM funcione, y a veces puede ver algún estado de esto en el monitor cuando se inicia una PC. Si tiene SRAM en su sistema, entonces también puede requerir algo de inicialización, pero generalmente no es tan complicado como DRAM, y a menudo está listo instantáneamente y listo para usar con poca o ninguna configuración, diferentes procesadores y diferentes sistemas son … diferentes.
Por lo tanto, el procesador no está restablecido, de alguna manera codificado en el hardware del procesador. Ha encontrado el punto de entrada al código de arranque y comenzó a ejecutar ese código. Ese código, en general, necesita poner en funcionamiento los periféricos y la RAM y luego ejecutar la aplicación principal. O al menos se necesita tanto hardware antes de iniciar esa aplicación.
Cargar Linux en un sistema embebido puede ser tan simple como recuperar RAM y copiar el kernel de la ROM a la RAM, tal vez preparando algunos registros y tal vez llenando algunas ubicaciones de memoria que el kernel mira con tal vez el tamaño de la memoria y una línea de comando alternativa por ejemplo, luego bifurca al inicio del núcleo. No tiene que copiar el núcleo en algunos sistemas; puedes simplemente ramificarte a la ROM donde vive. Entonces Linux abrirá el resto del sistema. En una PC, el BIOS hace muchas cosas, como mostrar video, DRAM, enumerar los periféricos del bus PCI (e), mostrar el disco duro u otro sistema de archivos como dispositivos, luego usar el definido por el usuario en el disco duro del BIOS o como periférico (memoria USB o CD-ROM, etc.). El comienzo del sistema de archivos contendrá algún tipo de inicio del sistema operativo basado en las reglas del código del BIOS. Y ese puede ser otro cargador de arranque (GRUB, U-Boot, etc.), que finalmente copia el código de inicio del kernel o del sistema operativo a la RAM y luego se ramifica a él …
Los términos gestor de arranque y código de inicio se pueden usar indistintamente. Algunas personas pueden ser quisquillosas con respecto a que son diferentes o sutiles diferencias, pero generalmente tiene que ver con la complejidad, un cargador de arranque como U-Boot que tiene controladores Ethernet y controladores de sistema de archivos, etc. es, en cierta medida, un sistema operativo en él. auto, de cualquier manera U-Boot es muy complicado.
El código de inicio para un microcontrolador, por ejemplo, puede ser tan simple como unas pocas líneas de código, establecer el puntero de la pila y bifurcarse a main. Y el código de inicio / gestor de arranque puede tener cualquier nivel de complejidad intermedio. Como ya se mencionó, algunos sistemas integrados arrancan y ejecutan sus aplicaciones desde la ROM, por lo que no es necesario copiar y ejecutar. Otros requieren la copia y ejecución para la aplicación principal.
A veces, el hardware o algún otro esquema se involucra. Es posible, por ejemplo, muchas soluciones basadas en FPGA, donde el hardware lee cosas al encender desde una ROM y las copia. Luego, cuando se libera el procesador u otra lógica, su programa u otros datos están mágicamente allí en la RAM, listos para usar. Aunque cuando está apagado, vive en una ROM que normalmente no tocas. TheRaspberry Pi tiene otra solución más. El chip tiene dos procesadores, uno es el ARM y el otro es una GPU, un procesador de gráficos, un conjunto de instrucciones completamente diferente, diseñado para operaciones matemáticas, etc. Hay alguna forma, quemada en el chip (probablemente una ROM en el chip) un pequeño gestor de arranque que es suficiente para abrir y leer la tarjeta SD. Esto es GPU BTW; el BRAZO está en reinicio. Luego, la GPU lee su primer archivo del gestor de arranque de la tarjeta SD, lo copia en la RAM y lo ejecuta.
Ese gestor de arranque hace más cosas, como abrir DRAM, y luego copia el gestor de arranque de la segunda etapa (¿tercera?) Más complicado de la tarjeta SD a DRAM y luego lo ejecuta. Es probable que ese código contenga la aplicación GPU para realizar las funciones de pantalla / visualización para el sistema. También, una vez que el video y todo está listo, lee la tarjeta SD una vez más y copia la aplicación ARM de la tarjeta SD a la DRAM, completa algunos elementos en la RAM (vector de arranque en la tabla de excepciones (una rama al núcleo)) y algunos otros elementos en ubicaciones conocidas que desea el código de arranque del kernel de Linux. Luego libera restablecer en el BRAZO. El ARM en este punto se despierta con su aplicación, el núcleo, mágicamente en la RAM …