diff --git a/nixos/modules/installer/cd-dvd/sd-image-armv7l-multiplatform.nix b/nixos/modules/installer/cd-dvd/sd-image-armv7l-multiplatform.nix index 957a8ff9ce6d..80fb47072286 100644 --- a/nixos/modules/installer/cd-dvd/sd-image-armv7l-multiplatform.nix +++ b/nixos/modules/installer/cd-dvd/sd-image-armv7l-multiplatform.nix @@ -19,18 +19,37 @@ in "it cannot be cross compiled"; }; + # Needed by RPi firmware + nixpkgs.config.allowUnfree = true; + boot.loader.grub.enable = false; boot.loader.generic-extlinux-compatible.enable = true; boot.kernelPackages = pkgs.linuxPackages_latest; - boot.kernelParams = ["console=ttyS0,115200n8" "console=ttymxc0,115200n8" "console=ttyAMA0,115200n8" "console=tty0"]; + boot.kernelParams = ["console=ttyS0,115200n8" "console=ttymxc0,115200n8" "console=ttyAMA0,115200n8" "console=ttyO0,115200n8" "console=tty0"]; + boot.consoleLogLevel = 7; # FIXME: this probably should be in installation-device.nix users.extraUsers.root.initialHashedPassword = ""; sdImage = { - populateBootCommands = '' + populateBootCommands = let + configTxt = pkgs.writeText "config.txt" '' + [pi2] + kernel=u-boot-rpi2.bin + + [pi3] + kernel=u-boot-rpi3.bin + enable_uart=1 + ''; + in '' + for f in bootcode.bin fixup.dat start.elf; do + cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/$f boot/ + done + cp ${pkgs.ubootRaspberryPi2}/u-boot.bin boot/u-boot-rpi2.bin + cp ${pkgs.ubootRaspberryPi3}/u-boot.bin boot/u-boot-rpi3.bin + cp ${configTxt} boot/config.txt ${extlinux-conf-builder} -t 3 -c ${config.system.build.toplevel} -d ./boot - ''; + ''; }; } diff --git a/nixos/modules/installer/cd-dvd/sd-image-raspberrypi.nix b/nixos/modules/installer/cd-dvd/sd-image-raspberrypi.nix index e7163f10a3c3..dc196468139a 100644 --- a/nixos/modules/installer/cd-dvd/sd-image-raspberrypi.nix +++ b/nixos/modules/installer/cd-dvd/sd-image-raspberrypi.nix @@ -26,6 +26,7 @@ in boot.loader.generic-extlinux-compatible.enable = true; boot.kernelPackages = pkgs.linuxPackages_rpi; + boot.consoleLogLevel = 7; # FIXME: this probably should be in installation-device.nix users.extraUsers.root.initialHashedPassword = ""; diff --git a/pkgs/misc/uboot/default.nix b/pkgs/misc/uboot/default.nix index 605208a757b4..2cf9cbb1ab80 100644 --- a/pkgs/misc/uboot/default.nix +++ b/pkgs/misc/uboot/default.nix @@ -10,13 +10,13 @@ let stdenv.mkDerivation (rec { name = "uboot-${defconfig}-${version}"; - version = "2016.01"; + version = "2016.05"; nativeBuildInputs = [ bc dtc ]; src = fetchurl { url = "ftp://ftp.denx.de/pub/u-boot/u-boot-${version}.tar.bz2"; - sha256 = "1md5jpq5n9jh08s7sdkjrvg2q7kpzwa7yrpgl9581ncrjfx2yyg5"; + sha256 = "0wdivib8kbm17qr6r7n7wyzg5vnwpagvwk5m0z80rbssc5sj5l47"; }; configurePhase = '' @@ -68,6 +68,12 @@ in rec { filesToInstall = ["u-boot-sunxi-with-spl.bin"]; }; + ubootBeagleboneBlack = buildUBoot rec { + defconfig = "am335x_boneblack_defconfig"; + targetPlatforms = ["armv7l-linux"]; + filesToInstall = ["MLO" "u-boot.img"]; + }; + ubootJetsonTK1 = buildUBoot rec { defconfig = "jetson-tk1_defconfig"; targetPlatforms = ["armv7l-linux"]; @@ -86,12 +92,16 @@ in rec { filesToInstall = ["u-boot.bin"]; }; - # Intended only for QEMU's vexpress-a9 emulation target! - ubootVersatileExpressCA9 = buildUBoot rec { - defconfig = "vexpress_ca9x4_defconfig"; + ubootRaspberryPi2 = buildUBoot rec { + defconfig = "rpi_2_defconfig"; targetPlatforms = ["armv7l-linux"]; - filesToInstall = ["u-boot"]; - patches = [ ./vexpress-Use-config_distro_bootcmd.patch ]; + filesToInstall = ["u-boot.bin"]; + }; + + ubootRaspberryPi3 = buildUBoot rec { + defconfig = "rpi_3_32b_defconfig"; + targetPlatforms = ["armv7l-linux"]; + filesToInstall = ["u-boot.bin"]; }; ubootWandboard = buildUBoot rec { diff --git a/pkgs/misc/uboot/vexpress-Use-config_distro_bootcmd.patch b/pkgs/misc/uboot/vexpress-Use-config_distro_bootcmd.patch deleted file mode 100644 index 218132c7758e..000000000000 --- a/pkgs/misc/uboot/vexpress-Use-config_distro_bootcmd.patch +++ /dev/null @@ -1,82 +0,0 @@ -From 98f62c27fe481dc2d444d70265268d2369d8a998 Mon Sep 17 00:00:00 2001 -From: Tuomas Tynkkynen -Date: Mon, 8 Jun 2015 22:29:23 +0300 -Subject: [PATCH] vexpress: Use config_distro_bootcmd - -Also had to hack cli_readline.c, as one codepath in -cli_readline_into_buffer doesn't respect the timeout. ---- - common/cli_readline.c | 12 +++++++++++- - configs/vexpress_ca9x4_defconfig | 2 -- - include/configs/vexpress_common.h | 2 +- - 3 files changed, 12 insertions(+), 4 deletions(-) - -diff --git a/common/cli_readline.c b/common/cli_readline.c -index c1476e4..5063a0a 100644 ---- a/common/cli_readline.c -+++ b/common/cli_readline.c -@@ -517,6 +517,7 @@ int cli_readline_into_buffer(const char *const prompt, char *buffer, - int plen = 0; /* prompt length */ - int col; /* output column cnt */ - char c; -+ int first = 1; - - /* print prompt */ - if (prompt) { -@@ -528,7 +529,16 @@ int cli_readline_into_buffer(const char *const prompt, char *buffer, - for (;;) { - if (bootretry_tstc_timeout()) - return -2; /* timed out */ -- WATCHDOG_RESET(); /* Trigger watchdog, if needed */ -+ if (first && timeout) { -+ uint64_t etime = endtick(timeout); -+ -+ while (!tstc()) { /* while no incoming data */ -+ if (get_ticks() >= etime) -+ return -2; /* timed out */ -+ WATCHDOG_RESET(); -+ } -+ first = 0; -+ } - - #ifdef CONFIG_SHOW_ACTIVITY - while (!tstc()) { -diff --git a/configs/vexpress_ca9x4_defconfig b/configs/vexpress_ca9x4_defconfig -index 2947fc1..9a5123d 100644 ---- a/configs/vexpress_ca9x4_defconfig -+++ b/configs/vexpress_ca9x4_defconfig -@@ -5,11 +5,9 @@ CONFIG_TARGET_VEXPRESS_CA9X4=y - # CONFIG_CMD_IMLS is not set - # CONFIG_CMD_XIMG is not set - # CONFIG_CMD_EDITENV is not set --# CONFIG_CMD_ENV_EXISTS is not set - # CONFIG_CMD_LOADB is not set - # CONFIG_CMD_LOADS is not set - # CONFIG_CMD_FPGA is not set --# CONFIG_CMD_ECHO is not set - # CONFIG_CMD_ITEST is not set - # CONFIG_CMD_SETEXPR is not set - # CONFIG_CMD_NFS is not set -diff --git a/include/configs/vexpress_common.h b/include/configs/vexpress_common.h -index 98f6ae9..062532a 100644 ---- a/include/configs/vexpress_common.h -+++ b/include/configs/vexpress_common.h -@@ -185,7 +185,6 @@ - CONFIG_SYS_INIT_RAM_SIZE - \ - GENERATED_GBL_DATA_SIZE) - #define CONFIG_SYS_INIT_SP_ADDR CONFIG_SYS_GBL_DATA_OFFSET --#define CONFIG_CMD_ECHO - - #include - -@@ -225,6 +224,7 @@ - #define CONFIG_EXTRA_ENV_SETTINGS \ - CONFIG_PLATFORM_ENV_SETTINGS \ - BOOTENV \ -+ "fdtfile=vexpress-v2p-ca9.dtb\0" \ - "console=ttyAMA0,38400n8\0" \ - "dram=1024M\0" \ - "root=/dev/sda1 rw\0" \ --- -2.6.0 - diff --git a/pkgs/os-specific/linux/firmware/raspberrypi/default.nix b/pkgs/os-specific/linux/firmware/raspberrypi/default.nix index 0c61aee9713e..4787eb57afd3 100644 --- a/pkgs/os-specific/linux/firmware/raspberrypi/default.nix +++ b/pkgs/os-specific/linux/firmware/raspberrypi/default.nix @@ -1,15 +1,14 @@ -{stdenv, fetchurl }: +{ stdenv, fetchFromGitHub }: -let +stdenv.mkDerivation rec { + name = "raspberrypi-firmware-${version}"; + version = "1.20160620"; - rev = "1.20160315"; - -in stdenv.mkDerivation { - name = "raspberrypi-firmware-${rev}"; - - src = fetchurl { - url = "https://github.com/raspberrypi/firmware/archive/${rev}.tar.gz"; - sha256 = "0a7ycv01s0kk84szsh51hy2mjjil1dzdk0g7k83h50d5nya090fl"; + src = fetchFromGitHub { + owner = "raspberrypi"; + repo = "firmware"; + rev = version; + sha256 = "06g691px0abndp5zvz2ba1g675rcqb64n055h5ahgnlck5cdpawg"; }; installPhase = '' @@ -19,8 +18,10 @@ in stdenv.mkDerivation { cp opt/vc/LICENCE $out/share/raspberrypi for f in $out/bin/*; do - patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" "$f" - patchelf --set-rpath "$out/lib" "$f" + if isELF "$f"; then + patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" "$f" + patchelf --set-rpath "$out/lib" "$f" + fi done ''; diff --git a/pkgs/os-specific/linux/kernel/linux-rpi.nix b/pkgs/os-specific/linux/kernel/linux-rpi.nix index 777662718af6..a069e7606ccc 100644 --- a/pkgs/os-specific/linux/kernel/linux-rpi.nix +++ b/pkgs/os-specific/linux/kernel/linux-rpi.nix @@ -1,21 +1,47 @@ -{ stdenv, fetchurl, perl, buildLinux, ... } @ args: +{ stdenv, fetchFromGitHub, perl, buildLinux, ... } @ args: let + modDirVersion = "4.4.13"; + tag = "1.20160620-1"; +in +stdenv.lib.overrideDerivation (import ./generic.nix (args // rec { + version = "${modDirVersion}-${tag}"; + inherit modDirVersion; - rev = "f4b20d47d7df7927967fcd524324b145cfc9e2f9"; - -in import ./generic.nix (args // rec { - version = "4.1.y-${rev}"; - - modDirVersion = "4.1.20-v7"; - - src = fetchurl { - url = "https://api.github.com/repos/raspberrypi/linux/tarball/${rev}"; - name = "linux-raspberrypi-${version}.tar.gz"; - sha256 = "0x17hlbi7lpmmnp24dnkync5gzj57j84j0nlrcv1lv9fahjkqsm2"; + src = fetchFromGitHub { + owner = "raspberrypi"; + repo = "linux"; + rev = "raspberrypi-kernel_${tag}"; + sha256 = "0bydlzmd9mar07j6dihhzn1xm6vpn92y33vf1qsdkl3hjil6brfc"; }; features.iwlwifi = true; extraMeta.hydraPlatforms = []; +})) (oldAttrs: { + postConfigure = '' + # The v7 defconfig has this set to '-v7' which screws up our modDirVersion. + sed -i $buildRoot/.config -e 's/^CONFIG_LOCALVERSION=.*/CONFIG_LOCALVERSION=""/' + ''; + + postFixup = '' + # Make copies of the DTBs so that U-Boot finds them, as it is looking for the upstream names. + # This is ugly as heck. + copyDTB() { + if [ -f "$out/dtbs/$1" ]; then + cp -v "$out/dtbs/$1" "$out/dtbs/$2" + fi + } + + # I am not sure if all of these are correct... + copyDTB bcm2708-rpi-b.dtb bcm2835-rpi-a.dtb + copyDTB bcm2708-rpi-b.dtb bcm2835-rpi-b.dtb + copyDTB bcm2708-rpi-b.dtb bcm2835-rpi-b-rev2.dtb + copyDTB bcm2708-rpi-b-plus.dtb bcm2835-rpi-a-plus.dtb + copyDTB bcm2708-rpi-b-plus.dtb bcm2835-rpi-b-plus.dtb + copyDTB bcm2708-rpi-b-plus.dtb bcm2835-rpi-zero.dtb + copyDTB bcm2708-rpi-cm.dtb bcm2835-rpi-cm.dtb + copyDTB bcm2709-rpi-2-b.dtb bcm2836-rpi-2-b.dtb + copyDTB bcm2710-rpi-3-b.dtb bcm2837-rpi-3-b.dtb + ''; }) diff --git a/pkgs/os-specific/linux/rtl8723bs/default.nix b/pkgs/os-specific/linux/rtl8723bs/default.nix index e8cc1f40067e..046445345903 100644 --- a/pkgs/os-specific/linux/rtl8723bs/default.nix +++ b/pkgs/os-specific/linux/rtl8723bs/default.nix @@ -32,7 +32,7 @@ stdenv.mkDerivation rec { description = "Realtek SDIO Wi-Fi driver"; homepage = "https://github.com/hadess/rtl8723bs"; license = stdenv.lib.licenses.gpl2; - platforms = [ "x86_64-linux" "i686-linux" "armv7l-linux" ]; + platforms = stdenv.lib.platforms.linux; broken = ! versionAtLeast kernel.version "3.19"; maintainers = with maintainers; [ elitak ]; }; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 755d745acb43..a3455f66551b 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -11465,10 +11465,12 @@ in buildUBoot ubootTools ubootBananaPi + ubootBeagleboneBlack ubootJetsonTK1 ubootPcduino3Nano ubootRaspberryPi - ubootVersatileExpressCA9 + ubootRaspberryPi2 + ubootRaspberryPi3 ubootWandboard ; diff --git a/pkgs/top-level/platforms.nix b/pkgs/top-level/platforms.nix index 8ffe1a60af5a..83859f821d87 100644 --- a/pkgs/top-level/platforms.nix +++ b/pkgs/top-level/platforms.nix @@ -136,6 +136,7 @@ rec { kernelMajor = "2.6"; kernelHeadersBaseConfig = "bcm2835_defconfig"; kernelBaseConfig = "bcmrpi_defconfig"; + kernelDTB = true; kernelArch = "arm"; kernelAutoModules = false; kernelExtraConfig =