====== Openwrt packaging ====== ====== Useful commands ====== make package/motion/{clean,install} V=s ====== Openwrt Build system ====== ===== Build_root ===== * buildroot installation: * http://wiki.openwrt.org/doc/howto/buildroot.exigence * http://wiki.openwrt.org/about/toolchain * general: http://wiki.openwrt.org/doc/howto/start * http://moozing.wordpress.com/2010/12/27/building-openwrt/ ==== Download build_root ==== svn co svn://svn.openwrt.org/openwrt/trunk/ Downloading Sources You can either check out the OpenWrt source code via git. (see https://dev.openwrt.org/wiki/GetSource) GIT The recommended way of checking out the OpenWrt source code is cloning the Git repository using one of the following commands: trunk (main development tree) The development branch (trunk) contains everything from documentation to experimental patches. Main repository git clone git://git.openwrt.org/openwrt.git Packages feed git clone git://git.openwrt.org/packages.git 12.09 branch (Attitude Adjustment) Main repository git clone git://git.openwrt.org/12.09/openwrt.git Packages feed git clone git://git.openwrt.org/12.09/packages.git Check out certain revision git commits are tagged with SVN ids. git log --grep= git-svn-id: svn://svn.openwrt.org/openwrt/trunk@42139 3c298f89-4303-0410-b956-a3cf2f4a3e73 ==== Download and install feed. See below for using custom feed. ==== cd ~/openwrt/openwrt ./scripts/feeds update -a ./scripts/feeds install -a Make OpenWrt Buildroot check for missing packages on your build-system using ONE of the following commands: make defconfig make prereq make menuconfig Build make -j 3 Show Verbose: make -j 3 V=s BUILD_LOG=1 make -j 3 BUILD_LOG=1 BUILD_LOG=1 Write output to logfile perserving error output order. Each make-worker dumping outputs to stdout causes big mess. Run make without -j1 and with V=s to see single compilation output. ==== Building in the background ==== If you intend to use your system while building, you can have the build process use only idle I/O and CPU capacity like this (dualcore CPU): ionice -c 3 nice -n19 make -j 2 ==== Building single Packages ==== When developing or packaging software for OpenWrt, it is convenient to be able to build only the package in question (e.g. with package cups): make package/cups/compile V=s For the package mc (midnight commander), which is contained the feed packages it looks like this: make package/feeds/packages/mc/compile V=s Note that the path start in package directory and package/feeds may not have exactly the same structure as feeds. For example package in ~/openwrt/trunk/feeds/packages/net/snort will be compiled using make ~/openwrt/trunk/package/feeds/packages/snort/compile V=s. Spotting build errors If for some reason the build fails, the easiest way to spot the error is to do: make V=s 2>&1 | tee build.log | grep -i error The above saves a full verbose copy of the build output (with stdout piped to stderr) in /openwrt/trunk/build.log and only shows errors on the screen. package/index is used after patch. What does this means? make package/libnfc/{clean,compile} package/index V=s BUILD_LOG=1 "clean" clears the package in build_dir. "compile" recreate the package (from feeds/packages/) in build_dir and compile. So make changes to code in feeds then clean,compile. More: * http://wiki.openwrt.org/doc/howto/obtain.firmware.sdk * http://www.thepowerbase.com/2012/01/openwrt-build-guide-start-to-finish/ ==== Clean ==== make clean Deletes contents of the directories /bin and /build_dir. make dirclean Deletes contents of the directories /bin and /build_dir and additionally /staging_dir and /toolchain (=the cross-compile tools) and /logs. 'Dirclean' is your basic "Full clean" operation. make distclean Nukes everything you have compiled or configured and also deletes all downloaded feeds contents and package sources. CAUTION: In addition to all else, this will erase your build configuration (/.config), your toolchain and all other sources. Use with care! Clean linux objects. make target/linux/clean Clean package base-files objects. make package/base-files/clean Clean luci. make package/feeds/luci/luci/clean ===== Build image ===== kernel_menuconfig * Device driver * <*> Serial ATA and Parallel ATA drivers ---> * [*] Verbose ATA error reporting * [*] ATA SFF support (for legacy IDE and PATA) * Intel SCH PATA support menuconfig * Global build settings * [*] Compile with full language support * --- Advanced configuration options (for developers) * [*] Show broken platforms / packages * --- Toolchain Options * [*] Build with debug information * [*] Image configuration ---> * [*] Preinit configuration options ---> * Base system * block-mount * bridge * libpthread * libstdcpp * libthread-db * udev * wireless-tools * Administration * sudo * syslog-ng * Development * buildutil * diffutil * gdb * gdb-server * trace-cmd * trace-cmd-extras * Kernel module * block device * kmod ata core * kmod ata piix * kmod ide core * kmod ide generic * kmod nbd * kmod scsi cdrom * kmod scsi core * filesystem * fs-autofs4 * fs-ext4 * fs-nfs * fs-vfat * Input modules * kmod-hid * kmod-input-joydev * input-matrixmap * input-polldev * Network support * kmod-bridge * kmod-tun * Usb support * usb-core * usb-hid * usb-serial * pl2303 * usb-storage * usb-storage-extras * usb2-pic * Video support * video-core * video-uvc * Wireless device * kmod-ath10k * kmod-lib80211 * File system * libext2fs * Libraries * database * libsqlite3 * glib2 <--------- disable this Gnome graphical stuffs. * jansson * libarputil * libcap * libcunit * libcurl * libdaemon * libdbus-glib * * libblkid * libcharset * libconfig * libevent2-all * libiconv-full * libintl-full * libcap * librpc * libusb-compat * uclibcxx * Multimedia * ffmpeg * motion * * Network * IP Addr nad nameing * avahi-autopid * avahi-utils * * Routing and redirection * ip * iputils-all * nettools-all * netcat * socat * iperf * wpasupplicatn * Utilities * Editor * vim-full * joe * nano * Filesystem * resize2fs * IMA-Carpc <---- update/install feed if not available!!! * disc * blkid * fdisk * dmesg * hwclock * iconv * ldconfig * ldd * usbreset * usbutils * ===== Troubleshooting ===== ==== When there is no clue!!! ==== make dirclean make defconfig make -j3 V=s make V=99 tools/install make toolchain/install target/compile package/compile ==== I can't find my in menuconfig ==== Have you run this command? See this. ./scripts/feeds install Maybe you are not looking for it in the right submenu. See the Makefile of the package to find out. cat package/feeds/packages//Makefile You are looking for this: define Package//Default SUBMENU:=Firewall SECTION:=net CATEGORY:=Network Menuconfig appears to cache package lists and (especially) profiles. Try deleting the /tmp directory and then running make menuconfig again. cd ~/openwrt/trunk rm -rf tmp make menuconfig Also try refreshing your package indexes: ./scripts/feeds update -i The -i is important if you're not using the latest revisions of any packages, as this flag prevents updates from the feed sources. ==== Linaro not found on any mirror ==== I run openwrt trunk on a x86. When I select the development/gcc package - build stops with an error. maybe there is a copy and paste error in Makefile: ./package/feeds/packages/gcc/Makefile PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 results in gcc-4.6-linaro.tar.bz2 which can not be found on any server PKG_MD5SUM:=354853e0b2da90c527e35aabb8d6f1e6 is a valid MD5 of the package make-3.81.tar.bz2 Please let me know if any further information is required. Fix this file ​feeds/packages/devel/gcc/Makefile with latest MD5 from current repo: https://github.com/openwrt/packages/blob/master/devel/gcc/Makefile ====== Packaging ====== Sources: * http://wiki.openwrt.org/doc/devel/packages * bad http://manoftoday.wordpress.com/2007/10/11/writing-and-compiling-a-simple-program-for-openwrt/ ===== 2014-08 ===== Available packages: https://github.com/openwrt http://git.openwrt.org/ src-git packages https://github.com/openwrt/packages.git src-git openwrt-abandoned git://github.com/openwrt/packages-abandoned.git src-git luci http://git.openwrt.org/project/luci.git src-git routing https://github.com/openwrt-routing/packages.git src-git telephony http://git.openwrt.org/feed/telephony.git src-git management https://github.com/openwrt-management/packages.git src-svn imacarpc https://cvs.dai-labor.de/svn/dang/ima_pj/openwrt-feed/trunk/packages Note: at this point, the packages are reorganized. Broken/ old packages are in abandoned. Hi Valent, we decided to reorganize the packages feed in June, since lots of the packages in there were unmaintained and we had lot's of patches we couldn't review. The new feed resides on github which makes contributing more straigt-forward. See https://github.com/openwrt/packages. Now the problem with packages like python or php in "oldpackages" is that they build a version which have known security issues, so providing binaries for them without notice is a bit dubious. Note: we didn't delete any package-definitions we just stopped building binaries. Once someone takes over maintainership for them and keeps them updated we will gladly welcome them in our new packages feed and start building binariers for them again. The current status of "oldpackages" is this: If you are using trunk and want to use the possibly outdated packages you have to enable the oldpackages feed and build them manually. If you are using barrier breaker in the final version we will still build these outdated packages in binary form but won't enable the package repository in opkg.conf by default, so you have to manually opt-in to use these packages. Some packages there might be broken due to changes in the SDK but this will hopefully get addressed before the final release. The next release after barrier breaker will not include any unmaintained packages at all not even as opt-in. So if you want to see some of the old packages reappearing in trunk and future releases please adopt them and become a maintainer or convince someone else to do it. See https://github.com/openwrt/packages/blob/master/CONTRIBUTING.md ===== BuildPackage variables ===== Example: /home/td/openwrt/trunk/feeds/packages/multimedia/gstreamer/Makefile 101 define Build/InstallDev 102 $(INSTALL_DIR) $(1)/usr/include/gstreamer-$(GST_VERSION) 103 ( cd $(PKG_INSTALL_DIR); $(CP) \ 104 ./usr/include/gstreamer-$(GST_VERSION)/* \ 105 $(1)/usr/include/gstreamer-$(GST_VERSION)/ \ 106 ) 107 $(INSTALL_DIR) $(1)/usr/lib 108 ( cd $(PKG_INSTALL_DIR); $(CP) \ 109 ./usr/lib/libgst*-$(GST_VERSION).{a,la,so*} \ 110 $(1)/usr/lib/ \ 111 ) 112 $(INSTALL_DIR) $(1)/usr/lib/gstreamer-$(GST_VERSION) 113 ( cd $(PKG_INSTALL_DIR); $(CP) \ 114 ./usr/lib/gstreamer-$(GST_VERSION)/libgst*.{la,so} \ 115 $(1)/usr/lib/gstreamer-$(GST_VERSION)/ \ 116 ) 117 $(INSTALL_DIR) $(1)/usr/lib/pkgconfig 118 ( cd $(PKG_INSTALL_DIR); $(CP) \ 119 ./usr/lib/pkgconfig/gstreamer*-$(GST_VERSION).pc \ 120 $(1)/usr/lib/pkgconfig/ \ 121 ) 122 $(INSTALL_DIR) $(2)/share/aclocal 123 ( cd $(PKG_INSTALL_DIR); $(CP) \ 124 ./usr/share/aclocal/* \ 125 $(2)/share/aclocal/ \ 126 ) 127 endef 128 129 define Package/gstreamer/install 130 /bin/true 131 endef 132 133 define Package/gstreamer-utils/install 134 $(INSTALL_DIR) $(1)/usr/bin 135 ( cd $(PKG_INSTALL_DIR); $(CP) \ 136 ./usr/bin/gst-feedback* \ 137 ./usr/bin/gst-launch* \ 138 ./usr/bin/gst-inspect* \ 139 ./usr/bin/gst-typefind* \ 140 ./usr/bin/gst-xmlinspect* \ 141 ./usr/bin/gst-xmllaunch* \ 142 $(1)/usr/bin/ \ 143 ) 144 endef 145 146 define Package/libgstreamer/install 147 $(INSTALL_DIR) $(1)/usr/lib 148 ( cd $(PKG_INSTALL_DIR); $(CP) \ 149 ./usr/lib/libgstbase-$(GST_VERSION).so.* \ 150 ./usr/lib/libgstreamer-$(GST_VERSION).so.* \ 151 $(1)/usr/lib/ \ 152 ) 153 endef These lines... 133 define Package/gstreamer-utils/install 134 $(INSTALL_DIR) $(1)/usr/bin 135 ( cd $(PKG_INSTALL_DIR); $(CP) \ 136 ./usr/bin/gst-feedback* \ 137 ./usr/bin/gst-launch* \ 138 ./usr/bin/gst-inspect* \ 139 ./usr/bin/gst-typefind* \ 140 ./usr/bin/gst-xmlinspect* \ 141 ./usr/bin/gst-xmllaunch* \ 142 $(1)/usr/bin/ \ 143 ) 144 endef ... have this effect: install -d -m0755 /home/td/openwrt/trunk/build_dir/target-i386_i486_uClibc-0.9.33.2/gstreamer-0.10.36/ipkg-x86/gstreamer-utils/usr/bin ( cd /home/td/openwrt/trunk/build_dir/target-i386_i486_uClibc-0.9.33.2/gstreamer-0.10.36/ipkg-install; cp -fpR ./u sr/bin/gst-feedback* ./usr/bin/gst-launch* ./usr/bin/gst-inspect* ./usr/bin/gst-typefind* ./usr/bin/gst-xmlinspect* ./usr/bin/gst-xmllaunch* /home/td/openwrt/trunk/build_dir/target-i386_i486_uClibc-0.9.33.2/gstreamer-0.10.36/ipk g-x86/gstreamer-utils/usr/bin/ ) As you can see, there's not much work to be done; everything is hidden in other makefiles and abstracted to the point where you only need to specify a few variables. PKG_NAME - The name of the package, as seen via menuconfig and ipkg PKG_VERSION - The upstream version number that we're downloading PKG_RELEASE - The version of this package Makefile PKG_BUILD_DIR - Where to compile the package PKG_SOURCE - The filename of the original sources PKG_SOURCE_URL - Where to download the sources from (directory) PKG_MD5SUM - A checksum to validate the download PKG_CAT - How to decompress the sources (zcat, bzcat, unzip) PKG_BUILD_DEPENDS - Packages that need to be built before this package, but are not required at runtime. Uses the same syntax as DEPENDS below. PKG_INSTALL - Setting it to "1" will call the package's original "make install" with prefix set to PKG_INSTALL_DIR PKG_INSTALL_DIR - Where "make install" copies the compiled files e.g: /home/td/openwrt/trunk/build_dir/target-i386_i486_uClibc-0.9.33.2/gstreamer-0.10.36/ipkg-install $(1) - $(INSTALL_DIR) e.g: /home/td/openwrt/trunk/build_dir/target-i386_i486_uClibc-0.9.33.2/gstreamer-0.10.36/ipk g-x86/gstreamer-utils/ PKG_FIXUP - ??? ====== libint/iconv ====== To enable full version: * The OpenWrt menuconfig gained a new boolean symbol called "CONFIG_BUILD_NLS" which is disabled by default [2]. Turning it on will enable the building of the full gettext (libintl) and libiconv packages. * The setting can be found in the "Global Build Settings" menu, called "Compile with full language support". * -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi, following the discussion about stubbed libintl and libiconv implementations in OpenWrt [1], I decided to implement a switching mechanism for those libraries in the OpenWrt buildroot. This is a short explanation for packagers and image builders on howto prepare packages to work with the switching. The OpenWrt menuconfig gained a new boolean symbol called "CONFIG_BUILD_NLS" which is disabled by default [2]. Turning it on will enable the building of the full gettext (libintl) and libiconv packages. The setting can be found in the "Global Build Settings" menu, called "Compile with full language support". Packages using either iconv or intl have been changed [3] to include the new convenience file "include/nls.mk" which exports variables to use within Makefiles to pull in the right iconv or intl implementation. The exported variables are: ICONV_FULL - set to 1 if the full iconv implementation is used, else unset ICONV_PREFIX - path to the location of the include/ and lib/ dirs of the currently used iconv implementation ICONV_DEPENDS - expands to a dependency specification that results either in +libiconv-full or nothing, depending on the CONFIG_BUILD_NLS symbol ICONV_CFLAGS - contains the appropriate CFLAGS to make programs find the iconv headers ICONV_CPPFLAGS - alias to ICONV_CFLAGS ICONV_LDFLAGS - contains the appropriate LDFLAGS to make programs link to the iconv implementation INTL_FULL - set to 1 if the full libintl implementation is used, else unset INTL_PREFIX - path to the location of the include/ and lib/ dirs of the currently used libintl implementation INTL_DEPENDS - expands to a dependency specification that results either in +libintl-full or nothing, depending on the CONFIG_BUILD_NLS symbol INTL_CFLAGS - contains the appropriate CFLAGS to make programs find the libintl headers INTL_CPPFLAGS - alias to INTL_CFLAGS INTL_LDFLAGS - contains the appropriate LDFLAGS to make programs link to the libintl implementation Additionally the include automatically extends the TARGET_CFLAGS, TARGET_CPPFLAGS and TARGET_LDFLAGS variables so that most programs should pick up the libs automatically in their configure/make process. To adapt existing package Makefiles to the new mechanism, the following changes must be made: - Add "include $(INCLUDE_DIR)/nls.mk" below the existing "package.mk" include - Remove existing extensions to TARGET_CFLAGS/CPPFLAGS/LDFLAGS like "TARGET_CFLAGS+=-I$(STAGING_DIR)/usr/lib/libintl/include/" (if any) - Replace existing extensions to other variables with $(ICONV_PREFIX), $(INTL_PREFIX) where applicable (e.g. "EXTRA_CPPFLAGS+=-I$(STAGING_DIR)/usr/lib/libiconv/include" to "EXTRA_CPPFLAGS+=$(ICONV_CPPFLAGS)" or "EXTRA_CPPFLAGS+=-I$(ICONV_PREFIX)/include") - Replace dependency specifications like +libiconv, +libiconv-full, +libintl or +libintl-full with $(ICONV_DEPENDS) or $(INTL_DEPENDS) - Some packages have configure switches like "--with-libiconv=gnu", those should be wrapped similar to this: "$(if $(ICONV_FULL),--with-libiconv=gnu)" - If a program is known to fail with the stub implementation, a dependency like "DEPENDS:=@BUILD_NLS" can be specified to hide and disable the package from menuconfig if CONFIG_BUILD_NLS is unset Neither the stub nor the full packages install their (shared) objects and headers into a "standard" location ($(STAGING_DIR)/usr/...) anymore so programs that must use them have to use the nls.mk facility. Programs with optional iconv/intl support will just skip over them as they're not detectable without extra flags anymore. As the current Backfire branch and Trunk share the same packages feed, the BUILD_NLS support has been merged into the latest branch as well. Regards, Jow 1) http://lists.en.qi-hardware.com/pipermail/discussion/2011-January/006770.html 2) https://dev.openwrt.org/changeset/25302 3) https://dev.openwrt.org/changeset/25319 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAk1Jz30ACgkQdputYINPTPNeVwCdGESiq8L4sVHRzVlY0EVJNfSW 4gsAni4B2GROqtBRwYz5yKx10EPy3yQ3 =gSoQ -----END PGP SIGNATURE----- ====== Fix external toolchain build: linking missing libs ====== Problem: libiconv not found when linking. * https://forum.openwrt.org/viewtopic.php?id=23176 * http://git.buildroot.net/buildroot/commit/?id=60d39dbb3f23fe4c18f1e384bfae9a3a861fe3da This patch is a new version of a patch already sent several times on the mailing-list, committed and reverted a few times by Daniel Laird, due to several imperfections. This version is a new try at finding a solution that works for everybody. Hopefully it'll work :-) The original problem is that external toolchain builds failed because packages couldn't find their dependent libraries at configure time and could not be linked with them. To fix these two problems, two things are added: * The TARGET_LDFLAGS variable was exposed as LDFLAGS at ./configure time thanks to TARGET_CONFIGURE_OPTS. The TARGET_LDFLAGS variable contains -L options with the path in the STAGING_DIR for the libraries. It allows ./configure scripts to properly compile the small test programs testing whether a dependency is properly installed. * The TARGET_CFLAGS contains a new -Wl,--rpath-link option for both $(STAGING_DIR)/lib and $(STAGING_DIR)/usr/lib. It allows library depending on other libraries to link properly. The TARGET_CFLAGS is exposed as CFLAGS in TARGET_CONFIGURE_OPTS. This new version fixes a problem encountered by hartleys when building the kernel. The problem was that the -Wl,--rpath-link options were added to LDFLAGS, while there are options for the C compiler, not the ld linker. Moving them to CFLAGS seems to fix the issue. Example: TARGET_LDFLAGS+=-Wl,-rpath-link=$(STAGING_DIR)/usr/lib include $(TOPDIR)/rules.mk #include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=strongswan PKG_VERSION:=4.3.6 PKG_RELEASE:=6 PATCH_DIR=./patches PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 PKG_SOURCE_URL:=http://download.strongswan.org/ PKG_MD5SUM:=e071f46b6c463ce76900758734e6143e #PKG_SHA1=xxxx 17 18 #PKG_VERSION:=1.7.1 19 #PKG_RELEASE:=1 20 #PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 21 #PKG_SOURCE_URL=http://dl.bintray.com/nfc-tools/sources/ 22 #PKG_SHA1:=d77c1408f5e38f24d69778b2ff82f68b2d7bc111 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) PKG_INSTALL_DIR:=$(PKG_BUILD_DIR)/ipkg-install include $(INCLUDE_DIR)/package.mk ## THIS IS IT! TARGET_LDFLAGS+=-Wl,-rpath-link=$(STAGING_DIR)/usr/lib define Package/strongswan SECTION:=net CATEGORY:=Network ====== Problems with linking libiconv (full) ====== In general add dependencies or link directive: This works most: 17 TARGET_LDFLAGS+=\ 18 -Wl,-rpath-link=$(STAGING_DIR)/usr/lib \ 19 $(if $(ICONV_FULL),-liconv) <------- here 20 21 define Package/libsoup 22 SECTION:=libs 23 CATEGORY:=Libraries 24 TITLE:=libsoup 25 URL:=http://live.gnome.org/LibSoup 26 DEPENDS:=+glib2 +libxml2 +libgnutls $(ICONV_DEPENDS) <------- here 27 endef 95 EXTRA_LDFLAGS+= \ 96 -Wl,-rpath-link=$(STAGING_DIR)/usr/lib \ 97 -L$(ICONV_PREFIX)/lib -L$(INTL_PREFIX)/lib 98 99 TARGET_LDFLAGS += \ -Wl,-rpath-link=$(STAGING_DIR)/usr/lib \ $(if $(ICONV_FULL),-liconv) ===== Compile glib2 with iconv ===== ** Don't need glib2 ** it's Gnome graphics stuffs. **Many other package depend on glib2 with libiconv** so fix glib2. vim feeds/packages/libs/glib2/Makefile 28 include $(INCLUDE_DIR)/nls.mk 29 30 TARGET_LDFLAGS+=\ <---------------------------- ADD these 3 lines 31 -Wl,-rpath-link=$(STAGING_DIR)/usr/lib \ 32 $(if $(ICONV_FULL),-liconv) 33 TARGET_LDFLAGS+=\ -Wl,-rpath-link=$(STAGING_DIR)/usr/lib \ $(if $(ICONV_FULL),-liconv) 33 34 define Package/glib2 35 SECTION:=libs 36 CATEGORY:=Libraries 37 DEPENDS:=$(ICONV_DEPENDS) $(INTL_DEPENDS) +zlib +libpthread +libffi 38 TITLE:=glib 2.0 39 URL:=http://www.gtk.org/ 40 endef ===== Error & meaning ===== ==== Kernel config problem ==== Problem desc: scripts/kconfig/conf --silentoldconfig Kconfig * * Restart config... * * * Near Field Communication (NFC) devices * PN544 NFC driver (PN544_NFC) [N/m/y/?] (NEW) aborted! Console input/output is redirected. Run 'make oldconfig' to update configuration. make[7]: *** [silentoldconfig] Error 1 make[6]: *** [silentoldconfig] Error 2 make[6]: Nothing to be done for `all'. make[6]: Nothing to be done for `relocs'. Resolution: Add CONFIG_X86_SPEEDSTEP_CENTRINO to target/linux/x86/config-3.3 ==== Package gdbserver is missing dependencies for the following libraries: libthread_db.so.1 ==== Attitude Adjustment --> gdbserver needs libthread_db. Select it or it's not there? Patch: --- trunk/package/gdb/Makefile.orig 2012-08-25 12:49:29.583032750 +0200 +++ trunk/package/gdb/Makefile 2012-08-25 12:50:40.354038948 +0200 @@ -75,8 +75,10 @@ define Package/gdb/install endef define Package/gdbserver/install - $(INSTALL_DIR) $(1)/usr/bin + $(INSTALL_DIR) $(1)/usr/{bin,lib} $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/gdbserver $(1)/usr/bin/ + $(CP) $(TOOLCHAIN_DIR)/lib/libthread_db* $(1)/usr/lib endef $(eval $(call BuildPackage,gdb)) +$(eval $(call BuildPackage,gdbserver)) ==== Etcs ==== === Eglibc vs glibc vs uclibc === * https://forum.openwrt.org/viewtopic.php?id=40129 * eglibc vs glibc https://forum.openwrt.org/viewtopic.php?id=31174 eglibc vs glibc was an interesting comparison between glibc and eglibc, with some mention of uClibc. In terms of final image size, glibc was largest, eglibc was 300K smaller, and uClibc 800K smaller (than glibc). (Note that the full image size was 10 MB, but this is very dependent on the set of packages). In terms of speed, there was no noticeable difference between glibc and eglibc, but uClibc was "substantially *slower*". (it's not clear however exactly how the speed measurements were done) Individual libc*.so sizes followed the trend, with glibc clocking in at 1474 KB, eglibc at 1375 KB and uClibc at 331 KB.