add hardware device descriptions to doc

most of the text is recycled and follows no particular format
This commit is contained in:
Daniel Barlow 2023-09-28 12:17:30 +01:00
parent 3a2f074199
commit 7e13eda490
9 changed files with 114 additions and 6 deletions

1
ci.nix
View file

@ -40,6 +40,7 @@ let
buildPhase = '' buildPhase = ''
cat ${(import ./doc/extract-options.nix).doc} > options.json cat ${(import ./doc/extract-options.nix).doc} > options.json
cat options.json | fennel --correlate parse-options.fnl > modules-generated.rst cat options.json | fennel --correlate parse-options.fnl > modules-generated.rst
cp ${(import ./doc/hardware.nix)} hardware.rst
make html make html
''; '';
installPhase = '' installPhase = ''

View file

@ -18,13 +18,22 @@
}; };
description = '' description = ''
GL.INet GL-AR750 "Creta" travel router GL.INet GL-AR750
****************
The GL-AR750 "Creta" travel router features:
- QCA9531 @650Mhz SoC - QCA9531 @650Mhz SoC
- dual band wireless: IEEE 802.11a/b/g/n/ac - dual band wireless: IEEE 802.11a/b/g/n/ac
- two 10/100Mbps LAN ports and one WAN - two 10/100Mbps LAN ports and one WAN
- 128MB DDR2 RAM / 16MB NOR Flash - 128MB DDR2 RAM
- "ath79" soc family - 16MB NOR Flash
https://www.gl-inet.com/products/gl-ar750/ - supported in OpenWrt by the "ath79" SoC family
As with many GL.INet devices, the stock vendor firmware
is a fork of OpenWrt, meaning that the plain binary
``firmware.bin`` that Liminix builds can be flashed using the
vendor web UI and the U-Boot emergency "unbrick" routine
The GL-AR750 has two distinct sets of wifi hardware. The 2.4GHz The GL-AR750 has two distinct sets of wifi hardware. The 2.4GHz
radio is part of the QCA9531 SoC, i.e. it's on the same silicon as radio is part of the QCA9531 SoC, i.e. it's on the same silicon as
@ -34,8 +43,13 @@
other hand, is provided by a QCA9887 PCIe (PCI embedded) WLAN chip: other hand, is provided by a QCA9887 PCIe (PCI embedded) WLAN chip:
I haven't looked closely at the router innards to see if this is I haven't looked closely at the router innards to see if this is
actually physically a separate board that could be unplugged, but actually physically a separate board that could be unplugged, but
as far as the Linux is concerned it behaves as one. This is as far as Linux is concerned it behaves as one. This is
supported by the ath10k driver. supported by the ath10k driver.
Vendor web page: https://www.gl-inet.com/products/gl-ar750/
OpenWrt web page: https://openwrt.org/toh/gl.inet/gl-ar750
''; '';
module = {pkgs, config, ... }: module = {pkgs, config, ... }:

View file

@ -12,10 +12,41 @@
}; };
description = '' description = ''
GL.Inet GL-MT300A
********************
The GL-MT300A is based on a MT7620 chipset.
The GL-Inet pocket router range makes nice cheap hardware for
playing with Liminix or similar projects. The manufacturers seem
open to the DIY market, and the devices have a reasonable amount
of RAM and are much easier to get serial connections than many
COTS routers.
Wire up the serial connection: this probably involves opening
the box, locating the serial header pins (TX, RX and GND) and
connecting a USB TTL converter - e.g. a PL2303 based device - to
it. The defunct OpenWRT wiki has a guide with some pictures. (If
you don't have a USB TTL converter to hand, other options are
available. For example, use the GPIO pins on a Raspberry Pi.)
Run a terminal emulator such as Minicom on whatever is on the
other end of the link. I use 115200 8N1 and find it also helps
to set "Line tx delay" to 1ms, "backspace sends DEL" and
"lineWrap on".
When you turn the router on you should be greeted with some
messages from U-Boot and a little bit of ASCII art, followed by
the instruction to hit SPACE to stop autoboot. Do this and you
will get a gl-mt300a> prompt.
For flashing from uboot, the firmware partition is from
0xbc050000 to 0xbcfd0000.
WiFi on this device is provided by the rt2800soc module. It WiFi on this device is provided by the rt2800soc module. It
expects firmware to be present in the "factory" MTD partition, so expects firmware to be present in the "factory" MTD partition, so
- assuming we want to use the wireless - we need to build MTD - assuming we want to use the wireless - we need to build MTD
support into the kernel even if we're using TFTP root support into the kernel even if we're using TFTP root.
''; '';
module = { pkgs, config, lib, ...}: module = { pkgs, config, lib, ...}:

View file

@ -11,6 +11,16 @@
}; };
}; };
description = ''
GL.Inet GL-MT300N-v2
********************
The GL-MT300N-v2 "Mango" is is very similar to the MT300A, but is
based on MT7628 instead of MT7620. It's also marginally cheaper
and comes in a yellow case not a blue one. It's different again
to the v1, which has only half the RAM.
'';
module = { pkgs, config, lib, ...}: module = { pkgs, config, lib, ...}:
let let
inherit (pkgs.liminix.networking) interface; inherit (pkgs.liminix.networking) interface;

View file

@ -9,6 +9,10 @@
}; };
}; };
# this device is described by the "qemu" device
description = "";
module = {pkgs, config, ... }: { module = {pkgs, config, ... }: {
imports = [ ../../modules/arch/aarch64.nix ]; imports = [ ../../modules/arch/aarch64.nix ];
kernel = { kernel = {

View file

@ -12,6 +12,33 @@
}; };
}; };
description = ''
QEMU
****
This is not a hardware device. This target produces an image for
QEMU, the "generic and open source machine emulator and
virtualizer".
Liminix can build QEMU for both MIPS (:code:`qemu` device) and Aarch64 (:code:`qemu-aarch64` device)
MIPS QEMU emulates a "Malta" board, which was an ATX form factor
evaluation board made by MIPS Technologies, but mostly in Liminix
we use paravirtualized devices (Virtio) instead of emulating
hardware. For Aarch64 we use the QEMU "virt" board.
Building an image for QEMU results in a :file:`result/` directory
containing ``run.sh`` ``vmlinux``, ``rootfs`` and possibly
(architecture-dependent) ``Image``. To invoke the emulator,
run ``run.sh``.
The configuration includes two emulated "hardware" ethernet
devices and the kernel :code:`mac80211_hwsim` module to
provide an emulated wlan device. To read more about how
to connect to this network, refer to :ref:`qemu-networking`
in the Development manual.
'';
module = {pkgs, config, ... }: { module = {pkgs, config, ... }: {
imports = [ ../../modules/arch/mipseb.nix ]; imports = [ ../../modules/arch/mipseb.nix ];
kernel = { kernel = {

View file

@ -41,6 +41,8 @@ that directory for console and monitor. Use :command:`connect-vm`
(also in the ``buildEnv`` environment) to connect to either of these (also in the ``buildEnv`` environment) to connect to either of these
sockets, and ^O to disconnect. sockets, and ^O to disconnect.
.. _qemu-networking:
Networking Networking
========== ==========

18
doc/hardware.nix Normal file
View file

@ -0,0 +1,18 @@
with import <nixpkgs> {} ;
let
devices =
builtins.readDir ../devices;
texts = lib.mapAttrsToList (n: t:
let d = import ../devices/${n}/default.nix;
d' = { description = "no description for ${n}"; } // d;
in d'.description )
devices;
in
writeText "hwdoc" ''
Supported hardware
##################
${lib.concatStringsSep "\n\n" texts}
''

View file

@ -11,6 +11,7 @@ Liminix
admin admin
development development
modules modules
hardware
Indices and tables Indices and tables