Red de conocimiento informático - Conocimiento informático - ¿Qué cursos se deben tomar en la dirección integrada?

¿Qué cursos se deben tomar en la dirección integrada?

1.1 ¿Cuáles son los dispositivos que 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, que se ejecutan en todos ellos; Linux. Muchas personas también aprenden primero sobre los microcontroladores y ingresan a la industria de la ingeniería electrónica desde los microcontroladores. ¿Qué productos utilizan microcontroladores y Linux en la vida diaria? 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, costo de actualización. Y esta elección no debe basarse en preferencias personales: me gustan los microcontroladores, por eso excluyo el uso de Linux. Me gusta Linux, por eso excluyo el uso de microcontroladores. Para tener más opciones, debemos comprender tanto los microcontroladores como Linux. 2 Los microcontroladores y Linux son similares en términos de operaciones de hardware.

Tomemos como ejemplo encender una lámpara.

Ya sea un microcontrolador o Linux, tenemos que hacer lo mismo:

Mire el diagrama esquemático para determinar qué pin es cada pin y determine qué nivel genera

Mire el manual del chip para determinar cómo manejar el registro

Escribir un programa

Sin embargo, la forma de escribir programas es completamente diferente para los microcontroladores y Linux. 1.3 Iluminación y uso del LCD en un microcontrolador

Cuando usamos un microcontrolador para desarrollar un programa, tenemos que escribir una función principal al principio. Aquí hay algunos códigos simplificados:

En. el programa LED Las funciones init_led, led_on y led_off las escribe usted solo. Puede nombrarlas como desee y escribir lo que desee.

Las funciones del programa LCD las escribe usted solo, por lo que puede utilizarlas libremente.

Muchos proyectos de microcontroladores no son muy complicados y pueden ser completados por 2 o 3 personas de arriba a abajo. La mayoría de las funciones dentro de ellos leen y escriben registros directamente.

Muchos proyectos de microcontroladores dependen en gran medida del hardware, entonces, ¿qué pasará si se cambia el chip? Lo primero que debes hacer es reescribir tu código.

En el programa de microcontrolador, no existe el concepto de programa de aplicación o 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). programa) ) todos funcionan. 1.4 Encender una lámpara y usar LCD en Linux

En Linux, los desarrolladores de aplicaciones no pueden manipular directamente el hardware. Por ejemplo, si desea encender una lámpara, lo siento, no puede acceder al registro directamente; debe acceder al registro a través del controlador.

¿Por qué? Hay varias razones:

Hay muchos programas ejecutándose en Linux, por lo que debes asegurarte de escribir un programa incorrecto que no dañe el sistema: digamos que escribes un programa incorrecto, entonces no puedo permitirle acceder a los registros directamente. ¿Qué pasa si falla el sistema? Querías encender una lámpara, pero leíste el registro equivocado. ¿Qué pasa si cortas la corriente? Por lo tanto, es mejor dejar la operación del hardware en manos de personas confiables: ingenieros de controladores que entienden tanto el hardware como el software.

Garantizar la portabilidad del programa: al escribir la aplicación, todos usamos funciones unificadas. Cuando cambiemos el chip en el futuro, no es necesario cambiar la aplicación, solo necesitamos proporcionar el controlador correspondiente; a esta interfaz.

Trabajo en equipo: los proyectos que utilizan sistemas Linux son generalmente de gran escala y muy profesionales, y es imposible que una sola persona los domine todos de arriba a abajo. Por ejemplo, si estás haciendo un proyecto de reconocimiento facial y hay alguien que es bueno en el procesamiento de imágenes, no le importará cuántos tipos de cámaras uses, siempre y cuando tengas las imágenes para él. Varias cámaras tienen diferentes métodos de operación de hardware, que deben ser manejados por ingenieros de controladores.

Por tanto, en Linux las aplicaciones y los controladores están separados.

Tome los programas LED y LCD como ejemplo, el código simplificado es el siguiente

Haga clic para ingresar la descripción de la imagen

Tal vez haya adivinado cómo funciona la aplicación. llama al conductor? 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.

¡Compruébalo! Desde estas interfaces, no vemos ninguna operación de registro. El controlador del programa de bajo nivel establecerá registros y operará el hardware en función de estas llamadas.

Entonces, como ingeniero de aplicaciones senior, ¿por qué debería leer esquemas, leer manuales en el chip, leer y escribir registros y tal vez depurar errores de hardware? Las necesidades de los clientes cambian constantemente y no tengo suficiente tiempo para hacer 996.

Soy un ingeniero de controladores que entiende tanto de software como de hardware. No puedo dejarte un trabajo tan importante si el sistema falla, no sé qué hacer.

Es broma, es broma, existen ventajas y desventajas de los ingenieros de aplicaciones y ventajas y desventajas de los ingenieros de controladores. Todos están tratando de mejorar el producto. Ahora existe una tendencia en la que es necesario conocer una tarea de arriba a abajo. Este es el llamado ingeniero de pila completa.

Tomando también el LED como ejemplo, la colaboración entre la aplicación y el controlador es como se muestra en la siguiente figura:

En Linux, "todo es un archivo", y necesitas Para acceder a un determinado hardware, también es necesario abrir archivos, leerlos y escribirlos. Las aplicaciones deben acceder al controlador según las interfaces de archivos estándar: abrir/leer/escribir/ioctl/mmap, etc.

¿Cómo escribir un controlador en este caso? El método más simple es que la aplicación necesita llamar a open para abrir el controlador, y luego el "programa" del controlador proporciona una función xxx_open para inicializar el hardware, la aplicación necesita llamar a write para escribir datos, y el controlador proporciona una función xxx_write para; recibir datos y operar el hardware.

xxx_open y xxx_write se utilizan para formar un programa controlador, que es el marco del controlador.

¿Cómo implementar estas funciones xxx_open y xxx_write? Tenemos que hacer algo similar a un microcontrolador, al igual que tenemos que mirar el esquema, leer el manual del chip y luego leer y escribir registros en estas funciones: esto se llama operación de hardware.

Por lo tanto, 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 concentrarse en aprender el marco del controlador.

Advertencia alta: el marco del controlador no es simple, para LED es simple, pero algunos de los controladores más complejos deben considerarse controladores "universales", y eso es un gran problema. Capítulo 2 Inicio rápido con Linux integrado

He estado charlando con compañeros del grupo estos días y uno de mis compañeros tiene un método de aprendizaje muy bueno: primero observe el alcance amplio y luego aprenda el lado profundo. . A veces hay que "no pedir una explicación clara", y muchas veces hay que tener dudas, si sigues aprendiendo, estas dudas se solucionarán de forma natural.

Por ejemplo, el curso implica conocimientos de ensamblaje. Si desea comprenderlo a fondo, debe estudiar "Arquitectura y programación ARM" después de terminar de estudiar este libro, es posible que sus compañeros ya puedan comenzar. . 2.1 ¿Cuáles son los objetivos a corto plazo?

Primero establecemos objetivos de aprendizaje: comprender rápidamente el proceso de desarrollo de Linux integrado, saber qué aprender y tener la capacidad de comunicarnos con los profesionales. 2.2 Composición del sistema Linux integrado

A continuación utilizamos analogías y lógica para deducir la composición del sistema Linux integrado. Sí, es "derivación".

De la figura anterior podemos saber:

Composición: sistema Linux integrado = cargador de arranque + kernel de Linux + sistema de archivos raíz (que contiene la APLICACIÓN).

Cargador de arranque: Su función es iniciar el kernel, entonces, ¿dónde espera para leer el kernel? ¿Leer desde dónde? Vaya a Flash y otros periféricos para leer el kernel y almacenarlo en la memoria. Por lo tanto, necesita la capacidad de controlar periféricos en Flash para facilitar la depuración de funciones de red. Entonces puedes pensar en booloader = bare metal collection, que es un programa de microcontrolador complejo.

Kernel de Linux: La función principal del kernel de Linux es iniciar la APLICACIÓN, entonces, ¿dónde se almacena la APLICACIÓN? Se guarda en el "sistema de archivos raíz".

¿Dónde se "guarda" el sistema de archivos raíz? ¿Dónde se "guarda" el sistema de archivos raíz? Está en la memoria flash, en las tarjetas SD, en otros dispositivos y tal vez incluso en la red. Por lo tanto, el kernel de Linux debe poder controlar estos dispositivos flash y de tarjetas SD.

No sólo eso, el kernel de Linux también tiene funciones de programación de procesos y gestión de memoria.

Entonces: kernel de Linux = conjunto de controladores + programación de procesos + administración de memoria, etc. 2.3 Aprendizaje de los cargadores de arranque

Hay muchos tipos de cargadores de arranque, el más común se llama u-boot.

De hecho, u-boot es básicamente una historia de un manitas, o incluso una historia de alguien que no es un manitas. Pero u-boot en sí es muy complejo. Por ejemplo, para facilitar la depuración, admite funciones de red y algunos núcleos se guardan en la partición FAT32, por lo que debería poder analizar la partición FAT32 y leer archivos en la partición FAT32.

Es muy injusto para los principiantes dedicar tanto esfuerzo a aprender u-boot pero básicamente no poder usarlo en el trabajo.

Entonces, para principiantes, mi consejo es: comprendan el papel de u-boot, sepan cómo usar los comandos de u-boot, eso es todo.

Si tu trabajo es modificar y mejorar gestores de arranque, entonces sigue aprendiendo sobre ello. 2.4 Para aprender el kernel de Linux, primero aprenda los controladores

Hemos dicho antes que el kernel de Linux = colección de controladores + programación de procesos + administración de memoria, etc. Si desea aprender el kernel de Linux, una buena forma de comenzar es con los controladores.

Pero, ¿todos necesitan aprender el kernel de Linux y todos necesitan aprender los controladores de Linux? Aparentemente no.

Como principiante, comprender algunos controladores simples es beneficioso para la comunicación laboral; comprender los conceptos de interrupciones, procesos e hilos es beneficioso para el desarrollo de controladores y aplicaciones.

Por lo tanto, se recomienda que los principiantes solo aprendan estos controladores en las primeras etapas: LED, botones e interrupciones.

Controlador LED: Este es el controlador más sencillo.

Controlador de botón: También es relativamente sencillo, introduciendo así "interrupción".

Interrupciones: Desde "interrupciones" se pueden introducir: sueño-vigilia, proceso/hilo, mecanismo de ENCUESTA, notificación asincrónica y otros conceptos. Estos conceptos son importantes tanto para el desarrollo de controladores como para el desarrollo de aplicaciones.

Por lo tanto, para los principiantes, recomiendo que se aprendan estos controladores: LED, teclas 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. Después de eso, comprenderá este conjunto de cosas en el kernel y, si estudia otras partes (como la administración de procesos, el sistema de archivos), encontrará que este conjunto de cosas es muy común.

Los controladores ALSA de cámara (VL42) y tarjeta de sonido son dos de los tipos de controladores más complejos en Linux. Si su trabajo está relacionado con ellos, será difícil aprenderlos. 2.5 ¿Quieres aprender aplicaciones de Linux? Primero aprenda algunas habilidades básicas

Para aprender, incluso si solo desea aprender el kernel más adelante, necesita algunas habilidades básicas de desarrollo y escritura de aplicaciones:

Acceso básico a dispositivos, como una pantalla LCD , dispositivos de entrada

Procesos, hilos, comunicación de procesos, sincronización de hilos y exclusión mutua

Sueño-despertador, mecanismo POLL, señales

Programación de redes

①②③ parte del conocimiento está estrechamente relacionado con el conductor y se complementan entre sí.

Después de dominar las habilidades básicas de desarrollo de controladores y las habilidades básicas de desarrollo de aplicaciones, podrá comunicarse con las personas en el lugar de trabajo sin perderse.

2.6 ¿Cómo iniciar la aplicación? Comprenda el sistema de archivos raíz

Has trabajado duro para escribir una aplicación. ¿Cómo la colocas en el tablero para que se inicie automáticamente cuando se abre?

Has escrito un programa, ¿de qué bibliotecas depende y en qué directorio de la placa se encuentran estas bibliotecas?

¿Cómo hacer un sistema actualizable? ¿Cómo garantizar que el programa pueda al menos ejecutar la versión anterior incluso si se corta la energía durante el proceso de actualización?

Todo esto requiere una cierta comprensión del sistema de archivos raíz.

Comencemos con el proceso de inicio: leerá el archivo de configuración e iniciará cada aplicación según el archivo de configuración.

Ahora que comprende el proceso de inicio, comprende los diversos componentes del sistema de archivos raíz y puede ajustar el sistema según sea necesario para crear el sistema más optimizado para su proyecto. Capítulo 3 Método de aprendizaje 3.1 No resuelvas el problema primero

Incrustado implica demasiadas cosas y es demasiado complicado. Si no hay una línea principal, tendrás que estudiar todo lo que encuentres a fondo y al final. olvidarás lo que quieres aprender.

Embedded implica conocimiento de hardware y software, y el software implica ensamblaje, arquitectura ARM, lenguaje C, Makefile y Shell, y también se divide en gestor de arranque, kernel, controlador, aplicación básica y GUI;

Por ejemplo, podemos usar Makefile, comprender sus reglas básicas y usar el Makefile que proporcionamos.

No hay necesidad de profundizar en esas funciones make porque hay Makefiles listos para usar en tu trabajo y no necesitas escribir los tuyos propios.

Por ejemplo, si utilizamos un gestor de arranque, ¿necesitamos pasar meses trabajando en u-boot? Básicamente no necesitas cambiar u-boot en el trabajo, solo usa 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 verifique estos comandos.

Los principiantes no deben desviarse de la línea principal: conceptos básicos de aplicaciones y conceptos básicos de conducción. Una vez que tengas estos dos conceptos básicos, cuando quieras aprender una determinada parte en profundidad, regresa y dedica tiempo a aprender. 3.2 Ten las ideas claras y no tengas miedo de copiar código

Asegúrate de escribir tú mismo el código del vídeo una y varias veces. ¿Por qué estoy tan familiarizado con la escritura de controladores ahora? Asistí a la clase de Huaqing Vision en 2009.

Cada vez que iba a clase, tenía que escribir esos programas de controlador para los estudiantes, después de más de una docena de veces, conocían las rutinas del núcleo y no podían. mantengan los ojos abiertos.

¿No recuerdas esas funciones? Yo tampoco lo recuerdo. Hice referencia a controladores similares, este no es un examen a libro cerrado.

Pero es importante tener una idea clara de lo que se quiere conseguir con este programa y cómo conseguirlo. Esto es lo que tienes que resolver.

¿Escribir código después de tener una idea, pero no sabes cómo escribirla? Está bien, mira el video, mira los ejemplos, luego cierra el video y mira si puedes escribirlo. 3.3 La práctica hace la perfección, solo puedo llevarte hasta cierto punto

Mi experiencia son los sistemas operativos y puedo llevarte rápidamente a comprender algunos conocimientos básicos del desarrollo de proyectos.

Cuando decides ahondar en algo, no puedo llevarte conmigo mucho tiempo. Debe consultar el código fuente y leer libros profesionales relevantes.

Por ejemplo, cuando desea profundizar en la administración de memoria del kernel, implica una gran cantidad de mapeo de tablas de páginas (debe leer el manual de arquitectura ARM), asignador SLAB, implementación de vmalloc/malloc, Implementación de mmap, interrupciones de páginas faltantes, administración de páginas entre procesos principales e secundarios, y más. A veces ni siquiera hay libros y sólo hay que morder 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 quieres convertirte en una puerta de enlace de IoT, debes profundizar en MQTT. 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 china tiene casi 100 páginas, lo que puede describirse como un libro pequeño.

Cada industria tiene su propia lógica de negocios. Mientras se dominan las habilidades básicas de programación, es necesario realizar un estudio en profundidad combinado con negocios específicos.