Firmware image found with MediaTek MT76xx wifi chipsets.
This page hosts a formal specification of Andes Firmware Image layout as seen in MT76 Wifi Chipsets using Kaitai Struct. This specification can be automatically translated into a variety of programming languages to get a parsing library.
Parse a local file and get structure in memory:
data = AndesFirmware.from_file("path/to/local/file.Andes Firmware Image layout as seen in MT76 Wifi Chipsets")
Or parse structure from a string of bytes:
bytes = "\x00\x01\x02..."
data = AndesFirmware.new(Kaitai::Struct::Stream.new(bytes))
After that, one can get various attributes from the structure by invoking getter methods like:
data.image_header # => get image header
# This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild
require 'kaitai/struct/struct'
unless Gem::Version.new(Kaitai::Struct::VERSION) >= Gem::Version.new('0.7')
raise "Incompatible Kaitai Struct Ruby API: 0.7 or later is required, but you have #{Kaitai::Struct::VERSION}"
end
##
# Firmware image found with MediaTek MT76xx wifi chipsets.
class AndesFirmware < Kaitai::Struct::Struct
def initialize(_io, _parent = nil, _root = self)
super(_io, _parent, _root)
_read
end
def _read
@_raw_image_header = @_io.read_bytes(32)
io = Kaitai::Struct::Stream.new(@_raw_image_header)
@image_header = ImageHeader.new(io, self, @_root)
@ilm = @_io.read_bytes(image_header.ilm_len)
@dlm = @_io.read_bytes(image_header.dlm_len)
self
end
class ImageHeader < Kaitai::Struct::Struct
def initialize(_io, _parent = nil, _root = self)
super(_io, _parent, _root)
_read
end
def _read
@ilm_len = @_io.read_u4le
@dlm_len = @_io.read_u4le
@fw_ver = @_io.read_u2le
@build_ver = @_io.read_u2le
@extra = @_io.read_u4le
@build_time = (@_io.read_bytes(16)).force_encoding("UTF-8")
self
end
attr_reader :ilm_len
attr_reader :dlm_len
attr_reader :fw_ver
attr_reader :build_ver
attr_reader :extra
attr_reader :build_time
end
attr_reader :image_header
attr_reader :ilm
attr_reader :dlm
attr_reader :_raw_image_header
end