2.3 添加网口设备控制程序 在drivers/目录中添加网口设备控制程序dm9000.c 和dm9000.h,其中dm9000.c 主要包括以下函数: int eth_init (bd_t *bd),初始化网络设备; void eth_halt (void),关闭网络设备; int eth_send (volatile void *packet,int len),发送数据包; int eth_rx (void) 接收数据包。 用中断方式处理数据包的收发,因此还定义了另外两个函数: void InitInterrupt (void) ,中断初始化; void dm9000_irq (void) ,中断处理。 以上两个函数在cpu/arm922t/interrupts.c中被调用,最后在drivers/Makefile中加入dm9000.o。 2.4 修改Makefile 在u-boot-1.1.0/Makefile中加入 lh7a400_config : unconfig @./mkconfig $(@:_config=) arm arm922t wt-arm9 其中“arm”是CPU的种类, arm922t 是ARM CPU对应的代码目录,wt-arm9是自己开发板对应的目录。 交叉编译器安装在/opt/arm/3.3/bin/目录下,所以把CROSS_COMPILE设置成相应的路径: export CROSS_COMPILE = /opt/arm/3.3/bin/arm-elf- 2.5 生成目标文件 先运行make clean, [zeng@localhost u-boot-1.1.0]$make clean 然后运行make lh7a400_config, [zeng@localhost u-boot-1.1.0]$ make lh7a400_config Configuring for lh7a400 board... 再运行make, [zeng@localhost u-boot-1.1.0]$make 之后会生成三个文件: u-boot——ELF格式的文件,可以被大多数Debug程序识别; u-boot.bin——二进制bin文件,纯粹的U-BOOT二进制执行代码,不保存ELF格式和调试信息。这个文件一般用于烧录到用户开发板中; u-boot.srec——Motorola S-Record格式,可以通过串行口下载到开发板中。 2.6 测 试 通过JTAG口将u-boot.bin烧写到Flash的零地址,复位后执行u-boot。若运行正常,会从串口返回如下信息: U-Boot 1.1.0 (Aug 21 2004 ?18:44:37) U-BooT code: C3F80000 -> C3FA51A0 BSS: -> C3FA96EC IRQ Stack: c3f1ff7c FIQ Stack: c3f1ef7c RAM Configuration: Bank #0: c0000000 8 MB Bank #1: c1000000 8 MB …… Flash: 32 MB In: serial Out: serial Err: serial WT-ARM9 # 输入help得到所有命令列表,help command 列出该命令的功能。紧接着测试Flash和网卡,如果都正常工作的话,表明移植U-BOOT的工作基本完成,可以接着调试内核和文件系统。 结 语 BootLoader是操作系统和硬件的枢纽,它为操作系统内核的启动提供了必要的条件和参数。在移植过程中,开发人员除了要掌握BootLoader的结构和工作流程外,还要对相关硬件有一定的了解。目前,笔者移植的U-BOOT已经能够稳定地运行在开发板上,而且可以通过Flash和网络加载内核和文件系统,为后续开发,特别是驱动程序的开发奠定了良好的基础。
|