38、给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

二,配置与编译固件(固件里面有内核、文件系统等文件,在顶层目录下执行make就会在image目录下生成bin文件,这个bin包括内核和文件系统)
tar xjvf 100ask.bz2
cd 5350_source/
vim .config
-- CONFIG_CROSS_COMPILER_PATH="/opt/buildroot-gcc342/bin"//指定变量工具链的目录
make clean
make(出错不用理会,其实已经编译成功了)

结果:在image目录下
flash_100ask_IP_Camera_debug_V1.0.4.bin

2.1 配置上UVC驱动(在5350_source/linux-2.6.21.x目录下)

Device Drivers --->
  Multimedia devices --->
    <*> Video For Linux
      Video Capture Adapters --->
        <*> USB Video Class (UVC)

问:“/dev/video0”该设备节点在没配置UVC驱动且没有摄像头的时候就创建了,是谁创建的?怎么取消掉?
答:
1.肯定是通过运行脚步中的mknod这个命令来创建的。
通过分析串口打印的内核的启动流程,发现internet.sh是我们要(  find . -name "internet.sh")
找的脚步(需要修改./user/rt2880_app/scripts),然后在该脚步中发现了如下命令:
mknod /dev/video0 c 81 0

2. 要取消掉video0这个设备节点,只需将该行注释掉即可。

2.2 修改UVC驱动

目录linux-2.6.21.x/drivers/media/video/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

cd ./tmp/lib
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/linux-2.6.21.x/include -I /work/mjpg_streamer/libjpeg-turbo-1.2.1/tmp/include    //通过大写字母“I”来指定头文件,因为input_uvc.c文件会使用到libjpeg和linux内核下的头文件

b.将(接个上面a修改)
input_uvc.so: $(OTHER_HEADERS) input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo
$(CC) $(CFLAGS) -ljpeg -o [email protected] 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 [email protected] input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo

make
cp *so* /work/luyou/5350_source/romfs/lib -d   //romfs是文件系统目录,so就在顶层目录下
cp mjpg_streamer /work/luyou/5350_source/romfs/bin/

并去根文件系统的bin目录下修改其权限sudo chmod 777 mjpg_streamer

4. 测试
1)
二合一摄像头:
mjpg_streamer -i "input_uvc.so -f 10 -r 320*240" -o "output_http.so -w www"

-f指定帧率,-r指定分辨率

一般的摄像头:
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//设置设备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:
通过网络升级的办法来下载固件

注意:
1. 串口的波特率为57600(8N1);

原文地址:https://www.cnblogs.com/liusiluandzhangkun/p/8973894.html

时间: 2024-10-16 21:44:48

38、给A100刷固件的相关文章

[转载]一、ESP8266下载和刷固件(基于Lua脚本语言)

用自己的小板测试...... 安排上呢 一, ESP8266下载和刷固件(Lua开发----体验一下lua开发的魅力所在) 二, 控制一个灯亮灭 三, TCP服务器 四, TCP客户端 五, UDP 六, 文件操作(保存数据到8266内部) 七, 外设操作(SPI,ADC) 八, 再说...... 最终能让大家轻松的做到 http://www.cnblogs.com/yangfengwu/p/7513097.html 轻松使用8266 先看下载自己的固件 填写好自己的的邮箱地址,然后选择好自己需

tplink 703刷固件

1.软件下载: ImageBuilder链接 如果是全新刷机的话,使用:http://downloads.openwrt.org/snapshots/trunk/ar71xx/generic/openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-factory.bin 如果是系统升级的话,使用:http://downloads.openwrt.org/snapshots/trunk/ar71xx/generic/openwrt-ar71xx-generic-t

2-Wi-Fi无线控制器开发例程(开发8266的几种方式比较{AT,Lua,SDK,其它}开发工具安装,开发固件获取,刷固件)

1-AT,Lua,SDK开发方式总结 2-安装JDK 3-从浏览器获取开发固件 4-自己动手编译固件(提供视频教程,必须的文件和匠芯编译好的bin文件),初学者不要求自己编译,先学会使用即可 5-刷入学习固件 6-如果自己想知道单片机如何嵌入的lua,可以参考这篇文章 https://www.cnblogs.com/yangfengwu/p/9315841.html  (这是我用STM32嵌入了Lua,然后实现控制LED) 下一篇 https://www.cnblogs.com/yangfeng

J-link刷固件(坑)

1.上电,短接ERASE,>10秒后,拔USB. 2.短接TST,上电,>10秒后,拔USB. 3.安装驱动.(看别人教程,下载到INF文件,WIN7不能右击安装,好,换虚拟机XP) 4.成功识别,但ISP居然不能下载,write Flash为灰色. =====================卡了N久===================== 百度,别人write Flash 灰色,基本都是驱动没装好,重装就好,和我情况不一样. 后来才知道识别为串口无法下载!需要改为USB!坑了我大半晚上!

ESP8266刷AT固件与nodemcu固件

这回是使用的这一款 因为这款默认的是支持AT指令的固件,,所以我们就刷nodemcu的 先看接线 GPIO0 默认是工作模式(不接线).如果接了低电平就是下载模式(给模块刷固件!!)所以接低电平.CH_PD接高电平,其余除了TX,RX外可以不接线.. 剩余的其实和我的这篇文章差不多了 NodeMCU初探 首先是先下载需要用到的工具和固件 链接:http://pan.baidu.com/s/1dF5NZ3N 密码:bziq 现在需要先让模块处于正常工作模式 需要Java环境,,提示安装时安装即可

斐讯k2路由器v22.4.6.3版本刷breed刷华硕固件方法

v22.4.6.3版本配置文件要与路由器MAC对应,不能用导入未经修改的文件来刷了. 刷机步骤: 一.下载breed web控制台助手刷breed 1.开启Telnet服务 设置:控制面板→程序→打开或者关闭window功能<WIN10查找方法是设置→应用功能→收索(打开或者关闭window功能↓ 程序和功能→打开或者关闭window功能>→勾上(Telnet客户端)→确定 2.安装WinPcap 使用助手需要先安装WinPcap包 WinPcap下载地址:http://www.winpcap

2019 R7000v1 刷梅林merlin

刷机资源 根据不同的需求,刷机需要用到的资源可能有 官方固件 原版merlin http://xvtx.ru/xwrt/index.htm koolshare梅林 https://firmware.koolshare.cn/Koolshare_Merlin_Legacy_380/Netgear/R7000/ R7000v1过渡固件 R7000v1刷梅林必须,链接: https://pan.baidu.com/s/1mZAj_xGSIBfK2gxyC4_ytA 提取码: nmu8 ofw固件 梅林

buffalo whr-g300n v2 / whr-g301n 刷 openwrt 及后续 密码重置

根据原始硬件不同可以有这么几个刷机方式: 1.如果开始是buffalo固件刷openwrt,可以直接刷一下网址: http://downloads.openwrt.org/snapshots/trunk/ar71xx/ 下openwrt-ar71xx-generic-whr-g301n-squashfs-sysup..> 直接刷这个固件就可以. 2:如果是在windows下使用tftp方式刷机的话 首先要开启telnet功能: 1.“控制面板” 一〉“程序” 一〉“打开或关闭windows功能”

【MT7620A】斐讯路由器K1/K2刷机说明

斐讯路由器自开展活动以来,销售量剧增,特别是斐讯K1/K2系列. 京东或者某宝上都可以参与0元购路由的活动,其中,经测试,价格为99元的FIR302系列可刷空间不大.另外价格为199以及399元的k1/k2存在技术漏洞,使得刷机这一操作成为可能.下面以斐讯K2为例,介绍一下斐讯路由的特性. 1.mt7620a固件是应用比较广泛的一种芯片,许多网络解决方案公司或企业研发的设备都使用此芯片.因此,斐讯K2路由器可刷空间非常大,目前网络上已经有许多版本不同,功能不同的固件可供选择. 2.K2内存为64