¿Qué necesitas aprender sobre la integración? ¿Qué cursos y contenidos necesito aprender para integrar?
1.1 ¿Qué dispositivos utilizan microcontroladores o Linux?
La tecnología utilizada en todos los productos electrónicos puede considerarse microcontroladores o Linux en términos de GUI, es principalmente QT/Android; , los cuales se ejecutan en Linux. El microcontrolador del que estamos hablando no utiliza un sistema operativo, pero el uso de dispositivos con microcontroladores es definitivamente mucho más 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:
Mira el diagrama esquemático para determinar qué pin es y determina qué nivel genera.
Mira el manual del chip para determinar cómo operar el registro.
Escribir programas
Sin embargo, la forma de escribir programas es muy diferente entre 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. :
Haga clic para ingresar la descripción de la imagen
Las funciones init_led, led_on y led_off en el programa LED las escribe usted solo. Puede nombrarlas como desee y escribirlas. ellos como quieras.
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 es necesario asegurarse de que los programas de mala calidad no puedan dañar el sistema: supongamos que el programa que usted escribe es relativamente malo, entonces no puedo le permite acceder a los registros a voluntad y destruir el sistema. ¿Qué hacer si falla? 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 operar el hardware deben dejarse en manos de personas confiables: déjelas en manos del ingeniero controlador, que comprende tanto el hardware como el software.
Garantizar la portabilidad del programa: al escribir aplicaciones, todos usan funciones unificadas. Al cambiar el chip en el futuro, no es necesario cambiar la aplicación, solo se debe proporcionar el controlador en función de esta interfaz.
Colaboración en equipo: los proyectos que utilizan el sistema 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 ejemplos, los códigos simplificados son los siguientes
Haga clic para ingresar la descripción de la imagen
Quizás haya adivinado aproximadamente cómo llamar ¿Conductor de la aplicación? A través de la interfaz estándar:
abrir: abre el controlador.
lectura/escritura: lectura y escritura de datos.
ioctl: pasa varios parámetros y obtiene 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.
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.
2.2 La composición de un sistema Linux integrado
Haga clic para ingresar la descripción de la imagen
Haga clic para ingresar la descripción de la imagen
Usamos analogías a continuación y deducimos lógicamente la composición del sistema Linux integrado, sí, "derivación".
Puedes saberlo en la imagen de arriba:
Composición: sistema Linux integrado = gestor de arranque + kernel de Linux + sistema de archivos raíz (contiene la aplicación).
Bootloader: Su finalidad 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. Por lo tanto, puede 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 APP. ¿Dónde se almacena la APP? 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 = colección de controladores + programación de procesos + gestión de memoria, etc. Si quieres Para aprender el kernel de Linux, comience con el controlador. La programación es una buena manera de comenzar.
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 sencillo.
Controlador de botón: También es relativamente sencillo, introduciendo "interrupciones" desde el mismo.
Interrupción: A partir de "interrupción" se pueden introducir conceptos como sueño-despertar, proceso/hilo, mecanismo de ENCUESTA, notificación asíncrona, 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 conocimientos básicos dispositivos, como LCD, dispositivo de entrada
Proceso, subproceso, comunicación de proceso, sincronización de subprocesos y exclusión mutua
Sueño-despertador, mecanismo de ENCUESTA, señal
Red programación
Las partes del conocimiento en ①②③ están estrechamente relacionadas 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 hagas la pregunta primero
Integrado implica demasiadas cosas complicadas si no tienes una línea principal. en mente, pruébalo. Tienes que estudiarlo todo a fondo, pero al final se te olvida 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 vídeo 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 hasta cierto punto
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.