initial support for ubifs
This commit is contained in:
parent
0693cf23d8
commit
629914f65e
5 changed files with 71 additions and 8 deletions
|
@ -102,10 +102,7 @@
|
||||||
MTD_SPI_NOR= "y";
|
MTD_SPI_NOR= "y";
|
||||||
MTD_SPLIT_FIRMWARE= "y";
|
MTD_SPLIT_FIRMWARE= "y";
|
||||||
MTD_SPLIT_FIT_FW= "y";
|
MTD_SPLIT_FIT_FW= "y";
|
||||||
MTD_UBI="y";
|
|
||||||
MTD_UBI_BEB_LIMIT="20";
|
|
||||||
MTD_UBI_BLOCK="y";
|
|
||||||
MTD_UBI_WL_THRESHOLD="4096";
|
|
||||||
|
|
||||||
MMC = "y";
|
MMC = "y";
|
||||||
MMC_BLOCK = "y";
|
MMC_BLOCK = "y";
|
||||||
|
@ -158,6 +155,12 @@
|
||||||
klibBuild = config.system.outputs.kernel.modulesupport;
|
klibBuild = config.system.outputs.kernel.modulesupport;
|
||||||
};
|
};
|
||||||
in {
|
in {
|
||||||
|
ubi = {
|
||||||
|
minIOSize = "2048";
|
||||||
|
eraseBlockSize = "126976";
|
||||||
|
maxLEBcount = "1024"; # guessing
|
||||||
|
};
|
||||||
|
|
||||||
defaultOutput = "flashimage";
|
defaultOutput = "flashimage";
|
||||||
# the kernel expects this to be on a 2MB boundary. U-Boot
|
# the kernel expects this to be on a 2MB boundary. U-Boot
|
||||||
# (I don't know why) has a default of 0x41080000, which isn't.
|
# (I don't know why) has a default of 0x41080000, which isn't.
|
||||||
|
@ -166,7 +169,7 @@
|
||||||
# RAM unless the kernel is able to reuse it later. Oh well
|
# RAM unless the kernel is able to reuse it later. Oh well
|
||||||
loadAddress = "0x42000000";
|
loadAddress = "0x42000000";
|
||||||
entryPoint = "0x42000000";
|
entryPoint = "0x42000000";
|
||||||
rootDevice = "/dev/mtdblock0";
|
rootDevice = "ubi0:liminix";
|
||||||
dts = {
|
dts = {
|
||||||
src = "${openwrt.src}/target/linux/mediatek/dts/mt7622-linksys-e8450-ubi.dts";
|
src = "${openwrt.src}/target/linux/mediatek/dts/mt7622-linksys-e8450-ubi.dts";
|
||||||
includes = [
|
includes = [
|
||||||
|
@ -175,7 +178,7 @@
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
flash.eraseBlockSize = "65536"; # c.f. pkgs/mips-vm/mips-vm.sh
|
flash.eraseBlockSize = "65536"; # this is probably wrong
|
||||||
networkInterfaces =
|
networkInterfaces =
|
||||||
let
|
let
|
||||||
inherit (config.system.service.network) link;
|
inherit (config.system.service.network) link;
|
||||||
|
|
|
@ -39,7 +39,7 @@ in {
|
||||||
};
|
};
|
||||||
rootfsType = mkOption {
|
rootfsType = mkOption {
|
||||||
default = "squashfs";
|
default = "squashfs";
|
||||||
type = types.enum ["squashfs" "jffs2"];
|
type = types.enum ["squashfs" "jffs2" "ubifs"];
|
||||||
};
|
};
|
||||||
boot = {
|
boot = {
|
||||||
commandLine = mkOption {
|
commandLine = mkOption {
|
||||||
|
|
|
@ -7,5 +7,6 @@
|
||||||
./kexecboot.nix
|
./kexecboot.nix
|
||||||
./flashimage.nix
|
./flashimage.nix
|
||||||
./jffs2.nix
|
./jffs2.nix
|
||||||
|
./ubifs.nix
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
59
modules/ubifs.nix
Normal file
59
modules/ubifs.nix
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
{
|
||||||
|
config
|
||||||
|
, pkgs
|
||||||
|
, lib
|
||||||
|
, ...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
inherit (lib) mkIf mkOption types;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./initramfs.nix
|
||||||
|
];
|
||||||
|
options.system.outputs = {
|
||||||
|
systemConfiguration = mkOption {
|
||||||
|
type = types.package;
|
||||||
|
description = ''
|
||||||
|
pkgs.systemconfig for the configured filesystem,
|
||||||
|
contains 'activate' and 'init' commands
|
||||||
|
'';
|
||||||
|
internal = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
options.hardware.ubi = {
|
||||||
|
minIOSize = mkOption { type = types.str; };
|
||||||
|
eraseBlockSize = mkOption { type = types.str; }; # LEB
|
||||||
|
maxLEBcount = mkOption { type = types.str; }; # LEB
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf (config.rootfsType == "ubifs") {
|
||||||
|
kernel.config = {
|
||||||
|
MTD_UBI="y";
|
||||||
|
|
||||||
|
UBIFS_FS = "y";
|
||||||
|
UBIFS_FS_SECURITY = "n";
|
||||||
|
};
|
||||||
|
boot.initramfs.enable = true;
|
||||||
|
system.outputs = rec {
|
||||||
|
systemConfiguration =
|
||||||
|
pkgs.systemconfig config.filesystem.contents;
|
||||||
|
rootfs =
|
||||||
|
let
|
||||||
|
inherit (pkgs.pkgsBuildBuild) runCommand mtdutils;
|
||||||
|
cfg = config.hardware.ubi;
|
||||||
|
in runCommand "mkfs.ubifs" {
|
||||||
|
depsBuildBuild = [ mtdutils ];
|
||||||
|
} ''
|
||||||
|
mkdir -p $TMPDIR/empty/nix/store/ $TMPDIR/empty/secrets
|
||||||
|
cp ${systemConfiguration}/bin/activate $TMPDIR/empty/activate
|
||||||
|
ln -s ${pkgs.s6-init-bin}/bin/init $TMPDIR/empty/init
|
||||||
|
mkdir -p $TMPDIR/empty/nix/store
|
||||||
|
for path in $(cat ${systemConfiguration}/etc/nix-store-paths) ; do
|
||||||
|
(cd $TMPDIR/empty && cp -a $path .$path)
|
||||||
|
done
|
||||||
|
mkfs.ubifs -x favor_lzo -c ${cfg.maxLEBcount} -m ${cfg.minIOSize} -e ${cfg.eraseBlockSize} -y -r $TMPDIR/empty --output $out --squash-uids -o $out
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -68,7 +68,7 @@ in attrset:
|
||||||
src = ./.;
|
src = ./.;
|
||||||
|
|
||||||
CFLAGS = "-Os";
|
CFLAGS = "-Os";
|
||||||
LDFLAGS = "-static";
|
LDFLAGS = "-static -Xlinker -static";
|
||||||
|
|
||||||
postConfigure = ''
|
postConfigure = ''
|
||||||
cp ${makedevs} makedevs.c
|
cp ${makedevs} makedevs.c
|
||||||
|
|
Loading…
Reference in a new issue