patchko.sh and insmod.sh moved to modules driver
authorVitaliy Cherepanov <v.cherepanov@samsung.com>
Tue, 27 Nov 2012 13:55:18 +0000 (17:55 +0400)
committerVitaliy Cherepanov <v.cherepanov@samsung.com>
Tue, 27 Nov 2012 13:55:18 +0000 (17:55 +0400)
try to fix sa tests

dalvik_handlers/Makefile
driver/Makefile.am
driver/insmod.sh [new file with mode: 0755]
driver/patchko.sh [new file with mode: 0755]
kprobe/Makefile.am

index c8873a1..26435e2 100644 (file)
@@ -9,7 +9,7 @@ all-local:
        $(MAKE) CROSS_COMPILE=$(cross_compiler) ARCH=$(target_arch) android_opt=$(android_opt) debug_opt=$(debug_opt) $(AM_MAKEFLAGS) -C $(target_kernel_src) M=$(handlers_module_dir) modules
 
        echo "generate data for version patching <$(OBJDUMP)><$(READELF)>"
-       $(top_srcdir)/src/daemon/patchko.sh -g $(handlers_module_dir)/$(module_name).ko $(OBJDUMP) $(READELF)
+       $(top_srcdir)/src/modules/driver/patchko.sh -g $(handlers_module_dir)/$(module_name).ko $(OBJDUMP) $(READELF)
 
 clean-local:
        $(MAKE) CROSS_COMPILE=$(cross_compiler) ARCH=$(target_arch) $(AM_MAKEFLAGS) -C $(target_kernel_src) M=$(handlers_module_dir) clean
index 98f6ef7..303cc68 100644 (file)
@@ -30,12 +30,14 @@ driver_module_dir = $(realpath $(srcdir))
 module_name = swap_driver
 cross_compiler = $(subst gcc,,$(CC))
 
+#bin_SCRIPTS = patchko.sh insmod.sh
+
 all-local:
        cp $(top_srcdir)/src/modules/kprobe/Module.symvers $(driver_module_dir)
        $(MAKE) CROSS_COMPILE=$(cross_compiler) ARCH=$(target_arch) memchecker=$(memchecker) android_opt=$(android_opt) slp_opt=$(slp_opt) android_app_opt=$(android_app_opt) board_opt=$(board_opt) debug_opt=$(debug_opt) $(AM_MAKEFLAGS) -C $(target_kernel_src) M=$(driver_module_dir) modules
 
        echo "generate data for version patching <$(OBJDUMP)><$(READELF)>"
-       $(top_srcdir)/src/daemon/patchko.sh -g $(driver_module_dir)/$(module_name).ko $(OBJDUMP) $(READELF)
+       $(top_srcdir)/src/modules/driver/patchko.sh -g $(driver_module_dir)/$(module_name).ko $(OBJDUMP) $(READELF)
 
 clean-local:
        $(MAKE) CROSS_COMPILE=$(cross_compiler) ARCH=$(target_arch) $(AM_MAKEFLAGS) -C $(target_kernel_src) M=$(driver_module_dir) clean
@@ -44,9 +46,14 @@ install-exec-local:
 
        install -m 644 $(driver_module_dir)/$(module_name).ko $(prefix)
        install -m 644 $(driver_module_dir)/$(module_name).ko.addr $(prefix)
+       install -m 755 $(driver_module_dir)/patchko.sh $(prefix)/bin
+       install -m 755 $(driver_module_dir)/insmod.sh $(prefix)/bin
 
        if [ "$(android)" != "yes" ] ; then \
        sed "s|__DEV_MAJOR__|$(dev_major)|" $(driver_module_dir)/$(module_name).sh | \
        sed "s|__DEV_NAME__|`basename $(dev_path)`|" | \
        sed "s|__DEV_DIR__|`dirname $(dev_path)`|" > \
-       $(prefix)/$(module_name).sh ; chmod +x $(prefix)/$(module_name).sh ; fi
+       $(prefix)/$(module_name).sh ; chmod +x $(prefix)/$(module_name).sh ; \
+       chmod +x $(driver_module_dir)/patchko.sh ; \
+       chmod +x $(driver_module_dir)/insmod.sh ; \
+       fi
diff --git a/driver/insmod.sh b/driver/insmod.sh
new file mode 100755 (executable)
index 0000000..03e0b6c
--- /dev/null
@@ -0,0 +1,23 @@
+#!/bin/sh
+echo ">insmod with patch"
+module=$1
+
+par1=`echo $@ | awk '{print $1}'`
+add_params=${@#*$par1}
+
+if [ -f ${module} ];then
+    tmp_ver=`mktemp`
+    tmp_mod=`mktemp`
+
+    version=`uname -r`
+
+    echo "$version" > $tmp_ver
+    echo "<`cat $tmp_ver`>"
+    echo "./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"
+    insmod $tmp_mod $add_params
+    rm $tmp_mod
+    rm $tmp_ver
+fi
diff --git a/driver/patchko.sh b/driver/patchko.sh
new file mode 100755 (executable)
index 0000000..58b3512
--- /dev/null
@@ -0,0 +1,126 @@
+#!/bin/bash
+opt=$1
+patch_file=$2
+output_file=$3
+data_file=$4
+
+objdump=$3
+readelf=$4
+
+howto()
+{
+    echo " $0 -r <patchingfile.ko> <readelf> <objdump>"
+    echo " $0 -g <patchingfile.ko> <readelf> <objdump>"
+    echo " $0 -p <patchingfile.ko> <outputfile.ko> <patchdata>"
+}
+
+debug(){
+    echo "patchko.sh) $1"
+}
+
+error(){
+    debug "[Err]$1"
+}
+
+#toolchain=~/Work/tools/u1_slp/toolchai
+#cross=${toolchain}/bin/arm-none-linux-gnueabi-
+#cross=arm-none-linux-gnueabi-
+
+sect_name="modinfo"
+varname="vermagic"
+debug "patchfile <$patch_file>"
+
+if [ -f "$patch_file" ]; then
+
+    if [ "$opt" = "-p" ];then
+    #set version (use only on target)
+        debug "Set version (patching) to <$patch_file>"
+        if [ -f "$data_file" ];then
+            cp -f "${patch_file}" "${output_file}"
+
+            #get patching adderes
+            let pos=`cat $patch_file.addr | awk '{print \$1}'`
+            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>"
+            key_before_tail=${key_before#*\ }
+            #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 "key_len=$key_len"
+            if [ $key_len -le ${abs_len} ];then
+                #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>"
+            else
+                error "Error on patching <${patch_file}>:data file <$data_file> NEW KEY TOO LONG"
+                exit -2
+            fi
+        else
+            error "Error on patching <${patch_file}>:data file <$data_file> not found"
+            exit -1
+        fi
+    else
+    #if[ "$opt" != "-p" ];then
+        debug "+not p"
+
+        $readelf -v
+        if [ $? -ne 0 ];then
+            error "readelf not found on path <$readelf>"
+            exit 2
+        fi
+        $objdump -v
+        if [ $? -ne 0 ];then
+            error "objdump not found on path <$objdump>"
+            exit 1
+        fi
+
+        let file_size=`ls -la "$patch_file" | awk '{print \$5}'`
+        debug "file_size=$file_size"
+
+        section=`$readelf -e $patch_file | grep ${sect_name}`
+        section=${section##*${sect_name}}
+        debug "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
+
+        let abs_len=0x`$objdump -t -j .${sect_name} "$patch_file" | grep _${varname} | awk '{print $5}'`
+        let abs_len=$abs_len-${#varname}-1
+        let sect_off=0x`$objdump -t -j .${sect_name} "$patch_file" | grep _${varname} | awk '{print $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"
+        if [ "$opt" = "-r" ];then
+        #read version (for patch testing)
+            debug "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>"
+        elif [ "$opt" = "-g" ];then
+        #gen file version (use only on host)
+            debug "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`"
+        else
+            error "Wrong param <$opt>"
+        fi
+    fi
+else
+    error "file for patchig not found <$patch_file>"
+fi
index 90e23c4..39eebd6 100644 (file)
@@ -19,7 +19,7 @@ all-local:
 
 
        echo "generate data for version patching <$(OBJDUMP)><$(READELF)>"
-       PATH=$(PATH) $(top_srcdir)/src/daemon/patchko.sh -g $(kprobes_module_dir)/$(module_name).ko $(OBJDUMP) $(READELF)
+       PATH=$(PATH) $(top_srcdir)/src/modules/driver/patchko.sh -g $(kprobes_module_dir)/$(module_name).ko $(OBJDUMP) $(READELF)
 
 clean-local:
        $(MAKE) CROSS_COMPILE=$(cross_compiler) ARCH=$(target_arch) $(AM_MAKEFLAGS) -C $(target_kernel_src) M=$(kprobes_module_dir) clean