New 'labman' tool

Stefano Babic sbabic at denx.de
Wed Apr 22 11:10:24 CEST 2020


Hi Simon,

On 21.04.20 19:24, Simon Glass wrote:
> Hi Stefano,
> 
> On Mon, 20 Apr 2020 at 02:47, Stefano Babic <sbabic at denx.de> wrote:
>>
>> Hi Simon,
>>
>> On 19.04.20 20:31, Simon Glass wrote:
>>> Hi,
>>>
>>> I have been fiddling with setting up a lab and have found it quite a
>>> pain. Lots of USB connections and things sometimes break.
>>>
>>> The collection of pytest, udev and tbot scripts that I end up with is
>>> hard to manage and error-prone. I decided that I really wanted a
>>> central database to keep control of this.
>>>
>>> Hubs are a pain because their internal numbering does not always
>>> correspond to their visible port numbers.
>>>
>>> Also when something goes wrong with a component in the lab, it is hard
>>> to know which one is broken and which port it is on.
>>>
>>> So I have started something called labman to help with this. It can
>>> generate simple tbot scripts, check that all components are working
>>> and help with simple management tasks.
>>>
>>> Please see the README and let me know what you think.
>>>
>>> https://github.com/sglass68/u-boot/tree/labman/tools/labman
>>>
>>
>> Thanks to share this - I will check this in my environment. Anyway, we
>> are fighting with same problems, and Wolfgang has exposed an alternative
>> way to do this. So I take the occasion because I have a different way,
>> too, and I would like to share - I am also not very fond of WiFI actors
>> in my network, and I mostly work with USB serial adapter.
>>
>> My way is to use a Raspi as terminal server with "ser2net". Because
>> ttyUSB changes at each boot, I decided to detect which is the new ttyUSB
>> instead of trying to force it via udev rule - let's say, if you cannot
>> fight them, join them !
>>
>> I built an Image for Raspberry based on OE
>> (github/sbabic/meta-swupdate-boards), the image contains:
>>
>> - ser2net
>> - python3
>> - openOCD for JTAG over Ethernet
>> - Lua
>> - a tool to driver a Lab PowerSupply (Power / Power off)
>>
>> I wrote a small Python daemon that returns the mapping between target
>> and tty. In fact, if the ttyUSBX changes, the topology is always the
>> same. A target "X" that is connected to port 4 of second Hub will always
>> be connected to that port.
>> The small daemon checks in a file-database as "target" <--> "topology" like:
>>
>> wandboard       usb     usb1/1-1/1-1.2/1-1.2.3/1-1.2.3:1.0
>> mira            usb     usb1/1-1/1-1.2/1-1.2.4/1-1.2.4:1.0
>> target1         usb     usb1/1-1/1-1.2/1-1.2.7/1-1.2.7:1.0
>> target2         usb     usb1/1-1/1-1.2/1-1.2.2/1-1.2.2:1.0
>> target3         usb     usb1/1-1/1-1.2/1-1.2.6/1-1.2.6:1.0
>> target4         usb     usb1/1-1/1-1.2/1-1.2.5/1-1.2.5:1.0
>>
>> On tbot lab host, I have then just a simple script "connect":
>>
>> !/bin/bash
>>
>> SERVERS='raspbx.fritz.box raspberrypi3.fritz.box'
>> if [ "x$2" != "x" ];then
>>          SERVERS=$2
>> fi
>> PORT=5005
>>
>> for server in ${SERVERS};do
>>
>>          target=`echo $1 | nc ${server} ${PORT}`
>>          echo TARGET $target
>>          tserver=`echo $target| awk -F':'  '{print $1}'`.fritz.box
>>          port=`echo $target | awk -F':' '{print $2}'`
>>
>>          if [ ! -z $port ];then
>>                  telnet ${tserver} ${port}
>>                  exit 0
>>          fi
>> done
>>
>> echo "Target not found" $1
>>
>>
>> And at the end, this simplifies my board setup in tbot, because I have
>> the same way to connect to the board:
>>
>>      def connect(self, mach):
>>          return mach.open_channel("connect", self.name)
> 
> Thanks for this.
> 
> I am actually a big fan of ser2net.

Me too - remoting serial connection is what we usually need, and before 
we needed expensive terminal servers.

> 
> I've added support for 'servo' in labman, which is a little (USB!)
> board which provides serial, reset, Ethernet, etc. It seems to me that
> having a rpi could do a similar thing for other boards, and be on
> Ethernet which is nicer. If it could handle SDwire too that would be
> good.

Fully agree.

> 
> Yet another thing for me to try!
> 
> I 'deployed' two more boards last night, like this:
> 
> 1. Plug in the device, with USB serial, SDwire, power on the DLI.
> 2. Find the new connections:
> 
> $ labman -D -l tools/labman/kea_lab.yaml -r kea scan
> 2 new part(s) found
>              Hub  Port   Part          Description
>             huba  3      uart          ttyUSB12
>             huba  4      sdwire        sdwireda3
> 
> (it can't detect that I plugged the power cable into a YKUSB board port 2)
> 
> 3. Updated the yaml a bit:
> sdwires:
>    sdwire10: &sdwire10
>      serial: sdwireda3
>      symlink: sdwire10
>      hub-port: *huba_4
>      block-symlink: sdcard6
> 
> uarts:
>    usbport15: &ttyusb_port15
>      type: usb-uart
>      symlink: ttyusb_port15
>      hub-port: *hubb_13
> 
> 
>    bpi:
>      desc: Banana Pi
>      console: *ttyusb_port15
>      bootdev: *sdwire11
>      power: *ykush1_port2
>      flash:
>        method: sunxi
>      builds:
>        salmon:
>          target: Bananapi
>          toolchain: armv7-a
> 
> 4. 'labman emit' to write out the udev and tbot scripts
> 5. 'labman check' to make sure everything is working
> 
> It is so much easier than before. I did two boards in about 40mins,
> including getting the UART wrong on one.
> 
> $ tbot -l kea.py -b bpi.py interactive_board
> tbot starting ...
> ├─Calling interactive_board ...
> │   ├─POWERON (bpi)
> │   ├─Entering interactive shell (CTRL+D to exit) ...
> 
> U-Boot SPL 2015.07-rc1-00527-ge08ac7c (Jun 06 2015 - 22:08:16)
> DRAM: 1024 MiB
> CPU: 912000000Hz, AXI/AHB/APB: 3/2/2
> 
> 
> U-Boot 2015.07-rc1-00527-ge08ac7c (Jun 06 2015 - 22:08:16 -0600)
> Allwinner Technology
> 
> CPU:   Allwinner A20 (SUN7I)
> I2C:   ready
> DRAM:  1 GiB
> MMC:   SUNXI SD/MMC: 0
> *** Warning - bad CRC, using default environment
> 
> In:    serial
> Out:   serial
> Err:   serial
> SCSI:  SUNXI SCSI INIT
> SATA link 0 timeout.
> AHCI 0001.0100 32 slots 1 ports 3 Gbps 0x1 impl SATA mode
> flags: ncq stag pm led clo only pmp pio slum part ccc apst
> Net:   PH: dir_output: error: gpio PH23 not reserved
> Phy 1 not found
> PHY reset timed out
> eth0: ethernet at 01c50000
> starting USB...
> USB0:   USB EHCI 1.00
> USB1:   USB OHCI 1.0
> USB2:   USB EHCI 1.00
> USB3:   USB OHCI 1.0
> scanning bus 0 for devices... 1 USB Device(s) found
> scanning bus 2 for devices... 1 USB Device(s) found
> Hit any key to stop autoboot:  0
> sunxi#
> sunxi#
> │   ├─POWEROFF (bpi)
> │   └─Done. (5.821s)
> ├─────────────────────────────────────────
> └─SUCCESS (5.958s)
> 

Nice !

Stefano

-- 
=====================================================================
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de
=====================================================================


More information about the tbot mailing list