[OE-core] Question about apply eglibc configurability to create minimal image

Koen Kooi koen at dominion.thruhere.net
Fri Jun 17 16:10:41 UTC 2011


Op 17 jun 2011, om 17:46 heeft Mark Hatle het volgende geschreven:

> On 6/17/11 5:05 AM, Kang Kai wrote:
>> On 2011年06月09日 23:20, Mark Hatle wrote:
>>> On 6/9/11 5:57 AM, Kang Kai wrote:
>>>> Hi Mark,
>>>> 
>>>> I am focus on eglibc itself compilation with disabling all the 
>>>> configurable options, right now eglibc can be compiled with disable all 
>>>> the configurable options.
>>>> 
>>>> But when I build core-image-minimal in a clear new directory, some 
>>>> packages build failed and they need eglibc supports, such as
>>> core-image-minimal is simply to large of an image to see some of the advantages
>>> of the eglibc configuration.  Realistically the advantages come on single
>>> application or small (busybox + single application) systems.
>>> 
>>>> gcc-runtime    depends on     libc-libm
>>> The above looks like a bug to me and should be investigated.. (a bug in gcc that
>>> is..)
>>> 
>>>> ncurse            depends on    libc-posix-wchar-io libc-posix-clang-wchar
>>> ncurses can be configured WITHOUT wide character support, the needs to be done
>>> with any of the wchar options disabled in eglibc.
>>> 
>>>> openssl           depends on    libc-inet libc-nsswitch
>>> I'm not sure why openssl needs either inet or nsswitch.  inet perhaps if it
>>> tries to make certain socket calls, but libc-nsswitch should never be required
>>> outside of eglibc.  This is likely a configuration issue in openssl -- or a bug
>>> in eglibc.
>>> 
>>>> gettext            depends on    libc-spawn libc-locale-code 
>>>> libc-getlogin libc-utmp
>>>> ...
>>> Once we introduce gettext (beyond simply it's m4 macros) we're no longer in
>>> "small" system territory.  gettext and many others really want some of the
>>> larger system capabilities as they are designed for multilingual systems.
>>> 
>>>> After enable those options, the image size only decrease from 9.6M  to 
>>>> 9.4M(qemux86). And the dependencies on eglibc is hard to break, 
>>>> something like  libcrypt getlogin(function) can't be breaken.
>>>> Could you give me some directions what should I do with eglibc 
>>>> configurability?
>>> My suggest is to start with a new custom configuration.  (ignore the gcc-runtime
>>> for right now and enable libm.)  The goal of this configuration is a small,
>>> local system -- without network connectivity.
>>> 
>>> Walk through the core-image-minimal, and you'll see:
>>> IMAGE_INSTALL = "task-core-boot ${ROOTFS_PKGMANAGE_BOOTSTRAP}"
>>> 
>>> Looking at task-core-boot:
>>> 
>>> RDEPENDS_task-core-boot = "\
>>>  base-files \
>>>  base-passwd \
>>>  busybox \
>>>  initscripts \
>>>  ${@base_contains("MACHINE_FEATURES", "keyboard", "keymaps", "", d)} \
>>>  modutils-initscripts \
>>>  netbase \
>>>  sysvinit \
>>>  tinylogin \
>>>  udev \
>>>  ${VIRTUAL-RUNTIME_update-alternatives} \
>>>  ${MACHINE_ESSENTIAL_EXTRA_RDEPENDS}"
>>> 
>>> RRECOMMENDS_task-core-boot = "\
>>>  ${MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS}"
>>> 
>>> From the above, I'm pretty sure that "netbase" will require a lot of networking
>>> components, specifically adding things like libc-inet.  So avoid netbase.
>>> 
>>> It's possible that keyboard/keymaps may cause additional stuff to come in due to
>>> locale requirements.. so I'd dump those as well..
>>> 
>>> sysvinit may also introduce some additional items -- so if it causes problems,
>>> remove it and switch to the init located within busybox.
>>> 
>>> update-alternatives is what included gettext -- so this might need some
>>> enhancement to avoid gettext as a requirement.  So I'd suggest skipping it.
>>> (Note without it, it's likely busybox, tinylogin may not get setup properly...)
>>> 
>>> udev is quite complex and drags in a number of components -- so drop that..
>>> 
>>> Leaving:
>>> 
>>>  base-files \
>>>  base-passwd \
>>>  busybox \
>>>  initscripts \
>>>  modutils-initscripts \
>>>  sysvinit \
>>>  tinylogin
>> 
>> Hi Mark,
>> 
>> According this list, expand with their run time depency(show in the attachment
>> minimal-image-runtime-dependies.png) , and the list is:
>> 
>>  base-files \
>>  base-passwd \
>>  busybox \
>>  busybox-syslog \
>>  busybox-udhcpc \
>>  initscripts \
>>  makedevs \
>>  modutils-initscripts \
>>  sysvinit \
>>  sysvinit-pidof \
>>  sysvinit-inittab \
>>  tinylogin
>> 
>> 
>> When only enable eglibc libm, busybox, sysvinit and tinylogin can't be compiled.
>> 
>> busybox depends on
>> 
>>  * libc-crypt
>>  * libc-getlogin
>>  * libc-inet
>>  * libc-posix-regexp
>> 
>> I wonder that maybe libc-crypt can NOT be disabled?  Other 3 options can be
>> disabled by closing some busybox feature and builtin commands.
> 
> I would guess that there are options within busybox that are enabled that make
> use of each of these.  Do you get a failure in compilation, configuration, or?
> You will likely have to shrink busybox down to a shell and a few simple
> commands, instead of the normal config.

THat should be straightforward now that we have this one: http://cgit.openembedded.org/cgit.cgi/openembedded-core/commit/?id=383d94222e8cfc85d0885f60c88c064091866296

and please don't cross-post between poky and oe-core lists...



More information about the Openembedded-core mailing list