#!/bin/sh
-echo ">insmod with patch"
+
module=$1
+DEBUG_OFF=1
+
+debug(){
+ if [ $DEBUG_OFF -eq 0 ];then
+ echo $1
+ fi
+}
+
+debug ">insmod with patch"
+
par1=`echo $@ | awk '{print $1}'`
add_params=${@#*$par1}
version=`uname -r`
echo "$version" > $tmp_ver
- echo "<`cat $tmp_ver`>"
- echo "./bin/patchko.sh -p <$module> <$tmp_mod> <$tmp_ver>"
+ debug "<`cat $tmp_ver`>"
+ debug "./bin/patchko.sh -p <$module> <$tmp_mod> <$tmp_ver>"
./bin/patchko.sh -p $module $tmp_mod $tmp_ver
chmod 644 $tmp_mod
- echo "insmod $tmp_mod $add_params"
+ debug "insmod $tmp_mod $add_params"
insmod $tmp_mod $add_params
rm $tmp_mod
rm $tmp_ver
echo " $0 -p <patchingfile.ko> <outputfile.ko> <patchdata>"
}
+DEBUG_OFF=1
+
debug(){
+ if [ $DEBUG_OFF -eq 0 ];then
+ echo "patchko.sh) $1"
+ fi
+}
+
+debugmk(){
echo "patchko.sh) $1"
}
error(){
- debug "[Err]$1"
+ debugmk "[Err]$1"
}
#toolchain=~/Work/tools/u1_slp/toolchai
let abs_len=`cat $patch_file.addr | awk '{print \$2}'`
key_before=`dd if="$patch_file" bs=1 skip=${pos}c count=${abs_len}c 2>/dev/null`
- #debug "key_before<$key_before>"
+ debug "key_before<$key_before>"
key_before_tail=${key_before#*\ }
- #debug "key_before_tail<$key_before_tail>"
+ debug "key_before_tail<$key_before_tail>"
echo -ne "`cat $data_file` $key_before_tail\000">$data_file
key_len="`cat $data_file`"
let key_len=${#key_len}+1
- #debug "POS>$pos<"
- #debug "OLDLEN>$abs_len<"
- #debug "NEWLEN>$key_len<"
- #debug "PATCH_TO>`cat $data_file`<"
+ debug "POS>$pos<"
+ debug "OLDLEN>$abs_len<"
+ debug "NEWLEN>$key_len<"
+ debug "PATCH_TO>`cat $data_file`<"
- #debug "key_len=$key_len"
+ debug "key_len=$key_len"
if [ $key_len -le ${abs_len} ];then
- #debug "before=<$key_before>"
+ debug "before=<$key_before>"
res=`dd if="${data_file}" of="${output_file}" bs=1 seek=${pos} skip=0c count=${key_len}c conv=notrunc 2>/dev/null`
- #res=`dd if="$output_file" bs=1 skip=${pos}c count=${abs_len}c 2>/dev/null`
- #debug "patched=<$res>"
+ res=`dd if="$output_file" bs=1 skip=${pos}c count=${abs_len}c 2>/dev/null`
+ debug "patched=<$res>"
else
error "Error on patching <${patch_file}>:data file <$data_file> NEW KEY TOO LONG"
exit -2
fi
let file_size=`ls -la "$patch_file" | awk '{print \$5}'`
- debug "file_size=$file_size"
+ debugmk "file_size=$file_size"
section=`$readelf -e $patch_file | grep ${sect_name}`
section=${section##*${sect_name}}
- debug "section=$section"
+ debugmk "section=$section"
let addr=0x`echo $section | awk '{print $2}'`
let offs=0x`echo $section | awk '{print $3}'`
let size=0x`echo $section | awk '{print $4}'`
- debug $addr:$offs:$size
+ debugmk $addr:$offs:$size
let abs_len=0x`$objdump -t -j .${sect_name} "$patch_file" | grep _${varname} | awk '{print $5}'`
let abs_len=$abs_len-${#varname}-1
let add_off=${#varname}+1
let abs_addr=${addr}+${offs}+${sect_off}+${add_off}
- debug "abs_addr=$abs_addr;"
- debug "abs_len=$abs_len"
+ debugmk "abs_addr=$abs_addr;"
+ debugmk "abs_len=$abs_len"
if [ "$opt" = "-r" ];then
#read version (for patch testing)
- debug "Read version in <$patch_file>"
+ debugmk "Read version in <$patch_file>"
res=`dd if="$patch_file" bs=1 skip=${abs_addr}c count=${abs_len}c 2>/dev/null`
- debug "ver<$res>"
+ debugmk "ver<$res>"
elif [ "$opt" = "-g" ];then
#gen file version (use only on host)
- debug "Generate version data for <$patch_file>"
+ debugmk "Generate version data for <$patch_file>"
#res=`dd if="$patch_file" of="$patch_file.addr" bs=1 skip=${abs_addr}c count=${abs_len}c`
echo "$abs_addr $abs_len">"$patch_file.addr"
- debug "patch_addr=`cat $patch_file.addr`"
+ debugmk "patch_addr=`cat $patch_file.addr`"
else
error "Wrong param <$opt>"
fi