Ai
30 Star 75 Fork 414

openEuler/qemu
关闭

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
signrom.py 1.24 KB
一键复制 编辑 原始数据 按行查看 历史
Paolo Bonzini 提交于 2020-02-05 00:06 +08:00 . drop "from future import print_function"
#!/usr/bin/env python3
#
# Option ROM signing utility
#
# Authors:
# Jan Kiszka <jan.kiszka@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')
magic = fin.read(2)
if magic != b'\x55\xaa':
sys.exit("%s: option ROM does not begin with magic 55 aa" % sys.argv[1])
size_byte = ord(fin.read(1))
fin.seek(0)
data = fin.read()
size = size_byte * 512
if len(data) > size:
sys.stderr.write('error: ROM is too large (%d > %d)\n' % (len(data), size))
sys.exit(1)
elif len(data) < size:
# Add padding if necessary, rounding the whole input to a multiple of
# 512 bytes according to the third byte of the input.
# size-1 because a final byte is added below to store the checksum.
data = data.ljust(size-1, b'\0')
else:
if ord(data[-1:]) != 0:
sys.stderr.write('WARNING: ROM includes nonzero checksum\n')
data = data[:size-1]
fout.write(data)
checksum = 0
for b in data:
checksum = (checksum - b) & 255
fout.write(struct.pack('B', checksum))
fin.close()
fout.close()
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C
1
https://gitee.com/openeuler/qemu.git
git@gitee.com:openeuler/qemu.git
openeuler
qemu
qemu
stable-5.0

搜索帮助