target_config.lua and target_config_check.lua don't pass a table of
callbacks anymore, so target_config_lib.lua can by simplified by moving
all the code that was in the returned function to the toplevel.
So far, we were using a sort operation on the generated .config to
implement precedence of =y packages over =m, and =m over unset.
Unfortunately, this sort not only used for packages, but for all config
lines. This made it impossible to override settings from targets/generic
in a target config when the new setting was sorted before the generic
setting.
To fix this, track configurations by their keys, so we can properly
override config keys that were set before. Value-based precedence is
only preserved for package configuration.
The config() and try_config() calls always take key and value as
separate arguments now. Strings are quoted automatically; the values
true, nil and false map to y, m and unset for tristate options. config()
can take an optional third argument to override the error message to
display when the setting fails to apply.
All existing target configs generate the same .config with the old and the
new code. The new code is also a bit faster on targets with many devices.
This commit assigns class-flags to devices. The following scheme is
used:
- ath9k & ath10k: tiny if RAM <128M
- ath10k & ath10k: tiny if RAM <256M
- all: tiny if RAM <64M
- all: tiny if flash <8M
All other devices automatically have the default device-class selected.
The file targets/$GLUON_TARGET/config becomes optional, as many targets
only used it to set the board and subtarget.
Also fix targets without subtarget.
With a backported patch from the OpenWrt trunk, it is now easy to generate an
equivalent configuration using CONFIG_ALL_KMODS.
The build will take a bit longer because all kernel module packages are actually
built even when they are not included in the image, but adding new targets
becomes a lot easier.
Also, related documentation updates and fixes.
This still needs some work:
- there's no factory image causing `make images` to fail
- VoCore can not support BSS and IBSS at the same time
- multi-BSS mode (e.g. mesh + BSS) works if the macs only
differ in the last 3 bits. Gluon expects to choose both MACs freely,
though, so after flashing the image one should reset the wifi MACs.
This is further complicated as VoCores have their MACs assigned
without gaps making collisions likely.
- there are no buttons nor ethernet ports (without the dock, that is),
so config-mode will not be possible as is