资源描述
第八章
目录
第八章 1
8.1案例简介 2
8.2 搭建MicroBlaze硬件平台 3
8.3 在EDK中配置项目软件环境 11
8.4 uClinux交叉编译环境的搭建 18
8.4.1 建立共享文件夹 18
8.4.2 建立交叉编译环境 20
8.5 uClinux基本配置 22
8.6 添加网页素材 37
8.7 应用程序验证 38
本章描述了在V2PRO开发板上进行基于WEB的系统的设计,完成了WEB SERVER的功能,可以利用网络访问该服务器的内容。
8.1案例简介
本案例实现远程主机通过Web网络对终端开发板进行操作和控制,
1. 功能描述
。
。
本应用具有实时性,高效性,信息传递稳定精确,误操作少和系统功耗低等性能特点,并具有友好的用户界面。
2. 开发环境
1) 硬件环境与工具
FPGA开发板及其相关附件(V2PRO)
硬件连线:RS232串口线,RJ45网线
网络设备:以太网集线器(HUB)
2) 软件环境与工具
EDK 8.2i(不可选用其他版本或其升级版本如8.2.03i)
Fedora Core 4(或RedHat9 Linux)操作系统
虚拟机VMware 5.0.0 build-13124
3.
本案例所使用的资源请参考/Chapter8/目录:
/Doc:本案例的操作指导文档
/Src:源代码与web网页所需资源,以及LED、DIP驱动源文件
/Tools:本案例中使用的工具。包含uClinux配置文件uclinux_v1_00_d文件夹,交叉工具链microblaze-elf-tools-20060213.tar.gz,uClinux源码包uClinux-dist-20060803.tar.bz2。
8.2 搭建MicroBlaze硬件平台
1. 启动XPS 8.2i,软件系统弹出如下对话框:
选中Base System Builder Wizard,新建一个MicroBlaze硬件平台,点击OK,进入硬件平台搭建向导。
2. 在弹出的对话框中,点击browse,选择一个目标磁盘并建立一个自己的工程文件夹,双击进入自己的工程文件夹后,点击保存,系统会自动为此项目命名为system。点击OK,进入BSB欢迎对话框。
3. 在欢迎对话框内,选择I would like to creat a new design,点击next。
4. 进入开发板选择对话框后,进行如下的系统配置:
Board Vendor: Xilinx
Board Name: XUP Virtex-II Pro Development System
Board Revision: C
点击next。
(如果Board Name没有出现如上所示选项,请先安装XUP Virtex-II Pro开发板的支持包,具体操作如下:将Xilinx_XUP_V2P开发板支持包拷贝到EDK软件目录下的board->Xilinx->boards文件夹下)
5. 进入处理器选择对话框,选择MicroBlaze处理器,点击next。
6. 进入MicroBlaze配置对话框,如下图所示,确认选择No Cache,在后续步骤中选择DDR 512MB作为内存。点击next。
7. 进入I/O端口配置对话框。选择打开RS232端口及以太网端口的中断服务,波特率设为115200,其他采用默认设置。点击next。
8. 继续配置I/O端口。如下图所示,打开所有外设端口的中断服务。点击next。
9. 由于案例中使用了操作系统,所以需要添加定时器,点击Add Periperals,在弹出的对话框中选择OPB_TIMER,点击OK。
10. 接下来的对话框显示了Timer的配置参数,这里,我们只需要一个Timer,并把中断打开。点击next。
11. 在Software Setup中只选择Memory Test,取消Peripheral selftest。
12. 余下的设置均采用默认配置即可,直至出现如下对话框,点击Generate。
13. 点击finish。系统会弹出窗口如下,选择Start using Platform Studio。
14. 此时系统会出现如下界面,即Xilinx Platform Studio的操作界面。
8.3 在EDK中配置项目软件环境
1. 由于此次实验中,我们需要在MicroBlaze处理器上需要运行uClinux,所以首先要把uClinux的配置文件uclinux_v1_00_d文件夹拷贝到EDK->sw->lib->bsp文件夹下。否则后续的配置工作将会遇到很大问题。
2. 启动EDK,打开刚才搭建的MicroBlaze硬件系统工作目录文件夹下的system.xmp文件。
3. 在打开MicroBlaze系统文件后,可以在EDK开发环境中看到相关系统信息,如下图所示。首先我们切换到Bus interface,看到MicroBlaze系统中各个模块与总线的连接情况。
4. 这里,我们需要对此系统做出如下修改。把窗口切换到port,点开debug module,点开interrupt中的net选项,选择debug module interrupt。
5. 接着点开port选项中的opb_inct_0,双击L to H。
6. 系统会弹出如下对话框。
7. 我们需要把debug module interrupt加入到connected interrupt栏中,具体方法是选中debug module interrupt,点击加号,debug module interrupt会被加入到connected interrupt栏中。如图所示。
8.添加完成后,系统提示如下。
9. 接下来进行软件平台配置,点击Software菜单,启动Software Platform Setting,如图所示。
10. 系统会弹出软件平台的配置窗口,如下图所示,可以看到共有四个可配置项:Software Platform,OS and Libraries,Drivers,Interrupt Handle。
11. 首先,我们对Software Platform进行配置,点击Software Platform,在窗口右侧为可配置参数。在OS&Library settings子窗口中,打开OS的下拉菜单,由于我们选择使用的操作系统为uClinux,所以这里选择uClinux。特别值得注意的是如果第一步没有完成,那么在点开OS的下拉菜单后,将没有uClinux选项。
12. 完成如上配置后,选中OS and Library可配置选项,这里完成开发板对uClinux的BSP进行配置,包括FLASH与MEMORY以及输入输出调试端口的配置,我们主要对以下参数进行修改:
Main memory bank:0
Main memory:DDR_512M_64M*64
Stdin:RS232_Uart_1
Stdout:RS232_Uart_1
13. Drivers及Interrupt Handle两项不需要进行配置。点击OK,退出。至此,基于uClinux的MicroBlaze软件平台配置完成,下一步是根据软件平台的配置生成针对MicroBlaze处理器的BSP与库,使uClinux与开发板的信息交互成为可能。
14. 进入EDK的Device Configuration菜单,点击Update Bitstream,XPS会进行硬件平台的生成和软件库的生成以及应用程序的编译。现在我们就可以在MicroBlaze硬件系统工作目录文件夹下的microblaze_0/ libsrc/ uclinux_v1_00_d文件夹内找到auto-config.in文件。
8.4 uClinux交叉编译环境的搭建
首先在linux下建立uClinux交叉编译环境,这需要将交叉编译器microblaze-elf-tools和内核源码包uClinux-dist解压到指定的目录下。
说明:以下假定Windows主机的D盘下有个文件夹share,这个文件夹下包括所需的交叉工具链和uClinux的压缩包。
8.4.1 建立共享文件夹
在这一步里,我们需要建立一个可以在windows与linux之间进行共享的文件夹,这里我们通过虚拟机VMware来建立。从VMware5开始,VMware支持直接将windows下的文件夹mount到linux的/mnt/hgfs/目录下,从而完成windows与linux间的共享问题。
1.运行虚拟机VMWare软件,点击菜单VM中的Settings选项。
2.在出现的设置页面中,选择Shared Folders,确认以下内容:虚拟机中设置的Windows主机共享文件夹名称为share,指向包含交叉工具链和uClinux压缩包的文件夹D:\share。系统启动后,虚拟机中会把这个共享文件夹挂接到/mnt/hgfs中。在虚拟机中的Linux系统中,用户可通过/mnt/hgfs/share/访问到Windows文件夹。
由下图可以看出已经在hgfs下出现了share文件夹
8.4.2 建立交叉编译环境
1. 在虚拟机中以用户名root登陆,在/home下建立embed文件夹,然后在embed文件下建立microblaze-elf-tools文件夹。输入命令:
>cd /home
>mkdir embed
>cd embed
>mkdir microblaze-elf-tools
2.从Windows主机中将交叉工具链(microblaze-elf-tools-20060213.tar.gz)复制到指定的目录(如D:\share)下。在虚拟机终端中输入命令:
>cp /mnt/hgfs/share/microblaze-elf-tools-20060213.tar.gz /home/embed/microblaze-elf-tools
3.解压交叉工具链的压缩包。输入命令:
>tar -zxvf microblaze-elf-tools-20060213.tar.gz
4.打开当前用户的.bash_profile文件,修改/root目录下的该文件。输入命令:
>vi ~/.bash_profile
把microblaze交叉工具链所在的路径加到PATH中,即
PATH=/home/embed/microblaze-elf-tools/bin:$PATH
5.执行如下命令,使路径设置生效:
>source ~/.bash_profile
执行如下命令,检查路径设置是否已经生效:
>echo $PATH
6.显示MicroBlaze交叉工具链的版本信息。输入命令:
>mb-gcc –v
将出现以下画面:
则说明MicroBlaze交叉工具链安装成功。
7.接下去,需要安装uClinux源码包。首先将uClinux源码包(uClinux-dist-20060803.tar.bz2)复制到指定的目录(如/home/embed)下。
>cp /mnt/hgfs/share/uClinux-dist-20060803.tar.bz2 /home/embed
切换到用户目录/home/embed中,解压uClinux源码包。使用命令:
>cd /home/embed
>tar –jxvf uClinux-dist-20060803.tar.bz2
切换到uClinux目录下。输入命令:
>cd uClinux-dist
然后显示uClinux的目录结构,输入命令:
>ls –l
将出现以下画面:
则说明uClinux源码包已经安装好了。
8.5 uClinux基本配置
1.将FPGA工程文件夹下\microblaze_0\libsrc\uclinux_v1_00_d \autoconfig.in文件拷贝到uClinux-dist下的linux-2.4.x/arch/microblaze/platform/uclinux-auto目录下。
>cd uClinux-dist
>cp /mnt/hgfs/share/autoconfig.in linux-2.4.x/arch/microblaze/platform/uclinux-auto
2.转换autoconfig.in的格式。输入命令:
>vi linux-2.4.x/arch/microblaze/platform/uclinux-auto/autoconfig.in
将出现vi的编辑界面,在vi的命令行模式输入以下命令:
>:set ff=unix
然后保存退出。输入命令:
>:wq
这样,就完成了autoconfig.in的导入工作。
3.将驱动程序文件(/Chapter8/Src/下的xup_v2pro_led.c和xup_v2pro_dip.c)复制到指定的目录(linux-2.4.x/drivers/char)下,并切换到指定的目录。
4.修改当前目录(linux-2.4.x/drivers/char)下的Config.in文件,加入以下语句:
tristate ‘LED’ CONFIG_DRIVER_LED
tristate ‘DIP’ CONFIG_DRIVER_DIP
修改后,保存退出。
5.修改当前目录(linux-2.4.x/drivers/char)下的Makefile文件,加入以下语句:
obj-$(CONFIG_DRIVER_DIP) += xup_v2pro_dip.o
obj-$(CONFIG_DRIVER_LED) += xup_v2pro_led.o
并保存退出。
6.确认当前目录是uClinux-dist。输入命令:
>pwd
7.清除以前的编译记录。输入命令:
>make mrproper –i
来彻底清楚各种不稳定的中间编译结果。
8.启动uClinux图形配置界面。输入命令:
>make menuconfig
将出现以下界面:
9.进入Vendor/Product Selection菜单。在Vendor中选择Xilinx,在Xilinx Product中选择uclinux-auto。
然后选择Exit,退到Main Menu。
10.在MainMenu选择Kernel/Library/Defaults Selection选项,进入子菜单。在Kernel Version中选择linux-2.4.x,在Libc Version中选择uClibc;另外,需要选中Customize Kernel Settings和Customize Vendor/User Settings两个选项。
然后选择Exit,退到Main Menu。在Main Menu里选择退出,会出现以下界面:
选择yes,保存新的kernel配置。
11.期间会出现如下图所示的询问,LED和DIP均选择m,表示以module模块方式加载LED及DIP驱动
12.接着,会弹出kernel个性化设置的界面。
15.在Main Menu里选择Processor type and features选项。进入Processor type and features子菜单后,选择Console on UARTLITE和Ethernet driver,然后退到Main Menu。
16.进入Memory Technology Devices(MTD)子菜单,然后进入RAM/ROM/Flash chip drivers
取消Detect flash chips by Common Flash Interface(CFI) probe与Detect JEDEC JESD21c compatible flash chips项的选择。
17.然后退出到Memory Technology Devices(MTD)菜单,进入Mapping drivers for chip access菜单:
在Mapping drivers for chip access子菜单中,确认Generic uClinux RAM/ROM filesystem support项被选中,而其他选项均没选中。
然后选择Exit,退出Main Menu。
18.在Main Menu中,进入Block devices菜单,确认Initial RAM disk(initrd) support的选项没有被选中。
然后选择Exit,退出Main Menu。
19.进入File Systems菜单:
确认选择/dev file system support(EXPERIMENTAL)和它的子选项(Automatically mount at boot和Debug devfs)。然后退出此菜单。
20.在Main Menu里选择Character Devices选项。进入Character Devices子菜单后,选择LED和DIP的状态为M(编译器会把这个驱动编译成一个独立的内核module,可以在系统中动态加载和移除―――使用insmod加载/rmmod移除这个驱动模块)
21. 然后在主菜单中选择退出,将出现以下界面:选择yes,保存设置。
22. 接着,出现Vendor/user定制的界面:
23. 选择进入core applications菜单,选择其中的enable console shell项,并取消agetty项的选择。然后选择Exit,退到Main Menu。
24. 再进入Filesystem Applications菜单,取消flatfsd选项。然后选择Exit,退到Main Menu。
然后进入Network Applications菜单,取消dhcpcd-new模块的选择。
然后选择Exit,退到Main Menu。
25. 然后进入BusyBox菜单,选择ping及httpd及其所有相关选项。然后选择Exit,退到Main Menu。
26. 回主画面,进入Miscellaneous Applications子菜单内。选中mknod选项,然后选中zmodem utils及lrz(NEW),lsz(NEW)子选项。
最后选择Exit,退到Main Menu。
27. 然后在Main Menu中选择退出,将出现以下界面:
选择yes,保存vendor/user设置。
28. 接着进行uClinux内核的编译工作。首先建立依赖关系,输入命令:
>make dep
29. 对修改后的配置进行内核编译,输入命令:
>make
若无错误出现,编译完成后,会在当前images目录下产生一个image.bin文件。
8.6 添加网页素材
1. 将/Chapter8/Src/httpd下的所有文件复制到uClinux下的vendors/Xilinx/uclinux-auto/httpd文件夹下。
> cp –fr /mnt/hgfs/Data/.httpd /home/uClinux-dist/ vendors/Xilinx/uclinux-auto/
这些文件是网页素材文件,这些文件的制作涉及HTML代码制作和JAVA代码制作,有兴趣的读者可尝试自行修改。
2. 在uClinux目录下新建一个文件夹Program用于编译cgi程序。将/Chapter8/Src/source中的getInfo.c, ledctl.c, priority.c复制到Program文件夹下。
3. 在该目录下创建一个Makefile文件,将以下内容输入这个文件内(或者从/Source目录拷贝到当前文件夹):
ifndef ROOTDIR
ROOTDIR = /home/uClinux-dist(此目录是ucLinux的解压目录)
endif
UCLINUX_BUILD_USER = 1
include $(ROOTDIR)/.config
LINUXDIR = linux-2.4.x
LINUX_CONFIG = $(ROOTDIR)/$(LINUXDIR)/.config
include $(LINUX_CONFIG)
LIBCDIR = $(CONFIG_LIBCDIR)
include $(ROOTDIR)/config.arch
LDFLAGS = -Wl -elf2flt
PATH:=$(ROOTDIR)/tools:$(PATH)
EXEC = Priority.cgi
EXEC_OBJS = Priority.o
all: $(EXEC)
$(EXEC): $(EXEC_OBJS)
$(CC) $(LDFLAGS) -o $@ $(EXEC_OBJS) $(LDLIBS)
clean:
-rm -f $(EXEC) *.elf *.gdb *.o
%.o: %.c
$(CC) -c $(CFLAGS) -I $(LINUXDIR)/include -o $@ $<
4. 将终端切换到Program文件夹,并执行make命令,生成Priority.cgi。
5. 修改Makefile
EXEC = ledctl.cgi
EXEC_OBJS = ledctl.o
重新执行make命令,生成ledctl.cgi
6. 修改Makefile
EXEC = getInfo.cgi
EXEC_OBJS = getInfo.o
重新执行make命令,生成getInfo.cgi
7. 将三个cgi文件移动到vendors/Xilinx/uclinux-auto/httpd下。
8. 将8.5中linux-2.4.x/drivers/char下已经编译成功的驱动文件xup_v2pro_led.o和xup_v2pro_dip.o复制到vendors/Xilinx/uclinux-auto/httpd下。
9. 按照8.5节中的步骤,从第6步开始接着重新坐下来,生成新的image.bin。
8.7 应用程序验证
1.将新生成的image.bin 、xup_v2pro_led.o和xup_v2pro_dip.o复制到EDK工程根目录。继续下面的配置。
2.按照下图进行连接,将一根机对机的交叉网络线连接FPGA开发板和一台PC机(此处方法不限于此,比如使用HUB相连);
3.通过“开始”菜单->程序->附件->通讯->超级终端,打开超级终端,然后进行属性配置。
一定要选对端口,每个串口连接时使用可能都不一样的,然后就是“配置”信息里面的波特率,否则不能看到正确输出。如图所示:
4.然后在EDK打开这个工程,选择Download bitstream,将bitstream下载到FPGA芯片上。
在终端上会看到如下信息:
5.在EDK上选择菜单“debug -> launch xmd”。打开XMD窗口。输入命令:
>dow –data image.bin 0x30000000
其中0x30000000是DDR内存的起始地址。
6.然后输入con 0x30000000,cpu将开始启动uClinux操作系统。
>con 0x30000000
在超级终端可看到启动过程。
7.等uClinux启动完成后,切换到/tmp目录,启动zmodem接收文件。
在超级终端上输入命令:
>cd /tmp
>lrz(每发送一次.o文件要重新lrz一次)
8. 接着在串口终端中选择“传送->发送文件”, 文件选择为前面生成的xup_v2pro_led.o和xup_v2pro_dip.o,协议选择为zmodem,点击“发送”,则会开始发送。
等待传送完成后,则在超级终端中可以输入命令检查:
>ls
查看是否有xup_v2pro_led.o和xup_v2pro_dip.o的存在
9.进行文件权限配置
>cd /
>mkdir /tmp/httpd
>cp /home/httpd/*.* /tmp/httpd/
>chmod 644 /tmp/httpd/*.*
>chmod 755 /tmp/httpd/*.cgi
>thttpd –d /tmp/httpd –c “*.cgi” &
>ps(查看thttpd的进程号)如图:
>kill 80(上面图中的thttpd进程号)
10. 然后向内核注册模块
>cd /tmp/httpd
>insmod xup_v2pro_led.o
>insmod xup_v2pro_dip.o
且可以观察开发板上是否有LED灯闪亮,来确认是否已加载LED模块成功及通过按下DIP,来确认是否已加载DIP模块。
11.接下来配置FPGA的IP地址。我们需要将主机的IP地址与FPGA的IP地址配在相同网段。例如,本机IP为192.168.238.4,则我们可以将FPGA地址分配为192.168.238.8,(最后一位可以任意选择)
输入命令:
>ifconfig eth0 192.168.238.8
12.至此,所有配置已经完成,可以在浏览器内输入http://192.168.238.8/home.html开始访问网页!可以选择优先级来控制LED的亮灭,同时DIP的反馈信息将在Java类中被定期扫描。
展开阅读全文