Logiciels Libres et Systèmes Embarqués


4.4. Support de l'Ethernet

4.4.1. Configuration de U-Boot

Maintenant, pour utiliser les commandes réseaux, il suffit de modifier la macro suivante dans le fichier include/configs/ml300.h :

#define CONFIG_COMMANDS (CONFIG_CMD_DFL & CFG_CMD_SETGETDCR & \
			 CFG_CMD_IMLS &  CFG_CMD_FLASH)

Il faut ensuite configurer l'interface réseau :

#define CONFIG_ETHADDR    0x00:0x0a:0x35:0x00:0x22:0x01
#define CONFIG_IPADDR     192.168.1.134
#define CONFIG_SERVERIP   192.168.1.133
//#define CFG_TFTP_LOADADDR       0x00400000 ne marche pas, utiliser :
#define CONFIG_EXTRA_ENV_SETTINGS "loadaddr=0x00400000\0"

Si on souhaite modifier cette configuration pendant l'exécution, il suffit de taper les commandes suivantes :

uboot# setenv ethaddr 0x00:0x0a:0x35:0x00:0x22:0x01
uboot# setenv ipaddr 192.168.1.134
uboot# setenv serverip 192.168.1.133
uboot# setenv loadaddr 0x00400000

4.4.2. Modification des sources

Puisque d'une architecture à l'autre les noms des paramètres changent (généralement), il faut ajouter dans board/xilinx/ml300/xparameters.h les macros suivantes :

#define XPAR_EMAC_0_DEVICE_ID               XPAR_ETHERNET_MAC_DEVICE_ID
#define XPAR_OPB_ETHERNET_0_DEVICE_ID       XPAR_ETHERNET_MAC_DEVICE_ID
#define XPAR_OPB_ETHERNET_0_BASEADDR        XPAR_ETHERNET_MAC_BASEADDR
#define XPAR_OPB_ETHERNET_0_ERR_COUNT_EXIST \
        XPAR_ETHERNET_MAC_ERR_COUNT_EXIST
#define XPAR_OPB_ETHERNET_0_DMA_PRESENT     \
        XPAR_ETHERNET_MAC_DMA_PRESENT
#define XPAR_OPB_ETHERNET_0_MII_EXIST       XPAR_ETHERNET_MAC_MII_EXIST

Il faut ensuite modifier le fichier board/xilinx/ml300/Makefile afin de compiler le pilote de la carte réseau :

OBJS	= $(BOARD).o \
	  serial.o   \
	  ../xilinx_enet/emac_adapter.o  ../xilinx_enet/xemac.o        \
	  ../xilinx_enet/xemac_options.o ../xilinx_enet/xemac_polled.o \
	  ../xilinx_enet/xemac_intr.o ../xilinx_enet/xemac_g.o         \
	  ../xilinx_enet/xemac_intr_dma.o ../common/xipif_v1_23_b.o    \
	  ../common/xbasic_types.o ../common/xdma_channel.o            \
	  ../common/xdma_channel_sg.o ../common/xpacket_fifo_v1_00_b.o \
	  ../common/xversion.o

Maintenant, il ne reste plus qu'à compiler U-Boot, puis à charger l'exécutable avec XMD. On peut alors tester le transfert TFTP de la manière suivante :

uboot# tftp 0x800000 uImage
EMAC Initialization Started
EMAC Initialization complete
TFTP from server 192.168.1.132; our IP address is 192.168.1.133
%Filename 'uImage'.
Load address: 0x800000
Loading: T invalid RARP header
#################################
done}
Bytes transferred = 498936 (79cf8 hex)

Bien évidemment, il faut qu'un serveur TFTP soit configuré sur notre ordinateur. Pour être sûr que les données transférées sont valides, on pourrait faire une somme de contrôle avec la commande crc32 de U-Boot.