def parse(self, data, offset=0):
""" Parse the u-boot environment variables from bytearray.
:param data: The data in bytes array
:param offset: The offset of input data
"""
self._env = collections.OrderedDict()
fmt = ">IB" if self._bigendian else "<IB"
(read_crc, tmp) = struct.unpack_from(fmt, data, offset)
if tmp == 0x01:
self._redundant = True
read_data = data[offset + 5:]
else:
self._redundant = False
read_data = data[offset + 4:]
calc_crc = binascii.crc32(read_data) & 0xffffffff
if read_crc != calc_crc:
raise ValueError("Wrong CRC")
read_data = read_data.decode('utf-8')
for s in read_data.split('\0'):
if not s or s.startswith('\xFF') or s.startswith('\x00'):
break
key, value = s.split('=', 1)
self._env[key] = value
评论列表
文章目录