On 2012-03-05 15:09, Jan Kiszka wrote: > Now that we have a hard dependency on python anyway, we can replace the > slow shell script to calculate the option ROM checksum with a fast AND > portable python version. Tested both with python 2.7 and 3.1. > > Signed-off-by: Jan Kiszka <jan.kis...@siemens.com> > --- > > Changes in v2: > - Switch to GPLv2+. > The tool replaces an inefficient GPLv2+ implementation, so want to > avoid any license "regression". As it is self-contained, it doesn't > affect the QEMU core license anyway (which least common denominator > remains GPLv2). >
Ping? > pc-bios/optionrom/Makefile | 2 +- > scripts/signrom.py | 40 +++++++++++++++++++++++++++++++++++++++ > scripts/signrom.sh | 45 > -------------------------------------------- > 3 files changed, 41 insertions(+), 46 deletions(-) > create mode 100644 scripts/signrom.py > delete mode 100755 scripts/signrom.sh > > diff --git a/pc-bios/optionrom/Makefile b/pc-bios/optionrom/Makefile > index f6b4027..57d8bd0 100644 > --- a/pc-bios/optionrom/Makefile > +++ b/pc-bios/optionrom/Makefile > @@ -26,7 +26,7 @@ build-all: multiboot.bin linuxboot.bin kvmvapic.bin > $(call quiet-command,$(OBJCOPY) -O binary -j .text $< $@," Building > $(TARGET_DIR)$@") > > %.bin: %.raw > - $(call quiet-command,$(SHELL) $(SRC_PATH)/scripts/signrom.sh $< $@," > Signing $(TARGET_DIR)$@") > + $(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/signrom.py $< $@," > Signing $(TARGET_DIR)$@") > > clean: > rm -f *.o *.d *.raw *.img *.bin *~ > diff --git a/scripts/signrom.py b/scripts/signrom.py > new file mode 100644 > index 0000000..f9c35cc > --- /dev/null > +++ b/scripts/signrom.py > @@ -0,0 +1,40 @@ > +# > +# Option ROM signing utility > +# > +# Authors: > +# Jan Kiszka <jan.kis...@siemens.com> > +# > +# This work is licensed under the terms of the GNU GPL, version 2 or later. > +# See the COPYING file in the top-level directory. > + > +import sys > +import struct > + > +if len(sys.argv) < 3: > + print('usage: signrom.py input output') > + sys.exit(1) > + > +fin = open(sys.argv[1], 'rb') > +fout = open(sys.argv[2], 'wb') > + > +fin.seek(2) > +size = ord(fin.read(1)) * 512 - 1 > + > +fin.seek(0) > +data = fin.read(size) > +fout.write(data) > + > +checksum = 0 > +for b in data: > + # catch Python 2 vs. 3 differences > + if isinstance(b, int): > + checksum += b > + else: > + checksum += ord(b) > +checksum = (256 - checksum) % 256 > + > +# Python 3 no longer allows chr(checksum) > +fout.write(struct.pack('B', checksum)) > + > +fin.close() > +fout.close() > diff --git a/scripts/signrom.sh b/scripts/signrom.sh > deleted file mode 100755 > index 9dc5c63..0000000 > --- a/scripts/signrom.sh > +++ /dev/null > @@ -1,45 +0,0 @@ > -#!/bin/sh > - > -# Option ROM Signing utility > -# > -# This program is free software; you can redistribute it and/or modify > -# it under the terms of the GNU General Public License as published by > -# the Free Software Foundation; either version 2 of the License, or > -# (at your option) any later version. > -# > -# This program is distributed in the hope that it will be useful, > -# but WITHOUT ANY WARRANTY; without even the implied warranty of > -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > -# GNU General Public License for more details. > -# > -# You should have received a copy of the GNU General Public License > -# along with this program; if not, see <http://www.gnu.org/licenses/>. > -# > -# Copyright Novell Inc, 2009 > -# Authors: Alexander Graf <ag...@suse.de> > -# > -# Syntax: signrom.sh <input> <output> > - > -# did we get proper arguments? > -test "$1" -a "$2" || exit 1 > - > -sum=0 > - > -# find out the file size > -x=`dd if="$1" bs=1 count=1 skip=2 2>/dev/null | od -t u1 -A n` > -#size=`expr $x \* 512 - 1` > -size=$(( $x * 512 - 1 )) > - > -# now get the checksum > -nums=`od -A n -t u1 -v -N $size "$1"` > -for i in ${nums}; do > - # add each byte's value to sum > - sum=`expr \( $sum + $i \) % 256` > -done > - > -sum=$(( (256 - $sum) % 256 )) > -sum_octal=$( printf "%o" $sum ) > - > -# and write the output file > -cp "$1" "$2" > -printf "\\$sum_octal" | dd of="$2" bs=1 count=1 seek=$size conv=notrunc > 2>/dev/null -- Siemens AG, Corporate Technology, CT T DE IT 1 Corporate Competence Center Embedded Linux