LPC2478远程温度监控(6)

2019-03-03 18:38

桂林电子科技大学毕业设计(论文)报告用纸 第 26 页 共 56 页

}

3.6 U-Boot网卡驱动移植

u-boot网络上层协议通过调用eth_init,eth_send,eth_rx,eth_halt函数实现以太网控制器的初始化、发送、接收数据和停止功能。对于不同的网络控制器,u-boot的驱动开发就是对这几个函数的编写。

以太网的移植是相对来说是比较难的,它是用DP83848C的芯片。 LPC2478和DP83848驱动部分: // 向DP83848的寄存器写一个值

void write_PHY (int PhyReg, int Value); // 读DP83848的寄存器值

unsigned short read_PHY (unsigned char PhyReg) ; // 接收缓冲区初始化,此处使用的是LAN控制器内的16KBRAM void rx_descr_init (void); // 发送缓冲区初始化,功能同上类似 void tx_descr_init (void) ; //发送MAC数据

static int mac_start_xmit(volatile void* buf, int length); //接收MAC数据

static void mac_rx(void); //MAC中断用来发送和接收数据 static void mac_interrupt(void);

u-boot提供了几个接口函数,移植的工作是完成这几个函数:

int eth_init(bd_t *bis);//以太网初始化

int eth_send(volatile void *packet, int length);//发送数据 int eth_rx(void); //接收数据 void eth_halt(void);//设备停止

eth_init主要完成下面的操作: (1) 设置MAC地址;

(2) 初始化硬件:使能MAC接口,设置RMII管理时钟频率,复位所有的MAC逻辑,

26

桂林电子科技大学毕业设计(论文)报告用纸 第 27 页 共 56 页

初始化MAC,设置最大入口个数、冲突窗和间隙,RMII/MII建立,复位物理层,使能链路层速率自动协商机制,检查链路状态,试验并配置100M/10M和全双工/半双工工作模式,建立接收和发送缓冲,使能广播功能,打开中断,打开接收和发送。

eth_send 通过以太网发送一个数据块。主要完成下面的操作: (1) 准备空闲缓冲区; (2) 将数据移动到缓冲区中; (3) 取下一个要发送数据的索引。

eth_rx 通过以太网接收一个数据块。主要完成下面的操作: (1) 判断是否已经收到一个帧;

(2) 若收到帧,则接收。接收操作包括:接收帧,获得帧的大小,将帧传给协议层。

eth_halt函数主要完成下面的操作: (1) 物理复位;

(2) 所有的MAC逻辑复位; (3) 关闭MAC时钟。

uboot中板子的IP设为192.168.0.1,子网掩码为255.255.255.0,服务器的IP192.168.0.2 ,以太网地址为0:1a:f1:00:00:00。如下所示:

图3.1

在PC机上架设好TFTP服务器(192.168.0.2),由于DP83848在配置成100Mbs的时候,会有一些问题,因此将将PC机的网卡设置为10Mbs的速率,之后就可以使用TFTP将编译好的镜像通过网线下载到flash中。

更详细的介绍见源代码。

简单介绍一下所用的配置文件include/configs/LPC2468OEM_Board.h //波特率

#define CONFIG_BAUDRATE38400 //启动参数

#define CONFIG_BOOTARGS \initrd=0xa1800000,4000k console=ttyS0,38400N8\//从norflash启动

#define CONFIG_BOOTCOMMAND\ \

#define CFG_MEMTEST_START0xA0000000/* memtest works on*/ #define CFG_MEMTEST_END0xA2000000 /* 32 MB in DRAM*/ #define CFG_ALT_MEMTEST

27

桂林电子科技大学毕业设计(论文)报告用纸 第 28 页 共 56 页

/* Memory映射

* Physical Memory Map */

#define CONFIG_NR_DRAM_BANKS1 /* we have 1 bank of DRAM */ #define PHYS_SDRAM_1 0xA0000000 /* SDRAM Bank #1 */ #define PHYS_SDRAM_1_SIZE0x02000000 /* 32 MB SDRAM */

#define PHYS_FLASH_1 0x80000000 /* Flash Bank #1 */ #define PHYS_FLASH_SIZE0x00200000 /* 2 MB */

#define CFG_FLASH_BASEPHYS_FLASH_1 /*

* Default environment settings */

#define CONFIG_EXTRA_ENV_SETTINGS \\ \a1000000 linux.bin;tftpboot a1800000 romfs.bin;bootm a1000000\\0\

\80000000 a1000000 c0000;cp.b 800c0000 a1800000 c0000;bootm a1000000\\0\

\400000;bootm a1000000\\0\

\mmc 0 a1000000 linux.bin;fatload mmc 0 a1800000 romfs.bin;bootm a1000000\\0\ \a1000000 u-boot.bin;protect off 0 2ffff;erase 0 2ffff;cp.b a1000000 0 $(filesize)\\0\

\erase;tftpboot a1000000 linux.bin;nand write a1000000 0 200000;tftpboot a1000000 romfs.bin;nand write a1000000 200000 400000\\0\

\ \ \ \

从上面可以看出来nor_boot 就是将0x80000000开始的0xd0000个字节(linux内核)复制到a1000000(SDRAM)中去,将0x800d0000开始的0xb0000个字节(romfs)复制到a1800000(SDRAM)中,然后再从a1000000启动系统。我将Nor flash 分为三个部分分别是832KB、704KB和512KB,前面两个部分是内核镜像和romfs文件系统,后面的512KB是给JFFS2文件系统,linux系统启动的时候再将JFFS2挂载。

在设置好之后就可以编译u-boot,使用命令make LPC2468OEM_Board_config 先配置文件,然后再make。编译完之后,在uboot根目录下生成u-boot.bin,然后通过J-Flash将u-boot烧写进内部flash,设置好串口工具,即可看到uboot的启动信息。如下:

28

桂林电子科技大学毕业设计(论文)报告用纸 第 29 页 共 56 页

图3.2

29

桂林电子科技大学毕业设计(论文)报告用纸 第 30 页 共 56 页

4 uClinux系统的移植

UCLINUX表示MICRO-CONTROL LINUX.即“微控制器领域中的LINUX系统”,是LINEO公司的主打产品,同时也是开放源码的嵌入式LINUX的典范之作。UCLINUX主要是针对目标处理器没有存储管理单元MMU(MEMORY MANAGEMENT UNIT)的嵌入式系统而设计的。它已经被成功地移植到了很多平台上。

uClinux系统多采用Romfs文件系统,Romfs是一种相对简单、占用空间较少的文件系统。空间的节约来自于两个方面:首先内核支持Romfs文件系统比支持ext2文件系统需要更少的代码;其次romfs文件系统相对简单,在建立文件系统超级块(Superblock)需要更少的存储空间。Romfs是只读的文件系统,禁止写操作,因此系统同时需要虚拟盘(RAMDISK)支持临时文件和数据文件的存储。

随着技术的发展,近年来日志文件系统在uClinux系统上得到了较多的应用,其中以支持NOR FLASH的JFFS、JFFS2文件系统和支持NAND FLASH的YAFFS最为流行。这些文件系统都支持掉电文件保护,同时支持标准的MTD驱动。

因此,本文的uclinux文件系统采用的是romfs+jffs2, 系统系统之后在将jffs2分区挂载。

4.1 基本内核的移植

(1)解压uClinux源码并将原来的linux内核源码删除; tar –zxvf uClinux-dist-20070130.tar.gz rm -r uClinux-dist/linux-2.0.x rm -r uClinux-dist/linux-2.4.x rm -r uClinux-dist/linux-2.6.x

(2)解压linux2.6.21内核打上相关补丁并且移动到uclinux相关目录; tar -jxvf linux2.6.21.tar.bz2

tar –zxvf linux-2.6.21-uc0-big.patch.gz | patch -p0 cat linux-2.6.21-uc0-lpc2468.diff | patch -p0 mv linux-2.6.21 uClinux-dist/linux-2.6.x (3) 安装LPC2468 BSP;

tar –zxvf uClinux-dist-20070130-nxp-lpc2468.tgz

在/linux-2.6.18/scripts/mod/sumversion.c添加#include 否则编译会出

错。然后make menuconfig 除了SDRAM和Flash基地址需要改变之外其它的按照默认的即可如图:

30


LPC2478远程温度监控(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:国内外润滑油添加剂现状及发展趋势

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: