= "Hi Trevor,

Le mer. 24 mars 2021 à 01:41, Trevor Woerner <[email protected]> a écrit :
>
> On Tue 2021-03-23 @ 12:59:24 PM, Yann Dirson wrote:
> > Hi Trevor,
> >
> > Le lun. 22 mars 2021 à 16:50, Trevor Woerner <[email protected]> a écrit :
> > > > BTW, I'm also unclear on what to do next to better support those
> > > > boards: with the default
> > > > kernel config only a subset of the hardware is supported, and for
> > > > state-of-the-art hw
> > > > support we'll also need patches not yet in upstream kernel (from eg.
> > > > armbian and libreelec).
> > > >
> > > > I feel it would be good to provide defconfig files for those machines,
> > > > but then there are
> > > > several options to handle that.  Would a minimal hw-focused defconfig
> > > > suitable for
> > > > `KCONFIG_MODE = "--allnoconfig"` be a good option ?
> > >
> > > I feel exactly the same way.
> > >
> > > By default all arm64 kernels are configured with the one, in-kernel, 
> > > generic
> > > arm64 defconfig. That gives me a kernel that is over 11MB in size, and
> > > includes all sorts of useless drivers.
> > >
> > > I've been working off-and-on on a mechanism for meta-rockchip that would 
> > > allow
> > > users to decide between the default in-kernel arm64 defconfig (which would
> > > be selected by doing nothing) or using a leaner defconfig that I have been
> > > tweaking specifically for each board. Currently I only have a lean 
> > > defconfig
> > > for rock-pi-4b, but it was my hope to generate defconfigs for all 
> > > supported
> > > boards.
> > >
> > > Ideally I had wanted to leverage the linux-yocto kmeta mechanism to 
> > > generate
> > > defconfigs dynamically based on the specific machine and specific user
> > > preferences, but that didn't go as smoothly as I was hoping, then I got
> > > distracted by other things.
> > >
> > > I had created a spreadsheet with a comparison between the various boards 
> > > that
> > > would have been a basis for the individual kmeta pieces. Maybe I'll find 
> > > some
> > > more time to poke at it later this week. I could also push my WIP stuff to
> > > somewhere if you'd like to take a look.
> > >
> > > In any case, my point is, I'm very interested in something better than 
> > > what
> > > currently exists :-)
> >
> > On my side I have a minimal defconfig for our own board, which is very 
> > similar
> > to the nanopi-m4, which could be used as a starting point for the latter.
> >
> >
> > > One thing that I'd like to keep clear in meta-rockchip is to always allow 
> > > the
> > > user to choose between upstream and "extras". My feeling is: the simplest
> > > build, if the user does nothing explicit, will always pull from pure 
> > > upstream
> > > with no out-of-tree patches or vendor pieces. But I'm not opposed to 
> > > having
> > > a mechanism whereby if the user does something explicit, they can choose 
> > > to
> > > use a vendor tree or make use of out-of-tree patches for various things.
> >
> > One possibility would be using a KERNEL_CONFIG_VARIANT variable, whose
> > values would select consistent sets of KBUILD_DEFCONFIG + KCONFIG_MODE
> > + SRC_URI_append.  Standard variants could include "mainline" as the
> > default, and
> > maybe "customhw" which would bring just the hw features for the board
> > in allnoconfig
> > mode.
> >
> > Or maybe we could try to fit such a selection mechanism in the PACKAGECONFIG
> > system, but I'm not sure it would really fit.
>
> The above (if I'm reading it correctly) sounds quite similar to something I
> had already started a while back. So I'll go ahead and publish this
> work-in-progress. Maybe if I'm lucky it might spark some conversation with
> other BSP maintainers.
>
> https://github.com/twoerner/meta-rockchip__twoerner/tree/rockchip-kernel-config-WIP
>
> Here is the text I've added to the README, which I think helps clarify some of
> my points:
>
>         Kernel configuration:
>         --------------------
>         When it comes to configuring the kernel, allow the user to choose 
> between:
>                 1. using the in-kernel defconfig
>                 2. using an in-layer defconfig + config fragments
>
>         The in-kernel defconfig is a very generic configuration meant to 
> build a
>         kernel that could (theoretically) be run on a wide variety of devices 
> of
>         the same architecture. I.e. a kernel built for one aarch64 machine 
> (e.g.
>         the Qualcomm-based DragonBoard 410c) could be used without 
> modification on
>         a completely different aarch64 machine (e.g. an Amlogic-based 
> Odroid-C4). As
>         you can imagine, the in-kernel configuration generates a very large 
> kernel.
>         Currently the in-kernel defconfig produces a kernel that is roughly 
> 12MB.
>
>         The in-layer defconfig + config fragments is meant to trim down the 
> kernel
>         configuration to remove all the hardware settings that aren't 
> relevant to the
>         specific MACHINE being built. I.e. a kernel built for the rock-pi-4b 
> wouldn't
>         include, for example, Qualcomm-specific drivers or code.
>
>         Currently, option #2 is only available for the following MACHINE(s):
>                 - rock-pi-4b
>
>         The user indicates their intent via the RK_KERNEL_CONFIG_TYPE 
> variable. If
>         the user does nothing, the default behaviour is to use the in-kernel
>         defconfig. If the user sets
>                 RK_KERNEL_CONFIG_TYPE = "inlayer"
>         then the in-layer defconfig + config fragments will be used.
>
> At this point I don't have everything that I'm wishing for. I had started to
> try to add everything that I've wanted, but it wasn't working, so I pulled
> back and only committed the parts that I was able to get working.
>
> Right now the user can toggle between the generic in-kernel defconfig, or a
> leaner defconfig that I've defined by playing with the RK_KERNEL_CONFIG_TYPE
> variable (in local.conf, for example). Right now I've only done that for the
> rock-pi-4b, but ideally I'd add others as time goes on.
>
> I think it'll always be good to allow users to choose between the in-kernel
> defconfig and something custom. We'll always want to be able to say "does it
> work with the in-kernel defconfig?".
>
> But better yet, instead of one big monolithic defconfig per board, ideally the
> meta-rockchip BSP layer would contain a whole bunch of little kernel config
> fragments for turning on just one thing. For example, there would be a kernel
> config fragment for turning on basic Rockchip support, another one to enable
> the RK808 pmic, and another one for the RK805 pmic. Others config fragments
> would enable various ethernet options, wifi, bluetooth, etc. One would enable
> the ES8388 audio codec (found on the rock2-square) and another would enable
> just the ES8316 audio codec (the one found on the rock-pi-4).
>
> Then, various parts on the configuration would enable the relevant kernel
> config fragments. Simply selecting, for example, rock-pi-e, would include
> the include/rk3328.inc, which would pull in basic rockchip/rk3328 support
> and some other default things. The rock-pi-e.conf would pull in the correct
> networking/bt options, and select the RK805 pmic. Eventually all the little
> fragments would be pulled in that would be necessary to generate the whole
> defconfig for this board.
>
> That's the dream, anyway :-/

That sound fine :)

I think we can even do something like this with just standard-looking
overrides and no
specific anonymous python.  I'm thinking of something like (including
non-arm things, after all
there's no reason to reserve such a mechanism to the arm/rk world):

# how the kernel defconfigs are named
KBUILD_DEFCONFIG_inkernel = "defconfig"
KBUILD_DEFCONFIG_inkernel_x86-64 = "x86_64_defconfig"
# how the layer defconfigs are named
KBUILD_DEFCONFIG_inlayer = "defconfig"

RK_KERNEL_CONFIG_TYPE = "inlayer"

KBUILD_DEFCONFIG = "${KBUILD_DEFCONFIG_${RK_KERNEL_CONFIG_TYPE}}"

RK_KERNEL_CONFIG_URIS_inkernel = ""
RK_KERNEL_CONFIG_URIS_inlayer = "file://defconfig file://soc.cfg
file://board.cfg"

SRC_URI_append = "${RK_KERNEL_CONFIG_URIS_${RK_KERNEL_CONFIG_TYPE}}"


Then we could have in the recipe files:
- a single defconfig for all rockchip
- per-soc, eg. rk3399/soc.cfg
- per-machine, eg. nanopi-m4/board.cfg

How does that sound ?

>
> Technically, this information could be gleaned from the device tree for this
> board… :-S
>
> Then we'll need to take a look at all the DT overlays to see how to
> incorporate them as well. Most of these boards have the "Raspberry Pi" 40-pin
> interface, so users will expect to be able to reconfigure the pins for the
> various alternate devices.
--
Yann Dirson <[email protected]>
Blade / Shadow -- http://shadow.tech
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#52901): https://lists.yoctoproject.org/g/yocto/message/52901
Mute This Topic: https://lists.yoctoproject.org/mt/81548786/21656
Group Owner: [email protected]
Unsubscribe: https://lists.yoctoproject.org/g/yocto/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to