This is an automated email from the ASF dual-hosted git repository. ccollins pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/mynewt-newt.git
The following commit(s) were added to refs/heads/master by this push: new e3fdcd6 create-image: Generate a .hex file e3fdcd6 is described below commit e3fdcd68c9ed6fa58a6b68bbf3c45a780c57ab40 Author: Christopher Collins <ccoll...@apache.org> AuthorDate: Mon Aug 5 11:15:33 2019 -0700 create-image: Generate a .hex file Create a `.hex` equivalent of the `.img` file. This feature used to be present but was inadvertently removed at some point. --- newt/imgprod/imgprod.go | 79 ++++++++++++++++++++++++++++++++++++------------- newt/imgprod/v1.go | 6 +++- 2 files changed, 64 insertions(+), 21 deletions(-) diff --git a/newt/imgprod/imgprod.go b/newt/imgprod/imgprod.go index fe4cf12..93519fc 100644 --- a/newt/imgprod/imgprod.go +++ b/newt/imgprod/imgprod.go @@ -26,22 +26,28 @@ import ( "os" "strings" + "github.com/apache/mynewt-artifact/flash" "github.com/apache/mynewt-artifact/image" "github.com/apache/mynewt-artifact/sec" "mynewt.apache.org/newt/newt/builder" "mynewt.apache.org/newt/newt/manifest" "mynewt.apache.org/newt/newt/newtutil" + "mynewt.apache.org/newt/newt/toolchain" "mynewt.apache.org/newt/util" ) type ImageProdOpts struct { LoaderSrcFilename string LoaderDstFilename string + LoaderHexFilename string AppSrcFilename string AppDstFilename string + AppHexFilename string EncKeyFilename string Version image.ImageVersion SigKeys []sec.PrivSignKey + BaseAddr int + DummyC *toolchain.Compiler } type ProducedImage struct { @@ -56,6 +62,33 @@ type ProducedImageSet struct { App ProducedImage } +// writeImageFiles writes two image artifacts: +// * <name>.img +// * <name>.hex +func writeImageFiles(ri image.Image, imgFilename string, hexFilename string, + baseAddr int, c *toolchain.Compiler) error { + + imgFile, err := os.OpenFile(imgFilename, + os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666) + if err != nil { + return util.FmtNewtError( + "can't open image file \"%s\" %s", imgFilename, err.Error()) + } + defer imgFile.Close() + + if _, err := ri.Write(imgFile); err != nil { + return err + } + + if err := c.ConvertBinToHex(imgFilename, hexFilename, + baseAddr); err != nil { + + return err + } + + return nil +} + func produceLoader(opts ImageProdOpts) (ProducedImage, error) { pi := ProducedImage{} @@ -81,16 +114,9 @@ func produceLoader(opts ImageProdOpts) (ProducedImage, error) { return pi, err } - imgFile, err := os.OpenFile(opts.LoaderDstFilename, - os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666) - if err != nil { - return pi, util.FmtNewtError( - "Can't open target image %s: %s", - opts.LoaderDstFilename, err.Error()) - } - defer imgFile.Close() + if err := writeImageFiles(ri, opts.LoaderDstFilename, + opts.LoaderHexFilename, opts.BaseAddr, opts.DummyC); err != nil { - if _, err := ri.Write(imgFile); err != nil { return pi, err } @@ -131,15 +157,9 @@ func produceApp(opts ImageProdOpts, loaderHash []byte) (ProducedImage, error) { return pi, err } - imgFile, err := os.OpenFile(opts.AppDstFilename, - os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666) - if err != nil { - return pi, util.FmtNewtError( - "Can't open target image %s: %s", opts.AppDstFilename, err.Error()) - } - defer imgFile.Close() + if err := writeImageFiles(ri, opts.AppDstFilename, opts.AppHexFilename, + opts.BaseAddr, opts.DummyC); err != nil { - if _, err := ri.Write(imgFile); err != nil { return pi, err } @@ -236,28 +256,47 @@ func ProduceManifest(opts manifest.ManifestCreateOpts) error { } func OptsFromTgtBldr(b *builder.TargetBuilder, ver image.ImageVersion, - sigKeys []sec.PrivSignKey, encKeyFilename string) ImageProdOpts { + sigKeys []sec.PrivSignKey, encKeyFilename string) (ImageProdOpts, error) { + + // This compiler is just used for converting .img files to .hex files, so + // dummy paths are OK. + c, err := b.NewCompiler("", "") + if err != nil { + return ImageProdOpts{}, err + } + + // If there is no flash area for slot 0, default to a base address of 0. + img0Area := b.BspPkg().FlashMap.Areas[flash.FLASH_AREA_NAME_IMAGE_0] + baseAddr := img0Area.Offset opts := ImageProdOpts{ AppSrcFilename: b.AppBuilder.AppBinPath(), AppDstFilename: b.AppBuilder.AppImgPath(), + AppHexFilename: b.AppBuilder.AppHexPath(), EncKeyFilename: encKeyFilename, Version: ver, SigKeys: sigKeys, + DummyC: c, + BaseAddr: baseAddr, } if b.LoaderBuilder != nil { opts.LoaderSrcFilename = b.LoaderBuilder.AppBinPath() opts.LoaderDstFilename = b.LoaderBuilder.AppImgPath() + opts.LoaderHexFilename = b.LoaderBuilder.AppHexPath() } - return opts + return opts, nil } func ProduceAll(t *builder.TargetBuilder, ver image.ImageVersion, sigKeys []sec.PrivSignKey, encKeyFilename string) error { - popts := OptsFromTgtBldr(t, ver, sigKeys, encKeyFilename) + popts, err := OptsFromTgtBldr(t, ver, sigKeys, encKeyFilename) + if err != nil { + return err + } + pset, err := ProduceImages(popts) if err != nil { return err diff --git a/newt/imgprod/v1.go b/newt/imgprod/v1.go index f56e061..e426ef9 100644 --- a/newt/imgprod/v1.go +++ b/newt/imgprod/v1.go @@ -208,7 +208,11 @@ func ProduceImagesV1(opts ImageProdOpts) (ProducedImageSetV1, error) { func ProduceAllV1(t *builder.TargetBuilder, ver image.ImageVersion, sigKeys []sec.PrivSignKey, encKeyFilename string) error { - popts := OptsFromTgtBldr(t, ver, sigKeys, encKeyFilename) + popts, err := OptsFromTgtBldr(t, ver, sigKeys, encKeyFilename) + if err != nil { + return err + } + pset, err := ProduceImagesV1(popts) if err != nil { return err