毕设之华美路由器实现无线视频监控

来源:互联网 发布:广西南宁移动网络缴费 编辑:程序博客网 时间:2024/05/16 23:34
波特率:57600
棕:远离网卡近USB GND   绿:紧挨GND RX->TX  黑:远离GND TX->RX


给HAME A100刷固件


目的:
1. 给HAME A100刷固件
2. 配置上UVC驱动
3. 修改内核自带的UVC驱动,使其支持我们自制的二合一摄像头
4. 移植mjpg-streamer
5. 实现开机自启动、热拔插功能

便携的无线监控设备 = 路由器(HAME A100) + USB摄像头(二合一摄像头) + 手机


HAME A100:
CPU: RT5350
FLASH: 8M SPI FLASH
SDRAM: 32M

固件:
可以理解为我们自己的内核和文件系统


一,环境的搭建


a,解压100ask_toolchain.bz2:
sudo tar xjvf 100ask_toolchain.bz2

b,安装工具连:
cd toolchain/
sudo tar jxf buildroot-gcc342.tar.bz2 -C /opt
修改环境变量:
vim /etc//environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/buildroot-gcc342/bin"
sudo reboot
mipsel-linux-gcc -v    //测试

c,安装内核压缩工具:
cd lzma-4.32.0beta5
./configure
make
sudo make install

d,安装rootfs工具:linux 2.6
cd ..
cd mksquash_lzma-3.2
make
sudo make install


二,配置与编译固件
sudo tar xjvf 100ask.bz2
cd 5350_source/
vim .config
-- CONFIG_CROSS_COMPILER_PATH="/opt/buildroot-gcc342/bin"
make clean
make


sudo tar xjvf 100ask.bz2

结果:
flash_100ask_IP_Camera_debug_V1.0.4.bin


2.1 配置上UVC驱动
cd linux-2.6.21.x/
     make menuconfig
        配置:
Device Drivers  --->
Multimedia devices  --->
<*> Video For Linux
Video Capture Adapters  --->
<*> USB Video Class (UVC)
make 就可以编译内核了


2.2 修改UVC驱动
用hame_a100\源码\2th_uvc目录下的《uvc_driver.c》和《uvc_video.c》替换原内核目录drivers/media/video/uvc下的相应文件
make 就可以重新编译内核了


四,移植mjpg-streamer


1. 交叉编译libjpeg
sudo tar xzvf libjpeg-turbo-1.2.1.tar.gz
cd libjpeg-turbo-1.2.1
mkdir tmp
./configure --prefix=/work/graduate_design/libjpeg-turbo-1.2.1/tmp/ --host=mipsel-linux
make
make install
cd tmp/lib/
cp *so* /work/graduate_design/5350_source/romfs/lib -d




2. 交叉编译mjpg-streamer
sudo tar xzvf mjpg-streamer-r63.tar.gz
cd mjpg-streamer-r63/
将如下文件做如下修改:
./Makefile                             将 CC=gcc 修改为 CC=mipsel-linux-gcc
./plugins/input_uvc/Makefile           将 CC=gcc 修改为 CC=mipsel-linux-gcc
该文件还要修改:
   a.将
CFLAGS += -O2 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC
改为
CFLAGS += -O2 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC -I /work/graduate_design/5350_source/linux-2.6.21.x/include -I /work/graduate_design/libjpeg-turbo-1.2.1/tmp/include

b.将
input_uvc.so: $(OTHER_HEADERS) input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo
$(CC) $(CFLAGS) -ljpeg -o $@ input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo
改为
input_uvc.so: $(OTHER_HEADERS) input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo
$(CC) $(CFLAGS) -ljpeg -L /work/graduate_design/libjpeg-turbo-1.2.1/tmp/lib -o $@ input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo
./plugins/input_gspcav1/Makefile       将 CC=gcc 修改为 CC=mipsel-linux-gcc
./plugins/input_testpicture/Makefile   将 CC=gcc 修改为 CC=mipsel-linux-gcc
./plugins/output_autofocus/Makefile    将 CC=gcc 修改为 CC=mipsel-linux-gcc
./plugins/output_http/Makefile    将 CC=gcc 修改为 CC=mipsel-linux-gcc
        编译:
make clean
make
cp *so* /work/graduate_design/5350_source/romfs/lib -d
cp mjpg_streamer /work/graduate_design/5350_source/romfs/bin/


3. 测试
1)烧写固件
1. 连接好串口,并搭建好相应的环境后,启动路由器
Please choose the operation: 
  1: Load system code to SDRAM via TFTP. 
  2: Load system code then write to Flash via TFTP. 
  3: Boot system code via Flash (default).
  4: Entr boot command line interface.
  7: Load Boot Loader code then write to Flash via Serial. 
  9: Load Boot Loader code then write to Flash via TFTP

2. 选择如上选项的1;
Please Input new ones /or Ctrl-C to discard
        Input device IP (192.168.1.155) ==:192.168.1.155// 设备IP,与服务器IP同一个网段
        Input server IP (192.168.1.105) ==:192.168.1.105// 服务器IP
        Input Linux Kernel filename (flash_100ask_IP_Camera_debug_V1.0.4.bin) ==:flash_100ask_IP_Camera_debug_V1.0.4.bin
2)
mjpg_streamer -i "input_uvc.so -f 10 -r 320*240" -o "output_http.so -w www"
手机上的地址为192.168.169.1  端口为8080
如果在浏览上查看,则地址为:http://192.168.1.17:8080/?action=stream


2)运行手机上的MjpegMonitor软件;


五,热拔插
现在还没有热插拔功能,拔掉摄像头之后再擦就不行了
mdev.conf的格式:
<device regex> <uid>:<gid> <octal permissions> [<@|$|*> <command>]


device regex:正则表达式,表示哪一个设备
uid: owner
gid: 组ID
octal permissions:以八进制表示的属性
@:创建设备节点之后执行命令
$:删除设备节点之前执行命令
*: 创建设备节点之后 和 删除设备节点之前 执行命令
command:要执行的命令


1)增加热拔插配置语句
    在5350_source/user/rt2880_app/scripts/internet.sh文件里修改如下:
    在echo "sd[a-z] 0:0 0660 */sbin/automount.sh \$MDEV" >> /etc/mdev.conf后面加上:
    echo "video[012345]? 0:0 777 * /bin/mjpg-streamer.sh /dev/\$MDEV" >> /etc/mdev.conf


2)实现mjpg-streamer.sh
#!/bin/sh


NAME=mjpg_streamer
PROG=/bin/$NAME
DEVICE=$1
FPS=10
RESOLUTION=320*240


if [ $ACTION = "add" ];
then
        # USB video in
        if [ -e $DEVICE ];then
                $PROG -i "input_uvc.so -d $DEVICE -f $FPS -r $RESOLUTION" -o "output_http.so -w www" &
        else
                # not find device
                exit -2
        fi


        sleep 3
        # check if mjpg_streamer is running
        pgrep $NAME
        if [ $? -ne 0 ];then
                # try to mjpg_streamer YUYV format
                $PROG -i "input_uvc.so -d $DEVICE -y -f $FPS -r $RESOLUTION" -o "output_http.so -w www" &
        fi
     
else


        killall -9 $NAME
        
fi
增加该脚本的权限:chmod 777 romfs/bin/mjpg-streamer.sh
再次编译查看效果:make
实验得知插拔之后也能够自动启动应用


六,开机自启动
当开机时候摄像头就插上了,热插拔功能并不能够开机就启动应用程序
1).写一个脚本文件run.sh
#!/bin/sh


NAME=mjpg_streamer
PROG=/bin/$NAME
DEVICE=/dev/video0
FPS=10
RESOLUTION=320*240
        
if [ -e $DEVICE ];then
        $PROG -i "input_uvc.so -d $DEVICE -f $FPS -r $RESOLUTION" -o "output_http.so -w www" &
        
        sleep 3
        # check if mjpg_streamer is running
        pgrep $NAME
        if [ $? -ne 0 ];then
                # try to mjpg_streamer YUYV format
                $PROG -i "input_uvc.so -d $DEVICE -y -f $FPS -r $RESOLUTION" -o "output_http.so -w www" &
        fi


else
        # not find device
        exit -2 
fi


增加权限:chmod 777 romfs/bin/run.sh


2).让系统自动运行这个脚步文件


将运行run.sh脚本的命令添加到internet.sh中即可
vi user/rt2880_app/scripts/internet.sh
在echo "/sbin/mdev" > /proc/sys/kernel/hotplug这一行下面增加一行:
/bin/run.sh


七,将固件烧写到flash
Please choose the operation: 
   1: Load system code to SDRAM via TFTP. 
   2: Load system code then write to Flash via TFTP. 
   3: Boot system code via Flash (default).
   4: Entr boot command line interface.
   7: Load Boot Loader code then write to Flash via Serial. 
   9: Load Boot Loader code then write to Flash via TFTP. 


You choosed 2 // 不同之处 
2: System Load Linux Kernel then write to Flash via TFTP. 
 Warning!! Erase Linux in Flash then burn new one. Are you sure?(Y/N)
 Please Input new ones /or Ctrl-C to discard
        Input device IP (192.168.1.155) ==:192.168.1.155
        Input server IP (192.168.1.105) ==:192.168.1.105
        Input Linux Kernel filename (flash_100ask_IP_Camera_debug_V1.0.4.bin) ==:flash_100ask_IP_Camera_debug_V1.0.4.bin




本实验中注意事项:
华美路由器串口波特率:57600

华美路由器引出线的名称: 棕:远离网卡近USB GND   绿:紧挨GND RX->TX  黑:远离GND TX->RX


下面是做实验的图片:



因为内核实在太大了,所以这里的资源只是上传除内核外的其他资源,内核再想办法:http://download.csdn.net/detail/chengdong1314/9518535

0 0
原创粉丝点击