Hi! Danny Milosavljevic <dan...@scratchpost.org> skribis:
> below is my (untested!) attempt at an u-boot-configuration for use like this > > (bootloader (u-boot-configuration (device "/dev/sda"))) Nice! > It has been copied from gnu/system/grub.cfg and then I s/grub/u-boot/g and > removed all the eyecandy stuff as far as I could. We should end up with > U-Boot showing a boot menu if > > (1) The file "extlinux.conf" ends up on the first partition in the root if no > partition was marked Active or > (2) The file "extlinux.conf" ends up on the partition which was marked Active > using the flag in the MBR/GPT. > > and if someone installed u-boot-sunxi-with-spl.bin at a special sector using > dd or something. OK. We’ll need to find out exactly what needs to be done and implement it, similar to ‘install-grub’ in (gnu build install). > NB: I think "device" would better be called "drive" or something. Everything > is a device at this point. More important is that it isn't a partition or a > scanner or something :) To me “device” is to be understood as “/dev” file name in this context. > Now how do I make u-boot-configuration available in my /etc/config.scm ? :) Simply (use-modules (gnu system u-boot)) in your config. However, at this point it won’t do anything useful obviously. :-) > NB: I also researched how to chainload grub and there's > https://wiki.linaro.org/LEG/Engineering/Kernel/GRUBonUBOOT that describes it. > Do we want that? Dunno, it’s not clear to me what this buys us. > NB: menu-entry is unchanged. Might make sense to generalize it and move it to > a common location. For now, let’s simply reuse the one from (gnu system grub). We can always move it to a more appropriate place later on. > (u-boot u-boot-configuration-u-boot ; package > (default (@ (gnu packages u-boot) (make-u-boot-package > board)))) The default value has invalid syntax. Should be simply: (default (make-u-boot-package board)) but I think this doesn’t work (‘board’ will be unbound; yeah, counter-intuitive.) You could instead do (default #f) and call ‘make-u-boot-package’ when that value is #f. > (define (eye-candy config root-fs system port) > "dummy" > (mlet* %store-monad ((image #f)) > (return (and image > #~(format #$port ""))))) > Simply remove it. :-) Now, with that in place, we need a few more bits: 1. An ‘install-u-boot’ procedure that would be the counterpart of ‘install-grub’, as discussed above; 2. (gnu system) should dispatch to either ‘grub-configuration-file’ or ‘u-boot-configuration-file’ depending on whether the config contains a ‘grub-configuration’ or a ‘u-boot-configuration’ object. I’m probably forgetting other things, but this is the guts of it. (Note that I’m happy to provide guidance for the GuixSD side of things, but I have almost no experience with U-Boot.) Thanks! Ludo’.