...
Zur Erklärung:
Das Modul besteht ja aus zwei Teilen, dem eigentlichen CAM sowie dem Linux/WiFi-Modul.
...
Grüße
Gerne,
Verwendete Software = Linux
Verwendete Hardware = Matrix Cam Air ;-)
Also das Firmwarefile für die MCA ist ein jffs2 Image darin enthalten im Pfad /root/mca_cam.upb ist das Update für das CAM selbst.
Dieses Update enthält (bei version 339/326) an Offset 0x07EB2 die CAIDs, diese können mit einem Hexeditor bearbeitet werden.
Anschlißend muss noch die CRC-Checksumme in den letzten 4 Bytes neu berechnet werden, dafür werden zunächst die letzen 4 Bytes abgeschnitten.
Zum Berechnen verwende ich dann dieses Script:
Code:#!/bin/bash echo -en "`jacksum -a crc32 -x -F "#CHECKSUM" $1 | sed "s/\([0-9a-f]\{2\}\)\([0-9a-f]\{2\}\)\([0-9a-f]\{2\}\)\([0-9a-f]\{2\}\)/\\\\\x\4\\\\\x\3\\\\\x\2\\\\\x\1/g"`"
Das Ganze dann wieder in ein jffs2-Image verpacken, und ebenfalls mit einer CRC-Summe versehen.
Grüße
0.2.2-XMAS-339 - CAM-Firmware: - Unterstützte CAIDS: 1801 1802 1803 1810 1830 1833 1834 1835 1838 1843 1880 1702 1722 0D03 0D05 0D95 0D96 09C4 09C7 098C 0963 0648 0626 0B01 0500 0100
01 18 00 00 ==> 1801
02 18 00 00 ==> 1802
03 18 00 00 ==> 1803
10 18 00 00 ==> 1810
30 18 00 00 ==> 1830
33 18 00 00 ==> 1833
34 18 00 00 ==> 1834
35 18 00 00 ==> 1835
38 18 00 00 ==> 1838
43 18 00 00 ==> 1843
80 18 00 00 ==> 1880
02 17 00 00 ==> 1702
22 17 00 00 ==> 1722
03 0D 00 00 ==> 0D03
05 0D 00 00 ==> 0D05
95 0D 00 00 ==> 0D95
96 0D 00 00 ==> 0D96
C4 09 00 00 ==> 09C4
C7 09 00 00 ==> 09C7
8C 09 00 00 ==> 098C
63 09 00 00 ==> 0963
48 06 00 00 ==> 0648
26 06 00 00 ==> 0626
01 0B 00 00 ==> 0B01
00 05 00 00 ==> 0500
01 00 00 00 ==> 0100
mknod /tmp/mtdblock0 b 31 0
modprobe mtdblock
modprobe mtdram total_size=6912
modprobe jffs2
dd if=rootfs.jffs2 of=/tmp/mtdblock0
mount -t jffs2 /tmp/mtdblock0 /media/jffs2
cp -r /media/jffs2 /home/user/
bless /home/user/jffs2/root/mca_cam.upb
./createCheckSumScript.sh /home/user/jffs2/mca_cam.upb
#!/bin/bash
echo -en "`jacksum -a crc32 -x -F "#CHECKSUM" $1 | sed "s/\([0-9a-f]\{2\}\)\([0-9a-f]\{2\}\)\([0-9a-f]\{2\}\)\([0-9a-f]\{2\}\)/\\\\\x\4\\\\\x\3\\\\\x\2\\\\\x\1/g"`"
mkfs.jffs2 -r /home/user/jffs2 -o myRootImage.jffs2
#!/usr/bin/env perl
# MCA-tool (C) 2012 - dirtyharry123
use strict;
use Getopt::Std;
use Fcntl qw(SEEK_END SEEK_SET SEEK_CUR);
use String::CRC32;
my $offset= 0x07EB4;
my $n = 26;
my $version_offset = 0x04AD9;
my $name_offset = 0x229B0;
my $file = 0;
sub usage{
print "Usage: $0 [<options>] <filename>\n";
print "\n";
print " options:\n";
print " -a Append CRC32 to file\n";
print " -c Check file-integrity (compare CRC32)\n";
print " -e|-r Replace CRC32\n";
print " -s Show CRC32\n";
print " -h Print this help\n";
print "\n";
print " additional options for mca_cam.upb:\n";
print " -x Extract Info + CAIDs\n";
print " -R <list> Replace CAIDs with \',\'-separated list of CAIDs\n";
print " -N <name> Replace firmware-name\n";
print " -v <version> Replace firmware-version\n";
}
my %opt;
getopts("acershxR:N:v:", \%opt);
if($opt{h} || !$ARGV[0]){
usage();
exit(1);
}
$file = $ARGV[0];
my @CAIDS;
my $crc;
my $stored_crc;
my $buffer;
open FILE, "+<", $file or die $!;
if($opt{s} || $opt{a}){
$crc=crc32(*FILE);
printf "CRC32 = %08X\n", $crc;
if($opt{a}){
seek(FILE, 0, SEEK_END);
$stored_crc=pack("V", $crc);
print FILE $stored_crc;
print "CRC appended\n";
}
}
else{
if($opt{x} || $opt{R} || $opt{N} || $opt{v}){
seek(FILE, $version_offset, SEEK_SET);
read(FILE, $buffer, 2);
my $version = unpack("n", $buffer);
seek(FILE, $name_offset, SEEK_SET);
read(FILE, $buffer, 4);
my $name = $buffer;
seek(FILE, $offset, SEEK_SET);
for(my $i=0; $i < $n; $i++){
read(FILE, $buffer, 4);
push(@CAIDS, sprintf("%04X", unpack("V", $buffer)));
}
print "Firmware name: $name\n";
print "Firmware version: $version\n";
print "CAIDS: " . join(',', @CAIDS) . "\n";
if($opt{R}){
@CAIDS = split(",", $opt{R});
if(scalar(@CAIDS) <= $n){
printf "Replacing CAIDS: $opt{R}\n";
seek(FILE, $offset, SEEK_SET);
foreach my $caid (@CAIDS){
print FILE pack("V", hex($caid));
}
}
else{
printf "Too many CAIDS: " . scalar(@CAIDS) . ", Available slots: $n\n";
}
}
if($opt{N}){
if(length($opt{N}) <= 3){
printf "Replacing name: $opt{N}\n";
seek(FILE, $name_offset, SEEK_SET);
print FILE $opt{N};
}
else{
printf "Name too long, only 3 Bytes allowed\n";
}
}
if($opt{v}){
printf "Replacing version: $opt{v}\n";
seek(FILE, $version_offset, SEEK_SET);
print FILE pack("n", $opt{v});
}
}
seek(FILE, -4, SEEK_END);
read(FILE, $buffer, 4);
$stored_crc=unpack("V", $buffer);
seek(FILE, 0, SEEK_SET);
local $/ = undef;
$buffer = <FILE>;
$crc=crc32(substr($buffer,0,-4));
if($opt{e} || $opt{r}){
printf "Original CRC32 = %08X\n", $stored_crc;
printf "Calculated CRC32 = %08X\n", $crc;
if($stored_crc != $crc){
seek(FILE, -4, SEEK_END);
$stored_crc=pack("V", $crc);
print FILE $stored_crc;
print "CRC replaced\n";
}
else{
print "Nothing to do\n";
}
}else{
if($crc != $stored_crc){
printf "CRC mismatch (%08X != %08X)\n", $stored_crc, $crc;
}
else{
printf "CRC matched (%08X = %08X)\n", $stored_crc, $crc;
}
}
}
close(FILE);
mca_tool.pl -x mca_cam.upb
Firmware name: MNG
Firmware version: 3266
CAIDS: 1801,1802,1803,1810,1830,1833,1834,1835,1838,1843,1880,1702,1722,0D03,0D05,0D95,0D96,09C4,09C7,098C,0963,0648,0626,0B01,0500,0100
CRC matched (68A1709B = 68A1709B)
mca_tool.pl -r -R 1801,1802,1803,1810,1830,1833,1834,1835,1838,1843,1880,1702,1722,0D03,0D05,0D95,0D96,09C4,09C7,098C,0963,0648,0626,0B01,0500,1800 -v 3267 mca_cam.upb
mkfs.jffs2 -r /home/user/jffs2 -o myRootImage.jffs2 -e 128 -l -n -q -p
mca_tool.pl -r myRootImage.jffs2
mknod /tmp/mtdblock0 b 31 0
modprobe mtdblock
modprobe mtdram total_size=6912
modprobe jffs2
dd if=rootfs.jffs2 of=/tmp/mtdblock0
mount -t jffs2 /tmp/mtdblock0 /media/jffs2
cp -r /media/jffs2 /home/user/
Wir verwenden Cookies und ähnliche Technologien für folgende Zwecke:
Akzeptieren Sie Cookies und diese Technologien?
Wir verwenden Cookies und ähnliche Technologien für folgende Zwecke:
Akzeptieren Sie Cookies und diese Technologien?