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
commit 71d8423722a554c00bd8ff5734878252d4f42919 Author: Christopher Collins <ccoll...@apache.org> AuthorDate: Mon Apr 27 17:12:44 2020 -0700 load: add --imgfile option This option allows the user to specify the .img file to load onto the device. If the option is unspecified, newt loads the image file from the target's bin directory as before. --- newt/builder/load.go | 38 ++++++++++++++++++++++++++------------ newt/cli/build_cmds.go | 5 ++++- newt/cli/run_cmds.go | 2 +- 3 files changed, 31 insertions(+), 14 deletions(-) diff --git a/newt/builder/load.go b/newt/builder/load.go index ec8f4df..ce72591 100644 --- a/newt/builder/load.go +++ b/newt/builder/load.go @@ -31,20 +31,20 @@ import ( "mynewt.apache.org/newt/util" ) -func (t *TargetBuilder) loadLoader(slot int, extraJtagCmd string) error { +func (t *TargetBuilder) loadLoader(slot int, extraJtagCmd string, imgFilename string) error { if err := t.bspPkg.Reload(t.LoaderBuilder.cfg.SettingValues()); err != nil { return err } - return t.LoaderBuilder.Load(slot, extraJtagCmd) + return t.LoaderBuilder.Load(slot, extraJtagCmd, imgFilename) } -func (t *TargetBuilder) loadApp(slot int, extraJtagCmd string) error { +func (t *TargetBuilder) loadApp(slot int, extraJtagCmd string, imgFilename string) error { if err := t.bspPkg.Reload(t.AppBuilder.cfg.SettingValues()); err != nil { return err } - return t.AppBuilder.Load(slot, extraJtagCmd) + return t.AppBuilder.Load(slot, extraJtagCmd, imgFilename) } func (t *TargetBuilder) debugLoader(extraJtagCmd string, reset bool, @@ -67,19 +67,32 @@ func (t *TargetBuilder) debugApp(extraJtagCmd string, reset bool, return t.AppBuilder.Debug(extraJtagCmd, reset, noGDB) } -func (t *TargetBuilder) Load(extraJtagCmd string) error { +// Load loads a .img file onto a device. If imgFileOverride is not empty, it +// specifies the path of the image file to load. If it is empty, the image in +// the target's `bin` directory is loaded. +func (t *TargetBuilder) Load(extraJtagCmd string, imgFileOverride string) error { err := t.PrepBuild() if err != nil { return err } + if t.LoaderBuilder != nil && imgFileOverride != "" { + return util.FmtNewtError( + "cannot specify image file override for split images") + } + + appImg := imgFileOverride + if appImg == "" { + appImg = t.AppBuilder.AppBinBasePath() + } + if t.LoaderBuilder != nil { - err = t.loadApp(1, extraJtagCmd) + err = t.loadApp(1, extraJtagCmd, appImg) if err == nil { - err = t.loadLoader(0, extraJtagCmd) + err = t.loadLoader(0, extraJtagCmd, t.LoaderBuilder.AppBinBasePath()) } } else { - err = t.loadApp(0, extraJtagCmd) + err = t.loadApp(0, extraJtagCmd, appImg) } return err @@ -149,7 +162,7 @@ func Load(binBasePath string, bspPkg *pkg.BspPackage, return nil } -func (b *Builder) Load(imageSlot int, extraJtagCmd string) error { +func (b *Builder) Load(imageSlot int, extraJtagCmd string, imgFilename string) error { if b.appPkg == nil { return util.NewNewtError("app package not specified") } @@ -171,15 +184,16 @@ func (b *Builder) Load(imageSlot int, extraJtagCmd string) error { if _, ok := env["BOOT_LOADER"]; ok { util.StatusMessage(util.VERBOSITY_DEFAULT, - "Loading bootloader\n") + "Loading bootloader (%s)\n", imgFilename) } else { util.StatusMessage(util.VERBOSITY_DEFAULT, - "Loading %s image into slot %d\n", b.buildName, imageSlot+1) + "Loading %s image into slot %d (%s)\n", b.buildName, imageSlot+1, imgFilename) } // Convert the binary path from absolute to relative. This is required for // compatibility with unix-in-windows environemnts (e.g., cygwin). - binPath := util.TryRelPath(b.AppBinBasePath()) + binPath := util.TryRelPath(imgFilename) + if err := Load(binPath, b.targetBuilder.bspPkg, env); err != nil { return err } diff --git a/newt/cli/build_cmds.go b/newt/cli/build_cmds.go index 6901e4a..ff11231 100644 --- a/newt/cli/build_cmds.go +++ b/newt/cli/build_cmds.go @@ -104,6 +104,7 @@ func pkgToUnitTests(pack *pkg.LocalPackage) []*pkg.LocalPackage { var extraJtagCmd string var noGDB_flag bool var diffFriendly_flag bool +var imgFileOverride string func buildRunCmd(cmd *cobra.Command, args []string, printShellCmds bool, executeShell bool) { if len(args) < 1 { @@ -350,7 +351,7 @@ func loadRunCmd(cmd *cobra.Command, args []string) { NewtUsage(nil, err) } - if err := b.Load(extraJtagCmd); err != nil { + if err := b.Load(extraJtagCmd, imgFileOverride); err != nil { NewtUsage(cmd, err) } } @@ -487,6 +488,8 @@ func AddBuildCommands(cmd *cobra.Command) { loadCmd.PersistentFlags().StringVarP(&extraJtagCmd, "extrajtagcmd", "", "", "Extra commands to send to JTAG software") + loadCmd.PersistentFlags().StringVarP(&imgFileOverride, "imgfile", "", "", + "Path of .img file to load instead of target artifact") debugHelpText := "Open a debugger session for <target-name>" diff --git a/newt/cli/run_cmds.go b/newt/cli/run_cmds.go index e008643..99b41bb 100644 --- a/newt/cli/run_cmds.go +++ b/newt/cli/run_cmds.go @@ -116,7 +116,7 @@ func runRunCmd(cmd *cobra.Command, args []string) { } } - if err := b.Load(extraJtagCmd); err != nil { + if err := b.Load(extraJtagCmd, ""); err != nil { NewtUsage(nil, err) }