Kinetis Bootloader Host  2.0.0
Host Tools for Kinetis devices
blfwk::SBSourceFile Class Reference

SB Format (SB) source file. More...

#include <SBSourceFile.h>

+ Inheritance diagram for blfwk::SBSourceFile:
+ Collaboration diagram for blfwk::SBSourceFile:

Classes

struct  boot_image_header_t
 Header for the entire boot image. More...
 
union  boot_image_header_t.__unnamed__
 
struct  boot_image_header_t.__unnamed__.__unnamed__
 
class  SBFileException
 Simple exception thrown to indicate an error in the input SB file format. More...
 
struct  version_t
 Same version struct used for 3600 boot image. More...
 

Public Member Functions

 SBSourceFile (const std::string &path)
 Default constructor.
 
virtual ~SBSourceFile ()
 Destructor.
 
Data source creation
virtual DataSourcecreateDataSource ()
 Creates an unmapped data source from the entire file.
 
- Public Member Functions inherited from blfwk::BinarySourceFile
 BinarySourceFile (const std::string &path, source_file_t sourceFileType=kBinarySourceFile)
 Default constructor.
 
virtual bool supportsNamedSections () const
 
virtual bool supportsNamedSymbols () const
 
void guessEntryPointAndStackPointer ()
 Initialize entry point and stack pointer from assumed vetcor table at the beginning of the file.
 
virtual bool hasEntryPoint ()
 Returns true if an entry point was set in the file.
 
virtual uint32_t getEntryPointAddress ()
 Returns the entry point address.
 
uint32_t getStackPointer ()
 Returns the stack pointer.
 
- Public Member Functions inherited from blfwk::SourceFile
 SourceFile (const std::string &path, source_file_t filetype)
 Default constructor.
 
virtual ~SourceFile ()
 Destructor. More...
 
void setOptions (OptionContext *context)
 Set the option context. More...
 
const OptionContextgetOptions () const
 Return the option context.
 
source_file_t getFileType () const
 Return the file type.
 
const std::string & getPath () const
 Returns the path to the file.
 
unsigned getSize () const
 Get the size in bytes of the file.
 
virtual void open ()
 Opens the file. More...
 
virtual void close ()
 Closes the file.
 
virtual bool isOpen () const
 Returns whether the file is already open.
 
virtual DataSourcecreateDataSource (StringMatcher &matcher)
 Creates a data source out of one or more sections of the file. More...
 
virtual DataSourcecreateDataSource (const std::string &section)
 Creates a data source out of one section of the file. More...
 
virtual DataTargetcreateDataTargetForSection (const std::string &section)
 
virtual DataTargetcreateDataTargetForSymbol (const std::string &symbol)
 
virtual DataTargetcreateDataTargetForEntryPoint ()
 
virtual bool hasSymbol (const std::string &name)
 Returns whether a symbol exists in the source file.
 
virtual uint32_t getSymbolValue (const std::string &name)
 Returns the value of a symbol.
 
virtual unsigned getSymbolSize (const std::string &name)
 Returns the size of a symbol.
 

Static Public Member Functions

static bool isSBFile (std::istream &stream)
 Identifies whether the stream contains an SB file. More...
 
- Static Public Member Functions inherited from blfwk::SourceFile
static SourceFileopenFile (const std::string &path)
 

Protected Types

typedef uint8_t cipher_block_t[16]
 An AES-128 cipher block is 16 bytes.
 
typedef uint8_t sha1_digest_t[20]
 A SHA-1 digest is 160 bits, or 20 bytes.
 
typedef uint32_t section_id_t
 Unique identifier type for a section.
 

Additional Inherited Members

- Public Types inherited from blfwk::SourceFile
enum  source_file_t {
  kBinarySourceFile,
  kELFSourceFile,
  kIntelHexSourceFile,
  kSBSourceFile,
  kSRecordSourceFile
}
 Set of supported executable image file formats. More...
 
- Protected Member Functions inherited from blfwk::SourceFile
std::ifstream * getStream ()
 Internal access to the input stream object.
 
- Protected Attributes inherited from blfwk::BinarySourceFile
uint32_t m_entry_point
 
uint32_t m_stack_pointer
 
- Protected Attributes inherited from blfwk::SourceFile
std::string m_path
 Path to the file.
 
smart_ptr< std::ifstream > m_stream
 File stream, or NULL if file is closed.
 
smart_ptr< OptionContextm_options
 Table of option values.
 
source_file_t m_filetype
 Image file type.
 
unsigned m_size
 The size in bytes of the file.
 

Detailed Description

SB Format (SB) source file.


Class Documentation

struct blfwk::SBSourceFile::boot_image_header_t

Header for the entire boot image.

Fields of this header are arranged so that those used by the bootloader ROM all come first. They are also set up so that all fields are not split across cipher block boundaries. The fields not used by the bootloader are not subject to this restraint.

Image header size is always a round number of cipher blocks. The same also applies to the boot image itself. The padding, held in #blfwk::EncoreBootImage::boot_image_header_t::m_padding0 and #blfwk::EncoreBootImage::boot_image_header_t::m_padding1 is filled with random bytes.

The DEK dictionary, section table, and each section data region must all start on cipher block boundaries.

This header is not encrypted in the image file.

The m_digest field contains a SHA-1 digest of the fields of the header that follow it. It is the first field in the header so it doesn't change position or split the header in two if fields are added to the header.

+ Collaboration diagram for blfwk::SBSourceFile::boot_image_header_t:
Class Members
union boot_image_header_t __unnamed__
version_t m_componentVersion Component version.
uint16_t m_driveTag Drive tag for the system drive which this boot image belongs to.
section_id_t m_firstBootableSectionID ID of section to start booting from.
uint32_t m_firstBootTagBlock Offset from start of file to the first boot tag, in blocks.
uint16_t m_flags Flags or options associated with the entire image.
uint16_t m_headerBlocks Size of this header, including this size word, in blocks.
uint32_t m_imageBlocks Size of entire image in blocks.
uint16_t m_keyCount Number of entries in DEK dictionary.
uint16_t m_keyDictionaryBlock Starting block number for the key dictionary.
uint8_t m_majorVersion Major version for the image format, see #ROM_BOOT_IMAGE_MAJOR_VERSION.
uint8_t m_minorVersion Minor version of the boot image format, see #ROM_BOOT_IMAGE_MINOR_VERSION.
uint8_t m_padding0[2] Padding to align m_timestamp to long word.
uint8_t m_padding1[6] Padding to round up to next cipher block.
version_t m_productVersion Product version.
uint16_t m_sectionCount Number of section headers in this table.
uint16_t m_sectionHeaderSize Size in blocks of a section header.
uint8_t m_signature[4] 'STMP', see #ROM_IMAGE_HEADER_SIGNATURE.
uint8_t m_signature2[4]

Second signature to distinguish this .sb format from the 36xx format, see #ROM_IMAGE_HEADER_SIGNATURE2.

uint64_t m_timestamp Timestamp when image was generated in microseconds since 1-1-2000.
union blfwk::SBSourceFile::boot_image_header_t.__unnamed__
Class Members
__unnamed__ __unnamed__
sha1_digest_t m_digest SHA-1 digest of image header. Also used as the crypto IV.
struct blfwk::SBSourceFile::boot_image_header_t.__unnamed__.__unnamed__
Class Members
uint8_t m_extra[4] The leftover top four bytes of the SHA-1 digest.
cipher_block_t m_iv The first 16 bytes of the digest form the initialization vector.
struct blfwk::SBSourceFile::version_t

Same version struct used for 3600 boot image.

Class Members
uint16_t m_major
uint16_t m_minor
uint16_t m_pad0
uint16_t m_pad1
uint16_t m_pad2
uint16_t m_revision

Member Function Documentation

bool SBSourceFile::isSBFile ( std::istream &  stream)
static

Identifies whether the stream contains an SB file.

< Header from the SB boot image.


The documentation for this class was generated from the following files: