[Nix-dev] Raspberry-Pi NixOS

Tuomas Tynkkynen tuomas.tynkkynen at iki.fi
Wed Jul 27 09:22:57 CEST 2016


2016-07-20 0:53 GMT+03:00 Tomas Hlavaty <tom at logand.com>:
> Lluís Batlle i Rossell <viric at viric.name> writes:
>> The device tree blob should be built by the kernel, like with pi and pi2,
>> isn't it?
>
> This is the kernel which works for me and is taken from
> raspberry-firmware/boot:
>
> Linux version 4.4.13-v7+ (dc4 at dc4-XPS13-9333) (gcc version 4.9.3
> (crosstool-NG crosstool-ng-1.22.0-88-g8460611) ) #894 SMP Mon Jun 13
> 13:13:27 BST 2016
>
> and the corresponding device tree is bcm2710-rpi-3-b.dtb.
>
> This looks like the same kernel version in
> pkgs/os-specific/linux/kernel/linux-rpi.nix (modDirVersion = "4.4.13";
> tag = "1.20160620-1")
>
> Are you saying that this is not good enough?
>
> What works: If I copy files from raspberry-firmware/boot to /boot, rpi3
> starts fine.  These are the files I have in /boot:
>
> $ ls -al /boot
> -rwxr-xr-x  1 root root   13221 Jun 18 22:31 bcm2708-rpi-b.dtb
> -rwxr-xr-x  1 root root   13484 Jun 18 22:31 bcm2708-rpi-b-plus.dtb
> -rwxr-xr-x  1 root root   13257 Jun 18 22:31 bcm2708-rpi-cm.dtb
> -rwxr-xr-x  1 root root   14567 Jun 18 22:31 bcm2709-rpi-2-b.dtb
> -rwxr-xr-x  1 root root   15237 Jun 18 22:31 bcm2710-rpi-3-b.dtb
> -rwxr-xr-x  1 root root   17932 Jun 18 22:31 bootcode.bin
> -rwxr-xr-x  1 root root     165 Jul 19 22:46 cmdline.txt
> -rwxr-xr-x  1 root root    1369 Jan 11  2016 config.txt
> -rwxr-xr-x  1 root root    2504 Jun 23 20:42 fixup_cd.dat
> -rwxr-xr-x  1 root root    6482 Jun 23 20:42 fixup.dat
> -rwxr-xr-x  1 root root    9717 Jun 23 20:42 fixup_db.dat
> -rwxr-xr-x  1 root root    9717 Jun 23 20:42 fixup_x.dat
> -rwxr-xr-x  1 root root 4224232 Jun 18 22:31 kernel7.img
> drwxr-xr-x  2 root root    8192 Jun 18 22:31 overlays
> -rwxr-xr-x  1 root root  617432 Jun 23 20:42 start_cd.elf
> -rwxr-xr-x  1 root root 4926264 Jun 23 20:42 start_db.elf
> -rwxr-xr-x  1 root root 2746552 Jun 23 20:42 start.elf
> -rwxr-xr-x  1 root root 3877720 Jun 23 20:42 start_x.elf
>
> I don't see, why raspberrypi/builder.sh creates defaultgeneration,
> initrd and nixos-init files in /boot.  It actually seems to me, that
> initrd should not be there at all for the boot to work.
>
> raspberrypi/builder.sh doesn't create fixup_x.dat, which is in the list
> above; but I haven't tried booting without it.
>
> Although pkgs/os-specific/linux/kernel/linux-rpi.nix copies DTB files,
> it renames them to something that looks wrong and also it does not copy
> them to /boot at all:
>
>     # 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
>

The files are getting copied with the names used by the mainline
kernel (which is currently the authority for naming/schema of device
tree files) since U-Boot is looking for those names.

> I looks like the files in raspberry-firmware/boot should work on any rpi
> version so we should probably immitate that somehow in nixos and at
> least get it to work out of the box even if we just take the precompiled
> files from raspberrypi-firmware/boot and improve that later.

I personally wouldn't use device trees not built from the kernel tree that
is being used, unless I wanted to have weird and interesting problems.


More information about the nix-dev mailing list