├── cross └── empty ├── out └── empty ├── src └── empty ├── work └── empty ├── .gitignore ├── .mailmap ├── utils ├── munge-config-sub └── build ├── make_fs.sh ├── cross-scripts ├── musl-0.9.9 ├── binutils-397a64b3 ├── linux-headers-3.7.5 └── gcc-4.2.1 ├── bootstrap.sh ├── linux.config ├── patches ├── binutils-screwinfo.patch ├── binutils-2.22-musl.diff ├── linux-posix-sed.patch ├── linux-workaround-old-gcc.patch ├── busybox-musl-fixes.patch ├── linux-noperl-capflags.patch ├── linux-noperl-headers.patch ├── gcc-4.2.1-musl.diff └── linux-noperl-timeconst.patch ├── README └── busybox.config /cross/empty: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /out/empty: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/empty: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /work/empty: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.tar.* 2 | *.img -------------------------------------------------------------------------------- /.mailmap: -------------------------------------------------------------------------------- 1 | Ada Worcester 2 | -------------------------------------------------------------------------------- /utils/munge-config-sub: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | if [ -e "${1:-config.sub}" ];then 3 | sed -i 's/linux-gnu\* |/linux-gnu* | linux-musl* |/' "${1:-config.sub}" 4 | fi 5 | -------------------------------------------------------------------------------- /make_fs.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -x 2 | BLOCKS=$(((1024*$(du -m -s out | awk '{print $1}')*12)/10)) 3 | genext2fs -z -d out/ -U -i 1024 -b $BLOCKS filesystem.img 4 | resize2fs filesystem.img 500M 5 | -------------------------------------------------------------------------------- /cross-scripts/musl-0.9.9: -------------------------------------------------------------------------------- 1 | url=http://www.etalabs.net/musl/releases/musl-$version.tar.gz 2 | 3 | out="$top/cross" 4 | 5 | config() { 6 | ./configure --host=$A-unknown-linux-musl --prefix="$out"/$A-unknown-linux-musl/ --syslibdir="$out"/lib \ 7 | --disable-gcc-wrapper --disable-shared 8 | } 9 | 10 | install() { 11 | make install 12 | } 13 | -------------------------------------------------------------------------------- /cross-scripts/binutils-397a64b3: -------------------------------------------------------------------------------- 1 | url=http://landley.net/aboriginal/mirror/$name-$version.tar.bz2 2 | out=$top/cross 3 | 4 | patches=binutils-screwinfo.patch 5 | 6 | config() { 7 | munge-config-sub 8 | ./configure --target=$A-unknown-linux-musl --prefix="$out" --disable-install-libbfd \ 9 | --disable-werror 10 | } 11 | 12 | install() { 13 | make install-gas install-ld install-binutils 14 | } 15 | -------------------------------------------------------------------------------- /bootstrap.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -e 2 | 3 | export PATH=$(pwd)/cross/bin:$(pwd)/utils:$PATH 4 | 5 | : ${A:=$(uname -m)} 6 | 7 | build cross-scripts/binutils-* 8 | build cross-scripts/gcc-* 9 | 10 | export CC="$A-unknown-linux-musl-gcc" 11 | export CFLAGS="-Os" 12 | export LDFLAGS="-s" 13 | 14 | build cross-scripts/linux-headers-* 15 | build cross-scripts/musl-* 16 | 17 | build build-scripts/musl-* 18 | build build-scripts/binutils-* 19 | build build-scripts/gcc-* 20 | build build-scripts/make-* 21 | build build-scripts/busybox-* 22 | build build-scripts/linux-* 23 | build build-scripts/finish 24 | -------------------------------------------------------------------------------- /linux.config: -------------------------------------------------------------------------------- 1 | CONFIG_KERNEL_XZ=y 2 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y 3 | CONFIG_PCI=y 4 | CONFIG_BINFMT_ELF=y 5 | CONFIG_NET=y 6 | CONFIG_PACKET=y 7 | CONFIG_UNIX=y 8 | CONFIG_INET=y 9 | CONFIG_DEVTMPFS=y 10 | CONFIG_DEVTMPFS_MOUNT=y 11 | CONFIG_FIRMWARE_IN_KERNEL=y 12 | CONFIG_BLK_DEV=y 13 | CONFIG_BLK_DEV_LOOP=y 14 | CONFIG_BLK_DEV_SD=y 15 | CONFIG_BLK_DEV_SR=y 16 | CONFIG_ATA=y 17 | CONFIG_ATA_SFF=y 18 | CONFIG_ATA_BMDMA=y 19 | CONFIG_ATA_PIIX=y 20 | CONFIG_NETDEVICES=y 21 | CONFIG_ETHERNET=y 22 | CONFIG_NET_VENDOR_INTEL=y 23 | CONFIG_E1000=y 24 | CONFIG_INPUT_MOUSE=y 25 | CONFIG_MOUSE_PS2=y 26 | CONFIG_EXT2_FS=y 27 | CONFIG_MSDOS_FS=y 28 | CONFIG_VFAT_FS=y 29 | CONFIG_TMPFS=y 30 | -------------------------------------------------------------------------------- /cross-scripts/linux-headers-3.7.5: -------------------------------------------------------------------------------- 1 | name=linux 2 | 3 | url=http://www.kernel.org/pub/linux/kernel/v3.0/linux-$version.tar.bz2 4 | 5 | out=$top/cross 6 | 7 | patches=linux-noperl-headers.patch 8 | 9 | export CROSS_COMPILE="$A-unknown-linux-musl-" 10 | ARCH=$A 11 | [ "$ARCH" = "i686" ] && ARCH=i386 12 | export ARCH 13 | 14 | config() { 15 | make allnoconfig KCONFIG_ALLCONFIG="$top/linux.config" 16 | } 17 | 18 | build() { 19 | make INSTALL_HDR_PATH=dest headers_install 20 | } 21 | 22 | install() { 23 | find dest/include \( -name .install -o -name ..install.cmd \) -delete 24 | mkdir -p "$out"/$A-unknown-linux-musl/include/ 25 | cp -rv dest/include/* "$out"/$A-unknown-linux-musl/include/ 26 | } 27 | -------------------------------------------------------------------------------- /patches/binutils-screwinfo.patch: -------------------------------------------------------------------------------- 1 | The binutils build notices that makeinfo is missing, but fails anyway, breaking 2 | the build. Make it stop. 3 | 4 | The "info" file format is obsolete (similar to "gopher"), was never used 5 | by anyone but the FSF, and failed to even replace man pages (which are 6 | now available in HTML). 7 | 8 | --- binutils-2.18/missing 2005-07-13 20:24:56.000000000 -0500 9 | +++ binutils-2.18/missing 2008-08-11 02:05:47.000000000 -0500 10 | @@ -299,7 +299,7 @@ 11 | fi 12 | # If the file does not exist, the user really needs makeinfo; 13 | # let's fail without touching anything. 14 | - test -f $file || exit 1 15 | + test -f $file || exit 0 16 | touch $file 17 | ;; 18 | 19 | -------------------------------------------------------------------------------- /patches/binutils-2.22-musl.diff: -------------------------------------------------------------------------------- 1 | diff --git a/config.sub b/config.sub 2 | --- a/config.sub 3 | +++ b/config.sub 4 | @@ -125,6 +125,7 @@ 5 | maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` 6 | case $maybe_os in 7 | nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ 8 | + linux-musl* | \ 9 | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ 10 | knetbsd*-gnu* | netbsd*-gnu* | \ 11 | kopensolaris*-gnu* | \ 12 | @@ -1335,6 +1336,7 @@ 13 | | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ 14 | | -mingw32* | -linux-gnu* | -linux-android* \ 15 | | -linux-newlib* | -linux-uclibc* \ 16 | + | -linux-musl* \ 17 | | -uxpv* | -beos* | -mpeix* | -udk* \ 18 | | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ 19 | | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ 20 | -------------------------------------------------------------------------------- /cross-scripts/gcc-4.2.1: -------------------------------------------------------------------------------- 1 | name=gcc 2 | 3 | url=http://ftp.gnu.org/gnu/gcc/gcc-$version/gcc-core-$version.tar.bz2 4 | patches=gcc-4.2.1-musl.diff 5 | 6 | out=$top/cross 7 | 8 | config() { 9 | sed -i 's@\./fixinc\.sh@-c true@' gcc/Makefile.in 10 | rm -rf "$work/gcc-build" 11 | mkdir "$work/gcc-build" 12 | cd "$work/gcc-build" 13 | "$work/$unpack"/configure --target=$A-unknown-linux-musl --enable-languages=c --with-newlib \ 14 | --disable-multilib --disable-libssp --disable-libquadmath \ 15 | --disable-threads --disable-decimal-float --disable-shared \ 16 | --disable-libmudflap --disable-libgomp --prefix="$out" 17 | } 18 | 19 | build() { 20 | make all-gcc 21 | } 22 | 23 | install() { 24 | make install-gcc 25 | cd "$work/$unpack" 26 | rm -rf "$work/gcc-build" 27 | cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \ 28 | `dirname $($A-unknown-linux-musl-gcc -print-libgcc-file-name)`/include/limits.h 29 | } 30 | -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | This is a complete, self-bootstrapping musl-based Linux system. It 2 | contains nothing more than Linux, Busybox, Binutils, GCC, GMP, MPFR, 3 | MPC, and GNU Make. I haven't attempted to minimize the configuration 4 | of these (yet), merely the package set. The programs get static-linked, 5 | but musl does install a dynamic linker, and GCC should be able to link 6 | programs against it. 7 | 8 | To build this from a non-musl Linux system, you will need to 9 | execute ./bootstrap.sh. This will build musl and a cross compiler, 10 | and then build the system against it, placing the result in ./out. 11 | 12 | ./make_fs.sh can be used to generate a bootable ext2 filesystem 13 | from the out directory. To use it, you will need the "genext2fs" program 14 | installed. If you don't feel like using it, you can just copy the files 15 | onto a filesystem of your choice and boot it. 16 | 17 | Some todos: 18 | * Fix the busybox patches so they work with latest busybox 19 | * Update to Linux 3.4 (after fixing those patches) 20 | * Backport the GCC patches, so I can use 4.2.x, and then remove 21 | MPFR, MPC, and GMP 22 | -------------------------------------------------------------------------------- /patches/linux-posix-sed.patch: -------------------------------------------------------------------------------- 1 | diff -Naur linux-2.6.38.2.orig/arch/x86/boot/Makefile linux-2.6.38.2/arch/x86/boot/Makefile 2 | --- linux-2.6.38.2.orig/arch/x86/boot/Makefile 2011-03-27 12:37:20.000000000 -0600 3 | +++ linux-2.6.38.2/arch/x86/boot/Makefile 2011-07-26 22:10:08.312027049 -0600 4 | @@ -88,7 +88,7 @@ 5 | 6 | SETUP_OBJS = $(addprefix $(obj)/,$(setup-y)) 7 | 8 | -sed-voffset := -e 's/^\([0-9a-fA-F]*\) . \(_text\|_end\)$$/\#define VO_\2 0x\1/p' 9 | +sed-voffset := -e 's/^\([0-9a-fA-F]*\) . \(_text\)$$/\#define VO_\2 0x\1/p' -e 's/^\([0-9a-fA-F]*\) . \(_end\)$$/\#define VO_\2 0x\1/p' 10 | 11 | quiet_cmd_voffset = VOFFSET $@ 12 | cmd_voffset = $(NM) $< | sed -n $(sed-voffset) > $@ 13 | @@ -97,7 +97,10 @@ 14 | $(obj)/voffset.h: vmlinux FORCE 15 | $(call if_changed,voffset) 16 | 17 | -sed-zoffset := -e 's/^\([0-9a-fA-F]*\) . \(startup_32\|input_data\|_end\|z_.*\)$$/\#define ZO_\2 0x\1/p' 18 | +sed-zoffset := -e 's/^\([0-9a-fA-F]*\) . \(startup_32\)$$/\#define ZO_\2 0x\1/p' \ 19 | + -e 's/^\([0-9a-fA-F]*\) . \(input_data\)$$/\#define ZO_\2 0x\1/p' \ 20 | + -e 's/^\([0-9a-fA-F]*\) . \(_end\)$$/\#define ZO_\2 0x\1/p' \ 21 | + -e 's/^\([0-9a-fA-F]*\) . \(z_.*\)$$/\#define ZO_\2 0x\1/p' 22 | 23 | quiet_cmd_zoffset = ZOFFSET $@ 24 | cmd_zoffset = $(NM) $< | sed -n $(sed-zoffset) > $@ 25 | -------------------------------------------------------------------------------- /patches/linux-workaround-old-gcc.patch: -------------------------------------------------------------------------------- 1 | diff --git a/arch/x86/kernel/cpu/perf_event_knc.c b/arch/x86/kernel/cpu/perf_event_knc.c 2 | index 4b7731b..838fa87 100644 3 | --- a/arch/x86/kernel/cpu/perf_event_knc.c 4 | +++ b/arch/x86/kernel/cpu/perf_event_knc.c 5 | @@ -17,7 +17,7 @@ static const u64 knc_perfmon_event_map[] = 6 | [PERF_COUNT_HW_BRANCH_MISSES] = 0x002b, 7 | }; 8 | 9 | -static __initconst u64 knc_hw_cache_event_ids 10 | +static const u64 __initconst knc_hw_cache_event_ids 11 | [PERF_COUNT_HW_CACHE_MAX] 12 | [PERF_COUNT_HW_CACHE_OP_MAX] 13 | [PERF_COUNT_HW_CACHE_RESULT_MAX] = 14 | @@ -284,7 +284,7 @@ static struct attribute *intel_knc_formats_attr[] = { 15 | NULL, 16 | }; 17 | 18 | -static __initconst struct x86_pmu knc_pmu = { 19 | +static const struct x86_pmu knc_pmu __initconst = { 20 | .name = "knc", 21 | .handle_irq = knc_pmu_handle_irq, 22 | .disable_all = knc_pmu_disable_all, 23 | diff --git a/arch/x86/kernel/cpu/perf_event_p6.c b/arch/x86/kernel/cpu/perf_event_p6.c 24 | index f2af39f..b1e2fe1 100644 25 | --- a/arch/x86/kernel/cpu/perf_event_p6.c 26 | +++ b/arch/x86/kernel/cpu/perf_event_p6.c 27 | @@ -19,7 +19,7 @@ static const u64 p6_perfmon_event_map[] = 28 | 29 | }; 30 | 31 | -static __initconst u64 p6_hw_cache_event_ids 32 | +static const u64 __initconst p6_hw_cache_event_ids 33 | [PERF_COUNT_HW_CACHE_MAX] 34 | [PERF_COUNT_HW_CACHE_OP_MAX] 35 | [PERF_COUNT_HW_CACHE_RESULT_MAX] = 36 | -------------------------------------------------------------------------------- /utils/build: -------------------------------------------------------------------------------- 1 | #!/bin/sh -e 2 | 3 | : ${A:=$(uname -m)} 4 | export A 5 | 6 | : ${top:=`pwd`} 7 | : ${out:=$top/out} 8 | : ${work:=$top/work} 9 | : ${srcdir:=$top/src} 10 | : ${patchdir:=$top/patches} 11 | 12 | fetch() { 13 | if [ "x$md5sum" != "x" ];then 14 | if [ !-e "$srcdir/$src" -o "$(md5sum $srcdir/$src)" != "$md5sum $srcdir/$src" ];then 15 | wget "$url" -O "$srcdir/$src" 16 | fi 17 | else 18 | test -e "$srcdir/$src" || wget "$url" -O "$srcdir/$src" 19 | fi 20 | } 21 | 22 | unpack() { 23 | cd "$work" 24 | tar -xf "$srcdir/$src" 25 | : ${unpack:=$(basename $(basename $(basename $(basename "$src" .gz) .bz2) .xz) .tar)} 26 | cd "$unpack" 27 | } 28 | 29 | prep() { 30 | for x in $patches;do 31 | patch -p1 <"$patchdir/$x" 32 | done 33 | } 34 | 35 | config() { 36 | if [ -x configure ];then 37 | munge-config-sub $config_sub 38 | ./configure --prefix= --host=$A-unknown-linux-musl \ 39 | --target=$A-unknown-linux-musl $config_options 40 | fi 41 | } 42 | 43 | build() { 44 | make 45 | } 46 | 47 | install() { 48 | make DESTDIR="$tmp" install 49 | } 50 | 51 | stage() { 52 | : 53 | } 54 | 55 | name=$(printf '%s' "$(basename "$1")" | sed 's|-[^-]*$||') 56 | version=$(printf '%s' "$(basename "$1")" | sed 's|[^-]*-||g') 57 | 58 | . "$(dirname $1)/$(basename $1)" 59 | : ${src:=$(printf '%s' "$url"|sed 's|[^/]*/||g')} 60 | : ${unpack:=$name-$version} 61 | ( 62 | fetch 63 | unpack 64 | prep 65 | config 66 | build 67 | tmp=`mktemp -d` 68 | install 69 | stage 70 | if [ -n "`ls "$tmp"`" ]; then 71 | cp -rv "$tmp"/* "$out" 72 | fi 73 | rm -rf "$tmp" 74 | cd "$top" 75 | rm -rf "$work/$unpack" 76 | ) 77 | -------------------------------------------------------------------------------- /patches/busybox-musl-fixes.patch: -------------------------------------------------------------------------------- 1 | diff -Naur busybox-1.19.3-old/include/platform.h busybox-1.19.3/include/platform.h 2 | --- busybox-1.19.3-old/include/platform.h 2011-10-29 05:43:01.000000000 -0600 3 | +++ busybox-1.19.3/include/platform.h 2011-12-18 15:53:49.817278374 -0700 4 | @@ -443,6 +443,13 @@ 5 | # undef HAVE_NET_ETHERNET_H 6 | #endif 7 | 8 | +#if defined(__musl__) 9 | +# undef HAVE_SETBIT 10 | +# include 11 | +# include 12 | +# include 13 | +#endif 14 | + 15 | /* 16 | * Now, define prototypes for all the functions defined in platform.c 17 | * These must come after all the HAVE_* macros are defined (or not) 18 | diff -Naur busybox-1.19.3-old/miscutils/man.c busybox-1.19.3/miscutils/man.c 19 | --- busybox-1.19.3-old/miscutils/man.c 2011-09-05 20:35:17.000000000 -0600 20 | +++ busybox-1.19.3/miscutils/man.c 2011-12-18 15:53:49.817278374 -0700 21 | @@ -116,7 +116,7 @@ 22 | /* "2>&1" is added so that nroff errors are shown in pager too. 23 | * Otherwise it may show just empty screen */ 24 | cmd = xasprintf( 25 | - man ? "gtbl | nroff -Tlatin1 -mandoc 2>&1 | %s" 26 | + man ? "nroff -Tutf -man 2>&1 | %s" 27 | : "%s", 28 | pager); 29 | system(cmd); 30 | diff -Naur busybox-1.19.3-old/networking/ifconfig.c busybox-1.19.3/networking/ifconfig.c 31 | --- busybox-1.19.3-old/networking/ifconfig.c 2011-09-05 20:35:17.000000000 -0600 32 | +++ busybox-1.19.3/networking/ifconfig.c 2011-12-18 15:53:49.817278374 -0700 33 | @@ -56,7 +56,7 @@ 34 | #endif 35 | 36 | #if ENABLE_FEATURE_IFCONFIG_SLIP 37 | -# include 38 | +# include 39 | #endif 40 | 41 | /* I don't know if this is needed for busybox or not. Anyone? */ 42 | diff -Naur busybox-1.19.3-old/networking/libiproute/iplink.c busybox-1.19.3/networking/libiproute/iplink.c 43 | --- busybox-1.19.3-old/networking/libiproute/iplink.c 2011-09-05 20:35:17.000000000 -0600 44 | +++ busybox-1.19.3/networking/libiproute/iplink.c 2011-12-18 15:53:49.821278291 -0700 45 | @@ -5,7 +5,6 @@ 46 | * Licensed under GPLv2 or later, see file LICENSE in this source tree. 47 | */ 48 | #include 49 | -#include 50 | #include 51 | #include 52 | 53 | diff -Naur busybox-1.19.3-old/util-linux/fdisk.c busybox-1.19.3/util-linux/fdisk.c 54 | --- busybox-1.19.3-old/util-linux/fdisk.c 2011-09-05 20:35:17.000000000 -0600 55 | +++ busybox-1.19.3/util-linux/fdisk.c 2011-12-18 15:53:49.821278291 -0700 56 | @@ -550,7 +550,7 @@ 57 | { 58 | #if ENABLE_FDISK_SUPPORT_LARGE_DISKS 59 | off64_t off = (off64_t)secno * sector_size; 60 | - if (lseek64(dev_fd, off, SEEK_SET) == (off64_t) -1) 61 | + if (lseek(dev_fd, off, SEEK_SET) == (off64_t) -1) 62 | fdisk_fatal(unable_to_seek); 63 | #else 64 | uint64_t off = (uint64_t)secno * sector_size; 65 | -------------------------------------------------------------------------------- /patches/linux-noperl-capflags.patch: -------------------------------------------------------------------------------- 1 | From: Rob Landley 2 | 3 | Generate asm-x86/cpufeature.h with posix-2008 commands instead of perl. 4 | 5 | Signed-off-by: Rob Landley 6 | --- 7 | 8 | arch/x86/kernel/cpu/Makefile | 4 +- 9 | arch/x86/kernel/cpu/mkcapflags.pl | 45 ---------------------------- 10 | arch/x86/kernel/cpu/mkcapflags.sh | 39 ++++++++++++++++++++++++ 11 | 3 files changed, 41 insertions(+), 47 deletions(-) 12 | 13 | --- linux/arch/x86/kernel/cpu/mkcapflags.pl 14 | +++ /dev/null 15 | @@ -1,48 +0,0 @@ 16 | -#!/usr/bin/perl -w 17 | -# 18 | -# Generate the x86_cap_flags[] array from include/asm-x86/cpufeature.h 19 | -# 20 | - 21 | -($in, $out) = @ARGV; 22 | - 23 | -open(IN, "< $in\0") or die "$0: cannot open: $in: $!\n"; 24 | -open(OUT, "> $out\0") or die "$0: cannot create: $out: $!\n"; 25 | - 26 | -print OUT "#ifndef _ASM_X86_CPUFEATURE_H\n"; 27 | -print OUT "#include \n"; 28 | -print OUT "#endif\n"; 29 | -print OUT "\n"; 30 | -print OUT "const char * const x86_cap_flags[NCAPINTS*32] = {\n"; 31 | - 32 | -%features = (); 33 | -$err = 0; 34 | - 35 | -while (defined($line = )) { 36 | - if ($line =~ /^\s*\#\s*define\s+(X86_FEATURE_(\S+))\s+(.*)$/) { 37 | - $macro = $1; 38 | - $feature = "\L$2"; 39 | - $tail = $3; 40 | - if ($tail =~ /\/\*\s*\"([^"]*)\".*\*\//) { 41 | - $feature = "\L$1"; 42 | - } 43 | - 44 | - next if ($feature eq ''); 45 | - 46 | - if ($features{$feature}++) { 47 | - print STDERR "$in: duplicate feature name: $feature\n"; 48 | - $err++; 49 | - } 50 | - printf OUT "\t%-32s = \"%s\",\n", "[$macro]", $feature; 51 | - } 52 | -} 53 | -print OUT "};\n"; 54 | - 55 | -close(IN); 56 | -close(OUT); 57 | - 58 | -if ($err) { 59 | - unlink($out); 60 | - exit(1); 61 | -} 62 | - 63 | -exit(0); 64 | --- /dev/null 2012-07-11 05:54:12.790418331 -0500 65 | +++ linux/arch/x86/kernel/cpu/mkcapflags.sh 2012-07-22 13:13:57.700823094 -0500 66 | @@ -0,0 +1,41 @@ 67 | +#!/bin/sh 68 | +# 69 | +# Generate the x86_cap_flags[] array from include/asm/cpufeature.h 70 | +# 71 | + 72 | +IN=$1 73 | +OUT=$2 74 | + 75 | +TABS="$(printf '\t\t\t\t\t')" 76 | +trap 'rm "$OUT"' EXIT 77 | + 78 | +( 79 | + echo "#ifndef _ASM_X86_CPUFEATURE_H" 80 | + echo "#include " 81 | + echo "#endif" 82 | + echo "" 83 | + echo "const char * const x86_cap_flags[NCAPINTS*32] = {" 84 | + 85 | + # Iterate through any input lines starting with #define X86_FEATURE_ 86 | + sed -n -e 's/\t/ /g' -e 's/^ *# *define *X86_FEATURE_//p' $IN | 87 | + while read i 88 | + do 89 | + # Name is everything up to the first whitespace 90 | + NAME="$(echo "$i" | sed 's/ .*//')" 91 | + 92 | + # If the /* comment */ starts with a quote string, grab that. 93 | + VALUE="$(echo "$i" | sed -n 's@.*/\* *\("[^"]*"\).*\*/@\1@p')" 94 | + [ -z "$VALUE" ] && VALUE="\"$NAME\"" 95 | + [ "$VALUE" == '""' ] && continue 96 | + 97 | + # Name is uppercase, VALUE is all lowercase 98 | + VALUE="$(echo "$VALUE" | tr A-Z a-z)" 99 | + 100 | + TABCOUNT=$(( ( 5*8 - 14 - $(echo "$NAME" | wc -c) ) / 8 )) 101 | + printf "\t[%s]%.*s = %s,\n" \ 102 | + "X86_FEATURE_$NAME" "$TABCOUNT" "$TABS" "$VALUE" 103 | + done 104 | + echo "};" 105 | +) > $OUT 106 | + 107 | +trap - EXIT 108 | diff --git a/arch/x86/kernel/cpu/Makefile b/arch/x86/kernel/cpu/Makefile 109 | index 25f24dc..9edf7e7 100644 110 | --- a/arch/x86/kernel/cpu/Makefile 111 | +++ b/arch/x86/kernel/cpu/Makefile 112 | @@ -40,10 +40,10 @@ obj-$(CONFIG_MTRR) += mtrr/ 113 | obj-$(CONFIG_X86_LOCAL_APIC) += perfctr-watchdog.o perf_event_amd_ibs.o 114 | 115 | quiet_cmd_mkcapflags = MKCAP $@ 116 | - cmd_mkcapflags = $(PERL) $(srctree)/$(src)/mkcapflags.pl $< $@ 117 | + cmd_mkcapflags = $(CONFIG_SHELL) $(srctree)/$(src)/mkcapflags.sh $< $@ 118 | 119 | cpufeature = $(src)/../../include/asm/cpufeature.h 120 | 121 | targets += capflags.c 122 | -$(obj)/capflags.c: $(cpufeature) $(src)/mkcapflags.pl FORCE 123 | +$(obj)/capflags.c: $(cpufeature) $(src)/mkcapflags.sh FORCE 124 | $(call if_changed,mkcapflags) 125 | -------------------------------------------------------------------------------- /patches/linux-noperl-headers.patch: -------------------------------------------------------------------------------- 1 | Subject: [PATCH] Replace scripts/headers_install.pl with a shell script. 2 | 3 | From: Rob Landley 4 | 5 | Remove perl from make headers_install by replacing a perl script (doing 6 | a simple regex search and replace) with a smaller, faster, simpler, 7 | POSIX-2008 shell script implementation. The new shell script is a single 8 | for loop calling sed and piping its output through unifdef to produce the 9 | target file. 10 | 11 | Previous submission: Tuesday Jan 18, 2011 12 | Message-ID: <4D359E5C.1070002@parallels.com> 13 | 14 | Signed-off-by: Rob Landley 15 | --- 16 | 17 | scripts/Makefile.headersinst | 6 +-- 18 | scripts/headers_install.pl | 58 --------------------------------- 19 | scripts/headers_install.sh | 43 ++++++++++++++++++++++++ 20 | 3 files changed, 46 insertions(+), 61 deletions(-) 21 | 22 | diff -ruN linux-3.1/scripts/headers_install.sh linux-2.6.30/scripts/headers_install.sh 23 | --- linux-3.1/scripts/headers_install.sh 24 | +++ linux/scripts/headers_install.sh 25 | @@ -0,0 +1,43 @@ 26 | +#!/bin/sh 27 | + 28 | +if [ $# -lt 1 ] 29 | +then 30 | + echo "Usage: headers_install.sh OUTDIR [FILES...] 31 | + echo 32 | + echo "Prepares kernel header files for use by user space, by removing" 33 | + echo "all compiler.h definitions and #includes, removing any" 34 | + echo "#ifdef __KERNEL__ sections, and putting __underscores__ around" 35 | + echo "asm/inline/volatile keywords." 36 | + echo 37 | + echo "OUTDIR: directory to write each userspace header FILE to." 38 | + echo "FILES: list of header files to operate on." 39 | + 40 | + exit 1 41 | +fi 42 | + 43 | +# Grab arguments 44 | + 45 | +OUTDIR="$1" 46 | +shift 47 | + 48 | +# Iterate through files listed on command line 49 | + 50 | +FILE= 51 | +trap 'rm -f "$OUTDIR/$FILE" "$OUTDIR/$FILE.sed"' EXIT 52 | +for i in "$@" 53 | +do 54 | + FILE="$(basename "$i")" 55 | + sed -r \ 56 | + -e 's/([ \t(])(__user|__force|__iomem)[ \t]/\1/g' \ 57 | + -e 's/__attribute_const__([ \t]|$)/\1/g' \ 58 | + -e 's@^#include @@' \ 59 | + -e 's/(^|[^a-zA-Z0-9])__packed([^a-zA-Z0-9_]|$)/\1__attribute__((packed))\2/g' \ 60 | + -e 's/(^|[ \t])(inline|asm|volatile)([ \t(]|$)/\1__\2__\3/g' \ 61 | + -e 's@#(ifndef|define|endif /[*]) _UAPI@#\1 @' \ 62 | + "$i" > "$OUTDIR/$FILE.sed" || exit 1 63 | + scripts/unifdef -U__KERNEL__ -D__EXPORTED_HEADERS__ "$OUTDIR/$FILE.sed" \ 64 | + > "$OUTDIR/$FILE" 65 | + [ $? -gt 1 ] && exit 1 66 | + rm -f "$OUTDIR/$FILE.sed" 67 | +done 68 | +trap - EXIT 69 | diff -ruN linux-3.1/scripts/Makefile.headersinst 70 | --- linux-3.1/scripts/Makefile.headersinst 71 | +++ linux/scripts/Makefile.headersinst 72 | @@ -55,7 +55,7 @@ 73 | quiet_cmd_install = INSTALL $(printdir) ($(words $(all-files))\ 74 | file$(if $(word 2, $(all-files)),s)) 75 | cmd_install = \ 76 | - $(PERL) $< $(installdir) $(SRCARCH) $(input-files); \ 77 | + $(CONFIG_SHELL) $< $(installdir) $(input-files); \ 78 | for F in $(wrapper-files); do \ 79 | echo "\#include " > $(installdir)/$$F; \ 80 | done; \ 81 | @@ -83,7 +83,7 @@ 82 | @: 83 | 84 | targets += $(install-file) 85 | -$(install-file): scripts/headers_install.pl $(input-files) FORCE 86 | +$(install-file): scripts/headers_install.sh $(input-files) FORCE 87 | $(if $(unwanted),$(call cmd,remove),) 88 | $(if $(wildcard $(dir $@)),,$(shell mkdir -p $(dir $@))) 89 | $(call if_changed,install) 90 | --- a/scripts/headers_install.pl 91 | +++ /dev/null 92 | @@ -1,63 +0,0 @@ 93 | -#!/usr/bin/perl -w 94 | -# 95 | -# headers_install prepare the listed header files for use in 96 | -# user space and copy the files to their destination. 97 | -# 98 | -# Usage: headers_install.pl readdir installdir arch [files...] 99 | -# installdir: dir to install the files to 100 | -# arch: current architecture 101 | -# arch is used to force a reinstallation when the arch 102 | -# changes because kbuild then detect a command line change. 103 | -# files: list of files to check 104 | -# 105 | -# Step in preparation for users space: 106 | -# 1) Drop all use of compiler.h definitions 107 | -# 2) Drop include of compiler.h 108 | -# 3) Drop all sections defined out by __KERNEL__ (using unifdef) 109 | - 110 | -use strict; 111 | - 112 | -my ($installdir, $arch, @files) = @ARGV; 113 | - 114 | -my $unifdef = "scripts/unifdef -U__KERNEL__ -D__EXPORTED_HEADERS__"; 115 | - 116 | -foreach my $filename (@files) { 117 | - my $file = $filename; 118 | - $file =~ s!^.*/!!; 119 | - 120 | - my $tmpfile = "$installdir/$file.tmp"; 121 | - 122 | - open(my $in, '<', $filename) 123 | - or die "$filename: $!\n"; 124 | - open(my $out, '>', $tmpfile) 125 | - or die "$tmpfile: $!\n"; 126 | - while (my $line = <$in>) { 127 | - $line =~ s/([\s(])__user\s/$1/g; 128 | - $line =~ s/([\s(])__force\s/$1/g; 129 | - $line =~ s/([\s(])__iomem\s/$1/g; 130 | - $line =~ s/\s__attribute_const__\s/ /g; 131 | - $line =~ s/\s__attribute_const__$//g; 132 | - $line =~ s/\b__packed\b/__attribute__((packed))/g; 133 | - $line =~ s/^#include //; 134 | - $line =~ s/(^|\s)(inline)\b/$1__$2__/g; 135 | - $line =~ s/(^|\s)(asm)\b(\s|[(]|$)/$1__$2__$3/g; 136 | - $line =~ s/(^|\s|[(])(volatile)\b(\s|[(]|$)/$1__$2__$3/g; 137 | - $line =~ s/#ifndef _UAPI/#ifndef /; 138 | - $line =~ s/#define _UAPI/#define /; 139 | - $line =~ s!#endif /[*] _UAPI!#endif /* !; 140 | - printf {$out} "%s", $line; 141 | - } 142 | - close $out; 143 | - close $in; 144 | - 145 | - system $unifdef . " $tmpfile > $installdir/$file"; 146 | - # unifdef will exit 0 on success, and will exit 1 when the 147 | - # file was processed successfully but no changes were made, 148 | - # so abort only when it's higher than that. 149 | - my $e = $? >> 8; 150 | - if ($e > 1) { 151 | - die "$tmpfile: $!\n"; 152 | - } 153 | - unlink $tmpfile; 154 | -} 155 | -exit 0; 156 | -------------------------------------------------------------------------------- /patches/gcc-4.2.1-musl.diff: -------------------------------------------------------------------------------- 1 | diff --git a/config.sub b/config.sub 2 | --- a/config.sub 3 | +++ b/config.sub 4 | @@ -120,7 +120,7 @@ 5 | # Here we must recognize all the valid KERNEL-OS combinations. 6 | maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` 7 | case $maybe_os in 8 | - nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ 9 | + nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | linux-musl* | \ 10 | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ 11 | storm-chaos* | os2-emx* | rtmk-nova*) 12 | os=-$maybe_os 13 | @@ -1211,7 +1211,7 @@ 14 | | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ 15 | | -chorusos* | -chorusrdb* \ 16 | | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ 17 | - | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ 18 | + | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* | -linux-musl* \ 19 | | -uxpv* | -beos* | -mpeix* | -udk* \ 20 | | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ 21 | | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ 22 | diff --git a/gcc/config.gcc b/gcc/config.gcc 23 | --- a/gcc/config.gcc 24 | +++ b/gcc/config.gcc 25 | @@ -469,10 +469,13 @@ 26 | tmake_file="t-slibgcc-elf-ver t-linux" 27 | case ${target} in 28 | *-*-*uclibc*) 29 | - tm_defines="${tm_defines} UCLIBC_DEFAULT=1" 30 | + tm_defines="${tm_defines} UCLIBC_DEFAULT=1 MUSL_DEFAULT=0" 31 | + ;; 32 | + *-*-*musl*) 33 | + tm_defines="$tm_defines UCLIBC_DEFAULT=0 MUSL_DEFAULT=1" 34 | ;; 35 | *) 36 | - tm_defines="${tm_defines} UCLIBC_DEFAULT=0" 37 | + tm_defines="${tm_defines} UCLIBC_DEFAULT=0 MUSL_DEFAULT=1" 38 | ;; 39 | esac 40 | # Assume that glibc or uClibc are being used and so __cxa_atexit is provided. 41 | diff --git a/gcc/config/arm/linux-eabi.h b/gcc/config/arm/linux-eabi.h 42 | --- a/gcc/config/arm/linux-eabi.h 43 | +++ b/gcc/config/arm/linux-eabi.h 44 | @@ -55,6 +55,10 @@ 45 | #undef GLIBC_DYNAMIC_LINKER 46 | #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.3" 47 | 48 | +/* musl has no "classic" (i.e. broken) mode */ 49 | +#undef MUSL_DYNAMIC_LINKER 50 | +#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-arm.so.1" 51 | + 52 | /* At this point, bpabi.h will have clobbered LINK_SPEC. We want to 53 | use the GNU/Linux version, not the generic BPABI version. */ 54 | #undef LINK_SPEC 55 | diff --git a/gcc/config/i386/linux.h b/gcc/config/i386/linux.h 56 | --- a/gcc/config/i386/linux.h 57 | +++ b/gcc/config/i386/linux.h 58 | @@ -102,6 +102,7 @@ 59 | /* These macros may be overridden in k*bsd-gnu.h and i386/k*bsd-gnu.h. */ 60 | #define LINK_EMULATION "elf_i386" 61 | #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2" 62 | +#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-i386.so.1" 63 | 64 | #undef SUBTARGET_EXTRA_SPECS 65 | #define SUBTARGET_EXTRA_SPECS \ 66 | diff --git a/gcc/config/i386/linux64.h b/gcc/config/i386/linux64.h 67 | --- a/gcc/config/i386/linux64.h 68 | +++ b/gcc/config/i386/linux64.h 69 | @@ -52,6 +52,9 @@ 70 | #define GLIBC_DYNAMIC_LINKER32 "/lib/ld-linux.so.2" 71 | #define GLIBC_DYNAMIC_LINKER64 "/lib64/ld-linux-x86-64.so.2" 72 | 73 | +#define MUSL_DYNAMIC_LINKER32 "/lib/ld-musl-i386.so.1" 74 | +#define MUSL_DYNAMIC_LINKER64 "/lib/ld-musl-x86_64.so.1" 75 | + 76 | #undef LINK_SPEC 77 | #define LINK_SPEC "%{!m32:-m elf_x86_64} %{m32:-m elf_i386} \ 78 | %{shared:-shared} \ 79 | diff --git a/gcc/config/linux.h b/gcc/config/linux.h 80 | --- a/gcc/config/linux.h 81 | +++ b/gcc/config/linux.h 82 | @@ -103,9 +103,11 @@ 83 | uClibc is the default C library and whether -muclibc or -mglibc has 84 | been passed to change the default. */ 85 | #if UCLIBC_DEFAULT 86 | -#define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:%{muclibc:%e-mglibc and -muclibc used together}" G ";:" U "}" 87 | +#define CHOOSE_DYNAMIC_LINKER(G, U, M) "%{mmusl:" M ";:%{mglibc:%{muclibc:%e-mglibc and -muclibc used together}" G ";:" U "}}" 88 | +#elif defined(MUSL_DEFAULT) 89 | +#define CHOOSE_DYNAMIC_LINKER(G, U, M) "%{mglibc:" G ";:%{muclibc:" U ";:" M "}}" 90 | #else 91 | -#define CHOOSE_DYNAMIC_LINKER(G, U) "%{muclibc:%{mglibc:%e-mglibc and -muclibc used together}" U ";:" G "}" 92 | +#define CHOOSE_DYNAMIC_LINKER(G, U, M) "%{mmusl:" M ";:%{muclibc:%{mglibc:%e-mglibc and -muclibc used together}" U ";:" G "}}" 93 | #endif 94 | 95 | /* For most targets the following definitions suffice; 96 | @@ -116,11 +118,11 @@ 97 | #define UCLIBC_DYNAMIC_LINKER32 "/lib/ld-uClibc.so.0" 98 | #define UCLIBC_DYNAMIC_LINKER64 "/lib/ld64-uClibc.so.0" 99 | #define LINUX_DYNAMIC_LINKER \ 100 | - CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER) 101 | + CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER, MUSL_DYNAMIC_LINKER) 102 | #define LINUX_DYNAMIC_LINKER32 \ 103 | - CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER32, UCLIBC_DYNAMIC_LINKER32) 104 | + CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER32, UCLIBC_DYNAMIC_LINKER32, MUSL_DYNAMIC_LINKER32) 105 | #define LINUX_DYNAMIC_LINKER64 \ 106 | - CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER64) 107 | + CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER64, MUSL_DYNAMIC_LINKER64) 108 | 109 | /* Determine whether the entire c99 runtime 110 | is present in the runtime library. */ 111 | diff --git a/gcc/config/linux.opt b/gcc/config/linux.opt 112 | --- a/gcc/config/linux.opt 113 | +++ b/gcc/config/linux.opt 114 | @@ -25,5 +25,9 @@ 115 | Use uClibc instead of GNU libc 116 | 117 | mglibc 118 | -Target RejectNegative Report InverseMask(UCLIBC, GLIBC) Var(linux_uclibc) VarExists 119 | +Target RejectNegative Report InverseMask(UCLIBC, GLIBC) Var(linux_uclibc) VarExists InverseMask(MUSL, GLIBC) Var(linux_musl) VarExists 120 | Use GNU libc instead of uClibc 121 | + 122 | +mmusl 123 | +Target RejectNegative Report Mask(MUSL) Var(linux_musl) Init(MUSL_DEFAULT ? OPTION_MASK_MUSL : 0) 124 | +Use musl C library 125 | diff --git a/gcc/config/mips/linux.h b/gcc/config/mips/linux.h 126 | --- a/gcc/config/mips/linux.h 127 | +++ b/gcc/config/mips/linux.h 128 | @@ -106,6 +106,8 @@ 129 | 130 | #define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1" 131 | 132 | +#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-mips.so.1" 133 | + 134 | /* Borrowed from sparc/linux.h */ 135 | #undef LINK_SPEC 136 | #define LINK_SPEC \ 137 | diff --git a/gcc/ginclude/stddef.h b/gcc/ginclude/stddef.h 138 | --- a/gcc/ginclude/stddef.h 139 | +++ b/gcc/ginclude/stddef.h 140 | @@ -186,6 +186,7 @@ 141 | #ifndef _GCC_SIZE_T 142 | #ifndef _SIZET_ 143 | #ifndef __size_t 144 | +#ifndef __DEFINED_size_t /* musl */ 145 | #define __size_t__ /* BeOS */ 146 | #define __SIZE_T__ /* Cray Unicos/Mk */ 147 | #define _SIZE_T 148 | @@ -202,6 +203,7 @@ 149 | #define ___int_size_t_h 150 | #define _GCC_SIZE_T 151 | #define _SIZET_ 152 | +#define __DEFINED_size_t /* musl */ 153 | #if defined (__FreeBSD__) && (__FreeBSD__ >= 5) 154 | /* __size_t is a typedef on FreeBSD 5!, must not trash it. */ 155 | #else 156 | @@ -216,6 +218,7 @@ 157 | typedef long ssize_t; 158 | #endif /* __BEOS__ */ 159 | #endif /* !(defined (__GNUG__) && defined (size_t)) */ 160 | +#endif /* __DEFINED_size_t */ 161 | #endif /* __size_t */ 162 | #endif /* _SIZET_ */ 163 | #endif /* _GCC_SIZE_T */ 164 | -------------------------------------------------------------------------------- /patches/linux-noperl-timeconst.patch: -------------------------------------------------------------------------------- 1 | From: Rob Landley 2 | 3 | Replace perl header file generator with smaller/faster/simpler C version. 4 | 5 | Hasn't changed since last submission, which was: 6 | 7 | Message-ID: <4D35FEF3.4070001@parallels.com> 8 | Subject: Re: [PATCH] Use sed instead of perl to generate x86/kernel/cpu/capflags.c. 9 | 10 | Signed-off-by: Rob Landley 11 | --- 12 | 13 | I ran the attached test script to compare the output of the C program 14 | with the output of the perl version for every HZ from 1 to 5000 to make 15 | sure it was producing the same constants. 16 | 17 | kernel/Makefile | 10 - 18 | kernel/mktimeconst.c | 109 +++++++++++ 19 | kernel/timeconst.pl | 378 ----------------------------------------- 20 | 3 files changed, 115 insertions(+), 382 deletions(-) 21 | 22 | diff --git a/kernel/Makefile b/kernel/Makefile 23 | index 5669f71..ba9ce6d 100644 24 | --- a/kernel/Makefile 25 | +++ b/kernel/Makefile 26 | @@ -133,11 +133,13 @@ $(obj)/config_data.h: $(obj)/config_data.gz FORCE 27 | 28 | $(obj)/time.o: $(obj)/timeconst.h 29 | 30 | -quiet_cmd_timeconst = TIMEC $@ 31 | - cmd_timeconst = $(PERL) $< $(CONFIG_HZ) > $@ 32 | +hostprogs-y += mktimeconst 33 | +quiet_cmd_mktimeconst = TIMEC $@ 34 | + cmd_mktimeconst = $(obj)/mktimeconst $(CONFIG_HZ) $@ || ( rm -f $@ && exit 1 ) 35 | + 36 | targets += timeconst.h 37 | -$(obj)/timeconst.h: $(src)/timeconst.pl FORCE 38 | - $(call if_changed,timeconst) 39 | +$(obj)/timeconst.h: $(obj)/mktimeconst FORCE 40 | + $(call if_changed,mktimeconst) 41 | 42 | ifeq ($(CONFIG_MODULE_SIG),y) 43 | # 44 | --- /dev/null 2011-01-13 17:00:36.470564274 -0600 45 | +++ b/kernel/mktimeconst.c 2011-01-16 12:44:04.091168778 -0600 46 | @@ -0,0 +1,109 @@ 47 | +/* Copyright 2010 Parallels Inc, licensed under GPLv2 */ 48 | + 49 | +#include 50 | +#include 51 | +#include 52 | + 53 | +int main(int argc, char *argv[]) 54 | +{ 55 | + uint64_t hz, periods[] = {1000, 1000000}; 56 | + char *names[] = {"MSEC", "USEC"}; 57 | + FILE *file; 58 | + int i, j; 59 | + 60 | + if (argc != 3 || (hz = atol(argv[1])) < 1 61 | + || !(file = fopen(argv[2], "w"))) 62 | + { 63 | + fprintf(stderr, "Usage: mktimeconst HZ FILENAME\n\n"); 64 | + fprintf(stderr, "Generate a header file with constants to convert between\n"); 65 | + fprintf(stderr, "decimal HZ timer ticks and milisecond or microsecond delays,\n"); 66 | + fprintf(stderr, "using reciprocal multiplication to avoid 64 bit division.\n"); 67 | + exit(1); 68 | + } 69 | + 70 | + fprintf(file, 71 | + "/* Automatically generated by kernel/mktimeconst */\n" 72 | + "/* Conversion constants for HZ == %"PRIu64" */\n\n" 73 | + "#ifndef __KERNEL_TIMECONST_H\n" 74 | + "#define __KERNEL_TIMECONST_H\n\n" 75 | + "#include \n" 76 | + "#include \n\n" 77 | + "#if HZ != %"PRIu64"\n" 78 | + "#error \"kernel/timeconst.h has the wrong HZ value!\"\n" 79 | + "#endif\n\n", hz, hz); 80 | + 81 | + /* Repeat for MSEC and USEC */ 82 | + 83 | + for (i = 0; i < 2; i++) { 84 | + uint64_t gcd, period; 85 | + 86 | + /* Find greatest common denominator using Euclid's algorithm. */ 87 | + 88 | + gcd = hz; 89 | + period = periods[i]; 90 | + while (period) { 91 | + uint64_t temp = gcd % period; 92 | + gcd = period; 93 | + period = temp; 94 | + } 95 | + 96 | + /* Output both directions (HZ_TO_PERIOD and PERIOD_TO_HZ) */ 97 | + 98 | + for (j = 0; j < 2; j++) { 99 | + char name[16]; 100 | + uint64_t from = j ? periods[i] : hz; 101 | + uint64_t to = j ? hz : periods[i]; 102 | + uint64_t mul32 = 0, adj32 = 0, shift = 0; 103 | + 104 | + sprintf(name, j ? "%s_TO_HZ" : "HZ_TO_%s", names[i]); 105 | + 106 | + /* Figure out what shift value gives 32 significant 107 | + bits of MUL32 data. (Worst case to=1 from=1000000 108 | + uses 52 bits, to<= (1UL<<31)) 114 | + break; 115 | + shift++; 116 | + } 117 | + 118 | + /* ADJ32 is is just (((FROM/GCD)-1)< 32) { 127 | + uint64_t upper, lower; 128 | + 129 | + upper = (adj32 - 1) << (shift - 32); 130 | + lower = (upper % adj32) << 32; 131 | + adj32 = ((upper/adj32) << 32) + (lower/adj32); 132 | + } else 133 | + adj32 = ((adj32 - 1) << shift) / adj32; 134 | + 135 | + /* Emit the constants into the header file. */ 136 | + 137 | + fprintf(file, "#define %s_MUL32\tU64_C(0x%"PRIx64")\n", 138 | + name, mul32); 139 | + fprintf(file, "#define %s_ADJ32\tU64_C(0x%"PRIx64")\n", 140 | + name, adj32); 141 | + fprintf(file, "#define %s_SHR32\t%"PRIu64"\n", 142 | + name, shift); 143 | + fprintf(file, "#define %s_NUM\t\tU64_C(%"PRIu64")\n", 144 | + name, to/gcd); 145 | + fprintf(file, "#define %s_DEN\t\tU64_C(%"PRIu64")\n\n", 146 | + name, from/gcd); 147 | + } 148 | + } 149 | + fprintf(file, "#endif /* __KERNEL_TIMECONST_H */\n"); 150 | + 151 | + /* Notice if the disk fills up. */ 152 | + 153 | + fflush(stdout); 154 | + return ferror(stdout); 155 | +} 156 | --- a/kernel/timeconst.pl 2010-12-19 11:33:53.969732934 -0600 157 | +++ /dev/null 2011-01-13 17:00:36.470564274 -0600 158 | @@ -1,378 +0,0 @@ 159 | -#!/usr/bin/perl 160 | -# ----------------------------------------------------------------------- 161 | -# 162 | -# Copyright 2007-2008 rPath, Inc. - All Rights Reserved 163 | -# 164 | -# This file is part of the Linux kernel, and is made available under 165 | -# the terms of the GNU General Public License version 2 or (at your 166 | -# option) any later version; incorporated herein by reference. 167 | -# 168 | -# ----------------------------------------------------------------------- 169 | -# 170 | - 171 | -# 172 | -# Usage: timeconst.pl HZ > timeconst.h 173 | -# 174 | - 175 | -# Precomputed values for systems without Math::BigInt 176 | -# Generated by: 177 | -# timeconst.pl --can 24 32 48 64 100 122 128 200 250 256 300 512 1000 1024 1200 178 | -%canned_values = ( 179 | - 24 => [ 180 | - '0xa6aaaaab','0x2aaaaaa',26, 181 | - 125,3, 182 | - '0xc49ba5e4','0x1fbe76c8b4',37, 183 | - 3,125, 184 | - '0xa2c2aaab','0xaaaa',16, 185 | - 125000,3, 186 | - '0xc9539b89','0x7fffbce4217d',47, 187 | - 3,125000, 188 | - ], 32 => [ 189 | - '0xfa000000','0x6000000',27, 190 | - 125,4, 191 | - '0x83126e98','0xfdf3b645a',36, 192 | - 4,125, 193 | - '0xf4240000','0x0',17, 194 | - 31250,1, 195 | - '0x8637bd06','0x3fff79c842fa',46, 196 | - 1,31250, 197 | - ], 48 => [ 198 | - '0xa6aaaaab','0x6aaaaaa',27, 199 | - 125,6, 200 | - '0xc49ba5e4','0xfdf3b645a',36, 201 | - 6,125, 202 | - '0xa2c2aaab','0x15555',17, 203 | - 62500,3, 204 | - '0xc9539b89','0x3fffbce4217d',46, 205 | - 3,62500, 206 | - ], 64 => [ 207 | - '0xfa000000','0xe000000',28, 208 | - 125,8, 209 | - '0x83126e98','0x7ef9db22d',35, 210 | - 8,125, 211 | - '0xf4240000','0x0',18, 212 | - 15625,1, 213 | - '0x8637bd06','0x1fff79c842fa',45, 214 | - 1,15625, 215 | - ], 100 => [ 216 | - '0xa0000000','0x0',28, 217 | - 10,1, 218 | - '0xcccccccd','0x733333333',35, 219 | - 1,10, 220 | - '0x9c400000','0x0',18, 221 | - 10000,1, 222 | - '0xd1b71759','0x1fff2e48e8a7',45, 223 | - 1,10000, 224 | - ], 122 => [ 225 | - '0x8325c53f','0xfbcda3a',28, 226 | - 500,61, 227 | - '0xf9db22d1','0x7fbe76c8b',35, 228 | - 61,500, 229 | - '0x8012e2a0','0x3ef36',18, 230 | - 500000,61, 231 | - '0xffda4053','0x1ffffbce4217',45, 232 | - 61,500000, 233 | - ], 128 => [ 234 | - '0xfa000000','0x1e000000',29, 235 | - 125,16, 236 | - '0x83126e98','0x3f7ced916',34, 237 | - 16,125, 238 | - '0xf4240000','0x40000',19, 239 | - 15625,2, 240 | - '0x8637bd06','0xfffbce4217d',44, 241 | - 2,15625, 242 | - ], 200 => [ 243 | - '0xa0000000','0x0',29, 244 | - 5,1, 245 | - '0xcccccccd','0x333333333',34, 246 | - 1,5, 247 | - '0x9c400000','0x0',19, 248 | - 5000,1, 249 | - '0xd1b71759','0xfff2e48e8a7',44, 250 | - 1,5000, 251 | - ], 250 => [ 252 | - '0x80000000','0x0',29, 253 | - 4,1, 254 | - '0x80000000','0x180000000',33, 255 | - 1,4, 256 | - '0xfa000000','0x0',20, 257 | - 4000,1, 258 | - '0x83126e98','0x7ff7ced9168',43, 259 | - 1,4000, 260 | - ], 256 => [ 261 | - '0xfa000000','0x3e000000',30, 262 | - 125,32, 263 | - '0x83126e98','0x1fbe76c8b',33, 264 | - 32,125, 265 | - '0xf4240000','0xc0000',20, 266 | - 15625,4, 267 | - '0x8637bd06','0x7ffde7210be',43, 268 | - 4,15625, 269 | - ], 300 => [ 270 | - '0xd5555556','0x2aaaaaaa',30, 271 | - 10,3, 272 | - '0x9999999a','0x1cccccccc',33, 273 | - 3,10, 274 | - '0xd0555556','0xaaaaa',20, 275 | - 10000,3, 276 | - '0x9d495183','0x7ffcb923a29',43, 277 | - 3,10000, 278 | - ], 512 => [ 279 | - '0xfa000000','0x7e000000',31, 280 | - 125,64, 281 | - '0x83126e98','0xfdf3b645',32, 282 | - 64,125, 283 | - '0xf4240000','0x1c0000',21, 284 | - 15625,8, 285 | - '0x8637bd06','0x3ffef39085f',42, 286 | - 8,15625, 287 | - ], 1000 => [ 288 | - '0x80000000','0x0',31, 289 | - 1,1, 290 | - '0x80000000','0x0',31, 291 | - 1,1, 292 | - '0xfa000000','0x0',22, 293 | - 1000,1, 294 | - '0x83126e98','0x1ff7ced9168',41, 295 | - 1,1000, 296 | - ], 1024 => [ 297 | - '0xfa000000','0xfe000000',32, 298 | - 125,128, 299 | - '0x83126e98','0x7ef9db22',31, 300 | - 128,125, 301 | - '0xf4240000','0x3c0000',22, 302 | - 15625,16, 303 | - '0x8637bd06','0x1fff79c842f',41, 304 | - 16,15625, 305 | - ], 1200 => [ 306 | - '0xd5555556','0xd5555555',32, 307 | - 5,6, 308 | - '0x9999999a','0x66666666',31, 309 | - 6,5, 310 | - '0xd0555556','0x2aaaaa',22, 311 | - 2500,3, 312 | - '0x9d495183','0x1ffcb923a29',41, 313 | - 3,2500, 314 | - ] 315 | -); 316 | - 317 | -$has_bigint = eval 'use Math::BigInt qw(bgcd); 1;'; 318 | - 319 | -sub bint($) 320 | -{ 321 | - my($x) = @_; 322 | - return Math::BigInt->new($x); 323 | -} 324 | - 325 | -# 326 | -# Constants for division by reciprocal multiplication. 327 | -# (bits, numerator, denominator) 328 | -# 329 | -sub fmul($$$) 330 | -{ 331 | - my ($b,$n,$d) = @_; 332 | - 333 | - $n = bint($n); 334 | - $d = bint($d); 335 | - 336 | - return scalar (($n << $b)+$d-bint(1))/$d; 337 | -} 338 | - 339 | -sub fadj($$$) 340 | -{ 341 | - my($b,$n,$d) = @_; 342 | - 343 | - $n = bint($n); 344 | - $d = bint($d); 345 | - 346 | - $d = $d/bgcd($n, $d); 347 | - return scalar (($d-bint(1)) << $b)/$d; 348 | -} 349 | - 350 | -sub fmuls($$$) { 351 | - my($b,$n,$d) = @_; 352 | - my($s,$m); 353 | - my($thres) = bint(1) << ($b-1); 354 | - 355 | - $n = bint($n); 356 | - $d = bint($d); 357 | - 358 | - for ($s = 0; 1; $s++) { 359 | - $m = fmul($s,$n,$d); 360 | - return $s if ($m >= $thres); 361 | - } 362 | - return 0; 363 | -} 364 | - 365 | -# Generate a hex value if the result fits in 64 bits; 366 | -# otherwise skip. 367 | -sub bignum_hex($) { 368 | - my($x) = @_; 369 | - my $s = $x->as_hex(); 370 | - 371 | - return (length($s) > 18) ? undef : $s; 372 | -} 373 | - 374 | -# Provides mul, adj, and shr factors for a specific 375 | -# (bit, time, hz) combination 376 | -sub muladj($$$) { 377 | - my($b, $t, $hz) = @_; 378 | - my $s = fmuls($b, $t, $hz); 379 | - my $m = fmul($s, $t, $hz); 380 | - my $a = fadj($s, $t, $hz); 381 | - return (bignum_hex($m), bignum_hex($a), $s); 382 | -} 383 | - 384 | -# Provides numerator, denominator values 385 | -sub numden($$) { 386 | - my($n, $d) = @_; 387 | - my $g = bgcd($n, $d); 388 | - return ($n/$g, $d/$g); 389 | -} 390 | - 391 | -# All values for a specific (time, hz) combo 392 | -sub conversions($$) { 393 | - my ($t, $hz) = @_; 394 | - my @val = (); 395 | - 396 | - # HZ_TO_xx 397 | - push(@val, muladj(32, $t, $hz)); 398 | - push(@val, numden($t, $hz)); 399 | - 400 | - # xx_TO_HZ 401 | - push(@val, muladj(32, $hz, $t)); 402 | - push(@val, numden($hz, $t)); 403 | - 404 | - return @val; 405 | -} 406 | - 407 | -sub compute_values($) { 408 | - my($hz) = @_; 409 | - my @val = (); 410 | - my $s, $m, $a, $g; 411 | - 412 | - if (!$has_bigint) { 413 | - die "$0: HZ == $hz not canned and ". 414 | - "Math::BigInt not available\n"; 415 | - } 416 | - 417 | - # MSEC conversions 418 | - push(@val, conversions(1000, $hz)); 419 | - 420 | - # USEC conversions 421 | - push(@val, conversions(1000000, $hz)); 422 | - 423 | - return @val; 424 | -} 425 | - 426 | -sub outputval($$) 427 | -{ 428 | - my($name, $val) = @_; 429 | - my $csuf; 430 | - 431 | - if (defined($val)) { 432 | - if ($name !~ /SHR/) { 433 | - $val = "U64_C($val)"; 434 | - } 435 | - printf "#define %-23s %s\n", $name.$csuf, $val.$csuf; 436 | - } 437 | -} 438 | - 439 | -sub output($@) 440 | -{ 441 | - my($hz, @val) = @_; 442 | - my $pfx, $bit, $suf, $s, $m, $a; 443 | - 444 | - print "/* Automatically generated by kernel/timeconst.pl */\n"; 445 | - print "/* Conversion constants for HZ == $hz */\n"; 446 | - print "\n"; 447 | - print "#ifndef KERNEL_TIMECONST_H\n"; 448 | - print "#define KERNEL_TIMECONST_H\n"; 449 | - print "\n"; 450 | - 451 | - print "#include \n"; 452 | - print "#include \n"; 453 | - 454 | - print "\n"; 455 | - print "#if HZ != $hz\n"; 456 | - print "#error \"kernel/timeconst.h has the wrong HZ value!\"\n"; 457 | - print "#endif\n"; 458 | - print "\n"; 459 | - 460 | - foreach $pfx ('HZ_TO_MSEC','MSEC_TO_HZ', 461 | - 'HZ_TO_USEC','USEC_TO_HZ') { 462 | - foreach $bit (32) { 463 | - foreach $suf ('MUL', 'ADJ', 'SHR') { 464 | - outputval("${pfx}_$suf$bit", shift(@val)); 465 | - } 466 | - } 467 | - foreach $suf ('NUM', 'DEN') { 468 | - outputval("${pfx}_$suf", shift(@val)); 469 | - } 470 | - } 471 | - 472 | - print "\n"; 473 | - print "#endif /* KERNEL_TIMECONST_H */\n"; 474 | -} 475 | - 476 | -# Pretty-print Perl values 477 | -sub perlvals(@) { 478 | - my $v; 479 | - my @l = (); 480 | - 481 | - foreach $v (@_) { 482 | - if (!defined($v)) { 483 | - push(@l, 'undef'); 484 | - } elsif ($v =~ /^0x/) { 485 | - push(@l, "\'".$v."\'"); 486 | - } else { 487 | - push(@l, $v.''); 488 | - } 489 | - } 490 | - return join(',', @l); 491 | -} 492 | - 493 | -($hz) = @ARGV; 494 | - 495 | -# Use this to generate the %canned_values structure 496 | -if ($hz eq '--can') { 497 | - shift(@ARGV); 498 | - @hzlist = sort {$a <=> $b} (@ARGV); 499 | - 500 | - print "# Precomputed values for systems without Math::BigInt\n"; 501 | - print "# Generated by:\n"; 502 | - print "# timeconst.pl --can ", join(' ', @hzlist), "\n"; 503 | - print "\%canned_values = (\n"; 504 | - my $pf = "\t"; 505 | - foreach $hz (@hzlist) { 506 | - my @values = compute_values($hz); 507 | - print "$pf$hz => [\n"; 508 | - while (scalar(@values)) { 509 | - my $bit; 510 | - foreach $bit (32) { 511 | - my $m = shift(@values); 512 | - my $a = shift(@values); 513 | - my $s = shift(@values); 514 | - print "\t\t", perlvals($m,$a,$s), ",\n"; 515 | - } 516 | - my $n = shift(@values); 517 | - my $d = shift(@values); 518 | - print "\t\t", perlvals($n,$d), ",\n"; 519 | - } 520 | - print "\t]"; 521 | - $pf = ', '; 522 | - } 523 | - print "\n);\n"; 524 | -} else { 525 | - $hz += 0; # Force to number 526 | - if ($hz < 1) { 527 | - die "Usage: $0 HZ\n"; 528 | - } 529 | - 530 | - @val = @{$canned_values{$hz}}; 531 | - if (!defined(@val)) { 532 | - @val = compute_values($hz); 533 | - } 534 | - output($hz, @val); 535 | -} 536 | -exit 0; 537 | 538 | --------------070402000802050303040701 539 | Content-Type: application/x-sh; name="loopy.sh" 540 | Content-Transfer-Encoding: 7bit 541 | Content-Disposition: attachment; filename="loopy.sh" 542 | 543 | #!/bin/bash 544 | 545 | gcc mktimeconst.c || exit 1 546 | 547 | X=1 548 | while [ $X -lt 5000 ] 549 | do 550 | echo $X 551 | 552 | perl ~/linux/linux/kernel/timeconst.pl $X | sed 's/KERNEL_TIMECONST/__KERNEL_TIMECONST/;/Automatically generated/d;/^$/d'> temp.txt 553 | ./a.out $X temp2.txt 554 | sed -i '/Automatically generated/d;/^$/d' temp2.txt 555 | 556 | diff -uw temp.txt temp2.txt || exit 1 557 | 558 | X=$(($X+1)) 559 | done 560 | 561 | --------------070402000802050303040701-- 562 | -------------------------------------------------------------------------------- /busybox.config: -------------------------------------------------------------------------------- 1 | CONFIG_DESKTOP=y 2 | CONFIG_INCLUDE_SUSv2=y 3 | CONFIG_PLATFORM_LINUX=y 4 | CONFIG_SHOW_USAGE=y 5 | CONFIG_FEATURE_VERBOSE_USAGE=y 6 | CONFIG_FEATURE_COMPRESS_USAGE=y 7 | CONFIG_FEATURE_INSTALLER=y 8 | CONFIG_INSTALL_NO_USR=y 9 | CONFIG_UNICODE_SUPPORT=y 10 | CONFIG_LONG_OPTS=y 11 | CONFIG_FEATURE_DEVPTS=y 12 | CONFIG_FEATURE_WTMP=y 13 | CONFIG_FEATURE_PIDFILE=y 14 | CONFIG_FEATURE_SUID=y 15 | CONFIG_FEATURE_SUID_CONFIG=y 16 | CONFIG_FEATURE_SUID_CONFIG_QUIET=y 17 | CONFIG_STATIC=y 18 | CONFIG_LFS=y 19 | CONFIG_EXTRA_CFLAGS="-D__musl__" 20 | CONFIG_FEATURE_FAST_TOP=y 21 | CONFIG_FEATURE_USE_TERMIOS=y 22 | CONFIG_FEATURE_EDITING=y 23 | CONFIG_FEATURE_EDITING_SAVEHISTORY=y 24 | CONFIG_FEATURE_TAB_COMPLETION=y 25 | CONFIG_FEATURE_EDITING_FANCY_PROMPT=y 26 | CONFIG_FEATURE_NON_POSIX_CP=y 27 | CONFIG_MONOTONIC_SYSCALL=y 28 | CONFIG_IOCTL_HEX2STR_ERROR=y 29 | CONFIG_FEATURE_HWIB=y 30 | CONFIG_FEATURE_SEAMLESS_XZ=y 31 | CONFIG_FEATURE_SEAMLESS_LZMA=y 32 | CONFIG_FEATURE_SEAMLESS_BZ2=y 33 | CONFIG_FEATURE_SEAMLESS_GZ=y 34 | CONFIG_BUNZIP2=y 35 | CONFIG_BZIP2=y 36 | CONFIG_CPIO=y 37 | CONFIG_FEATURE_CPIO_O=y 38 | CONFIG_FEATURE_CPIO_P=y 39 | CONFIG_GUNZIP=y 40 | CONFIG_GZIP=y 41 | CONFIG_FEATURE_GZIP_LONG_OPTIONS=y 42 | CONFIG_LZOP=y 43 | CONFIG_TAR=y 44 | CONFIG_FEATURE_TAR_CREATE=y 45 | CONFIG_FEATURE_TAR_AUTODETECT=y 46 | CONFIG_FEATURE_TAR_FROM=y 47 | CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY=y 48 | CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY=y 49 | CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y 50 | CONFIG_FEATURE_TAR_LONG_OPTIONS=y 51 | CONFIG_FEATURE_TAR_TO_COMMAND=y 52 | CONFIG_FEATURE_TAR_UNAME_GNAME=y 53 | CONFIG_FEATURE_TAR_NOPRESERVE_TIME=y 54 | CONFIG_UNLZMA=y 55 | CONFIG_FEATURE_LZMA_FAST=y 56 | CONFIG_LZMA=y 57 | CONFIG_UNXZ=y 58 | CONFIG_XZ=y 59 | CONFIG_UNZIP=y 60 | CONFIG_BASENAME=y 61 | CONFIG_CAT=y 62 | CONFIG_DATE=y 63 | CONFIG_FEATURE_DATE_ISOFMT=y 64 | CONFIG_FEATURE_DATE_NANO=y 65 | CONFIG_FEATURE_DATE_COMPAT=y 66 | CONFIG_TEST=y 67 | CONFIG_FEATURE_TEST_64=y 68 | CONFIG_TR=y 69 | CONFIG_FEATURE_TR_CLASSES=y 70 | CONFIG_FEATURE_TR_EQUIV=y 71 | CONFIG_BASE64=y 72 | CONFIG_CAL=y 73 | CONFIG_CATV=y 74 | CONFIG_CHGRP=y 75 | CONFIG_CHMOD=y 76 | CONFIG_CHOWN=y 77 | CONFIG_FEATURE_CHOWN_LONG_OPTIONS=y 78 | CONFIG_CHROOT=y 79 | CONFIG_CKSUM=y 80 | CONFIG_COMM=y 81 | CONFIG_CP=y 82 | CONFIG_FEATURE_CP_LONG_OPTIONS=y 83 | CONFIG_CUT=y 84 | CONFIG_DD=y 85 | CONFIG_FEATURE_DD_SIGNAL_HANDLING=y 86 | CONFIG_FEATURE_DD_THIRD_STATUS_LINE=y 87 | CONFIG_FEATURE_DD_IBS_OBS=y 88 | CONFIG_DF=y 89 | CONFIG_FEATURE_DF_FANCY=y 90 | CONFIG_DIRNAME=y 91 | CONFIG_DOS2UNIX=y 92 | CONFIG_DU=y 93 | CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y 94 | CONFIG_ECHO=y 95 | CONFIG_FEATURE_FANCY_ECHO=y 96 | CONFIG_ENV=y 97 | CONFIG_FEATURE_ENV_LONG_OPTIONS=y 98 | CONFIG_EXPAND=y 99 | CONFIG_FEATURE_EXPAND_LONG_OPTIONS=y 100 | CONFIG_EXPR=y 101 | CONFIG_EXPR_MATH_SUPPORT_64=y 102 | CONFIG_FALSE=y 103 | CONFIG_FOLD=y 104 | CONFIG_FSYNC=y 105 | CONFIG_HEAD=y 106 | CONFIG_FEATURE_FANCY_HEAD=y 107 | CONFIG_HOSTID=y 108 | CONFIG_ID=y 109 | CONFIG_INSTALL=y 110 | CONFIG_FEATURE_INSTALL_LONG_OPTIONS=y 111 | CONFIG_LENGTH=y 112 | CONFIG_LN=y 113 | CONFIG_LOGNAME=y 114 | CONFIG_LS=y 115 | CONFIG_FEATURE_LS_FILETYPES=y 116 | CONFIG_FEATURE_LS_FOLLOWLINKS=y 117 | CONFIG_FEATURE_LS_RECURSIVE=y 118 | CONFIG_FEATURE_LS_SORTFILES=y 119 | CONFIG_FEATURE_LS_TIMESTAMPS=y 120 | CONFIG_FEATURE_LS_USERNAME=y 121 | CONFIG_FEATURE_LS_COLOR=y 122 | CONFIG_FEATURE_LS_COLOR_IS_DEFAULT=y 123 | CONFIG_MD5SUM=y 124 | CONFIG_MKDIR=y 125 | CONFIG_FEATURE_MKDIR_LONG_OPTIONS=y 126 | CONFIG_MKFIFO=y 127 | CONFIG_MKNOD=y 128 | CONFIG_MV=y 129 | CONFIG_FEATURE_MV_LONG_OPTIONS=y 130 | CONFIG_NICE=y 131 | CONFIG_NOHUP=y 132 | CONFIG_OD=y 133 | CONFIG_PRINTENV=y 134 | CONFIG_PRINTF=y 135 | CONFIG_PWD=y 136 | CONFIG_READLINK=y 137 | CONFIG_FEATURE_READLINK_FOLLOW=y 138 | CONFIG_REALPATH=y 139 | CONFIG_RM=y 140 | CONFIG_RMDIR=y 141 | CONFIG_FEATURE_RMDIR_LONG_OPTIONS=y 142 | CONFIG_SEQ=y 143 | CONFIG_SHA1SUM=y 144 | CONFIG_SHA256SUM=y 145 | CONFIG_SHA512SUM=y 146 | CONFIG_SLEEP=y 147 | CONFIG_FEATURE_FANCY_SLEEP=y 148 | CONFIG_FEATURE_FLOAT_SLEEP=y 149 | CONFIG_SORT=y 150 | CONFIG_FEATURE_SORT_BIG=y 151 | CONFIG_SPLIT=y 152 | CONFIG_FEATURE_SPLIT_FANCY=y 153 | CONFIG_STAT=y 154 | CONFIG_FEATURE_STAT_FORMAT=y 155 | CONFIG_STTY=y 156 | CONFIG_SUM=y 157 | CONFIG_SYNC=y 158 | CONFIG_TAC=y 159 | CONFIG_TAIL=y 160 | CONFIG_FEATURE_FANCY_TAIL=y 161 | CONFIG_TEE=y 162 | CONFIG_FEATURE_TEE_USE_BLOCK_IO=y 163 | CONFIG_TOUCH=y 164 | CONFIG_TRUE=y 165 | CONFIG_TTY=y 166 | CONFIG_UNAME=y 167 | CONFIG_UNEXPAND=y 168 | CONFIG_FEATURE_UNEXPAND_LONG_OPTIONS=y 169 | CONFIG_UNIQ=y 170 | CONFIG_USLEEP=y 171 | CONFIG_UUDECODE=y 172 | CONFIG_UUENCODE=y 173 | CONFIG_WC=y 174 | CONFIG_FEATURE_WC_LARGE=y 175 | CONFIG_WHO=y 176 | CONFIG_WHOAMI=y 177 | CONFIG_YES=y 178 | CONFIG_FEATURE_PRESERVE_HARDLINKS=y 179 | CONFIG_FEATURE_AUTOWIDTH=y 180 | CONFIG_FEATURE_HUMAN_READABLE=y 181 | CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y 182 | CONFIG_CHVT=y 183 | CONFIG_FGCONSOLE=y 184 | CONFIG_CLEAR=y 185 | CONFIG_DEALLOCVT=y 186 | CONFIG_DUMPKMAP=y 187 | CONFIG_KBD_MODE=y 188 | CONFIG_LOADFONT=y 189 | CONFIG_LOADKMAP=y 190 | CONFIG_OPENVT=y 191 | CONFIG_RESET=y 192 | CONFIG_RESIZE=y 193 | CONFIG_FEATURE_RESIZE_PRINT=y 194 | CONFIG_SETCONSOLE=y 195 | CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS=y 196 | CONFIG_SETFONT=y 197 | CONFIG_FEATURE_SETFONT_TEXTUAL_MAP=y 198 | CONFIG_SETKEYCODES=y 199 | CONFIG_SETLOGCONS=y 200 | CONFIG_SHOWKEY=y 201 | CONFIG_FEATURE_LOADFONT_PSF2=y 202 | CONFIG_FEATURE_LOADFONT_RAW=y 203 | CONFIG_MKTEMP=y 204 | CONFIG_PIPE_PROGRESS=y 205 | CONFIG_RUN_PARTS=y 206 | CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS=y 207 | CONFIG_FEATURE_RUN_PARTS_FANCY=y 208 | CONFIG_START_STOP_DAEMON=y 209 | CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y 210 | CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y 211 | CONFIG_WHICH=y 212 | CONFIG_PATCH=y 213 | CONFIG_AWK=y 214 | CONFIG_FEATURE_AWK_LIBM=y 215 | CONFIG_CMP=y 216 | CONFIG_DIFF=y 217 | CONFIG_FEATURE_DIFF_LONG_OPTIONS=y 218 | CONFIG_FEATURE_DIFF_DIR=y 219 | CONFIG_ED=y 220 | CONFIG_SED=y 221 | CONFIG_VI=y 222 | CONFIG_FEATURE_VI_COLON=y 223 | CONFIG_FEATURE_VI_YANKMARK=y 224 | CONFIG_FEATURE_VI_SEARCH=y 225 | CONFIG_FEATURE_VI_USE_SIGNALS=y 226 | CONFIG_FEATURE_VI_DOT_CMD=y 227 | CONFIG_FEATURE_VI_READONLY=y 228 | CONFIG_FEATURE_VI_SETOPTS=y 229 | CONFIG_FEATURE_VI_SET=y 230 | CONFIG_FEATURE_VI_WIN_RESIZE=y 231 | CONFIG_FEATURE_VI_ASK_TERMINAL=y 232 | CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y 233 | CONFIG_FEATURE_ALLOW_EXEC=y 234 | CONFIG_FIND=y 235 | CONFIG_FEATURE_FIND_PRINT0=y 236 | CONFIG_FEATURE_FIND_MTIME=y 237 | CONFIG_FEATURE_FIND_MMIN=y 238 | CONFIG_FEATURE_FIND_PERM=y 239 | CONFIG_FEATURE_FIND_TYPE=y 240 | CONFIG_FEATURE_FIND_XDEV=y 241 | CONFIG_FEATURE_FIND_MAXDEPTH=y 242 | CONFIG_FEATURE_FIND_NEWER=y 243 | CONFIG_FEATURE_FIND_INUM=y 244 | CONFIG_FEATURE_FIND_EXEC=y 245 | CONFIG_FEATURE_FIND_USER=y 246 | CONFIG_FEATURE_FIND_GROUP=y 247 | CONFIG_FEATURE_FIND_NOT=y 248 | CONFIG_FEATURE_FIND_DEPTH=y 249 | CONFIG_FEATURE_FIND_PAREN=y 250 | CONFIG_FEATURE_FIND_SIZE=y 251 | CONFIG_FEATURE_FIND_PRUNE=y 252 | CONFIG_FEATURE_FIND_DELETE=y 253 | CONFIG_FEATURE_FIND_PATH=y 254 | CONFIG_FEATURE_FIND_REGEX=y 255 | CONFIG_FEATURE_FIND_LINKS=y 256 | CONFIG_GREP=y 257 | CONFIG_FEATURE_GREP_EGREP_ALIAS=y 258 | CONFIG_FEATURE_GREP_FGREP_ALIAS=y 259 | CONFIG_FEATURE_GREP_CONTEXT=y 260 | CONFIG_XARGS=y 261 | CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION=y 262 | CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y 263 | CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y 264 | CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y 265 | CONFIG_BOOTCHARTD=y 266 | CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER=y 267 | CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE=y 268 | CONFIG_HALT=y 269 | CONFIG_INIT=y 270 | CONFIG_FEATURE_USE_INITTAB=y 271 | CONFIG_FEATURE_INIT_SCTTY=y 272 | CONFIG_FEATURE_INIT_SYSLOG=y 273 | CONFIG_FEATURE_EXTRA_QUIET=y 274 | CONFIG_FEATURE_INIT_COREDUMPS=y 275 | CONFIG_FEATURE_INITRD=y 276 | CONFIG_MESG=y 277 | CONFIG_ADD_SHELL=y 278 | CONFIG_REMOVE_SHELL=y 279 | CONFIG_FEATURE_SHADOWPASSWDS=y 280 | CONFIG_USE_BB_PWD_GRP=y 281 | CONFIG_USE_BB_SHADOW=y 282 | CONFIG_USE_BB_CRYPT=y 283 | CONFIG_USE_BB_CRYPT_SHA=y 284 | CONFIG_ADDUSER=y 285 | CONFIG_FEATURE_ADDUSER_LONG_OPTIONS=y 286 | CONFIG_ADDGROUP=y 287 | CONFIG_FEATURE_ADDGROUP_LONG_OPTIONS=y 288 | CONFIG_FEATURE_ADDUSER_TO_GROUP=y 289 | CONFIG_DELUSER=y 290 | CONFIG_DELGROUP=y 291 | CONFIG_FEATURE_DEL_USER_FROM_GROUP=y 292 | CONFIG_GETTY=y 293 | CONFIG_LOGIN=y 294 | CONFIG_LOGIN_SCRIPTS=y 295 | CONFIG_FEATURE_NOLOGIN=y 296 | CONFIG_PASSWD=y 297 | CONFIG_FEATURE_PASSWD_WEAK_CHECK=y 298 | CONFIG_CRYPTPW=y 299 | CONFIG_CHPASSWD=y 300 | CONFIG_SU=y 301 | CONFIG_FEATURE_SU_SYSLOG=y 302 | CONFIG_SULOGIN=y 303 | CONFIG_VLOCK=y 304 | CONFIG_CHATTR=y 305 | CONFIG_LSATTR=y 306 | CONFIG_TUNE2FS=y 307 | CONFIG_MODINFO=y 308 | CONFIG_INSMOD=y 309 | CONFIG_RMMOD=y 310 | CONFIG_LSMOD=y 311 | CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT=y 312 | CONFIG_MODPROBE=y 313 | CONFIG_FEATURE_MODPROBE_BLACKLIST=y 314 | CONFIG_DEPMOD=y 315 | CONFIG_FEATURE_CHECK_TAINTED_MODULE=y 316 | CONFIG_FEATURE_MODUTILS_ALIAS=y 317 | CONFIG_FEATURE_MODUTILS_SYMBOLS=y 318 | CONFIG_BLOCKDEV=y 319 | CONFIG_REV=y 320 | CONFIG_ACPID=y 321 | CONFIG_FEATURE_ACPID_COMPAT=y 322 | CONFIG_BLKID=y 323 | CONFIG_DMESG=y 324 | CONFIG_FEATURE_DMESG_PRETTY=y 325 | CONFIG_FBSET=y 326 | CONFIG_FEATURE_FBSET_FANCY=y 327 | CONFIG_FEATURE_FBSET_READMODE=y 328 | CONFIG_FDFLUSH=y 329 | CONFIG_FDFORMAT=y 330 | CONFIG_FDISK=y 331 | CONFIG_FEATURE_FDISK_WRITABLE=y 332 | CONFIG_FEATURE_OSF_LABEL=y 333 | CONFIG_FEATURE_GPT_LABEL=y 334 | CONFIG_FEATURE_FDISK_ADVANCED=y 335 | CONFIG_FINDFS=y 336 | CONFIG_FLOCK=y 337 | CONFIG_FREERAMDISK=y 338 | CONFIG_MKFS_EXT2=y 339 | CONFIG_MKFS_VFAT=y 340 | CONFIG_GETOPT=y 341 | CONFIG_FEATURE_GETOPT_LONG=y 342 | CONFIG_HEXDUMP=y 343 | CONFIG_FEATURE_HEXDUMP_REVERSE=y 344 | CONFIG_HD=y 345 | CONFIG_HWCLOCK=y 346 | CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS=y 347 | CONFIG_LOSETUP=y 348 | CONFIG_LSPCI=y 349 | CONFIG_LSUSB=y 350 | CONFIG_MDEV=y 351 | CONFIG_FEATURE_MDEV_CONF=y 352 | CONFIG_FEATURE_MDEV_RENAME=y 353 | CONFIG_FEATURE_MDEV_RENAME_REGEXP=y 354 | CONFIG_FEATURE_MDEV_EXEC=y 355 | CONFIG_FEATURE_MDEV_LOAD_FIRMWARE=y 356 | CONFIG_MKSWAP=y 357 | CONFIG_FEATURE_MKSWAP_UUID=y 358 | CONFIG_MORE=y 359 | CONFIG_MOUNT=y 360 | CONFIG_FEATURE_MOUNT_FAKE=y 361 | CONFIG_FEATURE_MOUNT_VERBOSE=y 362 | CONFIG_FEATURE_MOUNT_LABEL=y 363 | CONFIG_FEATURE_MOUNT_CIFS=y 364 | CONFIG_FEATURE_MOUNT_FLAGS=y 365 | CONFIG_FEATURE_MOUNT_FSTAB=y 366 | CONFIG_RDATE=y 367 | CONFIG_RDEV=y 368 | CONFIG_READPROFILE=y 369 | CONFIG_RTCWAKE=y 370 | CONFIG_SCRIPT=y 371 | CONFIG_SCRIPTREPLAY=y 372 | CONFIG_SWAPONOFF=y 373 | CONFIG_FEATURE_SWAPON_PRI=y 374 | CONFIG_SWITCH_ROOT=y 375 | CONFIG_UMOUNT=y 376 | CONFIG_FEATURE_UMOUNT_ALL=y 377 | CONFIG_FEATURE_MOUNT_LOOP=y 378 | CONFIG_FEATURE_MOUNT_LOOP_CREATE=y 379 | CONFIG_FEATURE_VOLUMEID_EXT=y 380 | CONFIG_FEATURE_VOLUMEID_BTRFS=y 381 | CONFIG_FEATURE_VOLUMEID_REISERFS=y 382 | CONFIG_FEATURE_VOLUMEID_FAT=y 383 | CONFIG_FEATURE_VOLUMEID_HFS=y 384 | CONFIG_FEATURE_VOLUMEID_JFS=y 385 | CONFIG_FEATURE_VOLUMEID_XFS=y 386 | CONFIG_FEATURE_VOLUMEID_NTFS=y 387 | CONFIG_FEATURE_VOLUMEID_ISO9660=y 388 | CONFIG_FEATURE_VOLUMEID_UDF=y 389 | CONFIG_FEATURE_VOLUMEID_LUKS=y 390 | CONFIG_FEATURE_VOLUMEID_LINUXSWAP=y 391 | CONFIG_FEATURE_VOLUMEID_CRAMFS=y 392 | CONFIG_FEATURE_VOLUMEID_ROMFS=y 393 | CONFIG_FEATURE_VOLUMEID_SYSV=y 394 | CONFIG_FEATURE_VOLUMEID_OCFS2=y 395 | CONFIG_FEATURE_VOLUMEID_LINUXRAID=y 396 | CONFIG_CONSPY=y 397 | CONFIG_ADJTIMEX=y 398 | CONFIG_BBCONFIG=y 399 | CONFIG_FEATURE_COMPRESS_BBCONFIG=y 400 | CONFIG_BEEP=y 401 | CONFIG_CHAT=y 402 | CONFIG_FEATURE_CHAT_NOFAIL=y 403 | CONFIG_FEATURE_CHAT_IMPLICIT_CR=y 404 | CONFIG_FEATURE_CHAT_SWALLOW_OPTS=y 405 | CONFIG_FEATURE_CHAT_SEND_ESCAPES=y 406 | CONFIG_FEATURE_CHAT_VAR_ABORT_LEN=y 407 | CONFIG_FEATURE_CHAT_CLR_ABORT=y 408 | CONFIG_CROND=y 409 | CONFIG_FEATURE_CROND_D=y 410 | CONFIG_FEATURE_CROND_CALL_SENDMAIL=y 411 | CONFIG_CRONTAB=y 412 | CONFIG_DC=y 413 | CONFIG_FEATURE_DC_LIBM=y 414 | CONFIG_DEVMEM=y 415 | CONFIG_IONICE=y 416 | CONFIG_INOTIFYD=y 417 | CONFIG_LAST=y 418 | CONFIG_LESS=y 419 | CONFIG_FEATURE_LESS_BRACKETS=y 420 | CONFIG_FEATURE_LESS_FLAGS=y 421 | CONFIG_FEATURE_LESS_MARKS=y 422 | CONFIG_FEATURE_LESS_REGEXP=y 423 | CONFIG_FEATURE_LESS_WINCH=y 424 | CONFIG_FEATURE_LESS_DASHCMD=y 425 | CONFIG_FEATURE_LESS_LINENUMS=y 426 | CONFIG_MAKEDEVS=y 427 | CONFIG_MAN=y 428 | CONFIG_MICROCOM=y 429 | CONFIG_MOUNTPOINT=y 430 | CONFIG_RAIDAUTORUN=y 431 | CONFIG_RFKILL=y 432 | CONFIG_RUNLEVEL=y 433 | CONFIG_RX=y 434 | CONFIG_SETSID=y 435 | CONFIG_STRINGS=y 436 | CONFIG_TIME=y 437 | CONFIG_TIMEOUT=y 438 | CONFIG_TTYSIZE=y 439 | CONFIG_VOLNAME=y 440 | CONFIG_WALL=y 441 | CONFIG_WATCHDOG=y 442 | CONFIG_NBDCLIENT=y 443 | CONFIG_NC=y 444 | CONFIG_NC_SERVER=y 445 | CONFIG_NC_EXTRA=y 446 | CONFIG_FEATURE_IPV6=y 447 | CONFIG_FEATURE_PREFER_IPV4_ADDRESS=y 448 | CONFIG_VERBOSE_RESOLUTION_ERRORS=y 449 | CONFIG_DNSD=y 450 | CONFIG_FAKEIDENTD=y 451 | CONFIG_FTPD=y 452 | CONFIG_FEATURE_FTP_WRITE=y 453 | CONFIG_FEATURE_FTPD_ACCEPT_BROKEN_LIST=y 454 | CONFIG_FTPGET=y 455 | CONFIG_FTPPUT=y 456 | CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS=y 457 | CONFIG_HOSTNAME=y 458 | CONFIG_IFCONFIG=y 459 | CONFIG_FEATURE_IFCONFIG_STATUS=y 460 | CONFIG_FEATURE_IFCONFIG_SLIP=y 461 | CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ=y 462 | CONFIG_FEATURE_IFCONFIG_HW=y 463 | CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS=y 464 | CONFIG_IFENSLAVE=y 465 | CONFIG_INETD=y 466 | CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO=y 467 | CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD=y 468 | CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME=y 469 | CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME=y 470 | CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN=y 471 | CONFIG_IP=y 472 | CONFIG_FEATURE_IP_ADDRESS=y 473 | CONFIG_FEATURE_IP_ROUTE=y 474 | CONFIG_FEATURE_IP_TUNNEL=y 475 | CONFIG_FEATURE_IP_RULE=y 476 | CONFIG_FEATURE_IP_SHORT_FORMS=y 477 | CONFIG_IPCALC=y 478 | CONFIG_FEATURE_IPCALC_FANCY=y 479 | CONFIG_FEATURE_IPCALC_LONG_OPTIONS=y 480 | CONFIG_NETSTAT=y 481 | CONFIG_FEATURE_NETSTAT_WIDE=y 482 | CONFIG_FEATURE_NETSTAT_PRG=y 483 | CONFIG_NTPD=y 484 | CONFIG_PING=y 485 | CONFIG_PING6=y 486 | CONFIG_FEATURE_FANCY_PING=y 487 | CONFIG_PSCAN=y 488 | CONFIG_ROUTE=y 489 | CONFIG_SLATTACH=y 490 | CONFIG_TCPSVD=y 491 | CONFIG_TELNET=y 492 | CONFIG_FEATURE_TELNET_TTYPE=y 493 | CONFIG_FEATURE_TELNET_AUTOLOGIN=y 494 | CONFIG_TFTP=y 495 | CONFIG_FEATURE_TFTP_GET=y 496 | CONFIG_FEATURE_TFTP_PUT=y 497 | CONFIG_FEATURE_TFTP_BLOCKSIZE=y 498 | CONFIG_FEATURE_TFTP_PROGRESS_BAR=y 499 | CONFIG_TRACEROUTE=y 500 | CONFIG_TRACEROUTE6=y 501 | CONFIG_FEATURE_TRACEROUTE_VERBOSE=y 502 | CONFIG_TUNCTL=y 503 | CONFIG_FEATURE_TUNCTL_UG=y 504 | CONFIG_UDHCPC=y 505 | CONFIG_FEATURE_UDHCPC_ARPING=y 506 | CONFIG_FEATURE_UDHCP_PORT=y 507 | CONFIG_FEATURE_UDHCP_RFC3397=y 508 | CONFIG_UDPSVD=y 509 | CONFIG_VCONFIG=y 510 | CONFIG_WGET=y 511 | CONFIG_FEATURE_WGET_STATUSBAR=y 512 | CONFIG_FEATURE_WGET_AUTHENTICATION=y 513 | CONFIG_FEATURE_WGET_LONG_OPTIONS=y 514 | CONFIG_FEATURE_WGET_TIMEOUT=y 515 | CONFIG_LPD=y 516 | CONFIG_LPR=y 517 | CONFIG_LPQ=y 518 | CONFIG_MAKEMIME=y 519 | CONFIG_POPMAILDIR=y 520 | CONFIG_FEATURE_POPMAILDIR_DELIVERY=y 521 | CONFIG_REFORMIME=y 522 | CONFIG_FEATURE_REFORMIME_COMPAT=y 523 | CONFIG_SENDMAIL=y 524 | CONFIG_IOSTAT=y 525 | CONFIG_MPSTAT=y 526 | CONFIG_PMAP=y 527 | CONFIG_POWERTOP=y 528 | CONFIG_SMEMCAP=y 529 | CONFIG_FREE=y 530 | CONFIG_FUSER=y 531 | CONFIG_KILL=y 532 | CONFIG_KILLALL=y 533 | CONFIG_KILLALL5=y 534 | CONFIG_NMETER=y 535 | CONFIG_PGREP=y 536 | CONFIG_PIDOF=y 537 | CONFIG_FEATURE_PIDOF_SINGLE=y 538 | CONFIG_FEATURE_PIDOF_OMIT=y 539 | CONFIG_PKILL=y 540 | CONFIG_PS=y 541 | CONFIG_FEATURE_PS_WIDE=y 542 | CONFIG_FEATURE_PS_TIME=y 543 | CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS=y 544 | CONFIG_RENICE=y 545 | CONFIG_BB_SYSCTL=y 546 | CONFIG_TOP=y 547 | CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y 548 | CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y 549 | CONFIG_FEATURE_TOP_SMP_CPU=y 550 | CONFIG_FEATURE_TOP_DECIMALS=y 551 | CONFIG_FEATURE_TOP_SMP_PROCESS=y 552 | CONFIG_FEATURE_TOPMEM=y 553 | CONFIG_FEATURE_SHOW_THREADS=y 554 | CONFIG_UPTIME=y 555 | CONFIG_WATCH=y 556 | CONFIG_RUNSV=y 557 | CONFIG_RUNSVDIR=y 558 | CONFIG_FEATURE_RUNSVDIR_LOG=y 559 | CONFIG_SV=y 560 | CONFIG_SVLOGD=y 561 | CONFIG_CHPST=y 562 | CONFIG_SETUIDGID=y 563 | CONFIG_ENVUIDGID=y 564 | CONFIG_ENVDIR=y 565 | CONFIG_SOFTLIMIT=y 566 | CONFIG_ASH=y 567 | CONFIG_ASH_BASH_COMPAT=y 568 | CONFIG_ASH_JOB_CONTROL=y 569 | CONFIG_ASH_ALIAS=y 570 | CONFIG_ASH_GETOPTS=y 571 | CONFIG_ASH_BUILTIN_ECHO=y 572 | CONFIG_ASH_BUILTIN_PRINTF=y 573 | CONFIG_ASH_BUILTIN_TEST=y 574 | CONFIG_ASH_CMDCMD=y 575 | CONFIG_ASH_OPTIMIZE_FOR_SIZE=y 576 | CONFIG_ASH_RANDOM_SUPPORT=y 577 | CONFIG_ASH_EXPAND_PRMT=y 578 | CONFIG_CTTYHACK=y 579 | CONFIG_HUSH=y 580 | CONFIG_HUSH_BASH_COMPAT=y 581 | CONFIG_HUSH_BRACE_EXPANSION=y 582 | CONFIG_HUSH_HELP=y 583 | CONFIG_HUSH_INTERACTIVE=y 584 | CONFIG_HUSH_SAVEHISTORY=y 585 | CONFIG_HUSH_JOB=y 586 | CONFIG_HUSH_TICK=y 587 | CONFIG_HUSH_IF=y 588 | CONFIG_HUSH_LOOPS=y 589 | CONFIG_HUSH_CASE=y 590 | CONFIG_HUSH_FUNCTIONS=y 591 | CONFIG_HUSH_LOCAL=y 592 | CONFIG_HUSH_RANDOM_SUPPORT=y 593 | CONFIG_HUSH_EXPORT_N=y 594 | CONFIG_HUSH_MODE_X=y 595 | CONFIG_SH_MATH_SUPPORT=y 596 | CONFIG_SH_MATH_SUPPORT_64=y 597 | CONFIG_FEATURE_SH_EXTRA_QUIET=y 598 | --------------------------------------------------------------------------------