安防监控项目的阶段目标
第一天
回顾建立知识体系框架
第二天
能理解项目的实战安排,并初步搭建起项目所需的嵌入式环境
第三天
能对项目的分层体系能力和功能框架有自己的分析能力,并培养这种意识
第四天
能对安防监控的软硬件有一个较好的理解,并自己制定通信的结构体
阶段性提交视频内容:
视频录制:项目的分层体系框架,功能的分析过程,通信的结构体制定过程,简述要实现的安防监控项目()
视频格式提交要求:
格式:mp4格式 名字要求:阶段1-你的名字-视频的主题-年月日.mp4
示例: 阶段1-张三丰-day14-分层体系和功能分析-20170804.mp4
第五天
完成主框架的搭建
第六天
完成boa服务器的移植
阶段性提交视频内容:
视频录制:简述搭建的安防监控项目框架、完成boa服务器移植,演示html和cgi的跳转
视频格式提交要求:
示例: 阶段2-乔峰-day56-仓储项目框架搭建和boa移植-20170806.mp4
第七天
完成cgi、html的移植
第八天
完成web点灯
阶段性提交视频内容:
视频录制:完成cgi、html部分的移植,网页上真实控制a9的led灯的演示视频
视频格式提交要求:
示例: 阶段3-张无忌-day78-web点灯-20170808.mp4
第九天
完成将模拟的数据上传到web网页
第十天
完成视频流服务器的移植
阶段性提交视频内容:
视频录制:通过视频流服务器来拍摄完成模拟数据上传到网页的演示视频
视频格式提交要求:
示例: 阶段4-张无忌-day910-视频流服务器拍摄模拟数据上传网页-20170810.mp4
第十一天
完成A9和ZigBee部分的传感器数据采集
第十二天
完成A9控制ZigBee硬件
阶段性提交视频内容:
视频录制:完成A9和ZigBee部分的传感器数据的采集,同时将ZigBee部分的的数据传输到串口上和A9端、同时从串口端和A9端控制ZigBee上的硬件
视频格式提交要求:
示例: 阶段5-令狐冲-day1112-ZigBee->A9->ZigBee-20170812.mp4
第十三天
完成传感器真实数据上传(包括A9和ZigBee部分)
第十四天
完成网页控制硬件(包括A9和ZigBee部分)
阶段性提交视频内容:
视频录制:完成真实数据上传到网页,并通过网页控制A9和ZigBee上硬件
视频格式提交要求:
示例: 阶段6-令狐冲-day1314数据上传网页网页控制硬件-20170814.mp4
第十五天
完成GPRS短信或电话报警功能,并演示直接发送短信给用户
示例: 阶段7-令狐冲-day15gprs短信或电话报警功能的实现-20170815.mp4
第十六天
提交doc文档: 独立完成安防监控项目的总结,可以从框架搭建、通信结构体设计、进程间通信、线程间通信、项目分工、项目联调、项目收获等部分来阐述,注重总结提升的过程。
示例: 阶段8-令狐冲-day16项目总结文档-20170816.doc(同时附视频讲解)
3.1、解压工具链压缩包 (http://gcc.gnu.org/ 下载地址)
$ cd ~
$ mkdir toolchain
$ cd toolchain
将下载的交叉编译工具/gcc-4.6.4.tar.xz拷贝到toolchain目录下并解压
$ tar xvf
gcc-4.6.4.tar.xz
gcc-4.4.6.tar.xz gcc-4.5.1.tar.xz
3.2、环境变量的添加
修改文件/etc/bash.bashrc添加如下内容
sudo vi /etc/bash.bashrc
export
PATH=$PATH:/home/fengjunhui/toolchain/gcc-4.6.4/bin
3.3、重启配置文件
$ source /etc/bash.bashrc
3.4、查看环境变量:
fengjunhui@ubuntu:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/fengjunhui:/home/fengjunhui/toolchain/gcc-4.6.4/bin
3.5、工具链的测试
$ arm-none-linux-gnueabi-gcc –v
Using built-in specs.
COLLECT_GCC=arm-none-linux-gnueabi-gcc
最后两行:
Thread model: posix
gcc version 4.6.4 (crosstool-NGhg+default-2685dfa9de14 -tc0002)
扩展:
Ubuntu14.04 Ubuntu16.04. 64位系统的安装需要先安装如下两个包:
/bash/... path/arm-none-linux-gnueabi-gcc not fount
sudo
apt-get install lib32z1 lib32ncurses5
uImage === 内核 设备树 exynos4412-fs4412.dtb exynos4412-origen.dtb
uImage、设备树文件都可以通过tftp从Ubuntu所在的tftp服务器端来加载。
板子 : 客户端
Ubuntu : 服务器端 C-S
1.1、检查tftp服务器是否存在: dpkg -s tftpd-hpa
1.2、未安装:sudo apt-get install tftpd-hpa tftp-hpa
通过安装时的打印信息,来确定在etc目录下的配置文件
4.1、修改配置文件,
sudo vi /etc/default/tftpd-hpa
# /etc/default/tftpd-hpa
#用户名
TFTP_USERNAME="tftp"
#你的tftp服务器所在的路径
TFTP_DIRECTORY="/home/linux/tftpboot"
#tftp服务器的网关和端口号
TFTP_ADDRESS="0.0.0.0:69"
#tftp 文件服务器的可供选择的权限, get file\ put file \ list file
TFTP_OPTIONS="-l -c -s"
4.2、创建tftp服务器所在的路径:
mkdir /home/linux/tftpboot -p //和配置文件的名字和路径必须保持一致
chmod 777 tftpboot //修改tftp服务器文件夹的权限
4.3、重启tftp服务器:
linux@ubuntu:~$ sudo service tftpd-hpa restart tftpd-hpa
stop/waiting tftpd-hpa
start/running, process 6439
板子启动加载内核的时候经常遇到TTTTTTT.....
判断:网络不通
ping不通,网络配置有关
tftp服务器没有启动
4.4、本地回环测试
tftp 127.0.0.1
tftp>get main.c //下载文件从tftpboot目录下 (保证tftpboot目录下有你要下载的文件)
tftp>put while.c //上传文件到tftpboot目录下
(保证当前目录有你要上传的文件)
tftp>q //退出
查看当前文件目录,可以看到从tftpboot目录下载的main.c文件,打开tftpboot目录,可以看到while.c文件。
4.5、本地回环可能遇到的问题
可能遇到的问题参考:
tftp>get file
Transfertimed out.
原因: tftpd服务没有启动,重启tftp服务器:sudo service tftpd-hpa restart
tftp>get file
Errorcode 2: Only absolute filenames
allowed
原因:在/etc/xinetd.d/tftpd中设置的server_args为/etc/default/tftpd-hpa
tftp>put file
Errorcode 1: File not found
原因:当前目录下指定的文件file不存在;或tftpd启动参数中没有指定-c选项,允许上传文件
nfs:网络文件系统 /nfsroot=...
内核起来的时候,在最后会加载文件系统,(根据你的参数去加载文件系统)
ramdisk yaffs..... ext2
1、安装
sudo apt-get update //更新一下源
sudo apt-get -f install //更新一下依赖
sudo apt-get install
nfs-kernel-server //如果不存在,就在线下载并安装
2、修改nfs配置文件:
mkdir ~/source
cp rootfs.tar.gz .
tar xvf rootfs.tar.gz
在这个目录下有这两个文件
linux@ubuntu:~/source pwd
/home/linux/source
linux@ubuntu:~/source$ ls
rootfs rootfs.tar.xz
sudo vim /etc/exports
添加如下内容:
/home/linux/source/rootfs *(rw,sync,no_subtree_check,no_root_squash)
路径==>nfs路径===>nfs又是什么?
一个路径*四个参数
其中:
/home/linux/source/rootfs:共享的目录;
*:不限定客户端;
rw:共享目录可读可写;
sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
no_subtree_check
:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;
no_root_squash:来访的root用户保持root帐号权限;
3、重启nfs服务器
sudo /etc/init.d/nfs-kernel-server restart
将UbuntuIP设为静态IP
主要映射IP编辑器中的网卡
(注:uboot的移植过程不作为项目中的一个重点,只要能加载内核就好。)
7.1、将sd卡加载到windows下,识别SD卡之后,将SD卡格式化。(注意此时Ubuntu不要连接)。
7.2、将SD卡在Ubuntu中识别: 节点: /dev/sdb
/dev/mmcblk0 ---->sudo ./mkuboot.sh ---->
sudo mv /dev/mmcblk0 /dev/sdb
7.3、fengjunhui@ubuntu:~/uboot$ cd
sdfuse_q_2013/
fengjunhui@ubuntu:~/uboot/sdfuse_q_2013$ ls
add_padding add_sign.c Makefile
sd_fusing_exynos4x12.sh
add_padding.c chksum
mkuboot.sh u-boot-fs4412.bin
add_sign chksum.c
制作uboot引导:
fengjunhui@ubuntu:~/uboot/sdfuse_q_2013$
sudo ./mkuboot.sh
[sudo] password for fengjunhui:
Fuse FS4412 trustzone uboot file into SD card
/dev/sdb reader is identified.
u-boot-fs4412.bin fusing...
1029+1 records in
1029+1 records out
527104 bytes (527 kB) copied, 3.49821s, 151 kB/s
u-boot-fs4412.bin image has been fused successfully.
Eject SD card
5.4、SecureCRT串口配置:putty
xshell
5.5、板子上电:
Checking Boot Mode ... EMMC4.41
Net: dm9000
Hit any key to stop autoboot: 0
FS4412 # (能进入到这里)
7、uboot环境变量设置
输入printenv
set serverip 192.168.1.200
set ipaddr 192.168.1.100
set gatewayip 192.168.1.1
setenv bootcmd tftp 41000000 uImage\;tftp 42000000 exynos4412-fs4412.dtb\;bootm 41000000 - 42000000
setenv bootargs root=/dev/nfs nfsroot=192.168.1.200:/home/fengjunhui/source/rootfs rw
console=ttySAC2,115200 init=/linuxrc ip=192.168.1.100
(C --- S ) Client Server
setenv bootargs(传递给内核的启动参数) root=/dev/nfs(根文件挂载方式)192.168.1.200:/home/fengjunhui/source/rootfs rw console(制定打印信息的终端)=ttySAC2,115200(内核向串口输入信息) init=/linuxrc(指定内核运行第一个程序(缺省则从/sbin/init启动)) ip=192.168.1.100(指定本机ip) (超级终端显示如下图)
saveenv(保存到emmc中)一定要保存呐!!!
查看环境变量信息:
FS4412 # pri
gatewayip=192.168.1.1
baudrate=115200
bootargs=root=/dev/nfs
nfsroot=192.168.1.200:/home/fengjunhui/source/rootfs rw console=ttySAC2,115200
init=/linuxrc ip=192.168.1.100
bootcmd=tftp 41000000 uImage;tftp 42000000
exynos4412-fs4412.dtb;bootm 41000000 - 42000000 bootdelay=3
ethact=dm9000
ethaddr=11:22:33:44:55:66
gatewayip=192.168.1.1
ipaddr=192.168.1.100
netmask=255.255.255.0
serverip=192.168.1.200
stderr=serial
stdin=serial
stdout=serial
Environment size: 474/16380 bytes
测试引导镜像启动:
fengjunhui@ubuntu:~/tftpboot$ ls
examples.desktop
exynos4412-fs4412.dtb uImage (保证无误)
FS4412 # boot
dm9000 i/o: 0x5000000,
id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 11:22:33:44:55:66
operating at 100M full duplex mode
Using dm9000 device
TFTP from server 192.168.1.200; our IP address is 192.168.1.100
Filename 'uImage'.
Load address: 0x41000000
Loading: T
#################################################################
380.9 KiB/s
done
Bytes transferred = 3705424 (388a50 hex)
.......
VFS: Mounted root (nfs filesystem) on device 0:10.
[ 3.550000] devtmpfs:
mounted
[ 3.550000] Freeing
unused kernel memory: 240K (c0677000 - c06b3000)
[root@farsight ]# ok,成功进入文件系统。