Red de conocimiento informático - Conocimiento informático - Recientemente quiero aprender ARM integrado por mi cuenta. No sé si aprender arm7, arm9 o stm32.

Recientemente quiero aprender ARM integrado por mi cuenta. No sé si aprender arm7, arm9 o stm32.

No tienes mucho contacto con 51, bueno... arm9 es muy maduro, y los hay de metal desnudo: puede considerarse como un microcontrolador avanzado, pero con más funciones, y luego transición a Linux...

Lo siguiente proviene de las sugerencias del profesor Wei:

Como recién llegado, ¿cómo aprender Linux integrado? Me han hecho tantas veces esta pregunta que decidí escribir este artículo para responderla.

Antes de aprender Linux integrado, debes tener una base en el lenguaje C. No importa si tienes los conceptos básicos de montaje (solo hay unas pocas instrucciones de montaje, podrás utilizarlas una vez que las veas).

¿Hasta qué punto necesitas aprender el lenguaje C? Por supuesto, cuanto más familiarizado esté, mejor. Si no está familiarizado con él, aún necesita tener habilidades básicas. Por ejemplo, escriba una matriz para ordenar, ingrese números para sumar, etc.

La única forma de aprender el lenguaje C es escribir más programas y practicar más. No importa si hay errores en la compilación, puedes resolverlos tú mismo, no importa si cometes errores. en ejecución, puedes analizarlos tú mismo. Solía ​​​​usar VC para practicar el lenguaje C y, a menudo, intentaba escribir algunas preguntas de competencia en lenguaje C. Son preguntas de C puro, matemáticas puras y lógica pura que no involucran interfaces.

Son muy adecuadas para perfeccionar tus habilidades de programación.

Volviendo al tema, primero debemos comprender cuál es su propósito. En términos generales, el llamado Linux integrado se puede dividir en dos partes: sistema subyacente y desarrollo de aplicaciones.

Si desea desarrollar aplicaciones, debe aprender el lenguaje C, la estructura de datos, JAVA, etc. No hay nada especial a lo que prestar atención en el desarrollo de aplicaciones integradas y en el desarrollo de aplicaciones en PC. Tal vez haya dicho que es necesario realizar algunas optimizaciones en sistemas integrados. Sí, se necesitan optimizaciones, pero no hay diferencia entre programas no optimizados y el desarrollo de programas en PC. Además, cuando tenga la capacidad de optimizar, ya no necesitará hacer esta pregunta. Específico para un ejemplo determinado,

Por ejemplo, para la interfaz de desarrollo, usamos VC en PC; en Linux integrado, tal vez usemos QT o Android. En este momento, debería aprender QT. >

Programación Android. Pero la base sigue siendo C o JAVA y, sobre esta base, puedes familiarizarte con sus interfaces. Si ha estudiado VC, también necesitará dedicar tiempo a comprender esas clases y controles.

Si su propósito es aprender el sistema subyacente, esta es mi experiencia, pero puedo decir un poco.

Antes de responder a esta pregunta, déjame responder primero: Mucha gente me pregunta ¿debería aprender a conducir o postularme?

Solo puedo decir que se basa en el interés, y los controladores y las aplicaciones no están completamente separados

1 Los controladores de los que estamos hablando no se limitan al funcionamiento del hardware, sino también los principios del sistema operativo, conceptos como la programación de procesos de sueño y activación.

Si desea escribir una buena aplicación y resolver mejor los problemas que encuentra, debe conocer este conocimiento

2 El umbral para crear aplicaciones es bajo, especialmente. El ANDROID de hoy, puro JAVA. Personalmente, creo que el camino de desarrollo para el desarrollo de aplicaciones es la competencia empresarial.

Por ejemplo, en la industria de las comunicaciones, la industria de IPTV y la industria de la telefonía móvil, usted comprende las necesidades de la industria. Por lo tanto, las personas que son líderes en su mayoría hacen aplicaciones.

3. Hacer un controlador, en realidad no quiero llamarlo "crear un controlador", pero quiero llamarlo "crear un sistema subyacente". Si se hace bien, acabará con todas las industrias. He trabajado durante varios años

fabricando teléfonos móviles, IPTV y televisores para conferencias, pero estos productos no suponen ninguna diferencia para mí porque solo trabajo en la capa inferior. Su negocio no tiene nada que ver conmigo.

Cuando hay un problema en la aplicación que no pueden resolver, les daré consejos desde la perspectiva del kernel y les proporcionaré herramientas.

Personalmente, creo que soy un experto técnico responsable de la dirección de desarrollo de la capa inferior.

4. De hecho, no hay límite entre trabajar en la capa inferior y trabajar en aplicaciones. Si tienes experiencia en la capa inferior y luego haces aplicaciones, te sentirás muy seguro.

Una vez que tenga experiencia empresarial y comprenda la capa inferior, podrá formar un equipo rápidamente.

Volvemos a la pregunta de cómo aprender. ¿Qué incluye el sistema subyacente Linux integrado? No te preocupes, dame un ejemplo y lo sabrás.

1. Cuando se enciende la computadora, ¿quién muestra esas interfaces? ¿Es la BIOS y qué hace? Algunas pruebas automáticas, luego leen ventanas desde el disco duro y lo inician.

De manera similar, esta BIOS corresponde al gestor de arranque en Linux integrado. Este gestor de arranque leerá el kernel de Linux desde Flash y lo iniciará.

2. ¿Cuál es el propósito de iniciar Windows? Por supuesto que es chatear en línea o algo así. ¿Dónde están estas herramientas de Internet y chat?

En la unidad C y en la unidad D. Por lo tanto, Windows primero debe identificar la unidad C y la unidad D. En Linux lo llamamos sistema de archivos raíz.

3. Windows puede reconocer la unidad C y la unidad D, por lo que debe poder leer y escribir en el disco duro. Esto implica algo llamado controlador. Por supuesto, no se trata sólo del disco duro, sino también de la tarjeta de red, USB, etc.

Si Linux integrado puede leer y ejecutar aplicaciones desde Flash, debe tener un controlador Flash y, por supuesto, no es sólo Flash.

Detengámonos aquí primero. LINUX integrado contiene cuatro partes principales: gestor de arranque, kernel, controlador y sistema de archivos raíz.

1. Bootloader:

Es un programa básico ligeramente complejo. Pero no es nada fácil entender y escribir este programa básico. Las herramientas fáciles de usar en Windows debilitan nuestras capacidades de programación.

Mucha gente utiliza ADS y KEIL cuando juegan embebidos. ¿Puedes responder estas preguntas?

1. Una vez encendido, ¿de dónde obtiene la CPU las instrucciones para su ejecución?

Respuesta: Generalmente, los comandos se emiten desde Flash.

2. Pero Flash generalmente solo se puede leer y no se puede escribir directamente. Si uso variables globales, ¿dónde están estas variables globales?

Respuesta: Las variables globales deben estar en la memoria

3. Entonces, ¿quién pone las variables globales en la memoria?

Respuesta: Amigos que han estado usando ADS y KEIL durante mucho tiempo, ¿pueden responder? Esto requiere una "reubicación". En ADS o KEIL, el código de reubicación lo escribe la empresa que fabrica estas herramientas.

¿Lo has leído alguna vez?

4. La memoria es tan grande, ¿cómo puedo saber "qué dirección" leer "el contenido originalmente almacenado en Flash" en la memoria?

Respuesta: Esta dirección está determinada por el "script de enlace". Hay archivos dispersos en ADS y archivos similares en KEIL. ¿Pero lo has investigado?

5. Dijiste que la reubicación copia el programa de Flash a la memoria, entonces, ¿puede este programa leer Flash?

Respuesta: Sí, debe poder utilizar Flash. Por supuesto, no se trata sólo de esto, sino también de configurar el reloj para que el sistema funcione más rápido, etc.

Dejemos de hacer y responder sus propias preguntas primero. El gestor de arranque, un programa básico, en realidad tiene tres puntos clave:

1. p>2. Comprensión de los procesadores del sistema ARM

3. Conceptos básicos de programas: reubicación, pila, segmento de código, segmento de datos, segmento BSS, etc.

Para operar el hardware, es necesario leer el diagrama esquemático y el manual del chip. Esto requiere una cierta cantidad de conocimiento de hardware. No es necesario que pueda diseñar hardware, pero al menos debe poder comprenderlo. No es necesario que pueda comprender los circuitos analógicos, pero debe poder comprenderlo; circuitos digitales. Aprendí esta habilidad en la escuela y estos dos libros (cuyos títulos olvidé) son suficientes. Pero dudo que tengas la paciencia para leer estos dos libros.

No sé si existe un libro más rápido hoy en día. Si desea hacerlo rápidamente, déjelo pasar primero. Si no lo entiende, pregúntele a GOOGLE o publíquelo.

Además, debes leer el manual del chip. No busques el chino, solo lee el inglés. Es muy doloroso al principio, pero luego descubrirás que una vez que te familiarices con la gramática y el vocabulario, es fácil leer cualquier manual de chip.

Para comprender el procesador del sistema ARM, lea "Arquitectura y programación del sistema ARM" de Du Chunlei, que habla sobre instrucciones de ensamblaje, modo de excepción, MMU, etc. Estos son los tres contenidos que debes comprender.

El concepto básico de programación, por supuesto, es observar los principios de compilación. Es una pena que este tipo de libro sea definitivamente un libro celestial. Te aconsejo que no lo leas a menos que seas un súper genio. Simplemente mire el manual completo para el desarrollo de aplicaciones Linux integradas y el primer video que escribí. No se preocupe, no necesita gastar dinero. Después de seguir el vídeo y realizar experimentos relacionados con el hardware, estos conceptos quedarán claros. Todavía

encontré un segundo conjunto de libros o vídeos sobre estos conceptos que me permitirían presumir a ciegas.

Para el gestor de arranque, cuando estaba estudiando, primero leí Arquitectura y Programación ARM, luego escribí mi propio programa y experimenté con varios hardware, como GPIO, reloj, etc.

SDRAM, UART, NAND. Una vez que los haya aclarado todos, será fácil entender u-boot cuando los junte.

En resumen, para comprender el diagrama esquemático del hardware y el manual del chip, debe encontrar la información usted mismo. Por lo demás, simplemente siga el "Manual completo de desarrollo de aplicaciones integradas de Linux" y la lista de capítulos del primer vídeo para aprender.

2. Kernel:

Aquellos que quieran aprender rápidamente deben omitir el aprendizaje del kernel y aprender directamente a escribir controladores.

Si quieres convertirte en un maestro, debes tener un conocimiento profundo del núcleo. Tenga en cuenta que dije comprensión, no esperaba escribir un kernel.

Debe comprender el mecanismo de programación, el mecanismo de administración de memoria, el mecanismo de administración de archivos, etc.

Se recomiendan dos libros:

1. Lea la anotación completa del kernel de Linux, lea la delgada (la sociedad impetuosa presta atención a la velocidad, ja),

p >

2. Lectura opcional. Si desea saber qué sección, lea qué sección

3. : el hardware en sí Un marco para operar, controladores.

Es hardware nuevamente, aún necesitas poder comprender el diagrama esquemático y el manual del chip, así que practica más.

Hablando del marco del controlador, hay algunos libros que lo presentan. LDD3, o "Linux Device Driver", es un libro escrito por un extranjero. Presenta muchos conceptos y vale la pena leerlo. Sin embargo, su función

se limita a introducir conceptos. Básicamente lo uso para familiarizarme con los conceptos antes de comenzar y lo descarto después de comenzar.

Una introducción más completa a los controladores debería ser la "Explicación detallada del desarrollo de controladores de dispositivos Linux" de Song Baohua. Para ser honesto, solo he leído el catálogo y mucha gente ha dicho que lo recomiendo aquí.

Si desea comprender un área determinada en profundidad, el análisis del escenario del kernel de Linux es definitivamente una recomendación de 5 estrellas. No esperes terminarlo. Tiene más de 1.800 páginas y consta de dos volúmenes. Cuando no tengo clara una parte determinada, simplemente la repaso. Este libro puede cubrir 200 o 300 páginas de cualquier parte, que es muy detallada. Y lo llevará a analizar el código fuente del kernel con un objetivo determinado. Toma Linux 2.4 como ejemplo,

pero los principios son los mismos y se aplican a otras versiones de Linux.

¿Alguna otra presentación? Jaja, por supuesto, vídeo número 2 de Wei Dongshan Linux. lt; El manual completo para el desarrollo de aplicaciones integradas de Linux gt; no habla mucho sobre controladores y no es lo suficientemente detallado.

Así que grabé este vídeo. No solo le enseña cómo escribir y cambiar el controlador, sino que también le enseña por qué escribe y cambia el controlador de esta manera.

Cada conductor está escrito en el sitio:

1. Use una pizarra para dibujar y explicar, equivalente a que el maestro en la escuela dibuje y explique en la pizarra, muy intuitivo

Definitivamente no leo el PPT.

2. Utilice información fuente para escribir el programa en el acto, comenzando desde la línea 1, y hágalo en cada lección. Hablé de más de 20 controladores y escribí más de 20 programas.

3. Compile y pruebe después de escribir.

4. Es muy completo e incluye controladores de dispositivos de caracteres, dispositivos de bloque y controladores de tarjetas de red, así como introducción de hardware, análisis y pruebas del marco de controladores.

El contenido que se enseña en las instituciones de formación es mucho menos rico que este vídeo. He dado conferencias en muchas instituciones de formación y nunca he visto a ningún profesor atreverse a explicar y escribir código en el acto en cada clase

¡Excepto yo! No he visto a ninguna institución de formación terminar de enseñar estos contenidos; por falta de tiempo, tomará al menos un mes terminar, pero esta parte básicamente solo tiene 2 semanas de tiempo de enseñanza.

Intenta escribir un controlador para todo el hardware involucrado en la placa de desarrollo que tienes. Cuando tenga un problema, primero simplemente "piense dolorosamente". En el proceso de pensar, conectará muchos conocimientos no relacionados y finalmente lo superará.

4. Sistema de archivos raíz:

¿Alguna vez has pensado en estas dos preguntas?

1. Algunos de los productos fabricados por Linux se utilizan para monitorear. algunos fabrican teléfonos móviles y otros fabrican tabletas. Entonces, después de que se inicia el kernel y se monta el sistema de archivos raíz, ¿qué aplicación se debe iniciar?

Respuesta: El kernel no sabe ni le importa qué programa de usuario debe iniciarse. Solo inicia la aplicación init, que corresponde a /sbin/init.

Obviamente, esta aplicación debe leer el archivo de configuración e iniciar el programa de usuario (monitoreo, interfaz manual, interfaz de tableta, etc.) de acuerdo con el archivo de configuración.

Esta pregunta nos lo recuerda. que el archivo Existen algunas convenciones sobre el contenido del sistema, como /sbin/init y archivos de configuración

2. ¿Alguna vez has pensado en quién implementó el printf utilizado en los programas hola y mundo que escribiste? ? ¿de?

Respuesta: Esta función no la implementa usted, sino la función de biblioteca. Cuando se ejecuta, tiene que encontrar la biblioteca.

Esta pregunta nos recuerda que también existen bibliotecas en el sistema de archivos.

Este es el final de la simple autopregunta y respuesta. Si quieres saber más, puedes echar un vistazo al init.c de Busybox para saber qué hace el proceso de inicio.

Por supuesto, también puede leer el capítulo sobre la construcción del sistema de archivos raíz en el "Manual completo de desarrollo de aplicaciones Linux integradas".

Cuéntame sobre mi experiencia de aprendizaje.

1. Cuando estaba en la escuela, me especialicé en electrónica física. De hecho, el curso no enseñaba cómo diseñar circuitos, solo enseñaba algunos conocimientos sobre circuitos electrónicos. Diseño de PCB

Lo aprendí solo en el laboratorio. Solo he diseñado una placa de 2 capas y casi lo he olvidado. Pero conserva la capacidad de leer esquemas y manuales de chips.

2. Obtuve una licenciatura en software y estaba muy interesado en el diseño de software, pero solo aprendí lenguaje C y bases de datos. Hice muchas preguntas de competencia por interés. No tengo la capacidad para participar en la competencia, pero he aprendido muy bien el lenguaje C.

3. En el laboratorio y en la primera empresa, diseñamos algunas tarjetas PCI simples y escribimos controladores para Windows.

4. En la segunda empresa, utilizamos 51 microcontroladores. teléfono del coche y comenzó a embarcarse en el camino del software puro.

5. Comencé a sentir las deficiencias del microcontrolador, así que renuncié y estudié Linux a puerta cerrada durante medio año, comenzando con cómo operar Red Hat. Los pasos son primero observar ,

luego escribir su propio programa básico para operar el hardware y luego analizar u-boot.

Al mismo tiempo, lea los "Comentarios completos del kernel de Linux" para comprender el marco de LINUX.

Al escribir un tablero básico, se recomienda fortalecer su comprensión de las interrupciones. El kernel utiliza interrupciones para completar varias funciones.

6. Después de analizar u-boot, comenzamos la programación simple del controlador. En este momento, nuestra capacidad aún es muy débil.

7. Comencé a trabajar en ZTE y trabajé durante 2 años, escribiendo varios controladores y resolviendo varios problemas (problemas de controladores, ayudando a localizar problemas de aplicaciones), y mis habilidades se perfeccionaron.

Para resumir:

1. Libros de hardware: principios de microcomputadoras, circuitos digitales, libros de texto en colegios y universidades. Han pasado muchos años desde que me gradué y se me ha olvidado mi nombre.

2. Libros sobre Linux:

lt; Arquitectura y programación ARMgt;

lt; Manual completo para el desarrollo de aplicaciones Linux integradas; > p>

lt; controlador de dispositivo Linux gt;, el libro escrito por un extranjero

lt; explicación detallada del desarrollo del controlador de dispositivo Linux gt

lt; comentarios gt;

lt;Análisis del escenario del kernel de Linuxgt;