Red de conocimiento informático - Material del sitio web - Cómo portar Linux en magicarm2410

Cómo portar Linux en magicarm2410

Nunca antes había hecho un trasplante de botas en U, pero ahora creo que es mejor seguir este paso, así que decidí intentar trasplantar uno.

La placa que tengo es el MagicARM2410 de Zhou Ligong de la escuela. Originalmente tenía el gestor de arranque de Zhou Ligong (también debería ser U-boot), pero solo tiene un archivo bin y no se proporciona ningún código fuente (lo cual). es muy vergonzoso).

El entorno de desarrollo es mi máquina virtual Vmware Workstation versión ACE + Fedora12 + esroot.

Lectura relacionada: Dirección de descarga del código fuente de U-Boot/Linux/2011-07/38897.htm

Recomiendo encarecidamente la versión ACE de Vmware Workstation, el rendimiento es realmente potente, solía hacerlo tengo fedora8 La imagen de la máquina virtual no se puede abrir con otras versiones de Vmware Workstation, o no se puede ingresar a la interfaz gráfica. La versión ACE se puede abrir directamente.

Después de usar Fedora12 durante los últimos días, todavía me siento muy bien. Hay que decir que es la mejor versión de Fedora actualmente. No ha habido problemas con la compilación cruzada y otras operaciones, y la función de red también es muy buena.

Al configurar la máquina virtual, elija utilizar un puente de red para que Fedora12 pueda acceder fácilmente a la carpeta que se encuentra debajo. la ventana (la carpeta debe estar configurada para disfrutar) y también puede acceder fácilmente a Internet. Las personas que trabajan con Linux integrado

deben saber lo importantes que son los dos puntos anteriores.

¡esroot es mi arma secreta! Es un entorno de desarrollo de Linux integrado creado con chroot o un IDE imitador, que puede mejorar significativamente la eficiencia del desarrollo y administrar de manera efectiva los archivos relacionados con el desarrollo. Lo escribiré cuando tenga tiempo.

Ya hay mucha información en Internet sobre cómo trasplantar U-boot a 2410 (referencia/Linux/2011-02/32772.htm),

Básicamente son basado en smdk2410 (soporte de arranque U) y luego realice algunas modificaciones en su propia placa. Podemos considerar los dispositivos de la placa que se utilizarán durante la etapa del gestor de arranque. Si

su U-boot solo se usa para descargar el kernel (y el disco ram, etc.) e iniciar el sistema, entonces cpu, sdram, ni flash, nand

flash, serial y NIC son básicamente Es suficiente. smdk2410 usa la NIC cs8900, mientras que MagicARM2410 usa la DM9000. smdk2410 no tiene inicialización nand

de memoria flash, esto también debe modificarse.

Este es el problema que encontré y que me ha estado molestando durante 5 días hábiles: DM9000 no funciona.

Primero, hablemos de lo que hice al principio:

Para usar DM9000, necesitas modificar my2410.h (copiado de smdk2410.h), eliminar el contenido original de cs8900. y reemplácelo con contenido DM9000.

Como se muestra a continuación:

#define CONFIG_DRIVER_DM9000 1

#define CONFIG_DM9000_BASE 0x18000300

#define DM9000_IO 0x18000300

#define DM9000_DATA 0x18000304 p>

#define CONFIG_NET_MULTI

#defineCONFIG_DM9000_USE_16BIT 1

#define CONFIG_DM9000_NO_SROM 1

//#define CONFIG_DM9000_DEBUG 0x01

La dirección base de DM9000 es 0x18000300. Determinado por la arquitectura de hardware de MagicARM2410. Utiliza nGCS3 para la selección de chip del DM9000, por lo que la dirección base es

0x18000300. CONFIG_DM9000_NO_SROM define no leer la dirección MAC de la EEPROM en el chip del DM9000, este valor debe establecerse porque

Los pines de la EEPROM en el chip del DM9000 en MagicARM2410 no están conectados en absoluto, cómo leer la MAC cuando ¿Todas son direcciones vacías?

Si la opción CONFIG_DM9000_DEBUG está configurada en "true", el puerto serie dm9000x.c (controlador DM9000) se habilitará para generar más información de depuración.

Luego hice algunas modificaciones a dm9000x.c y agregué una función dm9000_initialize(bd_t

*bis) al final, que contiene la línea dm9000_init(dev,bis). De esta manera, U-boot inicializará el DM9000 una vez después del arranque; de ​​lo contrario, solo inicializará el DM9000 cuando use la tarjeta

(por ejemplo, usando PING, comandos tftp, etc.).

Esto parece no ser un problema. Después de encender el puerto serie, puede compilar y descargar en la placa:

U-Boot 2009.11 (30 de diciembre de 2009 - 00:04:33)

DRAM: 64 MB

Flash: 2 MB

** Advertencia: CRC incorrecto, uso del entorno predeterminado

Entrada: serial

Salida: serial

p>

Err: serial

Net: dm9000

SMDK2410 #

dm9000_init

Restablecer DM9000

Restablecer DM9000, 1er reinicio

Restablecer DM9000, 2do reinicio

ERROR: reiniciando DM9000 -> no responde<

dm9000 id no encontrado en 0x18000300: 0x00000000

La luz indicadora de la tarjeta de red no se enciende y la PC muestra que la conexión local se ha desconectado.

Surge un problema. Luego

haz{

google, baidu...

Modificar

Compilar

Descargar

p>

Enciende la computadora

Prueba

}mientras (la tarjeta de red está normal)

Pero no salí de esta Círculo vicioso durante 5 días. Poco a poco perdí el gusto por la comida y el sueño. Inquieto...

Sin embargo, durante el proceso de depuración, también aprendí más y más sobre U-boot.

Al observar dm9000x.c, descubrí que el primer paso de inicialización, dm9000_reset, no pasó. En este paso, el programa detectará si el ID de DM9000 es 0x90000a46. De lo contrario, imprimirá "restableciendo DM9000 -> no".

respondiendo"

Comencé a sospechar que la señal de habilitación del pin AEN (el AEN del DM9000 está conectado al nGCS3 de la CPU) no pasaba. Debería transmitir un nivel bajo y durar un período de tiempo. Los pines del DM9000 son demasiado densos y difíciles de medir. Resulta que no hay nada malo con la señal, de hecho está enviando un nivel bajo. Esto también muestra que la dirección base 0x18000300 es correcta

. Sigo deprimido...

Hasta hoy, después de que decidí mirar detenidamente los datos del chip DM9000, finalmente tuve un destello de inspiración y descubrí un pin RST. Este es un pin de reinicio de hardware, reinicio alto. ¡En el osciloscopio! El resultado... ¡siempre es alto! Reiniciar siempre, ¿cómo funciona el chip?

Tierra directa, reinicio, ¡la NIC se enciende! Segundo reinicio

DM9000 i/o: 0x18000300, id: 0x90000a46

DM9000: ejecutándose en modo de 16 bits

MAC: 00:14:97: 0f :00:00

Entonces la descarga de ping y tftp es normal. Lo encontré. Estoy de buen humor :)

MAC: 00:00:97:0f:00:00:00