[U-Boot] Sharing a hardware lab

Simon Glass sjg at chromium.org
Mon Feb 24 03:34:05 CET 2020


Hi Heiko,

Thanks for the hints! I pushed your things here:

https://github.com/sglass68/tbot/tree/simon

Then I try:
tbot -l kea.py -b pcduino3.py uboot_build

and get an error:

tbot starting ...
type <class 'module'>
├─Calling uboot_build ...
│   └─Fail. (0.000s)
├─Exception:
│   Traceback (most recent call last):
│     File "/home/sglass/.local/lib/python3.6/site-packages/tbot-0.8.0-py3.6.egg/tbot/main.py",
line 318, in main
│       func(**params)
│     File "/home/sglass/.local/lib/python3.6/site-packages/tbot-0.8.0-py3.6.egg/tbot/decorators.py",
line 103, in wrapped
│       result = tc(*args, **kwargs)
│     File "/home/sglass/.local/lib/python3.6/site-packages/tbot-0.8.0-py3.6.egg/tbot/tc/uboot/build.py",
line 271, in _build
│       builder = UBootBuilder._get_selected_builder()
│     File "/home/sglass/.local/lib/python3.6/site-packages/tbot-0.8.0-py3.6.egg/tbot/tc/uboot/build.py",
line 160, in _get_selected_builder
│       builder = getattr(tbot.selectable.UBootMachine, "build")
│   AttributeError: type object 'UBootMachine' has no attribute 'build'

I'm a bit lost in all the classes and functions. A working example or
a patch would be great!

I've pushed all my scripts here:

https://github.com/sglass68/ubtest

The top commit is your patches.

Regards,
Simon

On Wed, 12 Feb 2020 at 22:49, Heiko Schocher <hs at denx.de> wrote:
>
> Hello Simon,
>
> Am 12.02.2020 um 18:14 schrieb Simon Glass:
> > Hi Heiko,
> >
> > On Wed, 12 Feb 2020 at 01:50, Heiko Schocher <hs at denx.de> wrote:
> >>
> >> Hello Simon,
> >>
> >> Am 05.02.2020 um 15:10 schrieb Simon Glass:
> >>> Hi Tom,
> >>>
> >>> On Wed, 4 Dec 2019 at 15:30, Tom Rini <trini at konsulko.com> wrote:
> >>>>
> >>>> On Fri, Nov 29, 2019 at 09:23:43PM -0700, Simon Glass wrote:
> >>>>
> >>>>> Hi Tom,
> >>>>>
> >>>>> I have been meaning to have a crack at setting up a little hardware
> >>>>> lab for a while.
> >>>>>
> >>>>> I made some progress recently and hooked up a rpi_3 with sdwire for
> >>>>> USB/SD, ykush for power and a little computer to control it. It builds
> >>>>> U-Boot, sticks it on the SD card and runs pytest.
> >>>>>
> >>>>> I pushed a tree here and hopefully you can see the 'hwlab' thing at the end:
> >>>>>
> >>>>> https://gitlab.denx.de/u-boot/custodians/u-boot-dm/pipelines/148
> >>>>>
> >>>>> So far it is just running the 'help' test. It seems to hang with
> >>>>> serial console problems if I try to do more. It is not 100% reliable
> >>>>> yet. I based it on Stephen's test hooks:
> >>>>>
> >>>>> https://github.com/sglass68/uboot-test-hooks
> >>>>>
> >>>>> Is it possible to share this so that others can use the lab when they
> >>>>> push trees? Is it as simple as adding to the .gitlab-ci.yml file as I
> >>>>> have done here?
> >>>>>
> >>>>> https://gitlab.denx.de/u-boot/custodians/u-boot-dm/blob/gitlab-working/.gitlab-ci.yml
> >>>>>
> >>>>> I also got tbot going in a similar way, to test booting into Linux.
> >>>>> Should we look at integrating that at the same time? It should be
> >>>>> fairly easy to do.
> >>>>>
> >>>>> I have quite a lot of random boards and in principle it should not be
> >>>>> too hard to hook up some more of them, with sufficient SDwires, hubs
> >>>>> and patience.
> >>>
> >>> Bumping this thread as I have now hooked up about about 8 mostly ARM
> >>> and x86 boards and have tbot and pytest automation mostly working for
> >>> them.
> >>
> >> Great news!
> >>
> >> added Harald Seiler to cc, as he did the tbot port to python3.6.
> >>
> >> Do you have somewhere your tbot integration online?
> >
> > https://github.com/sglass68/ubtest
> >
> > But it is tbot only.  It would be good if there were a way to upstream
> > this stuff.
> >
> > For pytest I am sending upstream to:
> >
> > https://github.com/swarren/uboot-test-hooks
> >
> > BTW I have not yet got tbot to build U-Boot and write it onto the
> > board. Do you have examples for that?
>
> We have them on our gitlab server, but only private as I know.
>
> @Harald: Do you have some good examples somewhere online?
>
> May the doc help here too:
>
> http://tbot.tools/modules/tc.html#u-boot
>
> and see [1]
>
> >> I ask because on our ToDo list is to integrate pytest into tbot and may
> >> we can share work?
> >>
> >>>> There's two parts of this.  The first part I think is that we need some
> >>>> good examples of how to have one private CI job poll / monitor other
> >>>> public jobs and run.  I believe some labs do this today.  This would be
> >>>> helpful as at least personally I'm kicking my hardware tests manually.
> >>>> This is because as best I can tell there isn't a way to include an
> >>>> optional stage/portion of a CI job.
> >>>
> >>> So the model here is that people with a lab 'watch' various repos? I
> >>> think that would be useful. Stephen Warren does this I think, but I'm
> >>> not sure how the builds are kicked off.
> >>>
> >>> But what about a full public lab? E.g. is it possible to add some of
> >>> the boards I have here to every build that people do?
> >>
> >> Here begins the hard game I think, because what happens if 2 builds
> >> triggered in parallel and want to test a board in the same lab
> >> at the same time?
> >
> > The gitlab-runner thing seems to handle that.
>
> Ah, so all gitlabs need to use the same gitlab runner, ok.
>
> >> If you trigger the test with tbot, it should be easy to add a locking
> >> mechanism into tbots lab specific function power_check() [1]
> >>
> >> May in this power_check() function tbot waits until it get the board...
> >> The locking mechanism itself is lab specific.
> >>
> >>>> The second part is that long term, we need to most likely develop some
> >>>> LAVA experience as that will get us easier access to various kernelci
> >>>> labs and in turn be included in kernelci labs, when the overall SoC and
> >>>> lab support being able to test firmware.
> >>>
> >>> I wonder if these are set up for replacing firmware? It specifically
> >>> mentions boards getting bricked, so I suspect not.
> >>
> >> Unfortunately I had not yet time for looking into LAVA or kernelci.
> >
> > I haven't much, but I do wonder if we could add firmware testing to it.
>
> bye,
> Heiko
>
> [1] tbot u-boot build example for the aristainetos board
>
> add in your board config:
>
> class aristainetosUBootBuilder(lab.UBootBuilder):
>      name = "aristainetos"
>      defconfig = "aristainetos2_defconfig"
>      toolchain = "linaro-gnueabi"
>      remote = "git at gitlab.denx.de:abb/aristainetos-uboot.git"
>
>      def do_checkout(self, target: linux.Path, clean: bool) -> git.GitRepository:
>          return git.GitRepository(
>              target=target, url=self.remote, clean=clean, rev="aristainetos-denx"
>          )
>
> class aristainetosUBoot(lab.UBootMachine):
>      name = "ari-ub"
>      prompt = "=> "
>      autoboot_prompt = None
>      build = aristainetosUBootBuilder()
>
>
>
> in your lab config (just example) you need:
>
> class UBootBuilder(uboot.UBootBuilder):
>      if tbot.selectable.LabHost.name in ["pollux", "hercules"]:
>          remote = "/home/git/u-boot.git"
>
>      def do_configure(self, bh: BH, repo: git.GitRepository[BH]) -> None:
>          super().do_configure(bh, repo)
>
>          tbot.log.message("Patching U-Boot config ...")
>
>          # Add local-version tbot
>          kconfig.set_string_value(repo / ".config", "CONFIG_LOCALVERSION", "-tbot")
>
>          # Tab completion
>          kconfig.enable(repo / ".config", "CONFIG_AUTO_COMPLETE")
>          [...]
>
>
> class PolluxLab(connector.ParamikoConnector, linux.Bash, linux.Lab, linux.Builder):
> [...]
>      def toolchains(self) -> typing.Dict[str, linux.build.Toolchain]:
>          return {
>              "bootlin-armv5-eabi": linux.build.EnvSetBootlinToolchain(
>                  arch = "armv5-eabi",
>                  libc = "glibc",
>                  typ = "stable",
>                  date = "2018.11-1",
>                  ),
>              "linaro-gnueabi": linux.build.EnvSetLinaroToolchain(
>                  host_arch = "i686",
>                  arch = "arm-linux-gnueabi",
>                  date = "2018.05",
>                  gcc_vers = "7.3",
>                  gcc_subvers = "1",
>                  ),
>              "generic-armv7a": linux.build.EnvScriptToolchain(
>                  linux.Path(
>                      self,
>                      "/home/hs/toolchain/linaro/gcc-linaro-7.2.1-2017.11-i686_arm-linux-gnueabi",
>                  )
>              ),
>
> for using a toolchain from bootlin or linaro, please add the attached
> patch to tbot. If you have not installed the toolchain, this class
> downloads it. ! This patch is development state only !
>
>
> Now, if you want to build on the same machine add simply:
>
>      def build(self) -> linux.Builder:
>          return self
>
> If you want to build on other linux machines:
>
>      def build(self) -> linux.Builder:
>          if "pollux-build" in tbot.flags:
>              return builders.PolluxSSH(self)
>          elif "xpert-build" in tbot.flags:
>              return builders.XpertSSH(self)
>          elif "hercules-build" in tbot.flags:
>              return builders.HerculesSSH(self)
>          elif "threadripper-build" in tbot.flags:
>              return builders.ThreadripperSSH(self)
>
> and define for example in labs/builders.py this build machines, and you
> can select through tbot commandline flags, which build machine you
> want to use ...
>
> May we should such an example to our doc ...
> --
> DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
> Phone: +49-8142-66989-52   Fax: +49-8142-66989-80   Email: hs at denx.de


More information about the U-Boot mailing list