|
- <meta charset="utf-8">
- <meta http-equiv="refresh" content="2">
-
- **Embedded Board Dev Lab**
-
- Overview
- ========
-
- This is the description of how the lab is architected and setup. There
- are a few design decisions that are likely to be different in other
- environments, but hopefully the overall architecture will be similar.
- The differences should be laid the documentation for their instances.
-
- Goal
- ----
-
- The goal of this setup is to allow users to be able to install and test
- FreeBSD patches and images on boards that they do not have locally.
-
- Definitions
- -----------
-
- - Board - The system that is available for testing. This can be an SBC,
- another computer, or any other system that needs to be tested.
- - Board class - A set of boards of similar type.
- - Board Handle - An identifier for a specific board instance. It will be
- consistent until the lab is reconfigured. It can be used to help debug
- issues that affect a specific board, or reserve a specific board that
- has special hardware, such as an SDWire attached to it.
- - Controller - The machine that controls and grants access to the boards.
- - Jail - A jail on the controller that the User is able to log into. It
- has access to the board, such as serial and ethernet. It will also be
- able to power cycle the board.
- - User - A person or entity that is able to reserve a board, and use it.
-
- Features
- --------
-
- - Remote power control
- - serial console access
- - Network boot
- - Internet connectivity for boards w/ ethernet
- - Isolation between board environments
- Likely implemented via VLANs+jails w/ VNET to provide complete control
- - Long term goals:
- - Emulated microSD cards
-
- Physical Architecture
- ---------------------
-
- The following diagrams the connections between the components. There will
- be many different instances of the board.
-
- The switch will have a unique VLAN assigned to each board. The controller
- will receive the VLANs tag to deliver them to the correct jail. This
- allows a jail on the host machine to have a direct control over the
- broadcast domain for the device. It will allow running dhcp/bootp/tftp
- services for netbooting. As fusefs is jail friendly, the root FS could
- even be mounted via sshfs and exported to the board via NFS.
-
- The PoE part of the switch will be used for power control. PoE splitters
- (~$10) are readily available and inexpensive, and the cost per port is
- realatively inexpensive. The switch will be able to provide granular power
- consumption on a per board basis.
-
- Some instances of the board will use an
- [SDWire](https://wiki.tizen.org/SDWire). The SD reader will be accessible
- in the jail, and a mechanism will be provided to switch the microSD card
- between the jail and the board. This will allow easier testing of images.
-
- ************************************************************************
- * *
- * +------------+ +-----------------+ *
- * | Controller +-------------------------+ | Internet | *
- * +-+----------+ | +-+---------------+ *
- * | | | *
- * | | | *
- * | | | *
- * +-+----------+ +----------------+ | +-+---------------+ *
- * | USB Hub +-----+ Serial adapter | +---------+ PoE/VLAN Switch | *
- * +-+----------+ +-+--------------+ +-+---------------+ *
- * | | | *
- * | | | *
- * | | | *
- * +-+----------+ +-+--------------+ Network +-+---------------+ *
- * | SDWire +-----+ Board +------------+ PoE Splitter | *
- * +------------+ +-+--------------+ +-+---------------+ *
- * | Power | *
- * +-----------------------------+ *
- * *
- ************************************************************************
-
- Logical Architecture
- --------------------
-
- No user will be able to log into the controller directly. The only
- interface exposed to the user on the controller will be via an RPC
- interface, e.g. `echo function xxx | ssh labhost labcli`, or via a control
- socket from within the jail.
-
- The user will be able to log into the jail that is created for the
- reservation of a board. Any modifications to the jail will be rolled
- back and discarded after the system has been released, or the reservation
- has expired. A persistant user directory will be mounted and shared
- between all jails, i.e. if the user has three different boards reserved,
- each jail will have a nullfs mount of the user's directory.
-
- Workflow
- ========
-
- Functions
- ---------
-
- The functions that take a board handle argument can be executed from within
- the jail and the board handle of that jail will be used. The board handle
- argument will be ignored and is optional when used from withing the jail.
-
- These are the functions a user can execute:
- 1. List board classes (onlyavailable=false)
- List the board classes that are on the controller. If onlyavailable is
- true, than only the classes that have boards available for reservation
- are returned.
- 2. Board status (reserved=false)
- List all the board statuses. This includes the status, reserved or
- unreserved. If the board is reserved, it includes the user who reserved
- it. If reserved is true, only list boards that are currently reserved
- by you. The default is to list all boards.
- 3. Reserve board (board class or board id, power=false)
- A user can use this to reserve a board. This will return a board handle
- with the board information, such as the board's jail's IP address, or an
- error. Once the user has obtained a board, it will not be allocated to
- another user till they have release this board (or a timeout has
- expired). The user's ssh keys will be automatically populated in the
- jail. By default, the board will be in the power off state. When a
- default configuration is provided for the board, it can be automatically
- powered on, via the power arugment being true to make it easier to
- integrate w/ systems like CI.
- It is expected that in the future, additional arguments will allow the
- user to specify different environments (e.g. stable/12).
- 4. Reinit board (board handle)
- This will kill all processes and remove the current jail. The jail will
- be recreated as if it was reserved for the first time. This allows the
- jail to be in a clean state w/o losing the reservation by releasing it
- and then reclaiming it. This will be important if there are pending
- reservations for the board. If the user has not claimed the board, an
- error will be returned. If the reinit fails, an error will be returned,
- but the claim will be maintained if possible.
- 5. Release board (board handle)
- Release a reservation on the board handle returned by reserve board
- function. This will make the board available to users again. All data
- in the jail will be deleted. The function will return an error if the
- user does not have a claim on the board.
- 6. Power off (board handle)
- Turn off the power to the board.
- 7. Power on (board handle)
- Turn on the power to the board.
-
- Services provided in the jail
- -----------------------------
-
- Once logged in, the jail will have the following services:
- 1. ssh
- Incoming ssh must be provided for the user to login.
- 2. One interface for internet
- nat setup so that all traffic appears from jail's IP.
- 3. One interface for board
- 4. Serial port for console access
- The configuration will identify which board to put in the jail. For
- USB devices, they will be able to be specified via a list of ports on
- the hubs so that there is no issue w/ device probe order.
- 5. dhcpd for boards w/ tftp already configured
- 6. inetd w/ tftpd setup
- 7. nfsd setup w/ exports configured
- 8. power control for board
-
- As the user will have root access, all of these can be modified.
-
- Future Work
- ===========
-
- There are a number of ideas to make developing boards remotely more doable.
- We can use devices that support OTG, to emulate USB devices for test boards.
- This would allow the simulate a keyboard and or a mouse. With the addition
- of an HDMI to ethernet adapter (there are cheap ones for ~$40/each), a user
- can work on making X or other GUI work remotely.
-
- Open Questions
- ==============
-
- Should the jail's host key for the board be kept between invocations.
- Pros: Users don't have to modify the known_hosts every time.
- Cons: Malicious user could impersonate the jail as they can copy out the key.
-
- IPv6 support?
- I have enough that each device can get a /64, but this remove privacy in
- that the network will tell which board was active at the time
-
- <!-- Markdeep: --><style class="fallback">body{visibility:hidden;white-space:pre;font-family:monospace}</style><script src="markdeep.min.js" charset="utf-8"></script><script src="https://casual-effects.com/markdeep/latest/markdeep.min.js" charset="utf-8"></script><script>window.alreadyProcessedMarkdeep||(document.body.style.visibility="visible")</script>
|