From: Ville Ilvonen <ville.ilvonen@unikie.com>
To: "Alyssa Ross" <hi@alyssa.is>,
"José Pekkarinen" <jose.pekkarinen@unikie.com>
Cc: devel@spectrum-os.org
Subject: Re: [PATCH] Add image configuration option
Date: Thu, 15 Sep 2022 17:09:42 +0300 [thread overview]
Message-ID: <3b5ed1a7-571f-b653-3fb1-f388638b94a5@unikie.com> (raw)
In-Reply-To: <87v8povisw.fsf@alyssa.is>
On 9/15/22 17:00, Alyssa Ross wrote:
> Ville Ilvonen <ville.ilvonen@unikie.com> writes:
>
>> On 9/15/22 16:22, Alyssa Ross wrote:
>>> José Pekkarinen <jose.pekkarinen@unikie.com> writes:
>>>
>>>> On Thu, Sep 15, 2022 at 2:31 PM Alyssa Ross <hi@alyssa.is> wrote:
>>>>
>>>>> [...]
>>>>> Okay, thanks for the explanation. I think we can group some of these
>>>>> together:
>>>>>
>>>>> • Stuff that's already Nixpkgs configuration options or can be
>>>>> expressed through an overlay. Whether to cross compile, what
>>>>> architecture to build for, whether to use a vendor kernel, etc. This
>>>>> can already be handled through the existing configuration mechanism.
>>>>>
>>>>> • VM customisation, including extra VMs, disabling Wayland, etc. In my
>>>>> mind there are still some open questions around how this should be
>>>>> implemented exactly, but this is definitely something that needs to
>>>>> be more configurable.
>>>>>
>>>>> • Whether to install extra stuff on the host system. This covers
>>>>> things like debugging symbols and tools.
>>>>>
>>>>> Does that sound right to you? Are there more that you can think of?
>>>>> I'd like to understand the requirements here better, to help think about
>>>>> what sort of configuration mechanisms might be required.
>>>>
>>>> This is a good summary, currently I can think of a coupel of more,
>>>> which is a mechanism to provide upstream project configuration artifacts
>>>> when nix allow to bypass their automated configs, for example, a kernel
>>>> config when using manual config kernel nix package, a bit more unclear
>>>> is how to provide upstream configs when nix is not flexible enough.
>>>
>>> You mean you'd like to manually provide a Kconfig file, rathen than
>>> using Nixpkgs' (not very good) structured config mechanism, right?
>>> That should be possible with an overlay, but maybe some documentation
>>> with an example would be a good idea?
>>>
>>>> A mechanism to generate a full image from the nix generated artifacts
>>>> putting together kernel, initrd, rootfs and ext partition so that the
>>>> full image can be flashed in a sdcard of choice and use it. This would
>>>> require to be configurable so that you can modify the partition table
>>>> to suit vendor needs.
>>>
>>> We've had some discussion about that already on the list and on IRC. My
>>> current view is that early boot firmware (U-Boot etc.) doesn't really
>>> have anything to do with Spectrum. They both run at different times,
>>> and they communicate over a standard interface (EBBR [1]), so the
>>> specifics of the firmware aren't really in scope for Spectrum itself and
>>> belong elsewhere. It doesn't make sense for Spectrum to be installing
>>> U-Boot any more than it makes sense for U-Boot to be installing
>>> Spectrum, or for Linux to be installing U-Boot — they are two separate
>>> components. (This isn't an approach unique to Spectrum — Fedora is
>>> doing something similar.)
>>>
>>> It can make sense to make an image that is a combination of U-Boot and
>>> Spectrum, but that process should be part of an integration between the
>>> two that exists one layer up, rather than part of either project. For
>>> example, you could do something like this:
>>>
>>> let
>>> spectrum = import <spectrum/img/live> {
>>> # config could either be loaded using the standard mechanism
>>> # or inlined here.
>>> };
>>> # It would also be possible to import individual components of
>>> # Spectrum and assemble them manually if even greater
>>> # flexibility was required, but I doubt that would be common.
>>>
>>> inherit (spectrum) pkgs;
>>> # I don't think a pkgs attribute currently exists on the
>>> # spectrum-live.img derivation, but it might make sense to add
>>> # for this sort of use case.
>>>
>>> uboot = pkgs.ubootRockPro64;
>>> in
>>>
>>> pkgs.runCommand "uboot+spectrum.img" {} ''
>>> # Use sfdisk (or maybe there's some better tool)
>>> # to create a partition table, and copy the U-boot image
>>> # and the Spectrum images into place.
>>> #
>>> # Spectrum is designed to accomodate this by not expecting
>>> # any of its partitions to be at any particular location
>>> # on disk.
>>> ''
>>>
>>> Maybe this is another case where documentation and a worked example
>>> would help?
>>
>> Documented example case would help. It's good to scope but in the big
>> picture it's hard to see early boot firmware would have *nothing* to do
>> with Spectrum. That's not the case with x86_64 either.
>>
>> Let me clarify.
>> On x86 traditionally people can't change early bootloading.
>> -> Spectrum assumes UEFI OS loading because UEFI is just there and can't
>> be changed
>> On arm traditionally people can and will change early bootloading.
>> -> Spectrum has assumed UEFI but UEFI is just not there. It's must be
>> put there - typically on device SD card or eMMC image.
>> On riscv assumption is more like on arm.
>>
>> So the mechanism is essential, even when not *provided* by Spectrum it
>> should be acknowledged.
>> Documenting Spectrum reqs to boot itself with example determines how
>> easily people can make their devices run Spectrum.
>
> Agreed, that's why I was pleased to discover the EBBR spec recently,
> which defines exactly this: "an interface between platform firmware and
> an operating system that is suitable for embedded platforms", designed
> for U-Boot with UEFI like we were already targeting. So we can say
> "Spectrum aims to implement EBBR on aarch64" (and on RISC-V when we get
> there if that's the right thing to do), and that way there's a lovely
> long document that explains what is Spectrum's responsibility to do, and
> what is the firmware's responsibility to do. And when something goes
> wrong, we'll be able to refer to the spec to determine whether it's a
> problem with Spectrum, or with the platform firmware.
>
> And of course we can have some documentation that introduces EBBR to an
> audience that's not necessarily familiar with it, and provides an
> example of how an EBBR system comprising both Spectrum and U-Boot might
> be put together, expanding on what I included as the example in my
> previous message. That should be more than enough to acknowledge the
> mechanism, right?
Example with some device(s) defines the usefulness - to get Spectrum
running on that device. Documentation with link to EBBR could be
additional reading. The last practical question is where the device
specific implementations of ebbr (e.g. u-boot) are stored. I'm reading
out of Spectrum tree but the "glue" nix (your example of uboot+spectrum)
would be needed somewhere. Could that be in Spectrum tree to be useful
for Spectrum users?
-Ville
next prev parent reply other threads:[~2022-09-15 14:09 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-15 7:35 [PATCH] Add image configuration option José Pekkarinen
2022-09-15 8:21 ` Alyssa Ross
2022-09-15 10:42 ` José Pekkarinen
2022-09-15 11:31 ` Alyssa Ross
2022-09-15 12:31 ` José Pekkarinen
2022-09-15 13:22 ` Alyssa Ross
2022-09-15 13:48 ` Ville Ilvonen
2022-09-15 14:00 ` Alyssa Ross
2022-09-15 14:09 ` Ville Ilvonen [this message]
2022-09-15 14:47 ` Integrating Spectrum and platform firmware Alyssa Ross
2022-09-16 5:29 ` Ville Ilvonen
2022-09-16 4:59 ` [PATCH] Add image configuration option José Pekkarinen
2022-09-16 7:25 ` Alyssa Ross
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3b5ed1a7-571f-b653-3fb1-f388638b94a5@unikie.com \
--to=ville.ilvonen@unikie.com \
--cc=devel@spectrum-os.org \
--cc=hi@alyssa.is \
--cc=jose.pekkarinen@unikie.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://spectrum-os.org/git/crosvm
https://spectrum-os.org/git/doc
https://spectrum-os.org/git/mktuntap
https://spectrum-os.org/git/nixpkgs
https://spectrum-os.org/git/spectrum
https://spectrum-os.org/git/ucspi-vsock
https://spectrum-os.org/git/www
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).