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
I wonder that maybe libc-crypt can NOT be disabled?  Other 3 options can be disabled by closing some busybox feature and builtin commands.

sysvinit depends on
I don't how to resolve them, so as you said, remove it and use busybox init instead.

tinylogin depends on  I am trapped here, and could you give me some more help here, please?

The picture named eglibc-options-deps-for-minimal-image.png in attachment is the packages depends on every eglibc option that required by other packages.

There are some other dependencies cause problems.
linux-yocto requires elfutils python and perl.

elfutils requires gettext and gettext depends on:
python requires ncurses and openssl.

perl depends on:

How to remove these dependencies?  One way is to remove the "elfutils python perl" from linux-yocto depencies, and the other is to disable related features of these packages, and I wonder this is too hard to finish.

Thanks a lot.

Regards,
Kai





First see if you can compile the above with a minimal eglibc configuration.  If
not I can help you work through those issues..  If you can, you SHOULD see a
fairly dramatic decrease in size.

--Mark

Thanks a lot!

I made a mistake that try eglibc configurability in a directory which 
has build core-image-minimal, so the packages which depend on eglibc 
didn't rebuild, and I didn't find the dependency before. I am sorry!

Regards,
Kai