Add tplink module for creating 'safeloader' images
This commit is contained in:
parent
84ce618213
commit
61494fdc0c
4 changed files with 90 additions and 1 deletions
|
@ -60,6 +60,9 @@ in
|
||||||
Combined kernel and FDT in uImage (U-Boot compatible) format
|
Combined kernel and FDT in uImage (U-Boot compatible) format
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
tplink-safeloader = mkOption {
|
||||||
|
type = types.package;
|
||||||
|
};
|
||||||
u-boot = mkOption {
|
u-boot = mkOption {
|
||||||
type = types.package;
|
type = types.package;
|
||||||
};
|
};
|
||||||
|
|
61
modules/outputs/tplink-safeloader.nix
Normal file
61
modules/outputs/tplink-safeloader.nix
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
{
|
||||||
|
config
|
||||||
|
, pkgs
|
||||||
|
, lib
|
||||||
|
, ...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
inherit (lib) mkOption types concatStringsSep;
|
||||||
|
o = config.system.outputs;
|
||||||
|
cfg = config.tplink-safeloader;
|
||||||
|
in {
|
||||||
|
options.tplink-safeloader = {
|
||||||
|
board = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
options.system.outputs = {
|
||||||
|
tplink-safeloader = mkOption {
|
||||||
|
type = types.package;
|
||||||
|
description = ''
|
||||||
|
tplink-safeloader
|
||||||
|
*****************
|
||||||
|
|
||||||
|
For creating 'safeloader' images for tp-link devices.
|
||||||
|
|
||||||
|
These can be flashed to the device using the firmware update feature
|
||||||
|
in the TP-link web UI or the OEM bootloader recovery: Use something
|
||||||
|
sharp to hold the 'reset' button while turning on the router until
|
||||||
|
only the orange LED remains lit. The router will assume IP address
|
||||||
|
192.168.0.1 and expect you to take 192.168.0.5 on one of the LAN ports.
|
||||||
|
On NixOS, use something like::
|
||||||
|
|
||||||
|
networking.interfaces.enp0s20f0u1c2 = {
|
||||||
|
ipv4.addresses = [ {
|
||||||
|
address = "192.168.0.5";
|
||||||
|
prefixLength = 24;
|
||||||
|
} ];
|
||||||
|
};
|
||||||
|
networking.networkmanager = {
|
||||||
|
unmanaged = [ "enp0s20f0u1c2" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
This connection is rather somewhat temperamental, it may take a couple
|
||||||
|
of attempts, possibly re-attaching the USB dongle and running
|
||||||
|
``systemctl restart network-start.service``. The web interface does not
|
||||||
|
give accurate feedback (the progress bar is a lie), so you may want
|
||||||
|
to upload the firmware using ``curl -F firmware=@result http://192.168.0.1/f2.htm``.
|
||||||
|
After this shows a 'success' JSON, the image still needs to be
|
||||||
|
transferred from memory to flash, so be patient.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = {
|
||||||
|
system.outputs = rec {
|
||||||
|
tplink-safeloader =
|
||||||
|
pkgs.runCommand "tplink" { nativeBuildInputs = with pkgs.pkgsBuildBuild; [ firmware-utils ]; } ''
|
||||||
|
tplink-safeloader -B "${cfg.board}" -k "${o.uimage}" -r "${o.rootfs}" -o $out
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -58,7 +58,8 @@ in {
|
||||||
anoia = callPackage ./anoia {};
|
anoia = callPackage ./anoia {};
|
||||||
fennel = callPackage ./fennel {};
|
fennel = callPackage ./fennel {};
|
||||||
fennelrepl = callPackage ./fennelrepl {};
|
fennelrepl = callPackage ./fennelrepl {};
|
||||||
firewallgen = callPackage ./firewallgen {};
|
firewallgen = callPackage ./firewallgen {};
|
||||||
|
firmware-utils = callPackage ./firmware-utils {};
|
||||||
gen_init_cpio = callPackage ./gen_init_cpio {};
|
gen_init_cpio = callPackage ./gen_init_cpio {};
|
||||||
go-l2tp = callPackage ./go-l2tp {};
|
go-l2tp = callPackage ./go-l2tp {};
|
||||||
hi = callPackage ./hi {};
|
hi = callPackage ./hi {};
|
||||||
|
|
24
pkgs/firmware-utils/default.nix
Normal file
24
pkgs/firmware-utils/default.nix
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
{ stdenv
|
||||||
|
, fetchFromGitHub
|
||||||
|
, cmake
|
||||||
|
, zlib
|
||||||
|
, openssl
|
||||||
|
}:
|
||||||
|
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
pname = "firmware-utils";
|
||||||
|
version = "snapshot";
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "openwrt";
|
||||||
|
repo = "firmware-utils";
|
||||||
|
rev = "e87f23849790a7c77b4cd0e8ef0384da188174e5";
|
||||||
|
hash = "sha256-285Isf9sRuUt5S56SozgqpnS0+LOfnvpxpnWLwuWYUk=";
|
||||||
|
};
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
cmake
|
||||||
|
zlib
|
||||||
|
openssl
|
||||||
|
];
|
||||||
|
}
|
Loading…
Reference in a new issue