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. sysvinit depends on * libc-inet * libc-sunrpc * libc-crypt I don't how to resolve them, so as you said, remove it and use busybox init instead. tinylogin depends on * libc-crypt * libc-utmp * libc-getlogin 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: * libc-locale-code * libc-spawn * libc-getlogin python requires ncurses and openssl. * ncurses could be update bb file to choose support wchar or not. * openssl depends on: o libc-inet o libc-nsswitch perl depends on: * libc-crypt * libc-fcvt * libc-inet * libc-utmp 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