You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by cc...@apache.org on 2017/01/30 20:12:14 UTC
[2/4] incubator-mynewt-newt git commit: newt: Prepare support for
header skipping
newt: Prepare support for header skipping
In preparation for a tool to sign Zephyr images, add support for
Zephyr-style headers.
When Zephyr is configured to allow space for the image header
(CONFIG_TEXT_OFFSET), it's build system emits a binary with zeros padded
out for this header space. To support this, add a `SrcSkip` option to
the `Image` struct to indicate a number of bytes of zeros to skip at the
beginning of a binary image. Print a warning if this header doesn't
actually contain zeros, since this usually indicates that the parameter
is incorrect.
This patch adds the field to the struct, but since no code yet sets this
field, there should be no change in functionality.
Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/commit/8564eb31
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/tree/8564eb31
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/diff/8564eb31
Branch: refs/heads/develop
Commit: 8564eb314919e4eeacd00e2bec3053d0e3d0d002
Parents: 1855170
Author: David Brown <da...@davidb.org>
Authored: Fri Jan 27 17:59:09 2017 -0700
Committer: David Brown <da...@davidb.org>
Committed: Fri Jan 27 18:07:57 2017 -0700
----------------------------------------------------------------------
newt/image/image.go | 27 ++++++++++++++++++++++++++-
1 file changed, 26 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/blob/8564eb31/newt/image/image.go
----------------------------------------------------------------------
diff --git a/newt/image/image.go b/newt/image/image.go
index 87d01de..916d386 100644
--- a/newt/image/image.go
+++ b/newt/image/image.go
@@ -61,6 +61,7 @@ type Image struct {
SigningEC *ecdsa.PrivateKey
KeyId uint8
Hash []byte
+ SrcSkip uint // Number of bytes to skip from the source image.
}
type ImageHdr struct {
@@ -367,7 +368,7 @@ func (image *Image) Generate(loader *Image) error {
Pad1: 0,
HdrSz: IMAGE_HEADER_SIZE,
Pad2: 0,
- ImgSz: uint32(binInfo.Size()),
+ ImgSz: uint32(binInfo.Size()) - uint32(image.SrcSkip),
Flags: 0,
Vers: image.Version,
Pad3: 0,
@@ -404,6 +405,30 @@ func (image *Image) Generate(loader *Image) error {
}
/*
+ * Skip requested initial part of image.
+ */
+ if image.SrcSkip > 0 {
+ buf := make([]byte, image.SrcSkip)
+ _, err = binFile.Read(buf)
+ if err != nil {
+ return util.NewNewtError(fmt.Sprintf("Failed to read from %s: %s",
+ image.SourceBin, err.Error()))
+ }
+
+ nonZero := false
+ for _, b := range buf {
+ if b != 0 {
+ nonZero = true
+ break
+ }
+ }
+ if nonZero {
+ log.Warnf("Skip requested of iamge %s, but image not preceeded by %d bytes of all zeros",
+ image.SourceBin, image.SrcSkip)
+ }
+ }
+
+ /*
* Followed by data.
*/
dataBuf := make([]byte, 1024)