物联网仓储系统.docx
- 文档编号:3412105
- 上传时间:2022-11-22
- 格式:DOCX
- 页数:38
- 大小:3.13MB
物联网仓储系统.docx
《物联网仓储系统.docx》由会员分享,可在线阅读,更多相关《物联网仓储系统.docx(38页珍藏版)》请在冰豆网上搜索。
物联网仓储系统
校内实习报告
实习名称:
面向硬件的编程技能实训2
姓名:
院(系):
专业班级:
学号:
指导教师:
成绩:
实训任务书
题目基于ARMLinux的物联网仓储系统
班级
主要内容、基本要求、主要参考资料等:
一.主要内容及基本要求
项目以实现信息采集,设备控制,人机交互功能为重点,兼顾驱动设计。
1.采用FS4412(exynos4412-cortexA9)为硬件开发平台,裸板开发驱动程序:
1)点亮一盏LED灯,实现流水灯程序;
2)AD转换程序实现;
3)使用PWM驱动蜂鸣器程序实现。
2.学习BootLoader功能,熟悉嵌入式系统引导过程,制作自己的UBOOT,使用SD卡烧写UBOOT,实现开发板启动。
3.学习linux系统的基本操作,vim编辑器使用,shell命令使用,熟练使用VI编辑命令和linux常用操作命令。
4.学习linux系统下驱动开发的基础知识,挂载卸载驱动模块,掌握字符设备驱动程序设计方法。
1)向内核中加载LED驱动程序;
2)向内核中加载AD驱动程序;
3)向内核中加载PWM驱动程序。
5.移植boa服务器,移植HTML界面和CGI程序。
6.启动开发板,打开PC机上linux下浏览器,输入开发板IP地址访问,查看现象。
7.总结项目知识点,完成实训项目答辩。
二.主要参考资料
1.Exynos4412技术参考手册;
2.Exynos4412iromBootingGuide;
3.Linux指令命令集;
4.FSPV210 摄像头拍照功能的实现;
5.FS4412mjpg-streamer视频流服务器移植文档。
1.开发环境
1.1ubuntu12.04发行版
1.2u-boot-2010.03
1.3FS4412平台
1.4交叉编译器arm-none-linux-gnueabi-gcc
2.需求分析
传统的仓库管理,一般依赖于一个非自动化的、以纸张文件为基础的系统来记录、追踪进出的货物,完全由人工实施仓库内部的管理,因此仓库管理的效率极其低下,所能管理的仓库规模也很小。
随着计算机的应用普及,目前大多数企业的仓库管理数据资料已开始采用计算机数据系统管理,但数据还是采用先纸张记录、再手工输入计算机的方式进行采集和统计整理。
这不仅造成大量的人力资源浪费,而且由于人为的因素,数据录入速度慢、准确率低。
随着仓库智能化的不断发展,仓库管理的物资种类,数量在不断增加、出入库频率剧增,仓库管理作业也已十分复杂和多样化,传统的人工仓库作业模式和数据采集方式已难以满足仓库管理的快速、准确要求,严重影响了仓库的管理。
目前ZIGBEE技术正在为仓库管理带来一场巨大的变革,以识别距离远,快速,不易损坏,容量大等条码无法比拟的优势,简化繁杂的工作流程,有效改善供应链的效率和透明度。
基于物联网的智能战备仓库管理系统是在现有仓库管理和车辆管理中引入ZIGBEE技术,对仓库到货检验、入库、出库、调拨、移库移位、库存盘点等各个作业环节的数据进行自动化的数据采集,保证仓库管理各个环节数据输入的速度和准确性,确保管理人员及时准确地掌握库存的真实数据,合理保持和控制仓库库存。
通过科学的编码,还可方便地对物品的批次、保质期等进行管理。
利用系统的库位管理功能,更可以及时掌握所有库存物资当前所在位置,有利于提高仓库管理的工作效率。
3.实验原理
本系统是基于PC,A8及M0等设备,依托在各项互联网,物联网,传感器等技术的基础上编写,以实现食品物联网仓储系统,使用户更方便的管理仓库内的所有信息及其特殊情况。
本系统主要分为三大模块:
核心服务器端(PC)、前端数据中心(A8)和远程监控终端(M0)。
4.设计思路
1)通过M0进行实时采集环境参数,例如温度、湿度、光感数据,进行物品刷卡;
2)再通过ZigBee把采集到的环境参数或物品信息发送给A8;
3)由A8的M0线程负责接收环境参数或物品信息,激活数据库线程对数据库进行相应的处理,然后如果是环境参数则对环境参数进行判断处理进行报警。
4)用摄像头采集图片,存储到A8上。
5)构建嵌入式web服务器,使用户通过网络利用pc机进行监控。
6)在web页面上设置控制按钮,监控设备识别用户指令并进行相应动作
7)A8通过GPRS短信息功能向用户报警。
5.实验内容
5.1u-boot的烧写及使用
5.1.1SD启动盘制作
将sdfuse_q拷贝到Linux家目录下
将SD卡插入电脑并在ubuntu中识别
将SD卡制作成启动盘
进入sdfuse_q目录并执行如下操作将SD卡制作成uboot2010启动盘
$sudo./mkuboot.sh/dev/sdb
拷贝镜像
在SD卡中创建目录sdupdate并把学生资料中的实验代码/第一天/镜像中的u-boot-fs4412.bin(uboot2013)拷贝到这个目录下
5.1.2u-boot的烧写
1)运行putty
使用串口线连接板子与电脑,运行串口通信程序putty
选择右上角的”Serial”,然后点击左下角的”Serial”
按照自己的主机的情况(设备管理器中)选择COM口,其他信息必须一直,然后点击open打开串口
2)调开关为SD启动模式并重启开发板
关闭开发板电源,将拨码开关SW1调至(1000)(SD启动模式)
将刚才做好的SD启动盘插入开发板SD卡插槽
重新打开开发板电源能够看到如下界面
在倒计时时按任意键让uboot停留在交互模式
3)烧写
在终端上执行:
#sdfuseflashall
等待终端无输出是表示烧写结束
5.1.3烧写结果
关闭开发板电源,将拨码开关SW1调至0110(EMMC启动模式)后打开电源可以看到如下界面表示烧写成功
在倒计时时按任意键让uboot停留在交互模式
5.2交叉编译工具链的安装
5.2.1解压工具链压缩包
$cd~
$mkdirtoolchain
$cdtoolchain
将gcc-4.6.4.tar.xz拷贝到toolchain目录下并解压
5.2.2将交叉编译工具链添加到全局环境变量使其全局可用
1)修改配置文件
打开配置文件/etc/bash.bashrc
$sudovi/etc/bash.bashrc
在其最后一行添加如下内容
exportPATH=$PATH:
/home/linux/toolchain/arm-2010.09/bin
2)重启配置文件生效
$source/etc/bash.bashrc
5.2.3工具链的测试
$arm-none-linux-gnueabi-gcc-v
执行该命令后有如下信息表示安装成功
这样我们的交叉工具链就安装好了
5.3内核的配置和编译
5.3.1解压内核并修改Makefile
1)解压内核
将linux-3.0-fs4412_v3.tar.xz拷贝到ubuntu主机的/home/linux下并解压,进入到该目录
$tarxvflinux-3.0-fs4412_v3.tar.xz
解压完成
$cdlinux-3.0-fs4412_v3
2)修改内核顶层目录下的Makefile
$vimMakefile
修改:
ARCH?
=$(SUBARCH)
CROSS_COMPILE?
=$(CONFIG_CROSS_COMPILE:
"%"=%)
为:
ARCH?
=arm
CROSS_COMPILE?
=arm-none-linux-gnueabi-cd
修改完成后保存退出.
5.3.2配置和编译
1)导入默认配置
$makeexynos_defconfig
2)修改内核配置
$makemenuconfig
SystemType--->
(2)S3CUARTtouseforlow-levelmessages
修改完成后保存退出
3)编译内核
$makeuImage
编译完成后在源码的arch/arm/boot/目录下生成一个uImage文件,这就是经过压缩的内核镜像,即我们要下载的内核镜像文件。
第一次编译会提示缺少一个mkimage工具,该工具在实验三编译的uboot源码中的tools/下,我们将该文件拷贝到ubuntu主机的/usr/bin目录下然后重新编译
$sudocpu-boot-2013.01/tools/mkimage/usr/bin/
内核源码中并没有fs4412平台的设备树文件,所以我们直接复制三星的origen平台的设备树文件在此基础上进行修改
$cparch/arm/boot/dts/exynos4412-origen.dtsarch/arm/boot/dts/exynos4412-fs4412.dts
我们自己添加的设备树文件要想被编译需修改对应的Makefile
$vimarch/arm/boot/dts/Makefile
在exynos4412-origen.dtb\
下添加如下内容
exynos4412-fs4412.dtb\
4)编译设备树文件
$makedtbs
5.3.3拷贝内核和设备树
拷贝内核和设备树文件到/tftpboot目录下:
$cparch/arm/boot/uImage/tftpboot
$cparch/arm/boot/dts/exynos4412-fs4412.dtb/tftpboot/
5.3.4修改uboot启动参数
重启板子在系统倒计时是按任意键结束启动,输入如下内容修改uboot环境变量:
#setenvbootcmdtftp41000000uImage\;tftp42000000exynos4412-fs4412.dtb\;bootm41000000–42000000
#setenvbootargsroot=/dev/nfsnfsroot=192.168.1.249:
/source/rootfsrwconsole=ttySAC2,115200init=/linuxrcip=192.168.1.1
#saveenv
192.168.1.249对应Ubuntu的ip
192.168.1.1对应板子的ip
重启开发板查看现象
5.4烧写linux内核镜像以及文件系统
5.4.1通过网络加载内核和文件系统
1)将uImage拷贝到ubuntu的/tftpboot下
2)将exynos4412-fs4412.dtb拷贝到ubuntu的/tftpboot下
3)将rootfs.tar.xz拷贝到ubuntu的/source下并解压
4)设置启动参数
#setenvserverip172.30.131.137(ubuntuip依个人而定)
#setenvipaddr172.30.131.221(开发板ip用户定义,保持网段与ubuntuip一致)
#setenvbootcmdtftp41000000uImage\;tftp42000000exynos4412-fs4412.dtb\;bootm41000000-42000000
#setenvbootargsroot=/dev/nfsnfsroot=172.30.131.137:
/source/rootfsrwconsole=ttySAC2,115200init=/linuxrcip=172.30.131.221
#saveenv
172.30.131.137对应Ubuntu的ip
172.30.131.221对应板子的ip
5)启动开发板看到如下现象表示成功通过网络挂载:
这时表示linux启动成功,可以输入一些Linux的命令测试
5.4.2从EMMC加载内核和文件系统
1)将资料中的实验代码/第一天/ramdisk.img拷贝到虚拟机/tftpboot目录下
2)烧写内核镜像到EMMC上(在uboot交互模式下操作)
#tftp41000000uImage
#moviwritekernel41000000
3)烧写设备树文件到EMMC上
#tftp41000000exynos4412-fs4412.dtb
#moviwritedtb41000000
4)写文件系统镜像到EMMC上
#tftp41000000ramdisk.img
#moviwriterootfs41000000300000
5)设置启动参数
#setenvbootcmdmovireadkernel41000000\;movireaddtb42000000\;movireadrootfs43000000300000\;bootm410000004300000042000000
#saveenv
6)重新启动开发板,u-boot自动加载、执行内核
5.5网卡驱动的移植
5.5.1文件修改
1)设备树文件修改
$vimarch/arm/boot/dts/exynos4412-fs4412.dts
srom-cs1@5000000{
compatible="simple-bus";
#address-cells=<1>;
#size-cells=<1>;
reg=<0x50000000x1000000>;
ranges;
ethernet@5000000{
compatible="davicom,dm9000";
reg=<0x50000000x20x50000040x2>;
interrupt-parent=<&gpx0>;
interrupts=<64>;
davicom,no-eeprom;
mac-address=[000a2da655a2];
};
};
2)drivers/clk/clk.c文件的修改
修改
staticboolclk_ignore_unused;
为
staticboolclk_ignore_unused=true;
5.5.2内核的配置和编译
1)配置内核
makemenuconfig
[*]Networkingsupport--->
Networkingoptions--->
<*>Packetsocket
<*>Unixdomainsockets
[*]TCP/IPnetworking
[*]IP:
kernellevelautoconfiguration
DeviceDrivers--->
[*]Networkdevicesupport--->
[*]Ethernetdriversupport--->
<*>DM9000support
Filesystems--->
[*]NetworkFileSystems--->
<*>NFSclientsupport
[*]NFSclientsupportforNFSversion3(NEW)
[*]NFSclientsupportfortheNFSv3ACLprotocolextension(NEW)
[*]RootfilesystemonNFS(NEW)
2)编译内核和设备树
$makeuImage
$makedtbs
5.5.3测试
拷贝内核和设备树文件到/tftpboot目录下
$cparch/arm/boot/uImage/tftpboot
$cparch/arm/boot/dts/exynos4412-fs4412.dtb/tftpboot/
启动开发板,修改内核启动参数,通过NFS方式挂载根文件系统
5.6LED驱动的移植
5.6.1添加驱动文件
将led_drv.cfs4412_led.h拷贝到内核源码中的drivers/char下
5.6.2修改drivers/char/Kconfig
在source"drivers/tty/Kconfig"下面
添加如下内容:
configFS4412_LED
tristate"FS4412LEDDeviceSupport"
dependsonARCH_EXYNOS4
help
supportleddeviceonFS4412developboard
5.6.3修改drivers/char/Makefile
在文件最后添加如下代码
obj-$(CONFIG_FS4412_LED)+=led_dri.o
5.6.4交叉编译测试程序
$arm-none-linux-gnueabi-gccfs4412_led_app.c-ofs4412_led_app
sudocpfs4412_led_app/source/root
5.6.5编译LED驱动到内核中
1)配置内核时按“空格”选择,配置完成后保存退出
$makemenuconfig
DeviceDrivers--->
Characterdevices--->
<*>FS4412LEDDeviceSupport
2)保存退出,重新编译后把uImage拷贝到tftpboot下
$makeuImage
$cparch/arm/boot/uImage/tftpboot
编译完成
3)重新启动开发板,加载内核并运行。
在终端下执行下面操作
创建设备节点
#mknod/dev/ledc5000
运行测试程序并观察现象
#./fs4412_led_app
5.6.6编译LED驱动为模块
配置内核时按“空格”选择,配置完成后保存退出
$makemenuconfig
DeviceDrivers--->
Characterdevices--->
保存退出,重新编译内核和驱动模块然后把uImage拷贝到ubuntu的/tftpboot下,把驱动模块拷贝到ubuntu的/source/rootfs下
$makeuImage
$makemodules
$cparch/arm/boot/uImage/tftpboot/
$cpdrivers/char/fs4412_led_dri.ko/source/rootfs/
可以看到,此时led_dri.ko已经在/source/rootfs目录下。
重新启动开发板,linux运行起来后在终端下操作
创建设备节点
#mknod/dev/ledc5000
加载LED驱动模块
#insmodfs4412_led_drv.ko
运行测试程序并观察现象
#./fs4412_led_app
5.7BOA移植
5.7.1BOA服务器移植
1)解压源码
tarxvfboa-0.94.13.tar.tarcp
cdboa-0.94.13
2)进入src/
./configure生成Makefile
修改Makefile
修改CC=gcc为CC=arm-none-linux-gnueabi-gcc
修改CPP=gcc-E为CPP=arm-none-linux-gnueabi-gcc-E
3)make编译
编译一个linux下的c系统,包含词法和语法分析模块,Linux上用bison和flex。
yacc是一个文法分析器的生成器,bison即是yacc的GNU版本.Lex和YACC是用于构造词法分析机和语法解释器的工具,利用Lex和YACC你可以轻松的构造一个语法解释器。
sudoapt-getinstallbisonflex
执行make
然后给boa瘦身
Arm-none-linux-gnueabi-stripboa
5.7.2Boa服务器配置
1)创建目录
mkdir/source/rootfs/etc/boa
2)将boa源码目录下的boa.conf拷贝到/source/rootfs/etc/boa目录下
cpboa.conf/source/rootfs/etc/boa
3)修改配置文件boa.conf
vim/source/rootfs/etc/boa
Group的修改
修改Groupnogroup
为Group0
user的修改
修改Usernobody
为User0
:
:
ScriptAlias的修改
修改ScriptAlias/cgi-bin//usr/lib/cgi-bin/
为ScriptAlias/cgi-bin//www/cgi-bin/
DocumentRoot的修改
修改DocumentRoot/var/www
为DocumentRoot/www
ServerName的设置
修改#ServerNamewww.your.org.here
为ServerNamewww.your.org.here
否则会出现错误“gethostbyname:
:
Nosuchfileordirectory”
AccessLog修改
修改AccessLog/var/log/boa/access_log
为#AccessLog/var/log/boa/access_log
以下配置和boa.conf的配置有关,都是l在ARM根文件系统中创建
创建HTML文档的主目录/www
mkdir/www
创建CGI脚本所在录/www/cgi-bin
mkdir/www/cgi-bin
当不能使用cgi时
将#AddTypeapplication/x-httpd-cgicgi改为AddTypeapplication/x-httpd-cgicgi
5.7.3BOA服务器测试
1)将boa拷贝到开发板根文件系统的/etc/boa下
#cpsrc/boa/source/rootfs/etc/boa
将ubuntu下/etc/mime.types拷贝到开发板根文件系统的/etc下
#cp/etc/mime.types/source/rootfs/etc
2)将你的主页index.html拷贝到www目录下
3)运行boa,然后在主机游览器输入开发板网址
[root@farsightboa]#./boa
[30/10/2011:
19:
10:
36+0000][root@farsightboa]#boa:
server
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 联网 仓储 系统