38. Flash firmware for A100

Flash firmware for HAME A100

Purpose:
1. Flash firmware for HAME A100
2. Configure UVC driver
3. Modify the UVC driver that comes with the kernel to support our self-made two-in-one camera
4. Transplant mjpg-streamer
5. Realize self-start and hot-plug Plug-in function

Portable wireless monitoring device = router (HAME A100) + USB camera (two-in-one camera) + mobile phone

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

Firmware:
can be understood as our own kernel and file system

 

First, the construction of the environment

a, decompress 100ask_toolchain.bz2:
tar xjvf 100ask_toolchain.bz2

b, install the toolchain:
cd toolchain/
sudo tar jxf buildroot-gcc342.tar.bz2 -C /opt

c, install the kernel compression tool:
cd lzma-4.32.0beta5
./ configure
make
sudo make install

d, install rootfs tools: linux 2.6
cd ..
cd mksquash_lzma-3.2
make
sudo make install

 

Second, configure and compile the firmware (there are kernel, file system and other files in the firmware, and executing make in the top-level directory will generate a bin file in the image directory, this bin includes the kernel and file system)
tar xjvf 100ask.bz2
cd 5350_source/
vim .config
-- CONFIG_CROSS_COMPILER_PATH="/opt/buildroot-gcc342/bin"//Specify the directory of the variable toolchain
make clean
make (don't worry about errors, in fact, it has been compiled successfully)

Result:
flash_100ask_IP_Camera_debug_V1.0.4.bin in the image directory


2.1 Configure the UVC driver (in the 5350_source/linux-2.6.21.x directory)

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

Q: The device node "/dev/video0" is created when the UVC driver is not configured and there is no camera. Who created it? How to cancel?
Answer:
1. It must be created by running the mknod command in the footsteps.
By analyzing the startup process of the kernel printed by the serial port, it is found that internet.sh is the step we want to find ( find . -name "internet.sh")
(need to modify ./user/rt2880_app/scripts), and then found in this step The following command:
mknod /dev/video0 c 81 0

2. To cancel the video0 device node, just comment out this line.

2.2 Modify UVC driver

The directory linux-2.6.21.x/drivers/media/video/uvc is the driver that needs to be modified. You can modify it according to the knowledge points in the previous directory. Refer to the camera modification document

3. Program firmware
1. After connecting the serial port and setting up the corresponding environment, start the router
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. Select 1 of the above options;
Please Input new ones /or Ctrl-C to discard
Input device IP (192.168.1.155) ==:192.168.1.155 // Device IP, same network segment as
server IP Input server IP (192.168.1.105) ==:192.168. 1.105 // Server IP
Input Linux Kernel filename (flash_100ask_IP_Camera_debug_V1.0.4.bin) ==:flash_100ask_IP_Camera_debug_V1.0.4.bin // firmware name

 

Fourth, transplant mjpg-streamer

1. Install the cross compiler
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. Cross-compile mjpg-streamer
tar xzvf mjpg-streamer-r63.tar.gz
cd mjpg-streamer-r63/
modify all Makefiles
--(1) Change CC=gcc to CC=mipsel-linux-gcc
--( 2) Modify plugins/input_uvc/Makfile
a. Change
CFLAGS += -O2 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC
to
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 //Specify the header file by the capital letter "I", because the input_uvc.c file will use the The header file

b. under libjpeg and the linux kernel will be (modified from a above)
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
to
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 //romfs is the file system directory, so is in the top-level directory
cp mjpg_streamer /work/ luyou/5350_source/romfs/bin/

And go to the bin directory of the root file system to modify its permissions sudo chmod 777 mjpg_streamer 

4. Test
1) 2-in
-1 camera:
mjpg_streamer -i "input_uvc.so -f 10 -r 320*240" -o "output_http.so -w www"

-f specifies frame rate, -r specifies resolution

General camera:
mjpg_streamer -i "input_uvc.so -f 10 -r 320*240 -y" -o "output_http.so -w www"

2) Disconnect the network cable;
3) Connect the mobile phone to the wifi signal of the hame a100 router;
4) Run the MjpegMonitor software on the mobile phone;

Five, hot swap

mdev.conf的格式:
<device regex> <uid>:<gid> <octal permissions> [<@|$|*> <command>]

device regex: Regular expression, indicating which device
uid: owner
gid: group ID
octal permissions: attributes expressed in octal
@: execute command after creating device node
$: execute command before deleting device node
*: after creating device node and delete Execute the command command before the device node
: the command to be executed


Q: Who created /etc/mdev.conf in the file system on the router? Who filled in the content?
Answer:
cd /work/hame_a100/5350_source/user/rt2880_app/scripts
vim
found:
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[az][1-9] 0:0 0660 */sbin/automount.sh \$MDEV" >> /etc/mdev.conf
echo "sd[az] 0:0 0660 */sbin/automount.

Q: How to realize the hot-plugging function of the camera?
Answer:
1).
echo "video[012345]? 0:0 777 * /bin/mjpg-streamer.sh /dev/\$MDEV" >> /etc/mdev.conf

2).
Implement 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"

Attachment:
-e file : If the file exists, return true
pgrep: A tool to query whether the process is running normally by the name of the process, generally used to judge whether the program is running normally
$?: Indicates the launch status of the last supported command , if 0, there is no error

 

6. Self-start at boot

1). Write a script file 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). Let the system automatically run this script file

Add the command to run the run.sh script to internet.sh

Seven, burn the firmware to 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 chosen 2 // the difference

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//Set device IP
Input server IP (192.168.1.105) ==:192.168.1.105//Set server IP
Input Linux Kernel filename (flash_100ask_IP_Camera_debug_V1.0.4.bin) ==:flash_100ask_IP_Camera_debug 0.4.bin//Enter the name of the downloaded firmware

Method 2:
Download firmware via network upgrade


Note:
1. The baud rate of the serial port is 57600 (8N1);

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325097988&siteId=291194637