123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310 |
- # Copyright (c) 2016 DENX Software Engineering GmbH
- # Heiko Schocher <hs@denx.de>
- #
- # SPDX-License-Identifier: GPL-2.0+
- #
- install tbot on your PC (linux only tested):
- ============================================
- - get the source code:
- $ git clone https://github.com/hsdenx/tbot.git
- [...]
- $
- cd into the tbot directory.
- - you need the for running tbot the python paramiko module, see:
- http://www.paramiko.org/installing.html
- paramiko is used for handling ssh sessions, and open filedescriptors
- on a ssh connection. Tbot open a ssh connection to a "lab PC" and
- opens on that connection 2 filehandles, one for control functions
- and one for the connection to the boards console. May it is worth
- to think about to open more filehandles and use them in tbot, but
- thats a point in the Todo list ...
- See [1] for more infos about tbot principles.
- - prepare a directory for storing the logfiles
- and pass it with the commandline option "-l"
- to tbot. Default is the directory "log" in the tbot
- root (don;t forget to create it, if you want to use it)
- - If your VL is not yet in tbot source, integrate it
- (This task has only to be done once for your VL):
- A VL has, as described in [2] "necessary tasks for a Lab PC" explained,
- 3 tasks:
- a) power on/off the board
- b) get power state of the board
- c) connect to the boards console
- As tbot sends only shell commands (also to the Lab PC)
- this tasks must be executable through shell commands on your
- Lab PC:
- Task a) power on/off board:
- default TC for this task is:
- https://github.com/hsdenx/tbot/blob/master/src/tc/tc_lab_denx_power.py
- - now copy this file to for example
- cp src/tc/tc_lab_denx_power.py src/tc/tc_lab_denx_power_XXX.py
- (replace XXX to a proper value)
- and adapt the "remote_power" command from the denx lab to your needs.
- As this TC powers on the board for all your boards in your VL,
- you can differ between the boards through the tbot class
- variable "tb.boardlabpowername" (which is in the default case the
- same as "tb.boardname"), but you may need to name the power target
- with an other name than boardname, so you can configure this case.
- The power state "tb.power_state" which the TC has to set
- is "on" for power on, or "off" for power off.
- If switching on the power is successful, call "tb.end_tc(True)"
- else "tb.end_tc(False)"
- - set in your board config file:
- self.tc_lab_denx_power_tc = 'tc_lab_denx_power_XXX.py'
- Task b) power on/off board:
- default TC for this task is:
- https://github.com/hsdenx/tbot/blob/master/src/tc/tc_lab_denx_get_power_state.py
- - now copy this file to for example
- (replace XXX to a proper value)
- cp src/tc/tc_lab_denx_get_power_state.py src/tc/tc_lab_denx_get_power_state_XXX.py
- and adapt the commands to your needs.
- If the power of the board is on, call "tb.end_tc(True)"
- else "tb.end_tc(False)"
- - set in your board config file:
- self.tc_lab_denx_get_power_state_tc = 'tc_lab_denx_get_power_state_XXX.py'
- Task c) connect to the boards console:
- default TC for this task is:
- https://github.com/hsdenx/tbot/blob/master/src/tc/tc_lab_denx_connect_to_board.py
- - now copy this file to for example
- (replace XXX to a proper value)
- cp src/tc/tc_lab_denx_connect_to_board.py src/tc/tc_lab_denx_connect_to_board_XXX.py
- and adapt the commands to your needs.
- If connect fails end this TC with "tb.end_tc(False)"
- else call "tb.end_tc(True)"
- If you want to use kermit for connecting to the boards console, you
- can use:
- https://github.com/hsdenx/tbot/blob/master/src/tc/tc_workfd_connect_with_kermit.py
- Example for such a board in the VL from denx:
- self.tc_lab_denx_connect_to_board_tc = 'tc_workfd_connect_with_kermit.py'
- https://github.com/hsdenx/tbot/blob/master/tbot_dxr2.cfg#L24
- Hopefully this works for you too.
- - set in your board config file:
- self.tc_lab_denx_connect_to_board_tc = 'tc_lab_denx_connect_to_board_XXX.py'
- remarks while writting this:
- - Currently there is only the denx VL. Original idea was to include
- other VL through a seperate class/file in
- https://github.com/hsdenx/tbot/tree/master/src/lab_api
- but it turned out, that if we say "ssh" is the standard way to connect
- to a VL, we can integrate the VL specific tasks through testcases, see
- above, so we should do:
- - rename the "denx" API to a more general name.
- This is a point on my ToDo list ... done, renamed to 'ssh_std'
- - the VL specific configuration may moved from the board config files
- and should be collected in VL specific config files, which boards
- config file simple include.
- - prepare password.py file:
- This file contains all passwords tbot needs (for example for
- linux login on the boards)
- tbot searches this file in the tbot root directory.
- It is a simple python file, for example:
- # passwords for the lab
- if (board == 'lab'):
- if (user == 'hs'):
- password = 'passwordforuserhs'
- if (user == 'root'):
- password = 'passwordforrootuser'
- # passwords for the boards
- elif (board == 'mcx'):
- if (user == 'root'):
- password = 'passwordformcxrootfs'
- else:
- if (user == 'root'):
- password = ''
- - prepare board config file
- Each board which is found in the VL needs a tbot configuration file
- pass the config file name with the option '-c' to tbot, tbot searches
- in the root dir for them.
- board Example (dxr2 board):
- https://github.com/hsdenx/tbot/blob/master/tbot_dxr2.cfg
- Necessary variables:
- line 3: boardname, here it is the "etamin" board
- no default value, must be set.
- line 4: boardlabname: name used for connecting to the board
- may differ from tb.boardname, default tb.boardname
- line 5: boardlabpowername: name used for power on/off
- may differ from tb.boardname, default tb.boardname
- line 6: tftpboardname: name used for tftp subdir (from where
- U-Boot loads images for example).
- may differ from tb.boardname, default tb.boardname
- line 7: labprompt: linux prompt tbot sets
- no defaultvalue, must be set (maybe we should introduce
- "ttbott" as default ...
- line 8: debug: If True, adds debug output on the tbot shell
- line 9: debugstatus: enable status debug output on the shell
- line 10: ip: Where tbot finds the Lab PC
- line 11: user: As which user does tbot logs into the Lab PC
- line 12: accept_all: passed to paramiko, accept all connections
- line 13: keepalivetimout: passed to paramiko, timeout for sending
- keepalive message.
- line 14: channel_timeout: passed to paramiko
- line 15: loglevel: tbots loglevel for adding entries into the logfile.
- line 17: wdt_timeout: timeout in seconds for tbots watchdog.
- Watchdog gets triggered if prompt get read.
- line 24: tc_lab_denx_connect_to_board_tc: Which TC is used for
- connecting to the boards console the TC, here:
- https://github.com/hsdenx/tbot/blob/master/src/tc/tc_workfd_connect_with_kermit.py
- line 27: uboot_prompt: boards U-Boot prompt
- line 28: linux_prompt: boards linux prompt
- Now comes a list of variables TC needs, this vary from which TC
- you start on the board.
- Thats it ... you now can call tbot and hopefully, it works ;-)
- Find an example log [3] for calling simple U-Boot TC for setting
- an U-Boot Environmentvariable.
- If you have problems in setting tbot up, please contact me
- (and may give me ssh access to your Lab PC ;-)
- If you have running your first TC [3], you may want to write now your own
- TC (and hopefully share them), so continue with:
- u-boot:tools/tbot/README.create_a_new_testcase
- Heiko Schocher <hs@denx.de>
- v2 2016.04.26
- --------------
- [1] tbot Dokumentation:
- [2] u-boot:/tools/tbot/README
- https://github.com/hsdenx/tbot/blob/master/README.md
- tbot-devel@googlegroups.com
- [3] Example for a first U-Boot TC which should always work:
- (with commandline option "-v" for verbose output):
- hs@localhost:tbot [event-devel] $ python2.7 src/common/tbot.py -c tbot_dxr2.cfg -t tc_ub_setenv.py -v -l log/tbot.log
- **** option cfg: tbot_dxr2.cfg log: log/tbot.log tc: tc_ub_setenv.py v 1
- ('CUR WORK PATH: ', '/home/hs/data/Entwicklung/tbot')
- ('CFGFILE ', 'tbot_dxr2.cfg')
- ('LOGFILE ', '/home/hs/data/Entwicklung/tbot/log/tbot.log')
- tb_ctrl: Last login: Mon Apr 25 14:52:42 2016 from 87.97.29.27
- *************************************************************
- BDI2000 Assignment: (last updated: 2015-11-20 12:30 MET)
- bdi1 => techem bdi2 => cetec_mx25 bdi3 => lpc3250
- bdi4 => - bdi5 => --Rev.B!-- bdi6 => tqm5200s
- bdi7 => [stefano] bdi8 => smartweb bdi9 => sigmatek-nand
- bdi10 => pcm052 bdi11 => socrates bdi12 => aristainetos
- bdi13 => imx53 bdi14 => ib8315 bdi15 => cairo
- bdi16 => g2c1 bdi17 => lwe090 bdi18 => symphony
- bdi19 => dxr2 bdi20 => ima3-mx6 bdi21 => sama5d3
- bdi98 => - bdi99 => - bdi0 => -
- Please power off unused systems when you leave! Thanks, wd.
- *************************************************************
- tb_ctrl: pollux:~ hs $
- tb_ctrl: export PS1=ttbott
- ttbott
- tb_ctrl: stty cols 200
- ttbott
- tb_ctrl: export TERM=vt200
- ttbott
- tb_ctrl: echo $COLUMNS
- 200
- ttbott
- tb_con: Last login: Tue Apr 26 06:28:59 2016 from 87.97.29.27
- *************************************************************
- BDI2000 Assignment: (last updated: 2015-11-20 12:30 MET)
- bdi1 => techem bdi2 => cetec_mx25 bdi3 => lpc3250
- bdi4 => - bdi5 => --Rev.B!-- bdi6 => tqm5200s
- bdi7 => [stefano] bdi8 => smartweb bdi9 => sigmatek-nand
- bdi10 => pcm052 bdi11 => socrates bdi12 => aristainetos
- bdi13 => imx53 bdi14 => ib8315 bdi15 => cairo
- bdi16 => g2c1 bdi17 => lwe090 bdi18 => symphony
- bdi19 => dxr2 bdi20 => ima3-mx6 bdi21 => sama5d3
- bdi98 => - bdi99 => - bdi0 => -
- Please power off unused systems when you leave! Thanks, wd.
- *************************************************************
- tb_con: pollux:~ hs $
- tb_con: export PS1=ttbot
- tb_con: t
- ttbott
- tb_con: stty cols 200
- ttbott
- tb_con: export TERM=vt200
- ttbott
- tb_con: echo $COLUMNS
- 200
- ttbott
- tb_con: ssh hs@lena
- tb_con: hs@lena's password:
- tb_con:
- tb_con: Last login: Mon Apr 25 07:03:29 2016 from 192.168.1.1
- tb_con: [hs@lena ~]$
- tb_con: export PS1=ttbott
- ttbott
- tb_con: stty cols 200
- ttbott
- tb_con: export TERM=vt200
- ttbott
- tb_con: echo $COLUMNS
- 200
- ttbott
- tb_con: kermit
- C-Kermit 8.0.211, 10 Apr 2004, for Linux
- Copyright (C) 1985, 2004,
- Trustees of Columbia University in the City of New York.
- Type ? or HELP for help.
- (/home/hs/) C-Kermit>
- tb_con: set line /dev/ttyUSB0
- (/home/hs/) C-Kermit>
- tb_con: set speed 115200
- /dev/ttyUSB0, 115200 bps
- (/home/hs/) C-Kermit>
- tb_con: set flow-control none
- (/home/hs/) C-Kermit>
- tb_con: set carrier-watch off
- (/home/hs/) C-Kermit>
- tb_con: connect
- Connecting to /dev/ttyUSB0, speed 115200
- Escape character: Ctrl-\ (ASCII 28, FS): enabled
- Type the escape character followed by C to get back,
- or followed by ? to see other options.
- ----------------------------------------------------
- tb_con: <INTERRUPT>
- U-Boot#
- tb_con: U-Boot#
- U-Boot#
- tb_con: setenv Heiko Schocher
- U-Boot#
- tb_con: printenv Heiko
- Heiko=Schocher
- U-Boot#
- [('tc_workfd_ssh.py', 1, 0), ('tc_workfd_connect_with_kermit.py', 1, 0), ('tc_ub_setenv.py', 1, 0)]
- End of TBOT: success
- hs@localhost:tbot [event-devel] $
|