33、给华美A100刷固件
给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:
tar xjvf 100ask_toolchain.bz2
b,安装工具连:
cd toolchain/
sudo tar jxf buildroot-gcc342.tar.bz2 -C /opt
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
二,配置与编译固件
tar xjvf 100ask.bz2
cd 5350_source/
vim .config
-- CONFIG_CROSS_COMPILER_PATH="/opt/buildroot-gcc342/bin"
make clean
make
结果:
flash_100ask_IP_Camera_debug_V1.0.4.bin
2.1 配置上UVC驱动
Device Drivers --->
Multimedia devices --->
<*> Video For Linux
Video Capture Adapters --->
<*> USB Video Class (UVC)
问:“/dev/video0”该设备节点是谁创建的?怎么取消掉?
答:
1.肯定是通过运行脚步中的mknod这个命令来创建的。
通过分析内核的启动流程,发现internet.sh是我们要
找的脚步,然后在该脚步中发现了如下命令:
mknod /dev/video0 c 81 0
2. 要取消掉video0这个设备节点,只需将该行注释掉即可。
2.2 修改UVC驱动
三,烧写固件
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 // 固件名称
四,移植mjpg-streamer
1. 安装交叉编译器
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
2. 交叉编译libjpeg
tar xzvf libjpeg-turbo-1.2.1.tar.gz
cd libjpeg-turbo-1.2.1
mkdir tmp
./configure --prefix=/work/mjpg_streamer/libjpeg-turbo-1.2.1/tmp/ --host=mipsel-linux
make
make install
cp *so* /work/hame_a100/5350_source/romfs/lib -d
3. 交叉编译mjpg-streamer
tar xzvf mjpg-streamer-r63.tar.gz
cd mjpg-streamer-r63/
修改所有的Makefile
--(1) 将 CC=gcc 修改为 CC=mipsel-linux-gcc
--(2) 修改plugins/input_uvc/Makfile
a.将
CFLAGS += -O2 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC
改为
CFLAGS += -O2 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC -I /work/luyou/5350_source/linux2.6.21.x/include -I /work/mjpg_streamer/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/mjpg_streamer/libjpeg-turbo-1.2.1/tmp/lib -o $@ input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo
make
cp *so* /work/luyou/5350_source/romfs/lib -d
cp mjpg_streamer /work/luyou/5350_source/romfs/bin/
4. 测试
1)
二合一摄像头:
mjpg_streamer -i "input_uvc.so -f 10 -r 320*240" -o "output_http.so -w www"
一般的摄像头:
mjpg_streamer -i "input_uvc.so -f 10 -r 320*240 -y" -o "output_http.so -w www"
2)断开网线;
3)手机连接上路hame a100由器的wifi信号;
4)运行手机上的MjpegMonitor软件;
五,热拔插
mdev.conf的格式:
<device regex> <uid>:<gid> <octal permissions> [<@|$|*> <command>]
device regex:正则表达式,表示哪一个设备
uid: owner
gid: 组ID
octal permissions:以八进制表示的属性
@:创建设备节点之后执行命令
$:删除设备节点之前执行命令
*: 创建设备节点之后 和 删除设备节点之前 执行命令
command:要执行的命令
问:路由器上的文件系统中的/etc/mdev.conf是谁创建的?里面的内容又是谁填入的?
答:
cd /work/hame_a100/5350_source/user/rt2880_app/scripts
vim
发现:
echo "# <device regex> <uid>:<gid> <octal permissions> [<@|$|*> <command>]" > /etc/mdev.conf
echo "# The special characters have the meaning:" >> /etc/mdev.conf
echo "# @ Run after creating the device." >> /etc/mdev.conf
echo "# $ Run before removing the device." >> /etc/mdev.conf
echo "# * Run both after creating and before removing the device." >> /etc/mdev.conf
echo "sd[a-z][1-9] 0:0 0660 */sbin/automount.sh \$MDEV" >> /etc/mdev.conf
echo "sd[a-z] 0:0 0660 */sbin/automount.sh \$MDEV" >> /etc/mdev.conf
问:怎么实现摄像头的热拔插功能?
答:
1).
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
思路:
先
mjpg_streamer -i "input_uvc.so -f 10 -r 320*240" -o "output_http.so -w www"
后
mjpg_streamer -i "input_uvc.so -f 10 -r 320*240 -y" -o "output_http.so -w www"
附件:
-e file : 如果file是存在的,则返回真
pgrep: 通过进程的名字来查询进程是否正常运行的工具,一般就是用来判断程序是否正常运行
$?:表示最后支持的命令的推出状态,如果为0,则表示没有错误
六,开机自启动
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
2).让系统自动运行这个脚步文件
将运行run.sh脚本的命令添加到internet.sh中即可
七,将固件烧写到flash
方法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.
You choosed 2 // 不同之处
0
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
方法2:
通过网络升级的办法来下载固件
注意:
1. 串口的波特率为57600(8N1);
33、给华美A100刷固件的更多相关文章
- 折腾iPhone的生活——iOS设备重刷固件
iOS设备升级系统总共有这么几种方法: 1.OTA升级,也就是我们最常碰到的,在设备上,连上Wifi,在设置里面的软件更新就可以直接通过Wifi安装新的系统(已越狱设备不要这样升级) 2.通过iTun ...
- 一,ESP8266下载和刷固件
用自己的小板测试...... 安排上呢 一, ESP8266下载和刷固件(Lua开发----体验一下lua开发的魅力所在) 二, 控制一个灯亮灭 三, TCP服务器 四, TCP客户端 五, UDP ...
- openwrt用WEB刷固件型号不对问题强行处理
参照这里:https://blog.csdn.net/caoshunxin01/article/details/79355602 原机是一块mt7620A的通板,之前刷了一个叫WE826型号的固件,发 ...
- 3-51单片机ESP8266学习-AT指令(学会刷固件)
前言:体验一下刷固件(给单片机更新程序) 上一篇链接 http://www.cnblogs.com/yangfengwu/p/8757036.html 源码链接:https://pan.baidu. ...
- 一,ESP8266下载和刷固件(基于Lua脚本语言)
用自己的小板测试...... 安排上呢 一, ESP8266下载和刷固件(Lua开发----体验一下lua开发的魅力所在) 二, 控制一个灯亮灭 三, TCP服务器 四, TCP客户端 五, UDP ...
- Jlink v8仿真器在64位系统上刷固件
1. 安装软件sam-ba_2.16.exe.本次主要是Jlink v8在64位系统下面的刷固件方法. 2. J-link通过USB连接至电脑,短接PCB上标号为ERASE的焊盘5秒,断开ERASE两 ...
- [教程分享]锐族MP3刷固件教程
转载自我的博客:https://blog.ljyngup.com/archives/163.html/ (废话较多见谅) 在到学校前发现几个月前锐族mp3的固件更新了,赶紧刷了一个,发现网上关于这个售 ...
- ESP8266开发综合篇第一节(LUA)-下载和刷固件
本节视频: https://v.youku.com/v_show/id_XNDAwMTI2OTg2MA==.html?spm=a2h3j.8428770.3416059.1 一,整版测试 刷入测试固 ...
- 小米路由器3-R3 刷固件
1.刷机前的路由器升级准备 1-1.首先进入路由器原声后台:miwifi.com 1-2.在右上角,点击系统升级.在系统版本下边选择手动升级,选择资源包里的:“miwifi_r3_all_55ac7_ ...
随机推荐
- jdbc的数据库驱动类DriverManager.getConnection()详解
1.Oracle8/8i/9i数据库(thin模式) Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); ...
- Java:异常体系
异常的类别:可处理异常,运行时异常,非运行时异常 子类重写父类方法,父类方法有异常抛出, 子类重写父类的方法? 不能比父类抛出更大的异常 前言:java 中的异常处理机制你真的理解了吗?掌握了吗?ca ...
- vue2细节变化的用法
1.v-el和v-ref合并为一个属性:ref 原来:v-el:my-element 现在: ref="myElement", v-ref:my-component 变成了这样: ...
- HDU——T 4738 Caocao's Bridges
http://acm.hdu.edu.cn/showproblem.php?pid=4738 Time Limit: 2000/1000 MS (Java/Others) Memory Limi ...
- [TypeScript] Model Alternatives with Discriminated Union Types in TypeScript
TypeScript’s discriminated union types (aka tagged union types) allow you to model a finite set of a ...
- elasticsearch java 客户端之Client简介
elasticsearch通过构造一个client对外提供了一套丰富的java调用接口.总体来说client分为两类cluster信息方面的client及数据(index)方面的client.这两个大 ...
- C#之在treeview中鼠标点击的所选的节点触发事件
一.背景 如下图所示,我想实现通过鼠标点击treeview的根节点,然后在文本框控件中显示鼠标点击的节点号. 二.程序实现 因为是要通过鼠标点击才发生的事情,所以这属于一个事件,需要触发才行,刚开始不 ...
- Java Web学习总结(2)——Servlet入门
一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...
- SSO单点登录学习总结(1)——单点登录(SSO)原理解析
SSO的概念: 单点登录SSO(Single Sign-On)是身份管理中的一部分.SSO的一种较为通俗的定义是:SSO是指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应 ...
- 洛谷 P1327 数列排序
P1327 数列排序 题目描述 给定一个数列{an},这个数列满足ai≠aj(i≠j),现在要求你把这个数列从小到大排序,每次允许你交换其中任意一对数,请问最少需要几次交换? 输入输出格式 输入格式: ...