[U-Boot] [RFC] Two sets of experimental Kconfig patches

Tom Rini trini at ti.com
Fri May 30 19:24:08 CEST 2014


On Tue, May 27, 2014 at 04:32:50PM +0900, Masahiro Yamada wrote:

> Hi.
> 
> I've posted two sets of Kconfig RFC patches: "RFCv2a" and "RFCv2b"

These are all certainly some thought experiments worth pursuing, so
thanks for taking the time.

> 
> The difference from v1  is that 
> Full U-boot image, SPL and TPL share a single defconfig
> and "make config" is done in one-shot.
> 
> This approach dates back to Simon's following comments:
> 
> On Thu, 20 Mar 2014 19:15:30 -0700
> Simon Glass <sjg at chromium.org> wrote:
> 
> > > But, our situation is a little more complicated.
> > > We need to generate 3 images at most: main image, SPL and TPL.
> > > And each of them can have a different set of CONFIGs.
> > >
> > > For example, we can describe a board header file like this:
> > >
> > >   #if defined(CONFIG_TPL_BUILD)
> > >   # define CONFIG_FOO   100
> > >   #elif defined(CONFIG_SPL_BUILD)
> > >   # define CONFIG_FOO   50
> > >   #else
> > >   # define CONFIG_FOO   10
> > >   # define CONFIG_BAR
> > >   #endif
> > 
> > I wonder if we should drop this, and require that all have the same
> > options? That would involve requiring that board config files are not
> > permitted to use #ifdef CONFIG_SPL or #ifdef CONFIG_TPL.
> > 
> > Does that seem like a bad restriction? The advantage is that we only
> > need one defconfig for each board. It seems to me that things are
> > going to get really painful if we have three different configs.
> > 
> > Of course, this doesn't preclude #ifdefs in the Makefiles or actual
> > source code, but we already have SPL-specific feature options.
> > 
> > I'm not 100% clear on the constraints here.
> 
> 
> In my opition, this approach might work, but will be painful.
> 
> Anyway I just wanted to see what would happen
> if multiple binary images had a single defconfig in common.
> 
> We will have to duplicate many configs with CONFIG_SPL_
> and CONFIG_TPL_ prefixes.
> 
> For example,
>  - CONFIG_SYS_TEXT_BASE  (text base for the full image)
>  - CONFIG_SPL_TEXT_BASE  (text base for SPL)
>  - CONFIG_TPL_TEXT_BASE  (text base for TPL)
> 
>  - CONFIG_OF_CONTROL         (enables OF control for the full image)
>  - CONFIG_SPL_OF_CONTROL  (enables OF control for SPL)
>  - CONFIG_TPL_OF_CONTROL  (enables OF control for TPL)
> 
> Probably I will not adopt this approach, but your comments
> are welcome.

The biggest pro I see with this approach is that we don't add more
complication to the process.  I often run into "why does make board_name
not work?".  However, this will also prevent us from doing some of the
cleanup and restructuring that we need to do.  There's too much
duplicated code between SPL/TPL and "normal" U-Boot that we want to fix.
And there are times where a much smaller but more "normal" U-Boot-as-SPL
would be handy.  I think in the long run we need to live with this
"problem".  Perhaps we can come up with a little Makefile-magic along
the lines of a fullconfig_fooboard rule that would:
mkdir fooboard
if exists fooboard_spl_config, make O=fooboard/spl fooboard_spl_config
if exists fooboard_tpl_config, make O=fooboard/tpl fooboard_tpl_config
make O=fooboard/main fooboard_config

And maybe throw an 'all' in after the config target, maybe not.

> The difference between RFCv2a and RFCv2b is
> how ARCH should be passed to the build system.
> 
> In RFCv2a, ARCH is determined by Kconfig.
> We don't have to give it from the command line.
> All defconfig files are stored in configs/ directory.
> 
> 
> In RFCv2b, ARCH should be given from the command line
> as in Linux Kernel:
>    make ARCH=<arch>   <board_name>_defconfig
>    make ARCH=<arch>    CROSS_COMPILE=<gcc_prefix>
> Defconfig files are stored in arch/${ARCH}/configs/ directory.
> 
> 
> I just tried Linux's way implementation because Stephen mentioned so.
> 
> On Thu, 24 Apr 2014 14:36:33 -0600
> Stephen Warren <swarren at wwwdotorg.org> wrote:
> 
> > > But in U-Boot, ARCH is not given from the command line.
> > > Which means we cannot know ARCH before the board configuration.
> > > That is why "*_defconfig" files over all architectures should be
> > > gathered into one directory ./configs/.
> > > (The problem is configs/ directory contains about 1200 files!)
> > 
> > Perhaps we can change the command-line used to build U-Boot, rather than
> > shoe-horning U-Boot's Kconfig usage to fit that current limitation.
> 
> 
> But I am not sure if other users are comfortable with giving ARCH=<arch>
> for every configuration and build.
> Your comments are welcome.

So, I know there's a certain number of users that pass ARCH= along
assuming that it's required and just wouldn't notice this particular
change.  But as I said in that thread, I really think this is a case
where we can be a little smarter about things, so, well, we ought to
try.  It's just a menu choice and I imagine most people won't start with
a totally blank config, even so.

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20140530/344d507b/attachment.pgp>


More information about the U-Boot mailing list