仓储管理论文

您当前的位置:学术堂 > 管理学论文 > 仓储管理论文 >

仓储系统移植及环境搭建

来源:学术堂 作者:朱老师
发布于:2016-05-12 共8165字
    本篇论文目录导航:

  【题目】网络化智能化仓储管理系统探析
  【第一章】物联网与仓储管理体系的融合分析绪论
  【第二章】仓储管理系统整体框架概述
  【第三章】仓储系统移植及环境搭建
  【第四章】仓储管理系统主程序设计
  【第五章】仓储系统采集终端设计
  【结论/参考文献】多仓库远程移动监控的实现研究结论与参考文献
  
  第三章系统移植及环境搭建
  
  3.1 U-boot移植
  
  3.1.1交叉编译环境的搭建
  
  随着嵌入式的发展,在硬件资源有限的条件下,交叉编译越来越重要。作为和主机编译相对应的编译方法,它有独特的应用领域和应用必要。主机编译固然是方便快捷,并且不存在兼容问题。但通常在嵌入式开发时,我们的目标机,本系统为ARM机,所拥有的硬件资源是不足以安装编译软件并进行软件开发的,再者ARM在启动之初,是没有bootloader这段关键的引导程序的,也没有内核代码。所以我们不得不采用交叉编译的方法,即在PC机上Linux操作系统下进行前期的bootloader编译和移植、内核裁剪及根文件系统的制作。
  
  首先要进行工具链的安装:我们可以自己下载原始代码并编译工具链。Crosstools-ng可以从下载。但下载得到的工具是不能使用的,我们还需要将诸多补丁打上。这些补丁的下载地址为在进行交叉编译工具链安装之前,我们首先要安装必备的软件:命令为sudoapt-get  intall  gawk  autotools-dev  automake  texinfo  libtool  cvs  patch  bison  flexlibncurses5-dev.添加必要的环境变量使编译过程中能找到目标文件。打开/etc/bash.bashrc文件并添加路径:export PATH=$PATH:/home/linux/toolchain/bin.然后退出并保存文件,再重新配置文件:$source /etc/bash.bashrco完成以上步骤,还要进行工具链的测试,看是否安装成功。Sarm-cortex_a8-linux-gnueabi-gcc一Usin}built-in specs.Target:arm-cortex_a8-linux-gnueabi.
  
  3.1.2 u-boot移植过程
  
  Linux操作系统的启动流程为:1.硬件上电,三星公司在芯片上固化的32K的代码运行,会判断运行状态,并选择启动模式。2.CPU指针会跳转到reset中断向量处执行相应代码。3.开始加在Bootloader代码。4.Bootloader将加载内核代码。5.内核代码执行,进入循环等待。6.开始执行第一个空间用户的程序。[12]
  
  在PC机上存在一个Basic Input/Output System系统,当开机的时候这个系统能完成硬件的初始化和各个处理器的配置等功能。但是在嵌入式的系统中,不可能支持这么大的资源开销来完成这个功能,所以嵌入式设备一般会使用Bootloader程序来完成硬件初始化和各个处理器配置这些工作。Bootloader能够完成内存空间的映设图,并实现内核的搬运,再把系统的控制权交还给系统内核完成启动。当前应用比较广泛的Bootloader有Vi Vi、u-boot、redboot、Blob,ARMboot等。本系统采用S5pv210实验板,而本实验板最佳的Bootloader为U-boot系统。
  
  U-boot支持ARM、MIPS、XScale等多种架构,最早由德国DENX小组开发,并作为一种通用型的Bootloader被使用。[13]
  
  U-boot的自启动大致可以分为两个阶段。第一个阶段是由汇编代码组成的。主要完成关闭MMU、看门狗和中断,将CPU的模式设置成SVC;初始化时钟和一部分硬件控制器;映射堆栈;将U-boot重新定位到内存里;最后实现第二阶段的跳转,即汇编程序转入C语言程序。第一阶段的流程图如图 3.1 所示。
  
  因为在第一阶段设置的堆栈,使得第二阶段可以顺利的实现C语言的实现。这以阶段可以完成另一部分的硬件初始化,主要包括NAND  Flash、网卡和串口等。然后进入main_loop函数,进行死循环等待接收用户发出指令[14].
  
  1.通常选择在 这个网站上下载最新版本的u-boot.
  
  2.将下载下来的u-boot源码放在指定目录下。
  
  3.S5pv210的信息添加到相关的文件中,主要包括u-boot-2010.03/Makefile,
  u-boot-2010.03/include/config/smdkc210.h,u-boot-2010.03/start.S,
  u-boot-2010.03/board/Samsung/smdkc210,u-boot-2010.03/lib_arm这五个文件。
  
  4.将这五个文件进行修改过后,再编译u-boot-2010.03
  
  5.由 于 是S5pv210, 要 针 对 其 硬 件 资 源 做 出 相 应 的 修 改 . 修 改include/config/S5pv210.h
  
  6.根据S5pv210的芯片手册将lowlevel_init.S,mem_setup.S两个文件复制到board/samseng/s5pv210使内存能够初始化。[16]
  
  7.将编译过S5pv210.c复制到board/smsung/s5pv210文件夹下,将已存在的S5pv210.c覆盖掉。这个文件中已经包含了实验板初始化需要的函数。
  
  8.在board/Samsung/s5pv210/下面创建nand_cp.c这个文件。
  
  9.将board/Samsung/s5pv210/Makefile进行如下的修改。
  将SOBJS:=lowlevel_init.o修改成SOBJS:=lowlevel_init.o mem_setup.o
  再将COBJS-y:=S5pv210.o修改成COBJS-y:=s5pv210.o nand_cp.o
  
  10.将board/samsun/s5pv210/config.mk进行如下修改
  TEXT_BASE=0X34800000修改成TEXT_BASE=0x2FF80000
  
  11.将cpu/arm_cortexa8/start.S进行修改
  
  12.修改链接的文件cpu/arm_cortexa8/u-boot.lds
  
  13.把S5pv210.h  S5pc1x0.h  hardware.h这 三 个 文 件 复 制 到include/asm-arm/arch-s5pc1xx/下面。
  
  14.将s5p_nand.c复制到driver/mtd/nand/
  
  15.将driver/mtd/nand/Makefile做如下修改:
  COBJS-(CONFIG_NAND_S5PV210)+=s3c6x
  修改为COBJS-$(CONFIG_NAND_S5PV210)+=s5p_nand.o
  
  16.修改include/Linux/mtd/mtd_abi.h
  
  17.将网卡的初始化代码添加在文件lib_arm/board.c这个文件下。
  
  18.在文件driver/net/dm9xxx.c下进行网卡驱动的修改
  
  19.修改头文件include/net.h
  
  20.修改文件net/net.c
  
  21.重新编译u-boot源码。
  
  对u-boot进行烧写
  
  u-boot常用的启动模式分为两种,第一种为usb启动模式;第二种为nandflash启动模式。在第一次开发的时候,由于目标板,即S5pv210上没有u-boot启动程序,需要借助usb模式,将上述编译好的u-boot内核源码烧写到nandflash中,使S5pv210中存储u-boot源码,当第二次启动的时候,就可以实现nandflash启动模式。
  
  在烧写u-boot源码之前,阅读S5pv210的手册,然后安装并启动putty串口通讯软件。可以通过putty串口通讯软件实现主机和目标机的通讯。将S5pv210的开发板电源关闭,调试开发板的模式,开发板共有4种模式,当开关拨到0001时,就会启动usb模式。三星公司将32k的程序写入检查模式,在片内上电后就开始执行,usb模式只需要在首次开发时执行一次,当nand Flash写入以后就不用在启动usb模式。Sw1即为拨码开关,第四位有开关两种状态(on,off)。On相当于0001代表了usb模式,选择on就会初始化usb模式OTG.选择off就相当于0000,代表nand Flash启动模式,控制器搬移nand Flash前16k程序到0x34000,从0x34000去执行代码。在串口通讯软件putty的终端上我们可以看到环境变量的信息,并可以修改,设置网关信息,设置网卡信息,并且设置主机和虚拟机ip地址。主机上的虚拟机ip地址要与服务器ip地址相同,这里注意是主机虚拟机的ip,不是主机的ip地址。
  
  U-boot下载完成后出现一下界面如图3.2所示。
  
  当设置完环境变量后,保存环境变量,把生成的。bin文件复制到/tftboot目录下。此时已经完成主机与目标机的通讯,ping服务器的ip地址。然后将生成的u-boot.bin文件烧写到nandflash当中。此时在nandflash当中已经存在启动代码,下次的启动就不再需要usb模式,直接上电将拨码器拨到0000即上面说到的nandflash启动模式,就可以自动启动。当u-boot源码成功烧写入nandflash,并成功启动,putty串口通讯终端就会显示相应的信息。
  
  3.2Linux内核移植
  
  3.2.1 Linux内核简介
  
  由上一章u-boot移植完成后,就可以进行Linux内核的裁剪和移植。本系统采用Linux3.4内核,因为该版本为现阶段较新的版本,而且相对稳定,为Linux组织长期支持版本。Linux3.4版本具有很多新的特性,新增加了X32-ABI工具,并且将BTRFS树文件系统进行了进一步的修改,支持64位操作系统下对32位指针的操作,大大增强了cpu的兼容性。本系统内核移植主要分为四个步骤。
  
  1、针对三星S5pv210实验板相应的硬件配置,对内核进行相应的裁剪。
  
  2、针对实验板的硬件资源进行相应的驱动移植,主要包括网卡驱动移植、LED驱动移植、NANDflash驱动移植、LCD驱动移植、USB驱动移植、SD卡驱动移植。
  
  3、制作根文件系yaffs2.
  
  4、将内核重新进行编译、生成能够使用的z Image镜像,并做内存调试检查是否有内存泄露。
  
  内核主要完成四项功能[17]:
  
  1完成内核的自解压。2.初始化静态编译并进行内核的驱动模块。3.挂载根文件系统。4.开始执行第一个用户空间的程序。第一个用户空间的功能为配置相应的用户环境并执行相应的服务程序。
  
  内核启动分为三个阶段:第一阶段,在arch/arm/boot/compressed/head.s文件的start段开始,第一条指令保存R2存储器的值(R2=1826)为平台设备编号。Boq not_relocated1如果运行地址等于链接地址,则跳转到重定位代码处。完成重定位后,清bss段,为进入C语言程序做相关的配置,调用misc.c的解压内核代码(decompress_kernel)。内核启动第二阶段,跳转到arch/arm/kernel/head.s的stext段,bl lookup process types,Mov R3,R13,Mov pc R3,switch data: b start kernel.进入内核启动的第三个阶段,先搬运重定位代码,解压内核,然后把解压后的内核搬移到0x20008000处,从0x20008000处执行内核,进行内核启动。
  
  内核源码首层的架构为:net/,主要用于存放网络协议的代码;mm/,用于存放内存管理的代码;kernel/,存放Linux内核基本源码;arch/,主要存放体系架构和一些平台相关的代码;driver/,存放所有的的驱动代码;include/,include/asm-<arch>,include/linux,分别为存放内核头文件,存放体系结构相关的头文件,存放Linux内核基本的头文件。Lib/,存放混合库代码。
  
  make  menuconfig命令为内核配置命令[18]:敲击命令后回车进入内核菜单配置系统,再次回车进入子菜单系统。在菜单亮字母为进入菜单的快捷键,Y是选中,N为取消,空格为选择(即在Y/N之间循环),M编译成模块,对于尖括号有效,双击ESC退出菜单。在内核配置菜单中:<>为三选一、[]为二选一,()为输入文本内容。Mainmenu“菜单名”有且仅有一个[18],source“init/kconfig”为把其他未见下的kconfig文件包含进来,相当于include.Menu“菜单名”为带有子菜单的菜单。
  
  3.2.2内核移植具体过程
  
  1内核配置和内核编译
  
  将下载下来的内核源码压缩包进行解压,并将其拷贝到/home/linux目录下。把最顶层的Makefile目录进行修改,添加工具链。再将标准版的配置文件进行拷贝并覆盖原来的配置文件。输入Make menuconfig命令[19],会弹出内核配置菜单,将需要的配置进行添加,然后重新编译内核。完成以上操作就得到一个内核镜像,但是这个内核镜像因为不具有相应的板级资源驱动,只是最基本的配置,绝大多数功能都不具备,是几乎不能使用的。
  
  2添加网卡驱动
  
  本系统采用DM9000网卡,需要在内核中修改和添加选项,完成网络通信功能。
  
  首先要进行平台代码的修改,在arch/目录下添加必要的头文件,然后在完成网卡的平台设备添加。在平台设备列表中添加smdkc100_devices结构体,用于存放设备的基本信息。最后make menuconfig在网络设备配置、网卡驱动配置、网络文件系统配置三个下拉菜单中全部填充,编译内核,并将编译好的内核添加到/tftpboot目录下,再次启动开发板,就可以通过NFS的方式将根文件系统进行挂载。
  
  3   LED驱动移植
  
  首先修改内核配置文件,在内核配置菜单中添加LED允许项,然后将编写好的LED_TEST/S5pv210_led_drv.c拷 贝 到driver/char文 件 夹 下 , 修 改driver/char/Makefile[19],设置u-boot的环境变量:主要有主机ip、服务器ip、内核加载地址。LED的驱动分为静态和动态两种。均需要设置设备结点,mknod /dev/led c 2570.创建的设备结点名称为led,为字符设备c,驱动id为257,因为只有一个led所以设置为0.
  
  4   nandflash驱动的移植
  
  Nandflash在本系统外围设备中是非常重要的,u-boot和内核都存储在nandflash中。首先针对平台的设备进行Nandflash驱动的添加,将修改完成的S3c_nand.c驱动复 制 到drivers/mtd/nand下 . 再 把regs-nand.h文 件 复 制 到arch/arm/mach-s5pv210/include/mach/文 件 下 . 添 加 内 核 配 置 的 选 项 将drviers/mtd/nand/Kconfig文件进行修改。修改平台代码并添加相应的头文件。添加平台设备列表,填充smdkc100_device结构体。用makemenuconfig命令配置内核,然后进行编译。
  
  5   LCD驱动移植
  
  本 系 统 采 用 的 交 叉 编 译 链 工 具 为arm-cortex_a8-linux-gnueabi-gcc. 首 先 将smdkc_100_fd_win()的结构体进行相应的修改,再修改driver/video/Kconfig文件,make menuconfig命令进行内核配置,将编译好的内核拷贝到tftpboot下,完成测试,插上屏幕,当实验板上电后能够看到屏幕上出现企鹅logo,表示移植成功。
  
  6   USB驱动移植
  
  USB接口在系统中起到连接信息处理器Cortex-a8和信息采集器Cortex-M0的作用。首先添加针对S5pv210USB驱动相关的头文件,将ohci-s3c2410.c复制到drivers/usb/host/下,再将regs-clock.h复制到arch/arm/mach-s5pv210/include/mach/下,对driver/usb/Kconfig文件进行修改,[20]添加平台设备,添加头文件,添加平台设备列表,配置内核,设置文件系统的语言配置。编译内核后把内核拷贝到tftpboot/文件夹下进行测试,当启动开发板的后,将U盘插入开发板USB接口处,在putty串口通讯工具中输入mount –t vfat   /dev/sda1/mnt ls.如果能够看到U盘的内容,则表示驱动移植成功。
  
  7   yaffs2文件系统移植
  
  Yaffs2是一种轻型的嵌入式文件系统,遵循GPL协议,是一种开源的文件系统,在官方网站上可以得到它的源码,一般存放在fs/yaffs2目录下[21],是针对与Nandflash而设计的,可以用于大容量的存储设备,通过Nandflash接口,内核可以便捷高效的进行访问。下载的Linux内核是不支持yaffs2文件系统的,要用命令make menuconfig进行内核配置,在相应的选项上选中,一般在File  systems的子目录Miscellaneousfilesystems目录中[22].在配置完成后还需要在官方网站上下载补丁进行升级。Yaffs2文件安装完成界面如图3.5所示。
  
  3.3 BOA服务器移植
  
  BOA服务器是一个轻型Web服务器,能够依次完成用户请求,不能处理多线程请求,作为一个只能执行单任务的服务器,其执行代码简化为60K左右,多用于嵌入式设备。BOA服务器支持CGI程序。在嵌入式交互管理中,能够远程登陆进行设备监控和管理。[23]
  
  BOA 移植服务器采用 gcc version 4.5.1 (Sourcery G++ Lite 2010.09-50)工具链,首先下载服务器源码压缩包,然后将源码解压并进入文件夹内的/src 目录下。首先进行Makefile 的修改,将工具链在。/config 下改成 arm 专用 gcc.然后对 Linux操作系统下的C库进行编译,这样 flex 和 bison 就可以使用了。
  
  bison是语法解释器软件,是yacc的重要组成部分。可以结合Lex建造一个对语法进行解释的解释器。在使用之前首先要用Apt-get下载Lex和YACC,然后修改src/compat.h和src/log.c两个文件,然后将src/boa.c文件下的passwdbuf进行注释,然后make,将boa多余的功能和程序去掉,用Arm-none-linux-gnueabi-strip命令缩小占用的存储空间。[24-27]
  
  Boa服务器安装完成以后需要对其进行相关的配置,在/etc/下创建相应的boa文件夹,用于存放boa源文件。建立完成后,将源文件拷入该文件夹下。修改boa.conf文件。
  
  修改完成后对boa服务器进行测试,将boa拷贝到Cortex-A8板上,并将自己的主页index.html拷贝到相应的www目录下,使其能够识别。
  
  运行boa服务器,用手机移动端登陆服务器,在浏览器上输入Cortex-A8板的网址进行观看。如图3.6所示。
  
  3.4 CGI设计
  
  3.4.1 CGI简介
  
  CGI即公共网关接口,是外部程序与Web服务器的一种标准接口。定义了外部程序发出请求Web服务器采取相应应答的一种方式。CGI的定义主要分为三个方面。环境变量:为CGI接收web服务器的发出信息的方式,发出信息的长度和客户端的域名;标准输入:分为三种不同的模式分别为URL模式、GET模式和POST模式;标准输出:规定了CGI应答Web服务器的方式,主要由两部分组成,分别是以ASCII组成的应答头和以HTML组成的应答数据两部分。[28-30]
  
  3.4.2主要CGI程序
  
  主要的CGI程序主要包括终端用户的注册CGI、用户登录CGI、LED灯控制CGI、通风设备控制CGI、图像抓拍CGI、数据库查询CGI、环境信息查询CGI,蜂鸣器控制CGI,WIFI配置CGI.
  
  用户注册CGI主要控制用户的注册,终端用户成功注册之后,使用注册的用户信息可以正常登录;用户登录CGI主要检查用户信息的真实性和正确性,用户信息正确则能够正常登录,否则登录失败[28];LED控制CGI主要完成预警工作,环境异常情况下,控制LED亮,异常解除,控制LED灭;通风设备控制CGI主要完成环境异常情况下的紧急措施,以及异常情况的恶化;图像抓拍CGI主要完成画面的抓拍工作,通过配置好的网络视频服务器获取图片信息,并将图片信息保存在工作目录中;数据查询CGI主要完成数据库数据的查询工作;环境信息查询CGI主要完成环境信息的显示工作,环境信息能够实时显示在网页中;蜂鸣器控制CGI主要完成异常情况下,控制蜂鸣器震动,异常解除,控制蜂鸣器停止振动;WIFI配置CGI主要完成利用网页直接对WIFI模块进行有效的配置。每个CGI可执行程序在执行过程中,会直接或者间接与实时运行的主程序通过消息队列、共享内存等进程间通信的方式产生交互,交互过程中完成移动端用户的不同种类的请求操作。
  
  用户注册CGI
  
  移动端用户在没有账户的情况下能够通过浏览器进行在线注册,注册成功,可以正常登陆。用户通过浏览器注册,信息提交过程中会触发注册CGI可执行文件,CGI可执行文件获取网页数据,并将信息存储于数据库中。CGI会对注册时填写的信息进行查询,不能重复注册,注册时填写的信息不能为空。
  
  用户登录CGI[29]
  
  移动端用户能够远程登录Web服务器,登录过程中需要对用户的信息进行真实性准确性的验证,验证通过之后则能够正常登陆,否则,登录失败。用户登录过程中会触发登录CGI可执行程序,CGI程序获取网页数据,获取完成之后与数据库中存储的用户信息进行匹配,如果匹配成功,则返回正常,用户能够正常登陆,如果匹配失败,则返回异常,用户不能够登录。用户能够通过找回密码,或者注册新用户的方式解决。
  
  LED灯控制CGI
  
  移动端用户通过网页提交表单,表提交过程中会触发led.cgi,led.cgi可执行文件执行过程中会向主程序发送消息队列,主程序接收到命令之后,会唤醒LED操作线程,LED操作线程会调用底层LED驱动,控制LED的点亮或者熄灭。
  
  通风设备控制CGI
  
  移动端用户发觉异常情况发生时,例如环境温度过高,可以自动控制通风设备启动。通过提交表单触发对应的CGI程序,可执行文件执行时会向主程序发送消息队列,主程序接收到之后[30],唤醒通风线程,控制通风设备启动,并能够控制通风设备的档位,灵活控制通风设备工作。
  
  图像抓拍CGI
  
  移动端用户能够对画面远程抓取,通过页面设置完成需要抓取的画面的张数,触发抓拍图片的CGI,可执行文件执行过程中向主程序发送消息队列,主程序唤醒图像抓拍的线程,开启摄像头,并根据实际需要拍的张数抓拍图片,并将图片保存在工作目录中,存储目录已经提前设置完成。操作过程中使用到配置完成的网络视频服务器,必须确保网络视频服务器在后台成功运行,能够正常工作,并且输入插件与输出插件配置完成。
  
  数据库查询CGI
  
  移动端用户需要通过网页查询信息,通过网页调用CGI程序,CGI程序会访问数据库信息,通过对数据库的查询操作,将用户需要的数据库信息进行提交并且显示于网页中。数据库信息显示具有实时性。
  
  环境信息查询CGI
  
  移动端用户能够通过利用网页获得实时的环境信息,环境信息的显示主要依赖于对共享内存的访问,主线程将环境信息存储在共享内存中,当用户需要访问环境信息时,可以通过网页调用CGI程序,CGI程序直接访问共享内存,并通过不断刷新共享内存,获得环境信息的实时数据。
  
  WIFI配置CGI
  
  移动端用户可以对WIFI通过网页进行配置,用户通过网页触发WIFI配置CGI程序之后,CGI首先获取填写的WIFI配置信息,将信息封装成消息队列发送给主程序,主程序获取消息队列之后对消息进行拆分,获取有价值的信息,对WIFI模块进行配置。完成远程配置WIFI模块的工作。
  
  CGI界面如图3.7-3.8所示。
  
  3.5本章小结
  
  本章主要对U-boot移植、内核移植、Boa服务器移植和CGI设计四个方面进行了介绍。U-boot方面:详述了交叉编译环境的搭建和U-boot的具体移植过程。内核移植方面:详述了内核移植的具体过程,添加了网卡驱动、Nandflash驱动、LCD驱动、USB驱动。并添加了yaffs2文件系统。Boa服务器方面:详述了Boa服务器的移植过程。GCI方面:重点介绍了CGI的实现过程。
返回本篇论文导航
相关内容推荐
相关标签:仓库管理系统论文
返回:仓储管理论文