¿Qué necesitas aprender primero para aprender Linux integrado?
Wei Dongshan: un artículo de 6.000 palabras le explica cómo aprender Linux integrado
Enlace: enlace web
Capítulo 1 La diferencia entre microcontroladores y Linux
1.1 Qué productos utilizan microcontrolador o Linux
La tecnología utilizada en todos los productos electrónicos puede considerarse microcontrolador o Linux en términos de GUI, es principalmente QT/Android, que es principalmente QT/Android; Todos se ejecutan sobre Linux.
¡Quizás no estés convencido! ¿No existen también ucos, vxwork, wince e IOS? La siguiente imagen es sobre la proporción de sistemas operativos. Es de 2016. No puedo encontrar una imagen actualizada, pero es muy útil como referencia:
El microcontrolador del que estamos hablando no utiliza un. sistema operativo, que no está en el manifiesto de la imagen de arriba. Pero usar dispositivos con microcontroladores es definitivamente mucho mejor que Linux. Muchas personas también aprenden primero sobre los microcontroladores y ingresan a la industria de la ingeniería electrónica desde los microcontroladores.
En la vida diaria, ¿qué productos utilizan microcontroladores y Linux? A continuación se muestran algunos ejemplos:
Cuando diseñamos un producto, el uso de un microcontrolador o Linux depende del costo: costo de hardware, costo de software, costo de mantenimiento y costo de actualización. La elección no debe basarse en preferencias personales: me gustan los microcontroladores, por lo que excluyo el uso de Linux. Me gusta Linux, por lo que excluyo el uso de microcontroladores. Para tener más opciones, debemos comprender tanto los microcontroladores como Linux.
1.2 Los microcontroladores y Linux son similares en términos de funcionamiento del hardware
Tomemos como ejemplo encender una lámpara,
Ya sea un microcontrolador o Linux, lo que Lo que tienes que hacer es lo mismo:
① Mire el diagrama esquemático para determinar qué pin es y qué nivel genera.
② Mire el manual del chip para determinar cómo operar el registrarse
③Escribir programas
Sin embargo, la forma de escribir programas es muy diferente entre los microcontroladores y Linux.
1.3 Encendiendo la lámpara y usando la pantalla LCD en el microcontrolador
Cuando usamos el microcontrolador para desarrollar un programa, escribimos una función principal tan pronto como comenzamos. Aquí hay algunos códigos simplificados. :
Las funciones init_led, led_on y led_off en el programa LED las escribe usted solo. Puede nombrarlas como desee y escribirlas como desee.
Las funciones del programa LCD también las escribes tú, por lo que puedes utilizarlas libremente.
Muchos proyectos de microcomputadoras de un solo chip no son muy complicados. Dos o tres personas pueden manejarlos de arriba a abajo. La mayoría de las funciones internas leen y escriben registros directamente.
Muchos proyectos de microcomputadoras de un solo chip dependen en gran medida del hardware. ¿Qué debo hacer después de cambiar el chip? Simplemente reescribe un conjunto de código.
En el programa de microcontrolador, no existe el concepto de programa de aplicación o programa controlador. Es muy probable que una persona se haga cargo del diseño del hardware, la depuración del módulo (o llamado controlador) y el desarrollo de funciones (o llamado). aplicación). Todos vivos.
1.4 Encender una lámpara y usar LCD en Linux
En Linux, los desarrolladores de aplicaciones no pueden operar directamente el hardware. Por ejemplo, si quieres encender una lámpara, lo siento. no puede acceder a él directamente. Debe acceder a los registros a través del controlador.
¿Por qué? Hay varias razones principales:
① Hay muchos programas ejecutándose en el sistema Linux y se debe garantizar que los programas de mala calidad no puedan dañar el sistema:
Supongamos que el programa que usted escribió es malo, entonces no puedo permitirlo. ¿Qué debería hacer si accede aleatoriamente a los registros y bloquea el sistema? Tu intención original era encender la lámpara, pero leíste el registro incorrecto. ¿Qué deberías hacer si apagaste la energía?
Por lo tanto, estas tareas de funcionamiento del hardware deben dejarse en manos de personas confiables: déjelas en manos del ingeniero de controladores, que comprende tanto el hardware como el software.
② Garantiza la portabilidad del programa:
Al escribir una aplicación, todos usan la misma función. Cuando cambias un chip en el futuro, no es necesario cambiar la aplicación; solo necesita usar esta interfaz. Simplemente proporcione el controlador.
③Colaboración en equipo:
. Los proyectos que utilizan sistemas Linux son generalmente relativamente grandes y existen especialidades en el campo. Es imposible que una sola persona los domine todos de arriba a abajo. Por ejemplo, cuando se trabaja en un proyecto de reconocimiento facial, hay personas que son buenas en el procesamiento de imágenes. No les importa cuántos tipos de cámaras quieras usar, siempre que tengas imágenes para ellas. Los métodos de operación del hardware de varias cámaras son diferentes y se dejan en manos de los ingenieros controladores.
Así, las aplicaciones y los controladores están separados en Linux.
Tome los programas LED y LCD como ejemplo. El código simplificado es el siguiente:
Quizás lo haya adivinado aproximadamente, ¿cómo llama la aplicación al controlador? A través de la interfaz estándar:
①abrir:
Abre el controlador.
② lectura/escritura:
Leer y escribir datos.
③ ioctl:
Pase varios parámetros y obtenga varios parámetros.
④ mmap:
Mapeo de memoria, por ejemplo, después del mapeo, la aplicación puede leer y escribir directamente en la memoria de video de la pantalla LCD.
¡Mira! Desde estas interfaces, no podemos ver el funcionamiento de los registros en absoluto. El controlador del programa subyacente establecerá registros y operará el hardware en función de estas llamadas.
Entonces, ¿por qué yo, un ingeniero de aplicaciones de alto nivel, tengo que tomarme la molestia de mirar diagramas esquemáticos, leer manuales en el chip, leer y escribir registros y tal vez incluso depurar errores de hardware? Deje estas tareas sucias y agotadoras a los ingenieros de conducción. Las necesidades de los clientes cambian constantemente y ni siquiera tengo suficiente tiempo en 996.
Así es, soy un ingeniero de controladores que comprende tanto el software como el hardware. Definitivamente no puedo dejarle un trabajo tan importante. ¿Qué pasa si mi sistema falla?
Es broma, broma, broma, hay ingenieros de aplicaciones e ingenieros de controladores que son buenos y malos. Todos están aquí para fabricar productos. Ahora existe una tendencia: es necesario comprender una tarea de arriba a abajo. Este es el llamado ingeniero de pila completa.
Tomando también el LED como ejemplo, la cooperación entre la aplicación y el controlador se muestra en la siguiente figura:
En Linux, "todo es un archivo". También necesita abrir archivos, leer y escribir archivos. Las aplicaciones deben acceder al controlador según las interfaces de archivos estándar: abrir/leer/escribir/ioctl/mmap, etc.
En este caso, ¿cómo escribir el controlador? El método más simple es: si la aplicación necesita llamar a open para abrir el controlador, el controlador proporcionará una función xxx_open para inicializar el hardware; si la aplicación necesita llamar a write para escribir datos, el controlador proporcionará una función xxx_write para recibir el; datos y operarlo.
Utilice xxx_open y xxx_write para formar un programa de controlador. Este es el marco del controlador.
¿Cómo implementar estas funciones xxx_open y xxx_write? Lo que tenemos que hacer es similar a lo que hace un microcontrolador. También necesitamos leer el diagrama del circuito y el manual del chip, y luego leer y escribir registros en estas funciones: esto se llama operación de hardware.
Entonces, ¿controlador de Linux =?Marco de controlador??Operación de hardware.
Aquellos que tengan conocimientos básicos de microcontroladores y estén familiarizados con las operaciones de hardware pueden centrarse simplemente en el marco del controlador.
Advertencia de alta energía: El marco del controlador no es simple. Es simple para los LED, pero hay controladores más complejos, que deben considerarse "universales", lo cual es terrible.
Capítulo 2 Inicio rápido con Linux integrado
He estado charlando con estudiantes en el grupo estos días y un estudiante tiene un método de aprendizaje muy bueno: primero mire el alcance amplio, y luego profundizar. A veces hay que "no pedir una explicación exhaustiva", y muchas veces te guardas las dudas y aprendes primero, y estas dudas se resolverán de forma natural.
Por ejemplo, el curso implica conocimientos de ensamblaje. Si quieres comprenderlo a fondo, debes estudiar "Arquitectura y programación ARM" cuando termines de estudiar este libro, es posible que tus compañeros ya puedan comenzar. laboral. .
2.1 ¿Cuáles son los objetivos a corto plazo?
Primero establezcamos los objetivos de aprendizaje: comprender rápidamente el proceso de desarrollo de Linux integrado, saber qué aprender y tener la capacidad de comunicarse. con los practicantes.
A continuación utilizamos la analogía y la lógica para deducir la composición del sistema Linux integrado, sí, "derivación".
Puedes saberlo en la imagen de arriba:
① Composición:
Sistema Linux integrado
= sistema de archivos raíz del kernel de Linux del gestor de arranque ( en el interior contiene APP).
② gestor de arranque:
Su propósito es iniciar el kernel. ¿Dónde puedo esperar para leer el kernel? ¿Dónde leíste? Vaya a Flash y otros periféricos para leer el kernel y almacenarlo en la memoria. Por lo tanto, es necesario tener la capacidad de controlar los periféricos en Flash y también tener funciones de red para facilitar la depuración.
Entonces, puedes pensar en booloader = bare metal collection, que es un programa de microcontrolador complejo.
③ Kernel de Linux
El objetivo principal del kernel de Linux es iniciar la APLICACIÓN. ¿Dónde se almacena la APLICACIÓN? Guardado en el "sistema de archivos raíz". ¿Dónde se almacena el "sistema de archivos raíz"? En Flash, tarjeta SD, etc., tal vez incluso en la red. Por lo tanto, el kernel de Linux debe tener las capacidades de manejo de estos dispositivos en tarjetas Flash y SD.
No sólo eso, el kernel de Linux también tiene capacidades de programación de procesos, gestión de memoria y otras funciones.
Entonces: kernel de Linux = colección de controladores, programación de procesos, gestión de memoria, etc.
2.3 ¿Quieres aprender sobre el gestor de arranque?
Hay muchos tipos de gestores de arranque, el más utilizado se llama u-boot.
En el trabajo real, u-boot básicamente se modifica o incluso no se modifica. Sin embargo, u-boot en sí es muy complicado. Por ejemplo, para facilitar la depuración, admite funciones de red y algunos núcleos se almacenan en particiones FAT32, por lo que debe poder analizar particiones FAT32 y leer archivos en particiones FAT32.
Gastar tanta energía en aprender u-boot, pero básicamente no usarlo en el trabajo, es muy hostil para los principiantes.
Así que, para los principiantes, sugiero: comprender la función de u-boot y poder utilizar los comandos de u-boot, eso es todo.
Si tu trabajo es modificar y mejorar el gestor de arranque, entonces estúdialo nuevamente.
2.4 ¿Quieres aprender el kernel de Linux o el controlador?
Hemos dicho antes que el kernel de Linux = recopilación de controladores, programación de procesos, gestión de memoria, etc. Para aprender el kernel de Linux, comenzar con el controlador es una buena manera.
Pero, ¿todos necesitan aprender el kernel y los controladores de Linux? Aparentemente no.
Como principiante, comprender algunos controladores simples es útil para la comunicación laboral; comprender los conceptos de interrupciones, procesos y subprocesos es muy beneficioso tanto para el desarrollo de controladores como para el desarrollo de aplicaciones.
Por lo tanto, para los principiantes, se recomienda aprender estos controladores solo en la etapa inicial: LED, botones e interrupciones.
①Controlador LED:
Este es el controlador más simple.
② Controlador de botón:
También es relativamente simple y a partir de él se introducen "interrupciones".
③ Interrupción:
Desde "interrupción" se pueden introducir conceptos como sueño-despertar, proceso/hilo, mecanismo de ENCUESTA, notificación asincrónica, etc. Estos conceptos son muy importantes tanto para el desarrollo de controladores como para el desarrollo de aplicaciones.
Entonces, para los principiantes, les sugiero que aprendan estos controladores: LED, botones e interrupciones.
Después de comenzar, si desea participar en el desarrollo del kernel y el desarrollo de controladores, puede estudiar varios controladores (sistema de entrada, bus I2C, bus SPI, etc.). Después de dominar varios controladores a gran escala, Ahora comprenderá las rutinas del kernel. Cuando estudie otras partes (como la administración de procesos y los sistemas de archivos), encontrará que las rutinas son muy universales.
Los controladores ALSA de cámara (VL42) y tarjeta de sonido son controladores tipo 2 relativamente complejos en Linux. Son difíciles. Si tu trabajo está relacionado con esto, estúdialos.
2.5, ¿quieres aprender aplicaciones Linux? Primero aprenda algunas habilidades básicas
Debe aprender, incluso si solo desea estudiar el kernel en el futuro, también se necesitan algunas habilidades básicas de escritura y desarrollo de aplicaciones:
① Acceso a dispositivos básicos, como LCD, dispositivos de entrada
② Proceso, subproceso, comunicación de proceso, sincronización de subprocesos y exclusión mutua
③ Sueño-despertar, mecanismo de ENCUESTA, señal
④ Programación de redes
p>Parte del conocimiento en ①②③ está estrechamente relacionado con el controlador y se complementan entre sí.
Después de dominar las capacidades básicas de desarrollo de controladores y las capacidades básicas de desarrollo de aplicaciones, podrá comunicarse con otras personas de manera amigable en el trabajo sin confundirse.
2.6. ¿Cómo se inicia la aplicación? Necesitas entender el sistema de archivos raíz
Has trabajado muy duro para escribir la aplicación, ¿cómo la pones en la placa para que se inicie automáticamente cuando enciendes la computadora?
¿De qué bibliotecas depende el programa que escribes y en qué directorio de la placa se encuentran estas bibliotecas?
¿Cómo hacer un sistema actualizable? Incluso si se corta la energía durante la actualización, ¿debemos asegurarnos de que el programa aún pueda ejecutar al menos la versión anterior?
Todo esto requiere que comprendamos el sistema de archivos raíz.
Primero comprenda el proceso de inicio: necesita leer el archivo de configuración e iniciar cada aplicación de acuerdo con el archivo de configuración.
Después de comprender el proceso de inicio, comprenderá la composición del sistema de archivos raíz y podrá adaptar el sistema como desee para crear el sistema más optimizado para su proyecto.
Capítulo 3 Métodos de aprendizaje
3.1, no rompas la cazuela y pregunta la verdad primero
Incrustado implica demasiadas cosas complicadas si no lo haces. No tienes una línea principal en tu corazón. Tienes que estudiar a fondo todo lo que encuentras, pero al final olvidas lo que quieres aprender.
Embedded implica conocimiento de hardware y software. El software incluye ensamblaje, arquitectura ARM, lenguaje C, Makefile y Shell; también se divide en gestor de arranque, kernel, controlador, aplicación básica y GUI.
Por ejemplo, usaremos Makefile, comprenderemos sus reglas básicas y usaremos el Makefile que proporcionamos.
No es necesario estudiar esas funciones make en profundidad, porque hay Makefiles listos para usar en su trabajo y no necesita escribir un conjunto de Makefiles usted mismo. ¿Por qué pasar días estudiándolo en profundidad?
Por ejemplo, si utilizamos bootloader, ¿nos llevará varios meses estudiar u-boot en profundidad? Básicamente, no es necesario modificar u-boot en el trabajo, siempre que sepa cómo usar esos pocos comandos.
Algunos estudiantes incluso compran primero un libro de shell para aprender los comandos de shell. ¿Qué comandos usamos en el video? Si no lo entiende, simplemente vaya a Baidu y mire estos comandos.
No te desvíes del hilo principal para principiantes: conceptos básicos de aplicaciones y conceptos básicos de conducción. Una vez que tengas estos dos fundamentos, si quieres estudiar una determinada parte en profundidad, simplemente dedica tiempo.
3.2. La idea debe ser clara y no tener miedo de copiar código.
Asegúrate de escribir el código en el video una o varias veces tú mismo. ¿Por qué estoy tan familiarizado con la escritura de controladores ahora? Cuando estaba tomando clases en Huaqing Vision en 2009,
tenía que escribir esos controladores para los estudiantes cada vez que iba a clase. Después de más de una docena de veces, me sabía las rutinas del núcleo con los ojos cerrados. .
¿No recuerdas esas funciones? Yo tampoco lo recuerdo. Siempre me refiero a conductores similares. Este no es un examen a libro cerrado.
Pero necesita aclarar su pensamiento. ¿Qué funciones desea lograr al escribir este programa y cómo implementar estas funciones? Es necesario aclarar esto.
¿Escribir código después de tener una idea, pero no sabes cómo escribirla? Está bien, mire el video, mire los ejemplos, luego cierre el video y vea si puede escribirlo usted mismo.
3.3, conozco muy bien mi propia dirección, solo puedo llevarte aquí
Mi especialidad son los sistemas operativos, que consiste en llevar rápidamente a todos a dominar algunos conocimientos básicos del desarrollo de proyectos. .
Si decides estudiar algo en profundidad, no podré guiarte por mucho tiempo. Debe leer el código fuente y leer libros profesionales en esta área.
Por ejemplo, cuando desea profundizar en la administración de memoria del kernel, tiene mapeo de tabla de páginas (debe leer el manual de arquitectura ARM), asignador SLAB, implementación de vmalloc/malloc, implementación de mmap , interrupción por falla de página y proceso principal Hay una gran cantidad de contenido, como la administración de páginas entre procesos secundarios, etc. A veces ni siquiera hay libros y basta con profundizar en el código.
Cuando quieres trabajar en una determinada industria, necesitas profundizar en conocimientos relacionados con la industria.
Por ejemplo, el bus CAN se puede escribir como un libro: protocolo CAN, mensajes CAN, Socket CAN, topología de red corporal, mensajes de aplicación CAN, mensajes de gestión de red CAN y mensajes de diagnóstico CAN.
Si desea ser una puerta de enlace de IoT, debe estudiar MQTT en profundidad. El protocolo MQTT es relativamente simple, pero la versión original en inglés del protocolo MQTT tiene más de 130 páginas y la versión en chino. Tiene casi 100 páginas. Es un libro pequeño.
Cada industria tiene su propia lógica de negocios. Para dominar una de las habilidades básicas de programación, es necesario estudiar en profundidad según el negocio específico.
-☆ FIN ☆-