summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGES15
-rw-r--r--configs/arm_toolchain_defconfig1
-rw-r--r--configs/at91rm9200df_defconfig1
-rw-r--r--configs/at91rm9200df_ext_bare_defconfig1
-rw-r--r--configs/at91rm9200df_ext_defconfig1
-rw-r--r--configs/at91sam9260dfc_defconfig1
-rw-r--r--configs/at91sam9260dfc_ext_bare_defconfig1
-rw-r--r--configs/at91sam9260dfc_ext_defconfig1
-rw-r--r--configs/at91sam9260pf_defconfig1
-rw-r--r--configs/at91sam9261ek_defconfig1
-rw-r--r--configs/at91sam9261ek_ext_bare_defconfig1
-rw-r--r--configs/at91sam9261ek_ext_defconfig1
-rw-r--r--configs/at91sam9263ek_defconfig1
-rw-r--r--configs/at91sam9263ek_ext_bare_defconfig1
-rw-r--r--configs/at91sam9263ek_ext_defconfig1
-rw-r--r--configs/at91sam9g20dfc_defconfig1
-rw-r--r--configs/at91sam9g20dfc_ext_bare_defconfig1
-rw-r--r--configs/at91sam9g20dfc_ext_defconfig1
-rw-r--r--configs/atngw100-base_defconfig1
-rw-r--r--configs/atngw100_defconfig1
-rw-r--r--configs/atstk1005_defconfig1
-rw-r--r--configs/atstk100x_defconfig1
-rw-r--r--configs/kb9202_defconfig1
-rw-r--r--configs/v100sc2_defconfig1
-rw-r--r--docs/buildroot.html10
-rw-r--r--fs/Config.in8
-rw-r--r--fs/common.mk7
-rw-r--r--fs/cramfs/cramfs.mk4
-rw-r--r--fs/ext2/ext2.mk15
-rwxr-xr-xfs/ext2/genext2fs.sh39
-rw-r--r--fs/initramfs/initramfs.mk8
-rw-r--r--fs/jffs2/jffs2.mk4
-rw-r--r--package/Config.in1
-rw-r--r--package/busybox/busybox-1.16.1-sed.patch47
-rw-r--r--package/busybox/initramfs.mk141
-rw-r--r--package/cramfs/cramfs.mk8
-rw-r--r--package/makedevs/Config.in5
-rw-r--r--package/makedevs/makedevs.c (renamed from target/makedevs/makedevs.c)0
-rw-r--r--package/makedevs/makedevs.mk35
-rw-r--r--package/mtd/Config.in4
-rw-r--r--package/portage/Config.in4
-rw-r--r--package/python/Config.in4
-rw-r--r--target/Makefile.in2
-rw-r--r--target/device/Atmel/Makefile.in1
-rw-r--r--target/device/Atmel/arch-arm/Config.in.linux.patches7
-rw-r--r--target/device/Atmel/atngw100-base/Makefile.in1
-rw-r--r--target/device/Atmel/atngw100/Makefile.in1
-rw-r--r--target/device/Atmel/atstk1005/Makefile.in1
-rw-r--r--target/device/Atmel/atstk100x/Makefile.in1
-rw-r--r--target/device/KwikByte/kb9202/Makefile.in1
-rw-r--r--target/device/valka/Makefile.in2
-rw-r--r--target/device/xtensa/Makefile.in8
-rw-r--r--target/device/xtensa/device_table.diff10
-rw-r--r--target/device/xtensa/device_table.txt189
-rw-r--r--target/generic/Makefile.in2
-rw-r--r--target/linux/Makefile.in2
-rw-r--r--target/linux/Makefile.in.advanced2
-rw-r--r--target/makedevs/makedevs.mk30
-rw-r--r--target/xtensa/defconfig1
-rw-r--r--toolchain/binutils/2.20.1/400-arm_link_speed.patch183
-rw-r--r--toolchain/binutils/2.20/400-arm_link_speed.patch183
-rw-r--r--toolchain/gdb/Config.in4
-rw-r--r--toolchain/uClibc/uClibc-0.9.31.config6
63 files changed, 774 insertions, 245 deletions
diff --git a/CHANGES b/CHANGES
index 8f1b90a7a..3956ca95c 100644
--- a/CHANGES
+++ b/CHANGES
@@ -16,12 +16,12 @@
e2fsprogs, fbv, freetype, iperf, iptables, iw, less,
libaio,libdrm, libgcrypt, libglib2, libpng, libxml2, matchbox,
mdadm, memstat, mesa3d, mtd-utils, nano, openssl, pciutils,
- php, pixman, pppd, pthread-stubs, qt, radvd, setserial,
- squashfs, usb_modeswith, wget, xdriver_xf86-video-intel,
- xkeyboard-config, xlib_libX11, xlib_libXfont,
- xlib_libXfontcache, xlib_libXxf86misc, xlib_libpciaccess,
- xproto_dri2proto, xproto_eviext, xproto_fontcacheproto,
- xproto_xf86miscproto
+ php, pixman, portage, pppd, pthread-stubs, python, qt, radvd,
+ setserial, squashfs, usb_modeswith, wget,
+ xdriver_xf86-video-intel, xkeyboard-config, xlib_libX11,
+ xlib_libXfont, xlib_libXfontcache, xlib_libXxf86misc,
+ xlib_libpciaccess, xproto_dri2proto, xproto_eviext,
+ xproto_fontcacheproto, xproto_xf86miscproto
Issues resolved (http://bugs.uclibc.org):
@@ -56,7 +56,10 @@
#1459: Misc QA fixes
#1489: radvd update to 1.6
#1513: Enable powerpc e300c2, e300c3 and e500mc optimization
+ #1537: dev entries not created anymore
+ #1555: Fix default uclibc-0.9.31 configuration
#1567: openssl0.9.8n fails to compile
+ #1591: portmap fails to compile
2010.02, Release February 26th, 2010:
diff --git a/configs/arm_toolchain_defconfig b/configs/arm_toolchain_defconfig
index 529a3631b..8e89107b4 100644
--- a/configs/arm_toolchain_defconfig
+++ b/configs/arm_toolchain_defconfig
@@ -714,6 +714,7 @@ BR2_PACKAGE_XSERVER_none=y
#
# filesystem for target device
#
+BR2_ROOTFS_DEVICE_TABLE="target/device/generic/device_table.txt"
# BR2_TARGET_ROOTFS_CRAMFS is not set
# BR2_TARGET_ROOTFS_CLOOP is not set
# BR2_TARGET_ROOTFS_EXT2 is not set
diff --git a/configs/at91rm9200df_defconfig b/configs/at91rm9200df_defconfig
index e4c0b0ef6..e004b21c2 100644
--- a/configs/at91rm9200df_defconfig
+++ b/configs/at91rm9200df_defconfig
@@ -839,6 +839,7 @@ BR2_PACKAGE_LIBXML2=y
#
# filesystem for target device
#
+BR2_ROOTFS_DEVICE_TABLE="target/device/Atmel/root/device_table.txt"
# BR2_TARGET_ROOTFS_CRAMFS is not set
# BR2_TARGET_ROOTFS_CLOOP is not set
BR2_TARGET_ROOTFS_EXT2=y
diff --git a/configs/at91rm9200df_ext_bare_defconfig b/configs/at91rm9200df_ext_bare_defconfig
index 65a640b23..032064a84 100644
--- a/configs/at91rm9200df_ext_bare_defconfig
+++ b/configs/at91rm9200df_ext_bare_defconfig
@@ -635,6 +635,7 @@ BR2_PACKAGE_XSERVER_none=y
#
# filesystem for target device
#
+BR2_ROOTFS_DEVICE_TABLE="target/device/Atmel/root/device_table.txt"
# BR2_TARGET_ROOTFS_CRAMFS is not set
# BR2_TARGET_ROOTFS_CLOOP is not set
# BR2_TARGET_ROOTFS_EXT2 is not set
diff --git a/configs/at91rm9200df_ext_defconfig b/configs/at91rm9200df_ext_defconfig
index 6a39002f5..35251a362 100644
--- a/configs/at91rm9200df_ext_defconfig
+++ b/configs/at91rm9200df_ext_defconfig
@@ -765,6 +765,7 @@ BR2_PACKAGE_LIBXML2=y
#
# filesystem for target device
#
+BR2_ROOTFS_DEVICE_TABLE="target/device/Atmel/root/device_table.txt"
# BR2_TARGET_ROOTFS_CRAMFS is not set
# BR2_TARGET_ROOTFS_CLOOP is not set
BR2_TARGET_ROOTFS_EXT2=y
diff --git a/configs/at91sam9260dfc_defconfig b/configs/at91sam9260dfc_defconfig
index 8fb7f0ea1..b571c8030 100644
--- a/configs/at91sam9260dfc_defconfig
+++ b/configs/at91sam9260dfc_defconfig
@@ -853,6 +853,7 @@ BR2_PACKAGE_LIBXML2=y
#
# filesystem for target device
#
+BR2_ROOTFS_DEVICE_TABLE="target/device/Atmel/root/device_table.txt"
# BR2_TARGET_ROOTFS_CRAMFS is not set
# BR2_TARGET_ROOTFS_CLOOP is not set
BR2_TARGET_ROOTFS_EXT2=y
diff --git a/configs/at91sam9260dfc_ext_bare_defconfig b/configs/at91sam9260dfc_ext_bare_defconfig
index 6e4d47883..e1ace69ca 100644
--- a/configs/at91sam9260dfc_ext_bare_defconfig
+++ b/configs/at91sam9260dfc_ext_bare_defconfig
@@ -635,6 +635,7 @@ BR2_PACKAGE_XSERVER_none=y
#
# filesystem for target device
#
+BR2_ROOTFS_DEVICE_TABLE="target/device/Atmel/root/device_table.txt"
# BR2_TARGET_ROOTFS_CRAMFS is not set
# BR2_TARGET_ROOTFS_CLOOP is not set
# BR2_TARGET_ROOTFS_EXT2 is not set
diff --git a/configs/at91sam9260dfc_ext_defconfig b/configs/at91sam9260dfc_ext_defconfig
index 22287bae9..c430d3db8 100644
--- a/configs/at91sam9260dfc_ext_defconfig
+++ b/configs/at91sam9260dfc_ext_defconfig
@@ -773,6 +773,7 @@ BR2_PACKAGE_LIBXML2=y
#
# filesystem for target device
#
+BR2_ROOTFS_DEVICE_TABLE="target/device/Atmel/root/device_table.txt"
# BR2_TARGET_ROOTFS_CRAMFS is not set
# BR2_TARGET_ROOTFS_CLOOP is not set
BR2_TARGET_ROOTFS_EXT2=y
diff --git a/configs/at91sam9260pf_defconfig b/configs/at91sam9260pf_defconfig
index 396adeea9..a2b86951b 100644
--- a/configs/at91sam9260pf_defconfig
+++ b/configs/at91sam9260pf_defconfig
@@ -548,6 +548,7 @@ BR2_SCRIPTING_SUPPORT=y
#
# filesystem for target device
#
+BR2_ROOTFS_DEVICE_TABLE="target/device/Atmel/root/device_table.txt"
# BR2_TARGET_ROOTFS_CRAMFS is not set
# BR2_TARGET_ROOTFS_CLOOP is not set
BR2_TARGET_ROOTFS_EXT2=y
diff --git a/configs/at91sam9261ek_defconfig b/configs/at91sam9261ek_defconfig
index 73fc09cb7..1cfc2e7cf 100644
--- a/configs/at91sam9261ek_defconfig
+++ b/configs/at91sam9261ek_defconfig
@@ -904,6 +904,7 @@ BR2_PACKAGE_LIBXSLT=y
#
# filesystem for target device
#
+BR2_ROOTFS_DEVICE_TABLE="target/device/Atmel/root/device_table.txt"
# BR2_TARGET_ROOTFS_CRAMFS is not set
# BR2_TARGET_ROOTFS_CLOOP is not set
BR2_TARGET_ROOTFS_EXT2=y
diff --git a/configs/at91sam9261ek_ext_bare_defconfig b/configs/at91sam9261ek_ext_bare_defconfig
index 316c15ed6..5e5e22da2 100644
--- a/configs/at91sam9261ek_ext_bare_defconfig
+++ b/configs/at91sam9261ek_ext_bare_defconfig
@@ -638,6 +638,7 @@ BR2_PACKAGE_XSERVER_none=y
#
# filesystem for target device
#
+BR2_ROOTFS_DEVICE_TABLE="target/device/Atmel/root/device_table.txt"
# BR2_TARGET_ROOTFS_CRAMFS is not set
# BR2_TARGET_ROOTFS_CLOOP is not set
# BR2_TARGET_ROOTFS_EXT2 is not set
diff --git a/configs/at91sam9261ek_ext_defconfig b/configs/at91sam9261ek_ext_defconfig
index 4bb96f13a..362680b49 100644
--- a/configs/at91sam9261ek_ext_defconfig
+++ b/configs/at91sam9261ek_ext_defconfig
@@ -861,6 +861,7 @@ BR2_PACKAGE_LIBXSLT=y
#
# filesystem for target device
#
+BR2_ROOTFS_DEVICE_TABLE="target/device/Atmel/root/device_table.txt"
# BR2_TARGET_ROOTFS_CRAMFS is not set
# BR2_TARGET_ROOTFS_CLOOP is not set
BR2_TARGET_ROOTFS_EXT2=y
diff --git a/configs/at91sam9263ek_defconfig b/configs/at91sam9263ek_defconfig
index cdbeaa393..a670b41cc 100644
--- a/configs/at91sam9263ek_defconfig
+++ b/configs/at91sam9263ek_defconfig
@@ -901,6 +901,7 @@ BR2_PACKAGE_LIBXSLT=y
#
# filesystem for target device
#
+BR2_ROOTFS_DEVICE_TABLE="target/device/Atmel/root/device_table.txt"
# BR2_TARGET_ROOTFS_CRAMFS is not set
# BR2_TARGET_ROOTFS_CLOOP is not set
BR2_TARGET_ROOTFS_EXT2=y
diff --git a/configs/at91sam9263ek_ext_bare_defconfig b/configs/at91sam9263ek_ext_bare_defconfig
index 3e57789b6..bc6f62623 100644
--- a/configs/at91sam9263ek_ext_bare_defconfig
+++ b/configs/at91sam9263ek_ext_bare_defconfig
@@ -637,6 +637,7 @@ BR2_PACKAGE_XSERVER_none=y
#
# filesystem for target device
#
+BR2_ROOTFS_DEVICE_TABLE="target/device/Atmel/root/device_table.txt"
# BR2_TARGET_ROOTFS_CRAMFS is not set
# BR2_TARGET_ROOTFS_CLOOP is not set
# BR2_TARGET_ROOTFS_EXT2 is not set
diff --git a/configs/at91sam9263ek_ext_defconfig b/configs/at91sam9263ek_ext_defconfig
index 944811faf..4a59ea61a 100644
--- a/configs/at91sam9263ek_ext_defconfig
+++ b/configs/at91sam9263ek_ext_defconfig
@@ -823,6 +823,7 @@ BR2_PACKAGE_LIBXSLT=y
#
# filesystem for target device
#
+BR2_ROOTFS_DEVICE_TABLE="target/device/Atmel/root/device_table.txt"
# BR2_TARGET_ROOTFS_CRAMFS is not set
# BR2_TARGET_ROOTFS_CLOOP is not set
BR2_TARGET_ROOTFS_EXT2=y
diff --git a/configs/at91sam9g20dfc_defconfig b/configs/at91sam9g20dfc_defconfig
index 710639bc3..a57dcffed 100644
--- a/configs/at91sam9g20dfc_defconfig
+++ b/configs/at91sam9g20dfc_defconfig
@@ -769,6 +769,7 @@ BR2_PACKAGE_EXPAT=y
#
# filesystem for target device
#
+BR2_ROOTFS_DEVICE_TABLE="target/device/Atmel/root/device_table.txt"
# BR2_TARGET_ROOTFS_CRAMFS is not set
# BR2_TARGET_ROOTFS_CLOOP is not set
BR2_TARGET_ROOTFS_EXT2=y
diff --git a/configs/at91sam9g20dfc_ext_bare_defconfig b/configs/at91sam9g20dfc_ext_bare_defconfig
index 4db69f375..3977dc987 100644
--- a/configs/at91sam9g20dfc_ext_bare_defconfig
+++ b/configs/at91sam9g20dfc_ext_bare_defconfig
@@ -635,6 +635,7 @@ BR2_PACKAGE_XSERVER_none=y
#
# filesystem for target device
#
+BR2_ROOTFS_DEVICE_TABLE="target/device/Atmel/root/device_table.txt"
# BR2_TARGET_ROOTFS_CRAMFS is not set
# BR2_TARGET_ROOTFS_CLOOP is not set
# BR2_TARGET_ROOTFS_EXT2 is not set
diff --git a/configs/at91sam9g20dfc_ext_defconfig b/configs/at91sam9g20dfc_ext_defconfig
index a2f34a2f3..632f2d1c6 100644
--- a/configs/at91sam9g20dfc_ext_defconfig
+++ b/configs/at91sam9g20dfc_ext_defconfig
@@ -773,6 +773,7 @@ BR2_PACKAGE_LIBXML2=y
#
# filesystem for target device
#
+BR2_ROOTFS_DEVICE_TABLE="target/device/Atmel/root/device_table.txt"
# BR2_TARGET_ROOTFS_CRAMFS is not set
# BR2_TARGET_ROOTFS_CLOOP is not set
BR2_TARGET_ROOTFS_EXT2=y
diff --git a/configs/atngw100-base_defconfig b/configs/atngw100-base_defconfig
index cd5a6767f..15d779a0b 100644
--- a/configs/atngw100-base_defconfig
+++ b/configs/atngw100-base_defconfig
@@ -698,6 +698,7 @@ BR2_ROOTFS_SUFFIX="$(DATE)"
#
# filesystem for target device
#
+BR2_ROOTFS_DEVICE_TABLE="target/device/Atmel/atngw100-base/device_table.txt"
# BR2_TARGET_ROOTFS_CRAMFS is not set
# BR2_TARGET_ROOTFS_CLOOP is not set
# BR2_TARGET_ROOTFS_EXT2 is not set
diff --git a/configs/atngw100_defconfig b/configs/atngw100_defconfig
index 367bcdc5b..ecaf77410 100644
--- a/configs/atngw100_defconfig
+++ b/configs/atngw100_defconfig
@@ -688,6 +688,7 @@ BR2_ROOTFS_SUFFIX="$(DATE)"
#
# filesystem for target device
#
+BR2_ROOTFS_DEVICE_TABLE="target/device/Atmel/atngw100/device_table.txt"
# BR2_TARGET_ROOTFS_CRAMFS is not set
# BR2_TARGET_ROOTFS_CLOOP is not set
# BR2_TARGET_ROOTFS_EXT2 is not set
diff --git a/configs/atstk1005_defconfig b/configs/atstk1005_defconfig
index 50e013e3f..6b7a7b6d4 100644
--- a/configs/atstk1005_defconfig
+++ b/configs/atstk1005_defconfig
@@ -731,6 +731,7 @@ BR2_PACKAGE_ZLIB=y
#
# filesystem for target device
#
+BR2_ROOTFS_DEVICE_TABLE="target/device/Atmel/atstk1005/device_table.txt"
# BR2_TARGET_ROOTFS_CRAMFS is not set
# BR2_TARGET_ROOTFS_CLOOP is not set
# BR2_TARGET_ROOTFS_EXT2 is not set
diff --git a/configs/atstk100x_defconfig b/configs/atstk100x_defconfig
index df30b05c2..1a27f1af4 100644
--- a/configs/atstk100x_defconfig
+++ b/configs/atstk100x_defconfig
@@ -834,6 +834,7 @@ BR2_ROOTFS_SUFFIX="$(DATE)"
#
# filesystem for target device
#
+BR2_ROOTFS_DEVICE_TABLE="target/device/Atmel/atstk100x/device_table.txt"
# BR2_TARGET_ROOTFS_CRAMFS is not set
# BR2_TARGET_ROOTFS_CLOOP is not set
BR2_TARGET_ROOTFS_EXT2=y
diff --git a/configs/kb9202_defconfig b/configs/kb9202_defconfig
index b1ec3233c..e66348b70 100644
--- a/configs/kb9202_defconfig
+++ b/configs/kb9202_defconfig
@@ -654,6 +654,7 @@ BR2_GAMES=y
#
# filesystem for target device
#
+BR2_ROOTFS_DEVICE_TABLE="target/device/KwikByte/kb9202/device_table.txt"
# BR2_TARGET_ROOTFS_CRAMFS is not set
# BR2_TARGET_ROOTFS_CLOOP is not set
# BR2_TARGET_ROOTFS_EXT2 is not set
diff --git a/configs/v100sc2_defconfig b/configs/v100sc2_defconfig
index 309b80e4b..b139c277f 100644
--- a/configs/v100sc2_defconfig
+++ b/configs/v100sc2_defconfig
@@ -685,6 +685,7 @@ BR2_PACKAGE_LIBXSLT=y
#
# filesystem for target device
#
+BR2_ROOTFS_DEVICE_TABLE="target/device/valka/device_table.txt"
# BR2_TARGET_ROOTFS_CRAMFS is not set
# BR2_TARGET_ROOTFS_CLOOP is not set
# BR2_TARGET_ROOTFS_EXT2 is not set
diff --git a/docs/buildroot.html b/docs/buildroot.html
index dfa69e0dd..abe822f79 100644
--- a/docs/buildroot.html
+++ b/docs/buildroot.html
@@ -661,16 +661,6 @@ endif
<code>$(BOARD_PATH)/target_skeleton</code> so that the target
skeleton is stored in the board specific directory.</li>
- <li><code>TARGET_DEVICE_TABLE</code> to a file that contains
- the target device table &mdash; the list of device files (in
- <code>/dev/</code>) to be created by the root filesystem build
- procedure. If this variable is defined, the given device table
- will be used instead of the default one. If defined, the
- convention is to define it to
- <code>$(BOARD_PATH)/target_device_table.txt</code>. See
- <code>target/generic/device_table.txt</code> for an example
- file.</li>
-
</ul>
</li>
diff --git a/fs/Config.in b/fs/Config.in
index f885c52e7..6865eeaff 100644
--- a/fs/Config.in
+++ b/fs/Config.in
@@ -15,6 +15,14 @@ config BR2_ROOTFS_POST_BUILD_SCRIPT
only argument. Make sure the exit code of that script is 0,
otherwise make will stop after calling it.
+config BR2_ROOTFS_DEVICE_TABLE
+ string "Path to the device table"
+ default "target/generic/device_table.txt"
+ help
+ Specify the location of a device table, that will be passed
+ to the makedevs utility to create all the special device
+ files in the target filesystem.
+
source "fs/cramfs/Config.in"
source "fs/cloop/Config.in"
source "fs/ext2/Config.in"
diff --git a/fs/common.mk b/fs/common.mk
index fa6afd94d..a3248c165 100644
--- a/fs/common.mk
+++ b/fs/common.mk
@@ -28,18 +28,19 @@
# macro will automatically generate a compressed filesystem image.
FAKEROOT_SCRIPT = $(BUILD_DIR)/_fakeroot.fs
+ROOTFS_DEVICE_TABLE = $(call qstrip,$(BR2_ROOTFS_DEVICE_TABLE))
define ROOTFS_TARGET_INTERNAL
-$(BINARIES_DIR)/rootfs.$(1): $(ROOTFS_$(2)_DEPENDENCIES) host-fakeroot makedevs $(if $(BR2_TARGET_ROOTFS_$(2)_LZMA),host-lzma)
+$(BINARIES_DIR)/rootfs.$(1): $(ROOTFS_$(2)_DEPENDENCIES) host-fakeroot host-makedevs $(if $(BR2_TARGET_ROOTFS_$(2)_LZMA),host-lzma)
@$(call MESSAGE,"Generating root filesystem image rootfs.$(1)")
$(foreach hook,$(ROOTFS_$(2)_PRE_GEN_HOOKS),$(call $(hook))$(sep))
rm -f $(FAKEROOT_SCRIPT)
touch $(BUILD_DIR)/.fakeroot.00000
cat $(BUILD_DIR)/.fakeroot* > $(FAKEROOT_SCRIPT)
echo "chown -R 0:0 $(TARGET_DIR)" >> $(FAKEROOT_SCRIPT)
-ifneq ($(TARGET_DEVICE_TABLE),)
- echo "$(HOST_DIR)/usr/bin/makedevs -d $(TARGET_DEVICE_TABLE) $(TARGET_DIR)" >> $(FAKEROOT_SCRIPT)
+ifneq ($(ROOTFS_DEVICE_TABLE),)
+ echo "$(HOST_DIR)/usr/bin/makedevs -d $(ROOTFS_DEVICE_TABLE) $(TARGET_DIR)" >> $(FAKEROOT_SCRIPT)
endif
echo "$(ROOTFS_$(2)_CMD)" >> $(FAKEROOT_SCRIPT)
chmod a+x $(FAKEROOT_SCRIPT)
diff --git a/fs/cramfs/cramfs.mk b/fs/cramfs/cramfs.mk
index ccd316f5d..e0deb7e2a 100644
--- a/fs/cramfs/cramfs.mk
+++ b/fs/cramfs/cramfs.mk
@@ -9,8 +9,8 @@ else
CRAMFS_OPTS=-l
endif
-ifneq ($(TARGET_DEVICE_TABLE),)
-CRAMFS_OPTS += -D $(TARGET_DEVICE_TABLE)
+ifneq ($(ROOTFS_DEVICE_TABLE),)
+CRAMFS_OPTS += -D $(ROOTFS_DEVICE_TABLE)
endif
define ROOTFS_CRAMFS_CMD
diff --git a/fs/ext2/ext2.mk b/fs/ext2/ext2.mk
index 68b3b813c..18a6df424 100644
--- a/fs/ext2/ext2.mk
+++ b/fs/ext2/ext2.mk
@@ -18,23 +18,14 @@ ifneq ($(strip $(BR2_TARGET_ROOTFS_EXT2_INODES)),0)
EXT2_OPTS += -N $(BR2_TARGET_ROOTFS_EXT2_INODES)
endif
-ifneq ($(strip $(BR2_TARGET_ROOTFS_EXT2_RESBLKS)),)
+ifneq ($(strip $(BR2_TARGET_ROOTFS_EXT2_RESBLKS)),0)
EXT2_OPTS += -m $(BR2_TARGET_ROOTFS_EXT2_RESBLKS)
endif
ROOTFS_EXT2_DEPENDENCIES = host-genext2fs
-ifeq ($(strip $(BR2_TARGET_ROOTFS_EXT2_BLOCKS)),0)
-GENEXT2_REALSIZE=$(shell LC_ALL=C du -s -c -k $(TARGET_DIR) | grep total | sed -e "s/total//")
-GENEXT2_ADDTOROOTSIZE=$(shell if [ $(GENEXT2_REALSIZE) -ge 20000 ]; then echo 16384; else echo 2400; fi)
-GENEXT2_SIZE=$(shell expr $(GENEXT2_REALSIZE) + $(GENEXT2_ADDTOROOTSIZE))
-GENEXT2_ADDTOINODESIZE=$(shell find $(TARGET_DIR) | wc -l)
-GENEXT2_INODES=$(shell expr $(GENEXT2_ADDTOINODESIZE) + 400)
-EXT2_OPTS += -b $(GENEXT2_SIZE) -N $(GENEXT2_INODES)
-endif
-
define ROOTFS_EXT2_CMD
- $(HOST_DIR)/usr/bin/genext2fs -d $(TARGET_DIR) $(EXT2_OPTS) $$@
+ PATH=$(TARGET_PATH) fs/ext2/genext2fs.sh -d $(TARGET_DIR) $(EXT2_OPTS) $$@
endef
-$(eval $(call ROOTFS_TARGET,ext2)) \ No newline at end of file
+$(eval $(call ROOTFS_TARGET,ext2))
diff --git a/fs/ext2/genext2fs.sh b/fs/ext2/genext2fs.sh
new file mode 100755
index 000000000..b315ec30a
--- /dev/null
+++ b/fs/ext2/genext2fs.sh
@@ -0,0 +1,39 @@
+#!/bin/sh
+# genext2fs wrapper calculating needed blocks/inodes values if not specified
+
+export LC_ALL=C
+
+CALC_BLOCKS=1
+CALC_INODES=1
+
+while getopts x:d:D:b:i:N:m:g:e:zfqUPhVv f
+do
+ case $f in
+ b) CALC_BLOCKS=0 ;;
+ N) CALC_INODES=0 ;;
+ d) TARGET_DIR=$OPTARG ;;
+ esac
+done
+
+# calculate needed blocks
+if [ $CALC_BLOCKS -eq 1 ];
+then
+ BLOCKS=$(du -s -c -k $TARGET_DIR | grep total | sed -e "s/total//")
+ if [ $BLOCKS -ge 20000 ];
+ then
+ BLOCKS=$(expr $BLOCKS + 16384)
+ else
+ BLOCKS=$(expr $BLOCKS + 2400)
+ fi
+ set -- $@ -b $BLOCKS
+fi
+
+# calculate needed inodes
+if [ $CALC_INODES -eq 1 ];
+then
+ INODES=$(find $TARGET_DIR | wc -l)
+ INODES=$(expr $INODES + 400)
+ set -- $@ -N $INODES
+fi
+
+exec genext2fs $@
diff --git a/fs/initramfs/initramfs.mk b/fs/initramfs/initramfs.mk
index 4a205d1ce..3e8156761 100644
--- a/fs/initramfs/initramfs.mk
+++ b/fs/initramfs/initramfs.mk
@@ -6,11 +6,19 @@
#
#############################################################
+ifeq ($(BR2_TARGET_ROOTFS_INITRAMFS),y)
+INITRAMFS_TARGET:=initramfs-root
+else
+INITRAMFS_TARGET:= #nothing
+endif
+
define ROOTFS_INITRAMFS_INIT_SYMLINK
rm -f $(TARGET_DIR)/init
ln -s sbin/init $(TARGET_DIR)/init
endef
+ROOTFS_INITRAMFS_PRE_GEN_HOOKS += ROOTFS_INITRAMFS_INIT_SYMLINK
+
define ROOTFS_INITRAMFS_CMD
$(SHELL) fs/initramfs/gen_initramfs_list.sh -u 0 -g 0 $(TARGET_DIR) > $$@
endef
diff --git a/fs/jffs2/jffs2.mk b/fs/jffs2/jffs2.mk
index a0a563d18..36be03741 100644
--- a/fs/jffs2/jffs2.mk
+++ b/fs/jffs2/jffs2.mk
@@ -32,8 +32,8 @@ JFFS2_OPTS += -n
SUMTOOL_OPTS += -n
endif
-ifneq ($(TARGET_DEVICE_TABLE),)
-JFFS2_OPTS += -D $(TARGET_DEVICE_TABLE)
+ifneq ($(ROOTFS_DEVICE_TABLE),)
+JFFS2_OPTS += -D $(ROOTFS_DEVICE_TABLE)
endif
ROOTFS_JFFS2_DEPENDENCIES = host-mtd
diff --git a/package/Config.in b/package/Config.in
index 610490342..a4ef36261 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -175,6 +175,7 @@ source "package/input-tools/Config.in"
source "package/iostat/Config.in"
source "package/lm-sensors/Config.in"
source "package/lvm2/Config.in"
+source "package/makedevs/Config.in"
source "package/mdadm/Config.in"
source "package/memtester/Config.in"
source "package/mtd/Config.in"
diff --git a/package/busybox/busybox-1.16.1-sed.patch b/package/busybox/busybox-1.16.1-sed.patch
new file mode 100644
index 000000000..56d2304d2
--- /dev/null
+++ b/package/busybox/busybox-1.16.1-sed.patch
@@ -0,0 +1,47 @@
+diff -urpN busybox-1.16.1/editors/sed.c busybox-1.16.1-sed/editors/sed.c
+--- busybox-1.16.1/editors/sed.c 2010-03-28 13:43:35.000000000 -0400
++++ busybox-1.16.1-sed/editors/sed.c 2010-04-20 13:33:26.301975462 -0400
+@@ -936,7 +936,15 @@ static void process_files(void)
+ /* Skip blocks of commands we didn't match */
+ if (sed_cmd->cmd == '{') {
+ if (sed_cmd->invert ? matched : !matched) {
+- while (sed_cmd->cmd != '}') {
++ unsigned nest_cnt = 0;
++ while (1) {
++ if (sed_cmd->cmd == '{')
++ nest_cnt++;
++ if (sed_cmd->cmd == '}') {
++ nest_cnt--;
++ if (nest_cnt == 0)
++ break;
++ }
+ sed_cmd = sed_cmd->next;
+ if (!sed_cmd)
+ bb_error_msg_and_die("unterminated {");
+@@ -1031,7 +1039,7 @@ static void process_files(void)
+ case 'c':
+ /* Only triggers on last line of a matching range. */
+ if (!sed_cmd->in_match)
+- sed_puts(sed_cmd->string, NO_EOL_CHAR);
++ sed_puts(sed_cmd->string, '\n');
+ goto discard_line;
+
+ /* Read file, append contents to output */
+diff -urpN busybox-1.16.1/testsuite/sed.tests busybox-1.16.1-sed/testsuite/sed.tests
+--- busybox-1.16.1/testsuite/sed.tests 2010-03-19 22:58:07.000000000 -0400
++++ busybox-1.16.1-sed/testsuite/sed.tests 2010-04-20 13:33:26.301975462 -0400
+@@ -248,4 +248,14 @@ testing "sed beginning (^) matches only
+ ">/usr</>lib<\n" "" \
+ "/usr/lib\n"
+
++testing "sed c" \
++ "sed 'crepl'" \
++ "repl\nrepl\n" "" \
++ "first\nsecond\n"
++
++testing "sed nested {}s" \
++ "sed '/asd/ { p; /s/ { s/s/c/ }; p; q }'" \
++ "qwe\nasd\nacd\nacd\n" "" \
++ "qwe\nasd\nzxc\n"
++
+ exit $FAILCOUNT
diff --git a/package/busybox/initramfs.mk b/package/busybox/initramfs.mk
deleted file mode 100644
index 2f1e34cdc..000000000
--- a/package/busybox/initramfs.mk
+++ /dev/null
@@ -1,141 +0,0 @@
-#############################################################
-#
-# busybox image for initramfs
-#
-#############################################################
-ifeq ($(BR2_PACKAGE_BUSYBOX_INITRAMFS),y)
-
-BUSYBOX_INITRAMFS_DIR:=$(BUSYBOX_DIR)-initramfs
-BR2_INITRAMFS_DIR:=$(BUILD_DIR)/initramfs
-BB_INITRAMFS_TARGET:=rootfs.initramfs_lst
-
-$(BUSYBOX_INITRAMFS_DIR)/.unpacked: $(DL_DIR)/$(BUSYBOX_SOURCE)
- rm -rf $(BUILD_DIR)/tmp $(BUSYBOX_INITRAMFS_DIR)
- mkdir -p $(BUILD_DIR)/tmp
- $(BUSYBOX_UNZIP) $(DL_DIR)/$(BUSYBOX_SOURCE) | tar -C $(BUILD_DIR)/tmp $(TAR_OPTIONS) -
-ifeq ($(BR2_PACKAGE_BUSYBOX_SNAPSHOT),y)
- mv $(BUILD_DIR)/tmp/busybox $(BUSYBOX_INITRAMFS_DIR)
-else
- mv $(BUILD_DIR)/tmp/busybox-$(BUSYBOX_VERSION) $(BUSYBOX_INITRAMFS_DIR)
-endif
- touch $@
-
-$(BUSYBOX_INITRAMFS_DIR)/.config $(BUSYBOX_INITRAMFS_DIR)/.configured: $(BUSYBOX_INITRAMFS_DIR)/.unpacked
- $(MAKE) CC=$(TARGET_CC) CROSS_COMPILE="$(TARGET_CROSS)" \
- CROSS="$(TARGET_CROSS)" -C $(BUSYBOX_INITRAMFS_DIR) \
- allnoconfig
- mv $(BUSYBOX_INITRAMFS_DIR)/.config $(BUSYBOX_INITRAMFS_DIR)/.config.no
- (echo CONFIG_PREFIX=\"$(BR2_INITRAMFS_DIR)\"; \
- echo CONFIG_NITPICK=y; \
- echo CONFIG_FEATURE_BUFFERS_USE_MALLOC=y; \
- echo CONFIG_INCLUDE_SUSv2=n; \
- echo CONFIG_CAT=y; \
- echo CONFIG_CHROOT=y; \
- echo CONFIG_DD=y; \
- echo CONFIG_FEATURE_DD_IBS_OBS=y; \
- echo CONFIG_FALSE=y; \
- echo CONFIG_GUNZIP=y; \
- echo CONFIG_HALT=y; \
- echo CONFIG_INIT=y; \
- echo CONFIG_INSMOD=y; \
- echo CONFIG_KILL=y; \
- echo CONFIG_LN=y; \
- echo CONFIG_MDEV=y; \
- echo CONFIG_MKDIR=y; \
- echo CONFIG_MKFIFO=y; \
- echo CONFIG_MKNOD=y; \
- echo CONFIG_MODPROBE=y; \
- echo CONFIG_FEATURE_MODPROBE_MULTIPLE_OPTIONS=y; \
- echo CONFIG_FEATURE_MODPROBE_FANCY_ALIAS=y; \
- echo CONFIG_FEATURE_CHECK_TAINTED_MODULE=n; \
- echo CONFIG_FEATURE_2_4_MODULES=n; \
- echo CONFIG_MOUNT=y; \
- echo CONFIG_MSH=y; \
- echo CONFIG_FEATURE_SH_IS_MSH=y; \
- echo CONFIG_PS=y; \
- echo CONFIG_READLINK=y; \
- echo CONFIG_RMMOD=y; \
- echo CONFIG_STATIC=y; \
- echo CONFIG_SWITCH_ROOT=y; \
- echo CONFIG_SYNC=y; \
- echo CONFIG_TFTP=y; \
- echo CONFIG_FEATURE_TFTP_GET=y; \
- echo CONFIG_FEATURE_TFTP_PUT=y; \
- echo CONFIG_TRUE=y; \
- echo CONFIG_UMOUNT=y; \
- echo CONFIG_FEATURE_UMOUNT_ALL=y; \
- echo CONFIG_UNAME=y; \
- ) > $(BUSYBOX_INITRAMFS_DIR)/.config
- cp -f $(BUSYBOX_INITRAMFS_DIR)/.config \
- $(BUSYBOX_INITRAMFS_DIR)/.config.prune
- $(SED) 's|\([^=]*\)=.*|/\1[^_]*/d|g' \
- $(BUSYBOX_INITRAMFS_DIR)/.config.prune
- $(SED) '' -f $(BUSYBOX_INITRAMFS_DIR)/.config.prune \
- $(BUSYBOX_INITRAMFS_DIR)/.config.no
- cat $(BUSYBOX_INITRAMFS_DIR)/.config.no >> \
- $(BUSYBOX_INITRAMFS_DIR)/.config
- yes "" | $(MAKE) CC=$(TARGET_CC) CROSS_COMPILE="$(TARGET_CROSS)" \
- CROSS="$(TARGET_CROSS)" -C $(BUSYBOX_INITRAMFS_DIR) \
- oldconfig
- touch $@
-
-
-$(BUSYBOX_INITRAMFS_DIR)/busybox: $(BUSYBOX_INITRAMFS_DIR)/.configured
- $(MAKE) CC=$(TARGET_CC) CROSS_COMPILE="$(TARGET_CROSS)" \
- CROSS="$(TARGET_CROSS)" PREFIX="$(TARGET_DIR)" \
- ARCH=$(KERNEL_ARCH) \
- EXTRA_CFLAGS="$(TARGET_CFLAGS)" -C $(BUSYBOX_INITRAMFS_DIR) \
- busybox.links busybox
-
-$(BR2_INITRAMFS_DIR)/bin/busybox: $(BUSYBOX_INITRAMFS_DIR)/busybox
- $(MAKE) CC=$(TARGET_CC) CROSS_COMPILE="$(TARGET_CROSS)" \
- CROSS="$(TARGET_CROSS)" \
- ARCH=$(KERNEL_ARCH) STRIP="$(STRIPCMD)" \
- EXTRA_CFLAGS="$(TARGET_CFLAGS)" -C $(BUSYBOX_INITRAMFS_DIR) \
- install
- $(STRIPCMD) $(STRIP_STRIP_ALL) $@
-
-
-$(BB_INITRAMFS_TARGET): host-fakeroot $(BR2_INITRAMFS_DIR)/bin/busybox
- ln -fs bin/busybox $(BUILD_DIR)/initramfs/init
- mkdir -p $(BUILD_DIR)/initramfs/etc
- cat target/generic/target_busybox_skeleton/etc/inittab > \
- $(BUILD_DIR)/initramfs/etc/inittab
- rm -f $(BUILD_DIR)/_fakeroot.$(notdir $(BB_INITRAMFS_TARGET))
- (echo "chown -R 0:0 $(BUILD_DIR)/initramfs"; \
- echo "$(HOST_DIR)/usr/bin/makedevs -d $(TARGET_DEVICE_TABLE) $(BUILD_DIR)/initramfs"; \
- echo "$(SHELL) target/initramfs/gen_initramfs_list.sh -u 0 -g 0 $(BUILD_DIR)/initramfs > $(BB_INITRAMFS_TARGET)"; \
- ) > $(BUILD_DIR)/_fakeroot.$(notdir $(BB_INITRAMFS_TARGET))
- chmod +x $(BUILD_DIR)/_fakeroot.$(notdir $(BB_INITRAMFS_TARGET))
- $(HOST_DIR)/usr/bin/fakeroot -- \
- $(BUILD_DIR)/_fakeroot.$(notdir $(BB_INITRAMFS_TARGET))
- rm -f $(BUILD_DIR)/_fakeroot.$(notdir $(BB_INITRAMFS_TARGET))
- touch -c $@
-
-$(BUILD_DIR)/.initramfs_done: $(BR2_INITRAMFS_DIR)/bin/busybox \
- $(BB_INITRAMFS_TARGET)
- touch $@
-
-busybox-initramfs-source:
-busybox-initramfs: $(BUILD_DIR)/.initramfs_done
-
-busybox-initramfs-menuconfig: host-sed $(BUILD_DIR) busybox-source $(BUSYBOX_INITRAMFS_DIR)/.configured
- $(MAKE) __TARGET_ARCH=$(ARCH) -C $(BUSYBOX_INITRAMFS_DIR) menuconfig
-
-busybox-initramfs-clean:
- rm -f $(BUSYBOX_INITRAMFS_DIR)/busybox $(BUILD_DIR)/.initramfs_*
- rm -rf $(BR2_INITRAMFS_DIR) $(BB_INITRAMFS_TARGET)
- -$(MAKE) -C $(BUSYBOX_INITRAMFS_DIR) clean
-
-busybox-initramfs-dirclean:
- rm -rf $(BUSYBOX_INITRAMFS_DIR) $(BR2_INITRAMFS_DIR) \
- $(BUILD_DIR)/.initramfs_*
-endif
-#############################################################
-#
-# Toplevel Makefile options
-#
-#############################################################
-ifeq ($(BR2_PACKAGE_BUSYBOX_INITRAMFS),y)
-TARGETS+=busybox-initramfs
-endif
diff --git a/package/cramfs/cramfs.mk b/package/cramfs/cramfs.mk
index 7b1924e81..9073ae542 100644
--- a/package/cramfs/cramfs.mk
+++ b/package/cramfs/cramfs.mk
@@ -16,8 +16,8 @@ define CRAMFS_BUILD_CMDS
endef
define CRAMFS_INSTALL_TARGET_CMDS
- install -m 755 $(@D)/mkcramfs $(TARGET_DIR)/usr/bin
- install -m 755 $(@D)/cramfsck $(TARGET_DIR)/usr/bin
+ install -D -m 755 $(@D)/mkcramfs $(TARGET_DIR)/usr/bin/mkcramfs
+ install -D -m 755 $(@D)/cramfsck $(TARGET_DIR)/usr/bin/cramfsck
endef
define HOST_CRAMFS_BUILD_CMDS
@@ -25,8 +25,8 @@ define HOST_CRAMFS_BUILD_CMDS
endef
define HOST_CRAMFS_INSTALL_CMDS
- install -m 755 $(@D)/mkcramfs $(HOST_DIR)/usr/bin
- install -m 755 $(@D)/cramfsck $(HOST_DIR)/usr/bin
+ install -D -m 755 $(@D)/mkcramfs $(HOST_DIR)/usr/bin/mkcramfs
+ install -D -m 755 $(@D)/cramfsck $(HOST_DIR)/usr/bin/cramfsck
endef
$(eval $(call GENTARGETS,package,cramfs))
diff --git a/package/makedevs/Config.in b/package/makedevs/Config.in
new file mode 100644
index 000000000..4f8c38d0a
--- /dev/null
+++ b/package/makedevs/Config.in
@@ -0,0 +1,5 @@
+config BR2_PACKAGE_MAKEDEVS
+ bool "makedevs"
+ help
+ The makedevs utility allows to create a set of device files
+ according to a configuration file. \ No newline at end of file
diff --git a/target/makedevs/makedevs.c b/package/makedevs/makedevs.c
index 5ca45e9ae..5ca45e9ae 100644
--- a/target/makedevs/makedevs.c
+++ b/package/makedevs/makedevs.c
diff --git a/package/makedevs/makedevs.mk b/package/makedevs/makedevs.mk
new file mode 100644
index 000000000..a3bb5cb54
--- /dev/null
+++ b/package/makedevs/makedevs.mk
@@ -0,0 +1,35 @@
+#############################################################
+#
+# makedevs
+#
+#############################################################
+
+MAKEDEVS_DIR=$(BUILD_DIR)/makedevs
+
+$(MAKEDEVS_DIR)/makedevs.c:
+ rm -rf $(MAKEDEVS_DIR)
+ mkdir $(MAKEDEVS_DIR)
+ cp package/makedevs/makedevs.c $(MAKEDEVS_DIR)
+
+$(MAKEDEVS_DIR)/makedevs: $(MAKEDEVS_DIR)/makedevs.c
+ $(CC) -Wall -Werror -O2 $(MAKEDEVS_DIR)/makedevs.c -o $@
+
+$(TARGET_DIR)/usr/bin/makedevs: $(MAKEDEVS_DIR)/makedevs
+ $(INSTALL) -m 755 $^ $@
+
+makedevs: $(TARGET_DIR)/usr/bin/makedevs
+
+HOST_MAKEDEVS_DIR=$(BUILD_DIR)/host-makedevs
+
+$(HOST_MAKEDEVS_DIR)/makedevs.c:
+ rm -rf $(HOST_MAKEDEVS_DIR)
+ mkdir $(HOST_MAKEDEVS_DIR)
+ cp package/makedevs/makedevs.c $(HOST_MAKEDEVS_DIR)
+
+$(HOST_MAKEDEVS_DIR)/makedevs: $(HOST_MAKEDEVS_DIR)/makedevs.c
+ $(CC) -Wall -Werror -O2 $(HOST_MAKEDEVS_DIR)/makedevs.c -o $@
+
+$(HOST_DIR)/usr/bin/makedevs: $(HOST_MAKEDEVS_DIR)/makedevs
+ $(INSTALL) -m 755 $^ $@
+
+host-makedevs: $(HOST_DIR)/usr/bin/makedevs \ No newline at end of file
diff --git a/package/mtd/Config.in b/package/mtd/Config.in
index 8e846a371..0ba71d333 100644
--- a/package/mtd/Config.in
+++ b/package/mtd/Config.in
@@ -93,6 +93,10 @@ config BR2_PACKAGE_MTD_SERVE_IMAGE
config BR2_PACKAGE_MTD_SUMTOOL
bool "sumtool"
+config BR2_PACKAGE_MTD_MTDINFO
+ bool "mtdinfo"
+ default y
+
config BR2_PACKAGE_MTD_UBIATTACH
bool "ubiattach"
default y
diff --git a/package/portage/Config.in b/package/portage/Config.in
index 27661cd92..83778ff3c 100644
--- a/package/portage/Config.in
+++ b/package/portage/Config.in
@@ -1,7 +1,11 @@
config BR2_PACKAGE_PORTAGE
bool "portage"
select BR2_PACKAGE_PYTHON
+ depends on BR2_USE_WCHAR
help
Portage, the Gentoo package management tool.
http://www.gentoo.org/
+
+comment "portage requires a toolchain with WCHAR support"
+ depends on !BR2_USE_WCHAR
diff --git a/package/python/Config.in b/package/python/Config.in
index 6931eb70f..e77d7aa40 100644
--- a/package/python/Config.in
+++ b/package/python/Config.in
@@ -1,10 +1,14 @@
config BR2_PACKAGE_PYTHON
bool "python"
+ depends on BR2_USE_WCHAR
help
The python language interpreter.
http://www.python.org/
+comment "python requires a toolchain with WCHAR support"
+ depends on !BR2_USE_WCHAR
+
config BR2_PACKAGE_PYTHON_DEV
depends on BR2_PACKAGE_PYTHON
bool "development files on target"
diff --git a/target/Makefile.in b/target/Makefile.in
index 48396d5d8..afe96a7f0 100644
--- a/target/Makefile.in
+++ b/target/Makefile.in
@@ -62,8 +62,6 @@ ifeq ($(BR2_TARGET_UBOOT),y)
include target/u-boot/Makefile.in
endif
-include target/*/*.mk
-
# kernel rules
# We already did add the kernel target to TARGETS and now just pull in the rules
# to actually build this target.
diff --git a/target/device/Atmel/Makefile.in b/target/device/Atmel/Makefile.in
index bf7a2d108..c5dfffd70 100644
--- a/target/device/Atmel/Makefile.in
+++ b/target/device/Atmel/Makefile.in
@@ -8,7 +8,6 @@ BOARD_PATH:=$(call qstrip,$(BR2_BOARD_PATH))
ATMEL_TARGET:=$(ATMEL_PATH)/root
TARGET_SKELETON:=$(ATMEL_TARGET)/target_skeleton
-TARGET_DEVICE_TABLE:=$(ATMEL_TARGET)/device_table.txt
TARGET_SKELETON_LINKS:=$(ATMEL_TARGET)/skel.tar.gz
ifeq ($(BR2_avr32),y)
diff --git a/target/device/Atmel/arch-arm/Config.in.linux.patches b/target/device/Atmel/arch-arm/Config.in.linux.patches
index 0ea509196..8cd9a856a 100644
--- a/target/device/Atmel/arch-arm/Config.in.linux.patches
+++ b/target/device/Atmel/arch-arm/Config.in.linux.patches
@@ -2,11 +2,17 @@ choice
prompt "Add AT91 specific patches"
depends on BR2_KERNEL_ARCH_PATCH_ENABLED
depends on BR2_TARGET_ATMEL && BR2_arm
+ default BR2_ARCH_AT91_2_6_30 if BR2_LINUX_2_6_30
default BR2_ARCH_AT91_2_6_28 if BR2_LINUX_2_6_28
default BR2_ARCH_AT91_2_6_27 if BR2_LINUX_2_6_27
help
Select a patch to add to the Linux kernel
+config BR2_ARCH_AT91_2_6_30
+ bool "2.6.30"
+ help
+ Apply the at91 linux-2.6.30 patches
+
config BR2_ARCH_AT91_2_6_28
bool "2.6.28"
help
@@ -22,6 +28,7 @@ config BR2_KERNEL_ARCH_PATCH_VERSION
string
depends on BR2_KERNEL_ARCH_PATCH_ENABLED
depends on BR2_TARGET_ATMEL && BR2_arm
+ default "2.6.30" if BR2_ARCH_AT91_2_6_30
default "2.6.28" if BR2_ARCH_AT91_2_6_28
default "2.6.27" if BR2_ARCH_AT91_2_6_27
diff --git a/target/device/Atmel/atngw100-base/Makefile.in b/target/device/Atmel/atngw100-base/Makefile.in
index 467951f08..c2f296970 100644
--- a/target/device/Atmel/atngw100-base/Makefile.in
+++ b/target/device/Atmel/atngw100-base/Makefile.in
@@ -1,5 +1,4 @@
ifeq ($(BR2_TARGET_AVR32_ATNGW100_BASE),y)
UBOOT_BOARD_NAME:=atngw100
TARGET_SKELETON=$(BOARD_PATH)/target_skeleton
-TARGET_DEVICE_TABLE=$(BOARD_PATH)/device_table.txt
endif
diff --git a/target/device/Atmel/atngw100/Makefile.in b/target/device/Atmel/atngw100/Makefile.in
index 3c34d8d4a..7e02d8e83 100644
--- a/target/device/Atmel/atngw100/Makefile.in
+++ b/target/device/Atmel/atngw100/Makefile.in
@@ -1,5 +1,4 @@
ifeq ($(BR2_TARGET_AVR32_ATNGW100),y)
UBOOT_BOARD_NAME:=atngw100
TARGET_SKELETON=$(BOARD_PATH)/target_skeleton
-TARGET_DEVICE_TABLE=$(BOARD_PATH)/device_table.txt
endif
diff --git a/target/device/Atmel/atstk1005/Makefile.in b/target/device/Atmel/atstk1005/Makefile.in
index 4c3aadffb..84b31070d 100644
--- a/target/device/Atmel/atstk1005/Makefile.in
+++ b/target/device/Atmel/atstk1005/Makefile.in
@@ -1,4 +1,3 @@
ifeq ($(strip $(BR2_TARGET_AVR32_ATSTK1005)),y)
TARGET_SKELETON=$(BOARD_PATH)/target_skeleton
-TARGET_DEVICE_TABLE=$(BOARD_PATH)/device_table.txt
endif
diff --git a/target/device/Atmel/atstk100x/Makefile.in b/target/device/Atmel/atstk100x/Makefile.in
index e9dd4dc42..395c74a6e 100644
--- a/target/device/Atmel/atstk100x/Makefile.in
+++ b/target/device/Atmel/atstk100x/Makefile.in
@@ -1,5 +1,4 @@
ifeq ($(strip $(BR2_TARGET_AVR32_ATSTK1002)),y)
UBOOT_BOARD_NAME:=atstk1002
TARGET_SKELETON=$(BOARD_PATH)/target_skeleton
-TARGET_DEVICE_TABLE=$(BOARD_PATH)/device_table.txt
endif
diff --git a/target/device/KwikByte/kb9202/Makefile.in b/target/device/KwikByte/kb9202/Makefile.in
index 5d743cec5..0048dcc3a 100644
--- a/target/device/KwikByte/kb9202/Makefile.in
+++ b/target/device/KwikByte/kb9202/Makefile.in
@@ -1,4 +1,3 @@
BOARD_PATH=target/device/KwikByte/kb9202
TARGET_SKELETON=$(BOARD_PATH)/target_skeleton
-TARGET_DEVICE_TABLE=$(BOARD_PATH)/device_table.txt
diff --git a/target/device/valka/Makefile.in b/target/device/valka/Makefile.in
index 01422465e..fec4d88d5 100644
--- a/target/device/valka/Makefile.in
+++ b/target/device/valka/Makefile.in
@@ -2,7 +2,6 @@ ifeq ($(BR2_TARGET_VALKA),y)
VALKA_PATH= target/device/valka
TARGET_SKELETON=$(VALKA_PATH)/target_skeleton
-TARGET_DEVICE_TABLE=$(VALKA_PATH)/device_table.txt
KERNEL_HEADERS_PATCH_DIR=target/device/Atmel/arch-avr32/kernel-headers-2.6.28.2
valka_status:
@@ -10,7 +9,6 @@ valka_status:
@echo VALKA_PATH = $(VALKA_PATH)
@echo BOARD_NAME = $(BR_BOARD_NAME)
@echo TARGET_SKELETON = $(TARGET_SKELETON)
- @echo TARGET_DEVICE_TABLE = $(TARGET_DEVICE_TABLE)
@echo BR2_PACKAGE_BUSYBOX_CONFIG = $(BR2_PACKAGE_BUSYBOX_CONFIG)
@echo BR2_PACKAGE_LINUX_KCONFIG = $(BR2_PACKAGE_LINUX_KCONFIG)
@echo "*****************************************************************"
diff --git a/target/device/xtensa/Makefile.in b/target/device/xtensa/Makefile.in
index 7c95c239b..f878a822a 100644
--- a/target/device/xtensa/Makefile.in
+++ b/target/device/xtensa/Makefile.in
@@ -6,12 +6,4 @@ ifeq ($(strip $(BR2_TARGET_XTENSA_XTAV60)),y)
TARGET_SKELETON_PATCH:=target/device/xtensa
endif
-# Custom device table patch used when targeting ISS:
-OLD_TARGET_DEVICE_TABLE := $(TARGET_DEVICE_TABLE)
-TARGET_DEVICE_TABLE := target/device/xtensa/device_table.txt
-makedevs:
- @echo "Applying patch to $(TARGET_DEVICE_TABLE)"
- cp -f $(OLD_TARGET_DEVICE_TABLE) $(TARGET_DEVICE_TABLE)
- patch -p1 -g 0 < target/device/xtensa/device_table.diff
-
endif
diff --git a/target/device/xtensa/device_table.diff b/target/device/xtensa/device_table.diff
deleted file mode 100644
index 12f682546..000000000
--- a/target/device/xtensa/device_table.diff
+++ /dev/null
@@ -1,10 +0,0 @@
-diff --git a/target/generic/device_table.txt b/target/generic/device_table.txt
-index f4b16ba..b87bf69 100644
---- a/target/device/xtensa/device_table.txt
-+++ b/target/device/xtensa/device_table.txt
-@@ -169,3 +169,5 @@
- #/dev/mcd b 640 0 0 23 0 0 0
- #/dev/optcd b 640 0 0 17 0 0 0
-
-+/dev/simdisk0 b 640 0 0 240 0 0 0
-+/dev/simdisk1 b 640 0 0 240 1 0 0
diff --git a/target/device/xtensa/device_table.txt b/target/device/xtensa/device_table.txt
new file mode 100644
index 000000000..d0c746797
--- /dev/null
+++ b/target/device/xtensa/device_table.txt
@@ -0,0 +1,189 @@
+# When building a target filesystem, it is desirable to not have to
+# become root and then run 'mknod' a thousand times. Using a device
+# table you can create device nodes and directories "on the fly".
+#
+# This is a sample device table file for use with genext2fs. You can
+# do all sorts of interesting things with a device table file. For
+# example, if you want to adjust the permissions on a particular file
+# you can just add an entry like:
+# /sbin/foobar f 2755 0 0 - - - - -
+# and (assuming the file /sbin/foobar exists) it will be made setuid
+# root (regardless of what its permissions are on the host filesystem.
+# Furthermore, you can use a single table entry to create a many device
+# minors. For example, if I wanted to create /dev/hda and /dev/hda[0-15]
+# I could just use the following two table entries:
+# /dev/hda b 640 0 0 3 0 0 0 -
+# /dev/hda b 640 0 0 3 1 1 1 15
+#
+# Device table entries take the form of:
+# <name> <type> <mode> <uid> <gid> <major> <minor> <start> <inc> <count>
+# where name is the file name, type can be one of:
+# f A regular file
+# d Directory
+# c Character special device file
+# b Block special device file
+# p Fifo (named pipe)
+# uid is the user id for the target file, gid is the group id for the
+# target file. The rest of the entries (major, minor, etc) apply only
+# to device special files.
+
+# Have fun
+# -Erik Andersen <andersen@codepoet.org>
+#
+
+#<name> <type> <mode> <uid> <gid> <major> <minor> <start> <inc> <count>
+/dev d 755 0 0 - - - - -
+/dev/pts d 755 0 0 - - - - -
+/dev/shm d 755 0 0 - - - - -
+/tmp d 1777 0 0 - - - - -
+/etc d 755 0 0 - - - - -
+/home/default d 2755 1000 1000 - - - - -
+#<name> <type> <mode> <uid> <gid> <major> <minor> <start> <inc> <count>
+/bin/busybox f 4755 0 0 - - - - -
+/etc/shadow f 600 0 0 - - - - -
+/etc/passwd f 644 0 0 - - - - -
+/etc/network/if-up.d d 755 0 0 - - - - -
+/etc/network/if-pre-up.d d 755 0 0 - - - - -
+/etc/network/if-down.d d 755 0 0 - - - - -
+/etc/network/if-post-down.d d 755 0 0 - - - - -
+/usr/share/udhcpc/default.script f 755 0 0 - - - - -
+# uncomment this to allow starting x as non-root
+#/usr/X11R6/bin/Xfbdev f 4755 0 0 - - - - -
+# Normal system devices
+/dev/mem c 640 0 0 1 1 0 0 -
+/dev/kmem c 640 0 0 1 2 0 0 -
+/dev/null c 666 0 0 1 3 0 0 -
+/dev/zero c 666 0 0 1 5 0 0 -
+/dev/random c 666 0 0 1 8 0 0 -
+/dev/urandom c 666 0 0 1 9 0 0 -
+/dev/ram b 640 0 0 1 1 0 0 -
+/dev/ram b 640 0 0 1 0 0 1 4
+/dev/loop b 640 0 0 7 0 0 1 2
+/dev/rtc c 640 0 0 10 135 - - -
+/dev/console c 666 0 0 5 1 - - -
+/dev/tty c 666 0 0 5 0 - - -
+/dev/tty c 666 0 0 4 0 0 1 8
+/dev/ttyp c 666 0 0 3 0 0 1 10
+/dev/ptyp c 666 0 0 2 0 0 1 10
+/dev/ptmx c 666 0 0 5 2 - - -
+/dev/ttyP c 666 0 0 57 0 0 1 4
+/dev/ttyS c 666 0 0 4 64 0 1 4
+/dev/fb c 640 0 5 29 0 0 1 4
+#/dev/ttySA c 666 0 0 204 5 0 1 3
+/dev/psaux c 666 0 0 10 1 0 0 -
+#/dev/ppp c 666 0 0 108 0 - - -
+/dev/ttyCPM c 666 0 0 204 46 0 1 4
+/dev/ttyAMA c 666 0 0 204 64 0 1 4
+/dev/ttySAC c 666 0 0 204 64 0 1 4
+/dev/ttyPSC c 666 0 0 204 148 0 1 4
+/dev/ttyUL c 666 0 0 204 187 0 1 4
+/dev/ttymxc c 666 0 0 207 16 0 1 3
+
+# Input stuff
+/dev/input d 755 0 0 - - - - -
+/dev/input/mice c 640 0 0 13 63 0 0 -
+/dev/input/mouse c 660 0 0 13 32 0 1 4
+/dev/input/event c 660 0 0 13 64 0 1 4
+#/dev/input/js c 660 0 0 13 0 0 1 4
+
+
+# MTD stuff
+/dev/mtd c 640 0 0 90 0 0 2 4
+/dev/mtdblock b 640 0 0 31 0 0 1 4
+
+#Tun/tap driver
+/dev/net d 755 0 0 - - - - -
+/dev/net/tun c 660 0 0 10 200 - - -
+
+# Audio stuff
+#/dev/audio c 666 0 29 14 4 - - -
+#/dev/audio1 c 666 0 29 14 20 - - -
+#/dev/dsp c 666 0 29 14 3 - - -
+#/dev/dsp1 c 666 0 29 14 19 - - -
+#/dev/sndstat c 666 0 29 14 6 - - -
+
+# User-mode Linux stuff
+#/dev/ubda b 640 0 0 98 0 0 0 -
+#/dev/ubda b 640 0 0 98 1 1 1 15
+
+# IDE Devices
+/dev/hda b 640 0 0 3 0 0 0 -
+/dev/hda b 640 0 0 3 1 1 1 15
+/dev/hdb b 640 0 0 3 64 0 0 -
+/dev/hdb b 640 0 0 3 65 1 1 15
+#/dev/hdc b 640 0 0 22 0 0 0 -
+#/dev/hdc b 640 0 0 22 1 1 1 15
+#/dev/hdd b 640 0 0 22 64 0 0 -
+#/dev/hdd b 640 0 0 22 65 1 1 15
+#/dev/hde b 640 0 0 33 0 0 0 -
+#/dev/hde b 640 0 0 33 1 1 1 15
+#/dev/hdf b 640 0 0 33 64 0 0 -
+#/dev/hdf b 640 0 0 33 65 1 1 15
+#/dev/hdg b 640 0 0 34 0 0 0 -
+#/dev/hdg b 640 0 0 34 1 1 1 15
+#/dev/hdh b 640 0 0 34 64 0 0 -
+#/dev/hdh b 640 0 0 34 65 1 1 15
+
+# SCSI Devices
+/dev/sda b 640 0 0 8 0 0 0 -
+/dev/sda b 640 0 0 8 1 1 1 15
+/dev/sdb b 640 0 0 8 16 0 0 -
+/dev/sdb b 640 0 0 8 17 1 1 15
+#/dev/sdc b 640 0 0 8 32 0 0 -
+#/dev/sdc b 640 0 0 8 33 1 1 15
+#/dev/sdd b 640 0 0 8 48 0 0 -
+#/dev/sdd b 640 0 0 8 49 1 1 15
+#/dev/sde b 640 0 0 8 64 0 0 -
+#/dev/sde b 640 0 0 8 65 1 1 15
+#/dev/sdf b 640 0 0 8 80 0 0 -
+#/dev/sdf b 640 0 0 8 81 1 1 15
+#/dev/sdg b 640 0 0 8 96 0 0 -
+#/dev/sdg b 640 0 0 8 97 1 1 15
+#/dev/sdh b 640 0 0 8 112 0 0 -
+#/dev/sdh b 640 0 0 8 113 1 1 15
+#/dev/sg c 640 0 0 21 0 0 1 15
+#/dev/scd b 640 0 0 11 0 0 1 15
+#/dev/st c 640 0 0 9 0 0 1 8
+#/dev/nst c 640 0 0 9 128 0 1 8
+#/dev/st c 640 0 0 9 32 1 1 4
+#/dev/st c 640 0 0 9 64 1 1 4
+#/dev/st c 640 0 0 9 96 1 1 4
+
+# USB block devices (ub driver)
+/dev/uba b 640 0 0 180 0 0 0 -
+/dev/uba b 640 0 0 180 1 1 1 6
+/dev/ubb b 640 0 0 180 8 0 0 -
+/dev/ubb b 640 0 0 180 65 1 1 6
+
+# Floppy disk devices
+#/dev/fd b 640 0 0 2 0 0 1 2
+#/dev/fd0d360 b 640 0 0 2 4 0 0 -
+#/dev/fd1d360 b 640 0 0 2 5 0 0 -
+#/dev/fd0h1200 b 640 0 0 2 8 0 0 -
+#/dev/fd1h1200 b 640 0 0 2 9 0 0 -
+#/dev/fd0u1440 b 640 0 0 2 28 0 0 -
+#/dev/fd1u1440 b 640 0 0 2 29 0 0 -
+#/dev/fd0u2880 b 640 0 0 2 32 0 0 -
+#/dev/fd1u2880 b 640 0 0 2 33 0 0 -
+
+# All the proprietary cdrom devices in the world
+#/dev/aztcd b 640 0 0 29 0 0 0 -
+#/dev/bpcd b 640 0 0 41 0 0 0 -
+#/dev/capi20 c 640 0 0 68 0 0 1 2
+#/dev/cdu31a b 640 0 0 15 0 0 0 -
+#/dev/cdu535 b 640 0 0 24 0 0 0 -
+#/dev/cm206cd b 640 0 0 32 0 0 0 -
+#/dev/sjcd b 640 0 0 18 0 0 0 -
+#/dev/sonycd b 640 0 0 15 0 0 0 -
+#/dev/gscd b 640 0 0 16 0 0 0 -
+#/dev/sbpcd b 640 0 0 25 0 0 0 -
+#/dev/sbpcd b 640 0 0 25 0 0 1 4
+#/dev/mcd b 640 0 0 23 0 0 0 -
+#/dev/optcd b 640 0 0 17 0 0 0 -
+
+# I2C device nodes
+/dev/i2c- c 666 0 0 89 0 0 1 4
+
+# Xtensa special devices
+/dev/simdisk0 b 640 0 0 240 0 0 0
+/dev/simdisk1 b 640 0 0 240 1 0 0
diff --git a/target/generic/Makefile.in b/target/generic/Makefile.in
index f77f9698c..9a56f7604 100644
--- a/target/generic/Makefile.in
+++ b/target/generic/Makefile.in
@@ -1,10 +1,8 @@
# Default target skeleton stuff, may be overridden
TARGET_SKELETON=target/generic/target_skeleton
-TARGET_DEVICE_TABLE=target/generic/device_table.txt
ifeq ($(BR2_PACKAGE_BUSYBOX_SKELETON),y)
TARGET_SKELETON=target/generic/target_busybox_skeleton
-TARGET_DEVICE_TABLE=target/generic/mini_device_table.txt
endif
TARGET_GENERIC_HOSTNAME:=$(call qstrip,$(BR2_TARGET_GENERIC_HOSTNAME))
diff --git a/target/linux/Makefile.in b/target/linux/Makefile.in
index f3c7807c7..41e482131 100644
--- a/target/linux/Makefile.in
+++ b/target/linux/Makefile.in
@@ -153,7 +153,7 @@ endif
$(SED) '/CONFIG_INITRAMFS_SOURCE/d' $(LINUX26_DIR)/.config
$(SED) '/INITRAMFS_ROOT_.ID/d' $(LINUX26_DIR)/.config
ifeq ($(BR2_TARGET_ROOTFS_INITRAMFS),y)
- echo "CONFIG_INITRAMFS_SOURCE=\"$(INITRAMFS_TARGET)\"" >> \
+ echo "CONFIG_INITRAMFS_SOURCE=\"$(BINARIES_DIR)/rootfs.initramfs\"" >> \
$(LINUX26_DIR)/.config
echo "CONFIG_INITRAMFS_ROOT_UID=0" >> $(LINUX26_DIR)/.config
echo "CONFIG_INITRAMFS_ROOT_GID=0" >> $(LINUX26_DIR)/.config
diff --git a/target/linux/Makefile.in.advanced b/target/linux/Makefile.in.advanced
index f87d14d1b..745224d3f 100644
--- a/target/linux/Makefile.in.advanced
+++ b/target/linux/Makefile.in.advanced
@@ -344,7 +344,7 @@ endif
$(SED) '/CONFIG_INITRAMFS_SOURCE/d' $(LINUX26_DIR)/.config
$(SED) '/INITRAMFS_ROOT_.ID/d' $(LINUX26_DIR)/.config
ifeq ($(BR2_TARGET_ROOTFS_INITRAMFS),y)
- echo "CONFIG_INITRAMFS_SOURCE=\"$(INITRAMFS_TARGET)\"" >> \
+ echo "CONFIG_INITRAMFS_SOURCE=\"$(BINARIES_DIR)/rootfs.initramfs\"" >> \
$(LINUX26_DIR)/.config
echo "CONFIG_INITRAMFS_ROOT_UID=0" >> $(LINUX26_DIR)/.config
echo "CONFIG_INITRAMFS_ROOT_GID=0" >> $(LINUX26_DIR)/.config
diff --git a/target/makedevs/makedevs.mk b/target/makedevs/makedevs.mk
deleted file mode 100644
index fe426cafe..000000000
--- a/target/makedevs/makedevs.mk
+++ /dev/null
@@ -1,30 +0,0 @@
-#############################################################
-#
-# build makedevs to run on the build system, in order to create
-# device nodes and whatnot for the target device, in conjunction
-# with fakeroot.
-#
-#############################################################
-MAKEDEVS_DIR=$(BUILD_DIR)/makedevs-host
-
-$(MAKEDEVS_DIR)/makedevs.c: target/makedevs/makedevs.c
- rm -rf $(MAKEDEVS_DIR)
- mkdir $(MAKEDEVS_DIR)
- cp target/makedevs/makedevs.c $(MAKEDEVS_DIR)
-
-$(MAKEDEVS_DIR)/makedevs: $(MAKEDEVS_DIR)/makedevs.c
- $(HOSTCC) -Wall -Werror -O2 $(MAKEDEVS_DIR)/makedevs.c -o $@
-
-$(HOST_DIR)/usr/bin/makedevs: $(MAKEDEVS_DIR)/makedevs
- $(INSTALL) -m 755 $^ $@
-
-makedevs: $(HOST_DIR)/usr/bin/makedevs
-
-makedevs-source:
-
-makedevs-clean:
- rm -rf $(MAKEDEVS_DIR)/makedevs
-
-makedevs-dirclean:
- rm -rf $(MAKEDEVS_DIR)
-
diff --git a/target/xtensa/defconfig b/target/xtensa/defconfig
index f03f7a6d9..49b7eb3fd 100644
--- a/target/xtensa/defconfig
+++ b/target/xtensa/defconfig
@@ -104,6 +104,7 @@ BR2_PACKAGE_PORTMAP=y
#
# filesystem for target device
#
+BR2_ROOTFS_DEVICE_TABLE="target/device/xtensa/device_table.txt"
BR2_TARGET_ROOTFS_CPIO=y
BR2_TARGET_ROOTFS_CPIO_GZIP=y
BR2_TARGET_ROOTFS_INITRAMFS=y
diff --git a/toolchain/binutils/2.20.1/400-arm_link_speed.patch b/toolchain/binutils/2.20.1/400-arm_link_speed.patch
new file mode 100644
index 000000000..d03385a13
--- /dev/null
+++ b/toolchain/binutils/2.20.1/400-arm_link_speed.patch
@@ -0,0 +1,183 @@
+From Binutils CVS:
+
+http://sourceware.org/cgi-bin/cvsweb.cgi/src/bfd/elf32-arm.c?rev=1.230&content-type=text/x-cvsweb-markup&cvsroot=src
+
+Improves linking time from large projects on ARM.
+diff -dupr binutils-2.20.orig/bfd/elf32-arm.c binutils-2.20/bfd/elf32-arm.c
+--- binutils-2.20.orig/bfd/elf32-arm.c 2010-04-19 10:08:50.000000000 -0700
++++ binutils-2.20/bfd/elf32-arm.c 2010-04-19 10:12:45.000000000 -0700
+@@ -12736,108 +12736,15 @@ elf32_arm_section_from_shdr (bfd *abfd,
+ return TRUE;
+ }
+
+-/* A structure used to record a list of sections, independently
+- of the next and prev fields in the asection structure. */
+-typedef struct section_list
+-{
+- asection * sec;
+- struct section_list * next;
+- struct section_list * prev;
+-}
+-section_list;
+-
+-/* Unfortunately we need to keep a list of sections for which
+- an _arm_elf_section_data structure has been allocated. This
+- is because it is possible for functions like elf32_arm_write_section
+- to be called on a section which has had an elf_data_structure
+- allocated for it (and so the used_by_bfd field is valid) but
+- for which the ARM extended version of this structure - the
+- _arm_elf_section_data structure - has not been allocated. */
+-static section_list * sections_with_arm_elf_section_data = NULL;
+-
+-static void
+-record_section_with_arm_elf_section_data (asection * sec)
+-{
+- struct section_list * entry;
+-
+- entry = bfd_malloc (sizeof (* entry));
+- if (entry == NULL)
+- return;
+- entry->sec = sec;
+- entry->next = sections_with_arm_elf_section_data;
+- entry->prev = NULL;
+- if (entry->next != NULL)
+- entry->next->prev = entry;
+- sections_with_arm_elf_section_data = entry;
+-}
+-
+-static struct section_list *
+-find_arm_elf_section_entry (asection * sec)
+-{
+- struct section_list * entry;
+- static struct section_list * last_entry = NULL;
+-
+- /* This is a short cut for the typical case where the sections are added
+- to the sections_with_arm_elf_section_data list in forward order and
+- then looked up here in backwards order. This makes a real difference
+- to the ld-srec/sec64k.exp linker test. */
+- entry = sections_with_arm_elf_section_data;
+- if (last_entry != NULL)
+- {
+- if (last_entry->sec == sec)
+- entry = last_entry;
+- else if (last_entry->next != NULL
+- && last_entry->next->sec == sec)
+- entry = last_entry->next;
+- }
+-
+- for (; entry; entry = entry->next)
+- if (entry->sec == sec)
+- break;
+-
+- if (entry)
+- /* Record the entry prior to this one - it is the entry we are most
+- likely to want to locate next time. Also this way if we have been
+- called from unrecord_section_with_arm_elf_section_data() we will not
+- be caching a pointer that is about to be freed. */
+- last_entry = entry->prev;
+-
+- return entry;
+-}
+-
+ static _arm_elf_section_data *
+ get_arm_elf_section_data (asection * sec)
+ {
+- struct section_list * entry;
+-
+- entry = find_arm_elf_section_entry (sec);
+-
+- if (entry)
+- return elf32_arm_section_data (entry->sec);
++ if (sec && sec->owner && is_arm_elf (sec->owner))
++ return elf32_arm_section_data (sec);
+ else
+ return NULL;
+ }
+
+-static void
+-unrecord_section_with_arm_elf_section_data (asection * sec)
+-{
+- struct section_list * entry;
+-
+- entry = find_arm_elf_section_entry (sec);
+-
+- if (entry)
+- {
+- if (entry->prev != NULL)
+- entry->prev->next = entry->next;
+- if (entry->next != NULL)
+- entry->next->prev = entry->prev;
+- if (entry == sections_with_arm_elf_section_data)
+- sections_with_arm_elf_section_data = entry->next;
+- free (entry);
+- }
+-}
+-
+-
+ typedef struct
+ {
+ void *finfo;
+@@ -13230,8 +13137,6 @@ elf32_arm_new_section_hook (bfd *abfd, a
+ sec->used_by_bfd = sdata;
+ }
+
+- record_section_with_arm_elf_section_data (sec);
+-
+ return _bfd_elf_new_section_hook (abfd, sec);
+ }
+
+@@ -13659,44 +13564,13 @@ elf32_arm_write_section (bfd *output_bfd
+ }
+
+ free (map);
+- arm_data->mapcount = 0;
++ arm_data->mapcount = -1;
+ arm_data->mapsize = 0;
+ arm_data->map = NULL;
+- unrecord_section_with_arm_elf_section_data (sec);
+
+ return FALSE;
+ }
+
+-static void
+-unrecord_section_via_map_over_sections (bfd * abfd ATTRIBUTE_UNUSED,
+- asection * sec,
+- void * ignore ATTRIBUTE_UNUSED)
+-{
+- unrecord_section_with_arm_elf_section_data (sec);
+-}
+-
+-static bfd_boolean
+-elf32_arm_close_and_cleanup (bfd * abfd)
+-{
+- if (abfd->sections)
+- bfd_map_over_sections (abfd,
+- unrecord_section_via_map_over_sections,
+- NULL);
+-
+- return _bfd_elf_close_and_cleanup (abfd);
+-}
+-
+-static bfd_boolean
+-elf32_arm_bfd_free_cached_info (bfd * abfd)
+-{
+- if (abfd->sections)
+- bfd_map_over_sections (abfd,
+- unrecord_section_via_map_over_sections,
+- NULL);
+-
+- return _bfd_free_cached_info (abfd);
+-}
+-
+ /* Display STT_ARM_TFUNC symbols as functions. */
+
+ static void
+@@ -13882,8 +13756,6 @@ const struct elf_size_info elf32_arm_siz
+ #define bfd_elf32_find_inliner_info elf32_arm_find_inliner_info
+ #define bfd_elf32_new_section_hook elf32_arm_new_section_hook
+ #define bfd_elf32_bfd_is_target_special_symbol elf32_arm_is_target_special_symbol
+-#define bfd_elf32_close_and_cleanup elf32_arm_close_and_cleanup
+-#define bfd_elf32_bfd_free_cached_info elf32_arm_bfd_free_cached_info
+ #define bfd_elf32_bfd_final_link elf32_arm_final_link
+
+ #define elf_backend_get_symbol_type elf32_arm_get_symbol_type
diff --git a/toolchain/binutils/2.20/400-arm_link_speed.patch b/toolchain/binutils/2.20/400-arm_link_speed.patch
new file mode 100644
index 000000000..d03385a13
--- /dev/null
+++ b/toolchain/binutils/2.20/400-arm_link_speed.patch
@@ -0,0 +1,183 @@
+From Binutils CVS:
+
+http://sourceware.org/cgi-bin/cvsweb.cgi/src/bfd/elf32-arm.c?rev=1.230&content-type=text/x-cvsweb-markup&cvsroot=src
+
+Improves linking time from large projects on ARM.
+diff -dupr binutils-2.20.orig/bfd/elf32-arm.c binutils-2.20/bfd/elf32-arm.c
+--- binutils-2.20.orig/bfd/elf32-arm.c 2010-04-19 10:08:50.000000000 -0700
++++ binutils-2.20/bfd/elf32-arm.c 2010-04-19 10:12:45.000000000 -0700
+@@ -12736,108 +12736,15 @@ elf32_arm_section_from_shdr (bfd *abfd,
+ return TRUE;
+ }
+
+-/* A structure used to record a list of sections, independently
+- of the next and prev fields in the asection structure. */
+-typedef struct section_list
+-{
+- asection * sec;
+- struct section_list * next;
+- struct section_list * prev;
+-}
+-section_list;
+-
+-/* Unfortunately we need to keep a list of sections for which
+- an _arm_elf_section_data structure has been allocated. This
+- is because it is possible for functions like elf32_arm_write_section
+- to be called on a section which has had an elf_data_structure
+- allocated for it (and so the used_by_bfd field is valid) but
+- for which the ARM extended version of this structure - the
+- _arm_elf_section_data structure - has not been allocated. */
+-static section_list * sections_with_arm_elf_section_data = NULL;
+-
+-static void
+-record_section_with_arm_elf_section_data (asection * sec)
+-{
+- struct section_list * entry;
+-
+- entry = bfd_malloc (sizeof (* entry));
+- if (entry == NULL)
+- return;
+- entry->sec = sec;
+- entry->next = sections_with_arm_elf_section_data;
+- entry->prev = NULL;
+- if (entry->next != NULL)
+- entry->next->prev = entry;
+- sections_with_arm_elf_section_data = entry;
+-}
+-
+-static struct section_list *
+-find_arm_elf_section_entry (asection * sec)
+-{
+- struct section_list * entry;
+- static struct section_list * last_entry = NULL;
+-
+- /* This is a short cut for the typical case where the sections are added
+- to the sections_with_arm_elf_section_data list in forward order and
+- then looked up here in backwards order. This makes a real difference
+- to the ld-srec/sec64k.exp linker test. */
+- entry = sections_with_arm_elf_section_data;
+- if (last_entry != NULL)
+- {
+- if (last_entry->sec == sec)
+- entry = last_entry;
+- else if (last_entry->next != NULL
+- && last_entry->next->sec == sec)
+- entry = last_entry->next;
+- }
+-
+- for (; entry; entry = entry->next)
+- if (entry->sec == sec)
+- break;
+-
+- if (entry)
+- /* Record the entry prior to this one - it is the entry we are most
+- likely to want to locate next time. Also this way if we have been
+- called from unrecord_section_with_arm_elf_section_data() we will not
+- be caching a pointer that is about to be freed. */
+- last_entry = entry->prev;
+-
+- return entry;
+-}
+-
+ static _arm_elf_section_data *
+ get_arm_elf_section_data (asection * sec)
+ {
+- struct section_list * entry;
+-
+- entry = find_arm_elf_section_entry (sec);
+-
+- if (entry)
+- return elf32_arm_section_data (entry->sec);
++ if (sec && sec->owner && is_arm_elf (sec->owner))
++ return elf32_arm_section_data (sec);
+ else
+ return NULL;
+ }
+
+-static void
+-unrecord_section_with_arm_elf_section_data (asection * sec)
+-{
+- struct section_list * entry;
+-
+- entry = find_arm_elf_section_entry (sec);
+-
+- if (entry)
+- {
+- if (entry->prev != NULL)
+- entry->prev->next = entry->next;
+- if (entry->next != NULL)
+- entry->next->prev = entry->prev;
+- if (entry == sections_with_arm_elf_section_data)
+- sections_with_arm_elf_section_data = entry->next;
+- free (entry);
+- }
+-}
+-
+-
+ typedef struct
+ {
+ void *finfo;
+@@ -13230,8 +13137,6 @@ elf32_arm_new_section_hook (bfd *abfd, a
+ sec->used_by_bfd = sdata;
+ }
+
+- record_section_with_arm_elf_section_data (sec);
+-
+ return _bfd_elf_new_section_hook (abfd, sec);
+ }
+
+@@ -13659,44 +13564,13 @@ elf32_arm_write_section (bfd *output_bfd
+ }
+
+ free (map);
+- arm_data->mapcount = 0;
++ arm_data->mapcount = -1;
+ arm_data->mapsize = 0;
+ arm_data->map = NULL;
+- unrecord_section_with_arm_elf_section_data (sec);
+
+ return FALSE;
+ }
+
+-static void
+-unrecord_section_via_map_over_sections (bfd * abfd ATTRIBUTE_UNUSED,
+- asection * sec,
+- void * ignore ATTRIBUTE_UNUSED)
+-{
+- unrecord_section_with_arm_elf_section_data (sec);
+-}
+-
+-static bfd_boolean
+-elf32_arm_close_and_cleanup (bfd * abfd)
+-{
+- if (abfd->sections)
+- bfd_map_over_sections (abfd,
+- unrecord_section_via_map_over_sections,
+- NULL);
+-
+- return _bfd_elf_close_and_cleanup (abfd);
+-}
+-
+-static bfd_boolean
+-elf32_arm_bfd_free_cached_info (bfd * abfd)
+-{
+- if (abfd->sections)
+- bfd_map_over_sections (abfd,
+- unrecord_section_via_map_over_sections,
+- NULL);
+-
+- return _bfd_free_cached_info (abfd);
+-}
+-
+ /* Display STT_ARM_TFUNC symbols as functions. */
+
+ static void
+@@ -13882,8 +13756,6 @@ const struct elf_size_info elf32_arm_siz
+ #define bfd_elf32_find_inliner_info elf32_arm_find_inliner_info
+ #define bfd_elf32_new_section_hook elf32_arm_new_section_hook
+ #define bfd_elf32_bfd_is_target_special_symbol elf32_arm_is_target_special_symbol
+-#define bfd_elf32_close_and_cleanup elf32_arm_close_and_cleanup
+-#define bfd_elf32_bfd_free_cached_info elf32_arm_bfd_free_cached_info
+ #define bfd_elf32_bfd_final_link elf32_arm_final_link
+
+ #define elf_backend_get_symbol_type elf32_arm_get_symbol_type
diff --git a/toolchain/gdb/Config.in b/toolchain/gdb/Config.in
index 0e17ff673..e383949e5 100644
--- a/toolchain/gdb/Config.in
+++ b/toolchain/gdb/Config.in
@@ -3,9 +3,13 @@ comment "Gdb Options"
config BR2_PACKAGE_GDB
bool "Build gdb debugger for the Target"
select BR2_PACKAGE_NCURSES
+ depends on BR2_USE_WCHAR
help
Build the full gdb debugger to run on the target.
+comment "Gdb debugger for the target needs WCHAR support in toolchain"
+ depends on !BR2_USE_WHCAR
+
config BR2_PACKAGE_GDB_SERVER
bool "Build gdb server for the Target"
help
diff --git a/toolchain/uClibc/uClibc-0.9.31.config b/toolchain/uClibc/uClibc-0.9.31.config
index 8af08d92d..091f179ad 100644
--- a/toolchain/uClibc/uClibc-0.9.31.config
+++ b/toolchain/uClibc/uClibc-0.9.31.config
@@ -94,7 +94,7 @@ UCLIBC_HAS_PTY=y
ASSUME_DEVPTS=y
UNIX98PTY_ONLY=y
# UCLIBC_HAS_GETPT is not set
-# UCLIBC_HAS_LIBUTIL is not set
+UCLIBC_HAS_LIBUTIL=y
UCLIBC_HAS_TM_EXTENSIONS=y
UCLIBC_HAS_TZ_CACHING=y
UCLIBC_HAS_TZ_FILE=y
@@ -138,8 +138,8 @@ UCLIBC_USE_NETLINK=y
# UCLIBC_HAS_BSD_RES_CLOSE is not set
UCLIBC_HAS_COMPAT_RES_STATE=y
# UCLIBC_HAS_EXTRA_COMPAT_RES_STATE is not set
-# UCLIBC_HAS_LIBRESOLV_STUB is not set
-# UCLIBC_HAS_LIBNSL_STUB is not set
+UCLIBC_HAS_LIBRESOLV_STUB=y
+UCLIBC_HAS_LIBNSL_STUB=y
#
# String and Stdio Support