Crash_Course Loadable Kernel Module Programming (A to Z) for ARM

Loadable Kernel Modules, I will demonstrate the whole process on embedded system, for your information,

1) Development station with debian distro,

2) Embedded Artists LPC OEM 3250 (ARM 9) development board, are the basic requirement for any embedded system.

Linux Kernel

Unfortunately, my development board was quite old, I was unable to locate the default configuration file from latest Kernel sources. So I decided to go back in search of old Kernel sources (v2). I found linux kernel version 2.6.34 is appropriate for my board, board’s manual from vendor helped me alot for choosing kernel.

After downloading, I had same problem, absence of default configuration. Fortunately I found a patch, which made the kernel suitable for my EA 3250 board.

$ tar -xf linux-2.6.34.xz

 

$ cd linux-2.6.34/

Applied patch,

$ patch -p1 < ../patchfile

Kernel configuration,

$ make ARCH=arm CROSS_COMPILE=arm-linux- ea3250_defconfig

Building uImage

$ make ARCH=arm CROSS_COMPILE=arm-linux- uImage

So, Kernel Image is available at arch/arm/boot/uImage.

I booted kernel using tftp and had access to Network root file system (NFS). So my development board and work station is ready to work further.

Kernel Module Source code

Create a hello.c inside /root directory of NFS root file system after booting board.

$ vim hello.c

#include <linux/init.h>
#include <linux/module.h>

#include <linux/moduleparam.h>

MODULE_LICENSE(“GPL”);
MODULE_AUTHOR(“S MOHAMMED AUDHIL”);

static char *data = “world”;
module_param(data, charp, 0); // Declaring Module parameter

static int howmany = 1;
module_param(howmany, int, 0); // Declaring Module parameter

static int secs; // to display number of seconds elapsed since my module was loaded into kernel
struct timeval tv; // Required structure for do_gettimeofday() function

static int __init hello_init(void)
{
int i;
do_gettimeofday(&tv); // It is function to return number of seconds 
secs = tv.tv_sec; // storing value in local variable
for (i = 1; i <= howmany; i++)
printk(KERN_ALERT “(%d) Hello %s\n”, i, data);
return 0;
}

static void __exit hello_exit(void)
{
printk(KERN_ALERT “Program Over..\n”);
printk(KERN_ALERT “Module loaded for %d seconds”, secs – 613416); // I found this 613416 to get exact one second time
}

module_init(hello_init);
module_exit(hello_exit);

$ vim Makefile

obj-m := hello.o

KDIR := $(HOME)/Desktop/Kernel_dd_training/felabs/linux/modules/linux-2.6.34
PWD := $(shell pwd)

default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

Cross compiling module suitable for ARM architecture NOTE : I cross compiled at development workstation

$ make ARCH=arm CROSS_COMPILE=arm-linux- 

Now loading, module NOTE : This is to be done at target architecture

$ insmod hello.ko howmany=2

Checking

$ dmesg

[ 78.312925] (1) Hello world

[ 78.312925] (2) Hello world

$ rmmod hello.ko

Checking

$ dmesg

[ 87.312925] Program over..

[ 87.312925] Module loaded for 19 seconds

So every thing works fine…

Linux Coding Standards,

It is mandatory for any source code to be liable for standards, hence others can read / modify our source code accordingly.

Fortunately, the Linux kernel community provides you with a utility to find coding standards violations.

Run the scripts/checkpatch.pl -h command in the kernel sources, to find which options are available. Now, run:

scripts/checkpatch.pl –file –no-tree <path>/<to>/hello.c

And See how many violations are reported on your code,  fix your code until there are no errors left.

Time to add new module into Kernel Source directory

1) Add hello.c inside Drivers/misc/ directory of Kernel source

2) Describe the configuration interface for your new driver by adding the following lines to the Kconfig file in this directory:

config HELLO_DRIVER
tristate “mY OWN DRIVER”
depends on ARM
help
mY HAND ROLLED DRIVER

3) Add a line in the Makefile file based on the Kconfig setting:

obj-$(CONFIG_HELLO_DRIVER) += hello.o

During Kernel Configuration for ARM architecture you may see our driver at

Device Drivers —>

              Misc devices —>

                        mY OWN DRIVER

You can configure it as module, as other options you select at configuration…

Creating Patch

You can be proud of your new module! To be able to share it with others, create a patch which adds your new files to the mainstream kernel.

Before making your changes, make sure you have two kernel trees:

$ cp -a linux-x.x.xx/ linux-x.x.xx-patch/

Make your changes in linux-x.x.xx-patch/

Run make distclean to keep only source files.

$ make distclean

Create a patch file:

$ diff -Nur linux-x.x.xx/ linux-x.x.xx-patch/ > patchfile 

Congrats…! you can apply this patch to fresh kernel source of same version and add new driver.

Share your patchfile to friends and let them analyse new driver…!

Enjoy..!

Advertisements

How to get configuration file (.config) from Kernel image

So, simple

After googling, I found this solution, it is very much effective in Embedded domain.

Just boot respective kernel image, and type the following in console (terminal).

# cp /proc/config.gz /home/audhil

You will get tar file which contains respective config file used while preparing Kernel image, extract and use config file further…..

Enjoy..!

Passing Arguments to Loadable Kernel Modules

It is a piece of cake, don’t have idea on LKM.

Module Creation

$ vim hello.c

#include <linux/init.h>
#include <linux/module.h>

//step 1
#include <linux/moduleparam.h>

//step 2
int param_variable = 0

//step 3 register (macro)
// module_param(name_var,type,permissions);
/*
S_IRUSR
S_IWUSR
S_IXUSR

S_IRGRP
S_IWGRP

S_IRUSR | S_IWUSR
*/

module_param(param_variable,int,S_IRUSR | S_IWUSR);

void display()
{
printk(KERN_ALERT “Now the value is : %d”, param_variable);
}

static int hello_init(void)
{
printk(KERN_ALERT “Jack and jill went upto hill\n”);
display();
return 0;
}

static void hello_exit(void)
{
printk(KERN_ALERT “to fetch a pail of water\n”);
}

module_init(hello_init);
module_exit(hello_exit);

MODULE_AUTHOR(“S Mohammed Audhil”);
MODULE_DESCRIPTION(“Demonstration of LKM”);
MODULE_LICENSE(“GPL”);

Be aware of 3 steps what I mentioned above.

Creation of Makefile

obj-m += hello.o

KDIR = /usr/src/linux-headers-$(shell uname -r)

all:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

clean:
rm -rf *.o *.ko *.mod.* *.symvers *.order

Module compilation

$ make

Pass parameter at insmod (inserting module inside kernel)

$ sudo insmod param_variable=1234

dmesg

$ dmesg

<output truncated>

[18093.156608] chromium-browse[24441]: segfault at 4076f004 ip b23b63d8 sp bfcc38c4 error 4 in libflashplayer.so[b1dac000+bc4000]
[19466.015651] Jack and jill went upto hill
[19466.015656] Now the value is : 1346

To pass argument to an array replace,

hello.c as

#include <linux/init.h>
#include <linux/module.h>

#include <linux/moduleparam.h>

int param_variable[3] = {0,0,0};

module_param(param_variable,int,NULL,S_IRUSR | S_IWUSR); // In place of NULL represents number of arguments to pass

void display()

{

printk(KERN_ALERT “Now the value is : %d”, param_variable[0]);

printk(KERN_ALERT “Now the value is : %d”, param_variable[1]);

printk(KERN_ALERT “Now the value is : %d”, param_variable[2]);

}

static int hello_init(void)
{
printk(KERN_ALERT “Jack and jill went upto hill\n”);
display();
return 0;
}

static void hello_exit(void)
{
printk(KERN_ALERT “to fetch a pail of water\n”);
}

module_init(hello_init);
module_exit(hello_exit);

MODULE_AUTHOR(“S Mohammed Audhil”);
MODULE_DESCRIPTION(“Demonstration of LKM”);
MODULE_LICENSE(“GPL”);

and insmod becomes,

$ sudo insmod hello.ko param_variable=1,2,3

and dmesg will display,

$ dmesg

<output truncated>

[22508.247127] Jack and jill went upto hill
[22508.247131] Now the value is : 1
[22508.247132] Now the value is : 2
[22508.247134] Now the value is : 3

Hope, this helps…

Enjoy…!

Loadable Kernel Modules

Module is the piece of binary which can be inserted and removed, to and from Kernel dynamically. I mean into the current running kernel. I may demonstrate simple examples here,

Hello World Module

Module Creation

$ mkdir dummy

$ cd dummy/

$ vim hello.c

/* hello.c */

#include <linux/init.h>
#include <linux/module.h>

static int hello_init(void)
{
printk(KERN_ALERT “Jack and jill went upto hill\n”);
return 0;
}

static void hello_exit(void)
{
printk(KERN_ALERT “to fetch a pail of water\n”);
}

module_init(hello_init);
module_exit(hello_exit);

Here, hello_init() will get executed when this module is inserted, hello_exit() will get executed when the  module is removed from Kernel.

Creation of Makefile

$ vim Makefile

obj-m += hello.o

KDIR = /usr/src/linux-headers-2.6.39-bpo.2-686-pae

all:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

clean:
rm -rf *.o *.ko *.mod.* *.symvers *.order

KDIR may point to path to linux kernel source directory, or only to kernel headers as I mentioned above.

Module Compilation

$ make

make -C /usr/src/linux-headers-2.6.39-bpo.2-686-pae SUBDIRS=/home/elcot/Desktop/Kernel_dd_training/felabs/linux/modules/dummy modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.39-bpo.2-686-pae’
Building modules, stage 2.
MODPOST 1 modules
make[1]: Leaving directory `/usr/src/linux-headers-2.6.39-bpo.2-686-pae’

As a result various files generated as below,

hello.ko

hello.mod.c

hello.mod.o

hello.o

Module.symvers

modules.order

insmod (inserting module inside kernel)

$ sudo insmod hello.ko

dmesg (checking output of module inside kernel)

$ dmesg

<output truncated>

[ 8044.317993] r8169 0000:01:00.0: eth5: link down
[ 9387.926290] r8169 0000:01:00.0: eth5: link up
[13132.548674] r8169 0000:01:00.0: eth5: link down
[14226.600851] r8169 0000:01:00.0: eth5: link up
[15710.119776] hello: module license ‘unspecified’ taints kernel.
[15710.120782] Jack and jill went upto hill

hello_init() function is executed when module is inserted into the Kernel.

rmmod (to remove module from kernel)

$ sudo rmmod hello.ko

again, cheking with dmesg 

$ dmesg

<output truncated> 

[ 8044.317993] r8169 0000:01:00.0: eth5: link down
[ 9387.926290] r8169 0000:01:00.0: eth5: link up
[13132.548674] r8169 0000:01:00.0: eth5: link down
[14226.600851] r8169 0000:01:00.0: eth5: link up
[15710.119776] hello: module license ‘unspecified’ taints kernel.
[15710.120782] Jack and jill went upto hill

[15750.777030] to fetch a pail of water

hello_exit() function is called, when the module is removed..

 Enjoy..!

Native and Remote debugging techniques in Embedded linux

I will explain 2 techniques of debugging of an ARM 9 application. Debugging helps to rectify code and makes life easier, but when we deal with embedded systems we have more and more options of choosing right debugger.

Native debugging

Here I like to share some of my experience with strace.I would like to say this as Native debugging since no networking is involved and debugging is done directly over terminal of target. Correct me if I am wrong in this notion. Let us jump into strace..

strace will be compiled while generating cross-compiler for preferred architecture, locate it from cross-compiler and copy to /usr/bin directory of target.

strace allows to trace all the system calls made by a process: opening, reading and writing files, starting other processes, accessing time, etc. When something goes wrong in your application, strace is an invaluable tool to see what it actually does, even when you don’t have the source code.

Application and cross-compilation

$ arm-linux-gcc -o app app.c

copy the binary to target

$ cp app path/to/target/root_dir 

Running application over target,

# ./app

<just hangs, no output>

But this is not the required output, let us use strace now

$ strace ./app

<output truncated>
open(“/etc/vista.key”, O_RDONLY) = -1 ENOENT (No such file or directory)
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
nanosleep({1, 0}, 0xbeeacdf0) = 0
open(“/etc/vista.key”, O_RDONLY) = -1 ENOENT (No such file or directory)
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
nanosleep({1, 0}, 0xbeeacdf0) = 0
open(“/etc/vista.key”, O_RDONLY) = -1 ENOENT (No such file or directory)
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
nanosleep({1, 0}, 0xbeeacdf0) = 0

As you can see my application is looking for a file /etc/pista.c which is not available inside my target, So I created an empty file at /etc/pista.c

# touch /etc/pista.c

Again, running application

# ./app

<I got required output>

You can see that, even without browsing source code of my application I can debug it..

Cheers…!

Remote debugging

We need to install gdb at host and gdbserver at target, both will be connected together with either with serial or ethernet port. Universal law of gdb is binaries(executables) inside host system must have debugging symbols (necessary for any debugging software) and it should not be stripped, whereas the same binary inside target must be stripped of.

Main advantage of strip is it will produce executables in very smaller size.

Let us jump into gdb remote debugging

1) Cross compile application with insisting debug informations inside executable by using -g ,

$ arm-linux-gcc -g -o app app.c

2) Strip of executable inside target

$ arm-linux-strip path/to/root/filesystem/app

Keep in mind, here I am using NFS for root filesystem for target, hence I can access the root filesystem as like any other files inside system.

3) On target run program through gdbserver 

gdbserver localhost:<port> <executable> <args>
gdbserver /dev/ttyS0 <executable> <args>

At target,

# gdbserver localhost: 2345 app

Process app created; pid = 415
Listening on port 2345

as per your judgement yes a new process is created and it starts listening at respective port no 2345 for any host system.

4) And at host, run the ARCH-linux-gdb program, and use the following gdb commands:

To connect to target,

gdb> target remote <ip-addr>:<port> (networking)

gdb> target remote /dev/ttyS0 (serial link)

To tell gdb where shared libraries are:

gdb> set sysroot <library-path>

$ arm-linux-gdb app

GNU gdb (crosstool-NG 1.18.0) 7.1
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html&gt;
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type “show copying”
and “show warranty” for details.
This GDB was configured as “–host=i686-build_pc-linux-gnu –target=arm-unknown-linux-uclibcgnueabi”.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>&#8230;
Reading symbols from /home/elcot/Desktop/Embedded_linux/felabss/sysdev/debugging/vista-emulator…done.
(gdb)

You can see that I am using gdb of crosstool-ng which was configured by me.

Then, we need to tell where to find our libraries, since they are not present in the default /lib and /usr/lib directories on your workstation. This is done by setting GDB sysroot variable,

(gdb) set sysroot /usr/local/xtools/arm-unknown-linux-uclibcgnueabi/arm-unknown-linux-uclibcgnueabi/sysroot/

To connect with target,

(gdb) target remote <target-ip-address>:2345

(gdb)

Now you are connected with target, and start using normal gdb commands for debugging

(gdb) continue
(gdb) backtrace

and so on….upto finding bug in application.

Enjoy..!

How Patch works?

Patch is a file that describes difference between two files (old file with new file). A special program called diff will compare both files line by line and prints the differences to stdout in a special format. Patchfile can read the output of diff function and it may apply those changes to old (original) file. Sounds strange..? Let me explain more..

1) Create two directories for usage

$ mkdir old new

2) Create files with same name at both directories

$ vim old/file

this

is

strange

file

$ vim new/file

this
is
normal
file

3) Use diff function now

$ diff -Nru old new

diff -Nru old/file new/file
— old/file 2013-05-15 14:11:28.000000000 +0530
+++ new/file 2013-05-15 14:11:37.000000000 +0530
@@ -1,4 +1,4 @@
this
is
-old
+new
file

Looks strange…!

diff -Nru old/file new/file – It says diff function is applied to old/file and new/file files.
— old/file 2013-05-15 14:11:28.000000000 +0530 – It says we need to remove something from old/file, it provides date and time for reference
+++ new/file 2013-05-15 14:11:37.000000000 +0530 – It says we need to add something from new/file to old/file, it provides date and time for reference
@@ -1,4 +1,4 @@ – It says that we need to remove one line from first file (old/file) which holds totally 4 lines, and need to add one from second file (new/file) which holds only 4 lines.
this – first line same for both files
is – second line same for both files
-old – remove this from first file (old/file)
+new – add this line of second file (new/file) into first file (old file)

file – last line same for both files

4) Feed output of diff function into a patch file

$ diff -Nru old new > patchfile

5) Applying patchfile into old/file

$ cd old/
$ patch -p1 < ../patchfile

patching file file.txt

6) old/file is same as new/file

$ cat file

this
is
new
file

Moral of Story : To change any old file into newer, use respective patch for that. Linux Kernel version can be upgraded from old version into a newer ones.

Enjoy..!

How to avoid /bin/sh: can’t access tty; job control turned off at embedded system

Friends, when I started working with ARM boards I faced much more problems on interfacing board with my development pc, and this is also one of such. Eventhough I managed to start terminal(after u-boot process) of target system I am unable to control my terminal by means of [ctrl] + [c] when terminal hangs at some thing. In my application, there was a test in that terminal of target will hang and I need to take back my terminal by pressing ctrl + c. After googling I found that my target is running terminal at /dev/console so to make a controllable terminal I need to run terminal at some other device such as /dev/tty0 – /dev/tty4. But since we are dealing with embedded system, serial device becomes handy, so I decided to run terminal at /dev/ttyS0 which is first serial device of my system.

Fault,

When my embedded system boots up, I saw this line,

/bin/sh: can’t access tty; job control turned off

Steps I followed,

1) I added following line to /etc/inittab (configuration file for /sbin/init)

ttyS0::askfirst:/bin/sh

My /etc/inittab looks like,

# /etc/inittab: init configuration for /sbin/init

# running /etc/init.d/rcS for mounting /proc and /sys file system

::sysinit:/etc/init.d/rcS
ttyS0::askfirst:/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/sbin/swapoff -a
::shutdown:/bin/umount -a -r
::restart:/sbin/init

2) creating character device at /dev directory of target with major number 4 and minor number 64 (you can refer this values from your development pc)

$ mknod -m 666 /dev/ttyS0 c 4 64

3) Time to reboot,

After rebooting, my system works fine and I can use [ctrl] + [c] as normal, and this line “/bin/sh: can’t access tty; job control turned off ” does not exists.

FYI,

My startup script /etc/init.d/rcS is

#!/bin/sh

# just dummy to mount /proc and /sys

mount -vt proc proc proc
mount -vt sysfs sysfs sys

Enjoy..!

SSH and FTP for remote access

SSH

‘SSH’ stands for “Secure SHell”, this will allow you to access your Linux Server / Desktop by sitting anywhere inside the globe.

1) Install ssh

$ sudo apt-get install ssh

2) Know your ip – address

$ sudo ifconfig | grep inet 

inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::f2de:f1ff:fecb:aa63/64 Scope:Link
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host

3) Check status of firewall if you have. Since this may create problem with port when accessing SSH etc. Hence disable it, if its ON.

$ sudo ufw status 

Status: inactive

Mine firewall is ufw and it is in inactive stage, so no problem.

4) Just download and install any terminal emulator, at remote computer from here. Remote computer may have any kind of operating system. In my case, it Windows XP.

5) Open putty,

putty1

enter ip address of your desktop or server and hit open

putty22

And you can access, your linux desktop / server remotely.

FTP

Even though, you can access your system using SSH, but you cannot upload / download any files to / from your remote system. This can be achieved by FTP – File Transfer Protocol.

1) install vsftpd – very secure file transfer protocol daemon

$ sudo apt-get install vsftpd

2) edit /etc/vsftpd.conf

$ sudo vim /etc/vsftpd.conf

uncomment, local_enable=YES – this allows all users to access ftp to remote system.

write_enable=YES – this allows all users to upload files using ftp to remote system.

3) restart vsftpd service

$ sudo service vsftpd restart

Stopping FTP server: vsftpd.
Starting FTP server: vsftpd.

4) Just download and install any ftp client, at remote computer from here. Remote computer may have any kind of operating system. In my case, it Windows XP.

5) Open filezilla,

filezilla

enter ip address, user, and password of remote computer and connect.

You can access files of remote system, just double click on files to upload and download files at remote system.

Enjoy…!

How to setup NFS(Network File system) server in development workstation

1) Create a directory,

$ mkdir /home/user/nfsdir

2) Install required package

$ sudo apt-get install nfs-kernel-server

3) Edit /etc/exports file

$ sudo vim /etc/exports 

4) Add the following single line, assuming IP address of target board is 192.168.1.20

/home /user/nfsdir 192.168.1.20(rw,no_root_squash,no_subtree_check)

5) Restart NFS server

$ sudo /etc/init.d/nfs-kernel-server restart

Whatever present at /home/user/nfsdir can be exposed to target with appropriate commands.

Configuration file for Busybox – 1.20

I may share this file for, embedded system purpose.

#
# Busybox version: 1.20.1
# Sat May 4 11:59:59 2013
#
CONFIG_HAVE_DOT_CONFIG=y

#
# Busybox Settings
#

#
# General Configuration
#
# CONFIG_DESKTOP is not set
# CONFIG_EXTRA_COMPAT is not set
# CONFIG_INCLUDE_SUSv2 is not set
# CONFIG_USE_PORTABLE_CODE is not set
CONFIG_PLATFORM_LINUX=y
CONFIG_FEATURE_BUFFERS_USE_MALLOC=y
# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set
# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set
CONFIG_SHOW_USAGE=y
CONFIG_FEATURE_VERBOSE_USAGE=y
# CONFIG_FEATURE_COMPRESS_USAGE is not set
# CONFIG_FEATURE_INSTALLER is not set
# CONFIG_INSTALL_NO_USR is not set
# CONFIG_LOCALE_SUPPORT is not set
CONFIG_UNICODE_SUPPORT=y
# CONFIG_UNICODE_USING_LOCALE is not set
# CONFIG_FEATURE_CHECK_UNICODE_IN_ENV is not set
CONFIG_SUBST_WCHAR=63
CONFIG_LAST_SUPPORTED_WCHAR=767
# CONFIG_UNICODE_COMBINING_WCHARS is not set
# CONFIG_UNICODE_WIDE_WCHARS is not set
# CONFIG_UNICODE_BIDI_SUPPORT is not set
# CONFIG_UNICODE_NEUTRAL_TABLE is not set
# CONFIG_UNICODE_PRESERVE_BROKEN is not set
CONFIG_LONG_OPTS=y
# CONFIG_FEATURE_DEVPTS is not set
# CONFIG_FEATURE_CLEAN_UP is not set
# CONFIG_FEATURE_UTMP is not set
# CONFIG_FEATURE_WTMP is not set
# CONFIG_FEATURE_PIDFILE is not set
# CONFIG_FEATURE_SUID is not set
# CONFIG_FEATURE_SUID_CONFIG is not set
# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set
# CONFIG_SELINUX is not set
# CONFIG_FEATURE_PREFER_APPLETS is not set
CONFIG_BUSYBOX_EXEC_PATH=”/proc/self/exe”
CONFIG_FEATURE_SYSLOG=y
# CONFIG_FEATURE_HAVE_RPC is not set

#
# Build Options
#
CONFIG_STATIC=y
# CONFIG_PIE is not set
# CONFIG_NOMMU is not set
# CONFIG_BUILD_LIBBUSYBOX is not set
# CONFIG_FEATURE_INDIVIDUAL is not set
# CONFIG_FEATURE_SHARED_BUSYBOX is not set
# CONFIG_LFS is not set
CONFIG_CROSS_COMPILER_PREFIX=”arm-linux-”
CONFIG_SYSROOT=””
CONFIG_EXTRA_CFLAGS=””
CONFIG_EXTRA_LDFLAGS=””
CONFIG_EXTRA_LDLIBS=””

#
# Debugging Options
#
# CONFIG_DEBUG is not set
# CONFIG_DEBUG_PESSIMIZE is not set
# CONFIG_WERROR is not set
CONFIG_NO_DEBUG_LIB=y
# CONFIG_DMALLOC is not set
# CONFIG_EFENCE is not set

#
# Installation Options (“make install” behavior)
#
CONFIG_INSTALL_APPLET_SYMLINKS=y
# CONFIG_INSTALL_APPLET_HARDLINKS is not set
# CONFIG_INSTALL_APPLET_SCRIPT_WRAPPERS is not set
# CONFIG_INSTALL_APPLET_DONT is not set
# CONFIG_INSTALL_SH_APPLET_SYMLINK is not set
# CONFIG_INSTALL_SH_APPLET_HARDLINK is not set
# CONFIG_INSTALL_SH_APPLET_SCRIPT_WRAPPER is not set
CONFIG_PREFIX=”./_install”

#
# Busybox Library Tuning
#
# CONFIG_FEATURE_SYSTEMD is not set
CONFIG_FEATURE_RTMINMAX=y
CONFIG_PASSWORD_MINLEN=6
CONFIG_MD5_SMALL=1
# CONFIG_FEATURE_FAST_TOP is not set
# CONFIG_FEATURE_ETC_NETWORKS is not set
CONFIG_FEATURE_USE_TERMIOS=y
CONFIG_FEATURE_EDITING=y
CONFIG_FEATURE_EDITING_MAX_LEN=1024
# CONFIG_FEATURE_EDITING_VI is not set
CONFIG_FEATURE_EDITING_HISTORY=15
# CONFIG_FEATURE_EDITING_SAVEHISTORY is not set
# CONFIG_FEATURE_EDITING_SAVE_ON_EXIT is not set
# CONFIG_FEATURE_REVERSE_SEARCH is not set
CONFIG_FEATURE_TAB_COMPLETION=y
# CONFIG_FEATURE_USERNAME_COMPLETION is not set
# CONFIG_FEATURE_EDITING_FANCY_PROMPT is not set
# CONFIG_FEATURE_EDITING_ASK_TERMINAL is not set
CONFIG_FEATURE_NON_POSIX_CP=y
# CONFIG_FEATURE_VERBOSE_CP_MESSAGE is not set
CONFIG_FEATURE_COPYBUF_KB=4
# CONFIG_FEATURE_SKIP_ROOTFS is not set
# CONFIG_MONOTONIC_SYSCALL is not set
CONFIG_IOCTL_HEX2STR_ERROR=y
# CONFIG_FEATURE_HWIB is not set

#
# Applets
#

#
# Archival Utilities
#
# CONFIG_FEATURE_SEAMLESS_XZ is not set
# CONFIG_FEATURE_SEAMLESS_LZMA is not set
# CONFIG_FEATURE_SEAMLESS_BZ2 is not set
# CONFIG_FEATURE_SEAMLESS_GZ is not set
# CONFIG_FEATURE_SEAMLESS_Z is not set
# CONFIG_AR is not set
# CONFIG_FEATURE_AR_LONG_FILENAMES is not set
# CONFIG_FEATURE_AR_CREATE is not set
# CONFIG_BUNZIP2 is not set
# CONFIG_BZIP2 is not set
# CONFIG_CPIO is not set
# CONFIG_FEATURE_CPIO_O is not set
# CONFIG_FEATURE_CPIO_P is not set
# CONFIG_DPKG is not set
# CONFIG_DPKG_DEB is not set
# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set
# CONFIG_GUNZIP is not set
# CONFIG_GZIP is not set
# CONFIG_FEATURE_GZIP_LONG_OPTIONS is not set
CONFIG_GZIP_FAST=0
# CONFIG_LZOP is not set
# CONFIG_LZOP_COMPR_HIGH is not set
# CONFIG_RPM2CPIO is not set
# CONFIG_RPM is not set
# CONFIG_TAR is not set
# CONFIG_FEATURE_TAR_CREATE is not set
# CONFIG_FEATURE_TAR_AUTODETECT is not set
# CONFIG_FEATURE_TAR_FROM is not set
# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set
# CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY is not set
# CONFIG_FEATURE_TAR_GNU_EXTENSIONS is not set
# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set
# CONFIG_FEATURE_TAR_TO_COMMAND is not set
# CONFIG_FEATURE_TAR_UNAME_GNAME is not set
# CONFIG_FEATURE_TAR_NOPRESERVE_TIME is not set
# CONFIG_FEATURE_TAR_SELINUX is not set
# CONFIG_UNCOMPRESS is not set
# CONFIG_UNLZMA is not set
# CONFIG_FEATURE_LZMA_FAST is not set
# CONFIG_LZMA is not set
# CONFIG_UNXZ is not set
# CONFIG_XZ is not set
# CONFIG_UNZIP is not set

#
# Coreutils
#
# CONFIG_BASENAME is not set
CONFIG_CAT=y
# CONFIG_DATE is not set
# CONFIG_FEATURE_DATE_ISOFMT is not set
# CONFIG_FEATURE_DATE_NANO is not set
# CONFIG_FEATURE_DATE_COMPAT is not set
# CONFIG_HOSTID is not set
# CONFIG_ID is not set
# CONFIG_GROUPS is not set
CONFIG_TEST=y
# CONFIG_FEATURE_TEST_64 is not set
CONFIG_TOUCH=y
CONFIG_FEATURE_TOUCH_SUSV3=y
# CONFIG_TR is not set
# CONFIG_FEATURE_TR_CLASSES is not set
# CONFIG_FEATURE_TR_EQUIV is not set
CONFIG_BASE64=y
# CONFIG_WHO is not set
# CONFIG_USERS is not set
# CONFIG_CAL is not set
# CONFIG_CATV is not set
# CONFIG_CHGRP is not set
CONFIG_CHMOD=y
# CONFIG_CHOWN is not set
# CONFIG_FEATURE_CHOWN_LONG_OPTIONS is not set
# CONFIG_CHROOT is not set
# CONFIG_CKSUM is not set
# CONFIG_COMM is not set
CONFIG_CP=y
CONFIG_FEATURE_CP_LONG_OPTIONS=y
# CONFIG_CUT is not set
# CONFIG_DD is not set
# CONFIG_FEATURE_DD_SIGNAL_HANDLING is not set
# CONFIG_FEATURE_DD_THIRD_STATUS_LINE is not set
# CONFIG_FEATURE_DD_IBS_OBS is not set
# CONFIG_DF is not set
# CONFIG_FEATURE_DF_FANCY is not set
# CONFIG_DIRNAME is not set
# CONFIG_DOS2UNIX is not set
# CONFIG_UNIX2DOS is not set
# CONFIG_DU is not set
# CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K is not set
CONFIG_ECHO=y
# CONFIG_FEATURE_FANCY_ECHO is not set
# CONFIG_ENV is not set
# CONFIG_FEATURE_ENV_LONG_OPTIONS is not set
# CONFIG_EXPAND is not set
# CONFIG_FEATURE_EXPAND_LONG_OPTIONS is not set
# CONFIG_EXPR is not set
# CONFIG_EXPR_MATH_SUPPORT_64 is not set
# CONFIG_FALSE is not set
# CONFIG_FOLD is not set
# CONFIG_FSYNC is not set
# CONFIG_HEAD is not set
# CONFIG_FEATURE_FANCY_HEAD is not set
# CONFIG_INSTALL is not set
# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set
CONFIG_LN=y
# CONFIG_LOGNAME is not set
CONFIG_LS=y
# CONFIG_FEATURE_LS_FILETYPES is not set
CONFIG_FEATURE_LS_FOLLOWLINKS=y
# CONFIG_FEATURE_LS_RECURSIVE is not set
CONFIG_FEATURE_LS_SORTFILES=y
CONFIG_FEATURE_LS_TIMESTAMPS=y
# CONFIG_FEATURE_LS_USERNAME is not set
# CONFIG_FEATURE_LS_COLOR is not set
# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set
# CONFIG_MD5SUM is not set
CONFIG_MKDIR=y
# CONFIG_FEATURE_MKDIR_LONG_OPTIONS is not set
# CONFIG_MKFIFO is not set
CONFIG_MKNOD=y
CONFIG_MV=y
# CONFIG_FEATURE_MV_LONG_OPTIONS is not set
# CONFIG_NICE is not set
# CONFIG_NOHUP is not set
# CONFIG_OD is not set
# CONFIG_PRINTENV is not set
# CONFIG_PRINTF is not set
CONFIG_PWD=y
# CONFIG_READLINK is not set
# CONFIG_FEATURE_READLINK_FOLLOW is not set
# CONFIG_REALPATH is not set
CONFIG_RM=y
CONFIG_RMDIR=y
# CONFIG_FEATURE_RMDIR_LONG_OPTIONS is not set
# CONFIG_SEQ is not set
# CONFIG_SHA1SUM is not set
# CONFIG_SHA256SUM is not set
# CONFIG_SHA512SUM is not set
CONFIG_SLEEP=y
# CONFIG_FEATURE_FANCY_SLEEP is not set
# CONFIG_FEATURE_FLOAT_SLEEP is not set
# CONFIG_SORT is not set
# CONFIG_FEATURE_SORT_BIG is not set
# CONFIG_SPLIT is not set
# CONFIG_FEATURE_SPLIT_FANCY is not set
# CONFIG_STAT is not set
# CONFIG_FEATURE_STAT_FORMAT is not set
# CONFIG_STTY is not set
# CONFIG_SUM is not set
CONFIG_SYNC=y
# CONFIG_TAC is not set
# CONFIG_TAIL is not set
# CONFIG_FEATURE_FANCY_TAIL is not set
# CONFIG_TEE is not set
# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set
# CONFIG_TRUE is not set
# CONFIG_TTY is not set
CONFIG_UNAME=y
# CONFIG_UNEXPAND is not set
# CONFIG_FEATURE_UNEXPAND_LONG_OPTIONS is not set
# CONFIG_UNIQ is not set
# CONFIG_USLEEP is not set
# CONFIG_UUDECODE is not set
# CONFIG_UUENCODE is not set
# CONFIG_WC is not set
# CONFIG_FEATURE_WC_LARGE is not set
# CONFIG_WHOAMI is not set
# CONFIG_YES is not set

#
# Common options for cp and mv
#
CONFIG_FEATURE_PRESERVE_HARDLINKS=y

#
# Common options for ls, more and telnet
#
CONFIG_FEATURE_AUTOWIDTH=y

#
# Common options for df, du, ls
#
CONFIG_FEATURE_HUMAN_READABLE=y
# CONFIG_FEATURE_MD5_SHA1_SUM_CHECK is not set

#
# Console Utilities
#
# CONFIG_CHVT is not set
# CONFIG_FGCONSOLE is not set
# CONFIG_CLEAR is not set
# CONFIG_DEALLOCVT is not set
CONFIG_DUMPKMAP=y
# CONFIG_KBD_MODE is not set
# CONFIG_LOADFONT is not set
CONFIG_LOADKMAP=y
# CONFIG_OPENVT is not set
# CONFIG_RESET is not set
# CONFIG_RESIZE is not set
# CONFIG_FEATURE_RESIZE_PRINT is not set
# CONFIG_SETCONSOLE is not set
# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set
# CONFIG_SETFONT is not set
# CONFIG_FEATURE_SETFONT_TEXTUAL_MAP is not set
CONFIG_DEFAULT_SETFONT_DIR=””
# CONFIG_SETKEYCODES is not set
# CONFIG_SETLOGCONS is not set
# CONFIG_SHOWKEY is not set
# CONFIG_FEATURE_LOADFONT_PSF2 is not set
# CONFIG_FEATURE_LOADFONT_RAW is not set

#
# Debian Utilities
#
# CONFIG_MKTEMP is not set
# CONFIG_PIPE_PROGRESS is not set
# CONFIG_RUN_PARTS is not set
# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set
# CONFIG_FEATURE_RUN_PARTS_FANCY is not set
# CONFIG_START_STOP_DAEMON is not set
# CONFIG_FEATURE_START_STOP_DAEMON_FANCY is not set
# CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS is not set
CONFIG_WHICH=y

#
# Editors
#
# CONFIG_PATCH is not set
CONFIG_VI=y
CONFIG_FEATURE_VI_MAX_LEN=4096
# CONFIG_FEATURE_VI_8BIT is not set
CONFIG_FEATURE_VI_COLON=y
CONFIG_FEATURE_VI_YANKMARK=y
CONFIG_FEATURE_VI_SEARCH=y
# CONFIG_FEATURE_VI_REGEX_SEARCH is not set
CONFIG_FEATURE_VI_USE_SIGNALS=y
CONFIG_FEATURE_VI_DOT_CMD=y
# CONFIG_FEATURE_VI_READONLY is not set
# CONFIG_FEATURE_VI_SETOPTS is not set
# CONFIG_FEATURE_VI_SET is not set
CONFIG_FEATURE_VI_WIN_RESIZE=y
CONFIG_FEATURE_VI_ASK_TERMINAL=y
# CONFIG_FEATURE_VI_OPTIMIZE_CURSOR is not set
# CONFIG_AWK is not set
# CONFIG_FEATURE_AWK_LIBM is not set
# CONFIG_CMP is not set
# CONFIG_DIFF is not set
# CONFIG_FEATURE_DIFF_LONG_OPTIONS is not set
# CONFIG_FEATURE_DIFF_DIR is not set
# CONFIG_ED is not set
# CONFIG_SED is not set
# CONFIG_FEATURE_ALLOW_EXEC is not set

#
# Finding Utilities
#
# CONFIG_FIND is not set
# CONFIG_FEATURE_FIND_PRINT0 is not set
# CONFIG_FEATURE_FIND_MTIME is not set
# CONFIG_FEATURE_FIND_MMIN is not set
# CONFIG_FEATURE_FIND_PERM is not set
# CONFIG_FEATURE_FIND_TYPE is not set
# CONFIG_FEATURE_FIND_XDEV is not set
# CONFIG_FEATURE_FIND_MAXDEPTH is not set
# CONFIG_FEATURE_FIND_NEWER is not set
# CONFIG_FEATURE_FIND_INUM is not set
# CONFIG_FEATURE_FIND_EXEC is not set
# CONFIG_FEATURE_FIND_USER is not set
# CONFIG_FEATURE_FIND_GROUP is not set
# CONFIG_FEATURE_FIND_NOT is not set
# CONFIG_FEATURE_FIND_DEPTH is not set
# CONFIG_FEATURE_FIND_PAREN is not set
# CONFIG_FEATURE_FIND_SIZE is not set
# CONFIG_FEATURE_FIND_PRUNE is not set
# CONFIG_FEATURE_FIND_DELETE is not set
# CONFIG_FEATURE_FIND_PATH is not set
# CONFIG_FEATURE_FIND_REGEX is not set
# CONFIG_FEATURE_FIND_CONTEXT is not set
# CONFIG_FEATURE_FIND_LINKS is not set
CONFIG_GREP=y
# CONFIG_FEATURE_GREP_EGREP_ALIAS is not set
# CONFIG_FEATURE_GREP_FGREP_ALIAS is not set
# CONFIG_FEATURE_GREP_CONTEXT is not set
# CONFIG_XARGS is not set
# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set
# CONFIG_FEATURE_XARGS_SUPPORT_QUOTES is not set
# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set
# CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM is not set

#
# Init Utilities
#
# CONFIG_BOOTCHARTD is not set
# CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER is not set
# CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE is not set
CONFIG_HALT=y
# CONFIG_FEATURE_CALL_TELINIT is not set
CONFIG_TELINIT_PATH=””
CONFIG_INIT=y
CONFIG_FEATURE_USE_INITTAB=y
CONFIG_FEATURE_KILL_REMOVED=y
CONFIG_FEATURE_KILL_DELAY=0
# CONFIG_FEATURE_INIT_SCTTY is not set
# CONFIG_FEATURE_INIT_SYSLOG is not set
CONFIG_FEATURE_EXTRA_QUIET=y
# CONFIG_FEATURE_INIT_COREDUMPS is not set
# CONFIG_FEATURE_INITRD is not set
CONFIG_INIT_TERMINAL_TYPE=”linux”
# CONFIG_MESG is not set
# CONFIG_FEATURE_MESG_ENABLE_ONLY_GROUP is not set

#
# Login/Password Management Utilities
#
# CONFIG_ADD_SHELL is not set
# CONFIG_REMOVE_SHELL is not set
# CONFIG_FEATURE_SHADOWPASSWDS is not set
# CONFIG_USE_BB_PWD_GRP is not set
# CONFIG_USE_BB_SHADOW is not set
CONFIG_USE_BB_CRYPT=y
CONFIG_USE_BB_CRYPT_SHA=y
# CONFIG_ADDUSER is not set
# CONFIG_FEATURE_ADDUSER_LONG_OPTIONS is not set
# CONFIG_FEATURE_CHECK_NAMES is not set
CONFIG_FIRST_SYSTEM_ID=0
CONFIG_LAST_SYSTEM_ID=0
# CONFIG_ADDGROUP is not set
# CONFIG_FEATURE_ADDGROUP_LONG_OPTIONS is not set
# CONFIG_FEATURE_ADDUSER_TO_GROUP is not set
# CONFIG_DELUSER is not set
# CONFIG_DELGROUP is not set
# CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set
# CONFIG_GETTY is not set
# CONFIG_LOGIN is not set
# CONFIG_LOGIN_SESSION_AS_CHILD is not set
# CONFIG_PAM is not set
# CONFIG_LOGIN_SCRIPTS is not set
# CONFIG_FEATURE_NOLOGIN is not set
# CONFIG_FEATURE_SECURETTY is not set
# CONFIG_PASSWD is not set
# CONFIG_FEATURE_PASSWD_WEAK_CHECK is not set
# CONFIG_CRYPTPW is not set
# CONFIG_CHPASSWD is not set
CONFIG_FEATURE_DEFAULT_PASSWD_ALGO=””
# CONFIG_SU is not set
# CONFIG_FEATURE_SU_SYSLOG is not set
# CONFIG_FEATURE_SU_CHECKS_SHELLS is not set
# CONFIG_SULOGIN is not set
# CONFIG_VLOCK is not set

#
# Linux Ext2 FS Progs
#
# CONFIG_CHATTR is not set
# CONFIG_FSCK is not set
# CONFIG_LSATTR is not set
# CONFIG_TUNE2FS is not set

#
# Linux Module Utilities
#
CONFIG_MODINFO=y
# CONFIG_MODPROBE_SMALL is not set
# CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE is not set
# CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED is not set
CONFIG_INSMOD=y
CONFIG_RMMOD=y
CONFIG_LSMOD=y
CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT=y
CONFIG_MODPROBE=y
# CONFIG_FEATURE_MODPROBE_BLACKLIST is not set
# CONFIG_DEPMOD is not set

#
# Options common to multiple modutils
#
# CONFIG_FEATURE_2_4_MODULES is not set
# CONFIG_FEATURE_INSMOD_TRY_MMAP is not set
# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set
# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set
# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set
# CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set
CONFIG_FEATURE_MODUTILS_ALIAS=y
CONFIG_FEATURE_MODUTILS_SYMBOLS=y
CONFIG_DEFAULT_MODULES_DIR=”/lib/modules”
CONFIG_DEFAULT_DEPMOD_FILE=”modules.dep”

#
# Linux System Utilities
#
# CONFIG_BLOCKDEV is not set
CONFIG_MDEV=y
CONFIG_FEATURE_MDEV_CONF=y
CONFIG_FEATURE_MDEV_RENAME=y
CONFIG_FEATURE_MDEV_RENAME_REGEXP=y
CONFIG_FEATURE_MDEV_EXEC=y
# CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set
# CONFIG_REV is not set
# CONFIG_ACPID is not set
# CONFIG_FEATURE_ACPID_COMPAT is not set
# CONFIG_BLKID is not set
# CONFIG_FEATURE_BLKID_TYPE is not set
CONFIG_DMESG=y
CONFIG_FEATURE_DMESG_PRETTY=y
# CONFIG_FBSET is not set
# CONFIG_FEATURE_FBSET_FANCY is not set
# CONFIG_FEATURE_FBSET_READMODE is not set
# CONFIG_FDFLUSH is not set
# CONFIG_FDFORMAT is not set
# CONFIG_FDISK is not set
# CONFIG_FDISK_SUPPORT_LARGE_DISKS is not set
# CONFIG_FEATURE_FDISK_WRITABLE is not set
# CONFIG_FEATURE_AIX_LABEL is not set
# CONFIG_FEATURE_SGI_LABEL is not set
# CONFIG_FEATURE_SUN_LABEL is not set
# CONFIG_FEATURE_OSF_LABEL is not set
# CONFIG_FEATURE_GPT_LABEL is not set
# CONFIG_FEATURE_FDISK_ADVANCED is not set
# CONFIG_FINDFS is not set
# CONFIG_FLOCK is not set
# CONFIG_FREERAMDISK is not set
# CONFIG_FSCK_MINIX is not set
CONFIG_MKFS_EXT2=y
# CONFIG_MKFS_MINIX is not set
# CONFIG_FEATURE_MINIX2 is not set
# CONFIG_MKFS_REISER is not set
CONFIG_MKFS_VFAT=y
# CONFIG_GETOPT is not set
# CONFIG_FEATURE_GETOPT_LONG is not set
# CONFIG_HEXDUMP is not set
# CONFIG_FEATURE_HEXDUMP_REVERSE is not set
# CONFIG_HD is not set
# CONFIG_HWCLOCK is not set
# CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS is not set
# CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS is not set
# CONFIG_IPCRM is not set
# CONFIG_IPCS is not set
# CONFIG_LOSETUP is not set
CONFIG_LSPCI=y
CONFIG_LSUSB=y
# CONFIG_MKSWAP is not set
# CONFIG_FEATURE_MKSWAP_UUID is not set
CONFIG_MORE=y
CONFIG_MOUNT=y
# CONFIG_FEATURE_MOUNT_FAKE is not set
# CONFIG_FEATURE_MOUNT_VERBOSE is not set
# CONFIG_FEATURE_MOUNT_HELPERS is not set
# CONFIG_FEATURE_MOUNT_LABEL is not set
# CONFIG_FEATURE_MOUNT_NFS is not set
# CONFIG_FEATURE_MOUNT_CIFS is not set
CONFIG_FEATURE_MOUNT_FLAGS=y
CONFIG_FEATURE_MOUNT_FSTAB=y
# CONFIG_PIVOT_ROOT is not set
# CONFIG_RDATE is not set
# CONFIG_RDEV is not set
# CONFIG_READPROFILE is not set
# CONFIG_RTCWAKE is not set
# CONFIG_SCRIPT is not set
# CONFIG_SCRIPTREPLAY is not set
# CONFIG_SETARCH is not set
# CONFIG_SWAPONOFF is not set
# CONFIG_FEATURE_SWAPON_PRI is not set
# CONFIG_SWITCH_ROOT is not set
CONFIG_UMOUNT=y
CONFIG_FEATURE_UMOUNT_ALL=y

#
# Common options for mount/umount
#
# CONFIG_FEATURE_MOUNT_LOOP is not set
# CONFIG_FEATURE_MOUNT_LOOP_CREATE is not set
# CONFIG_FEATURE_MTAB_SUPPORT is not set
# CONFIG_VOLUMEID is not set
# CONFIG_FEATURE_VOLUMEID_EXT is not set
# CONFIG_FEATURE_VOLUMEID_BTRFS is not set
# CONFIG_FEATURE_VOLUMEID_REISERFS is not set
# CONFIG_FEATURE_VOLUMEID_FAT is not set
# CONFIG_FEATURE_VOLUMEID_HFS is not set
# CONFIG_FEATURE_VOLUMEID_JFS is not set
# CONFIG_FEATURE_VOLUMEID_XFS is not set
# CONFIG_FEATURE_VOLUMEID_NTFS is not set
# CONFIG_FEATURE_VOLUMEID_ISO9660 is not set
# CONFIG_FEATURE_VOLUMEID_UDF is not set
# CONFIG_FEATURE_VOLUMEID_LUKS is not set
# CONFIG_FEATURE_VOLUMEID_LINUXSWAP is not set
# CONFIG_FEATURE_VOLUMEID_CRAMFS is not set
# CONFIG_FEATURE_VOLUMEID_ROMFS is not set
# CONFIG_FEATURE_VOLUMEID_SYSV is not set
# CONFIG_FEATURE_VOLUMEID_OCFS2 is not set
# CONFIG_FEATURE_VOLUMEID_LINUXRAID is not set

#
# Miscellaneous Utilities
#
# CONFIG_CONSPY is not set
CONFIG_LESS=y
CONFIG_FEATURE_LESS_MAXLINES=9999999
# CONFIG_FEATURE_LESS_BRACKETS is not set
# CONFIG_FEATURE_LESS_FLAGS is not set
# CONFIG_FEATURE_LESS_MARKS is not set
# CONFIG_FEATURE_LESS_REGEXP is not set
# CONFIG_FEATURE_LESS_WINCH is not set
# CONFIG_FEATURE_LESS_ASK_TERMINAL is not set
# CONFIG_FEATURE_LESS_DASHCMD is not set
# CONFIG_FEATURE_LESS_LINENUMS is not set
# CONFIG_NANDWRITE is not set
# CONFIG_NANDDUMP is not set
# CONFIG_SETSERIAL is not set
# CONFIG_UBIATTACH is not set
# CONFIG_UBIDETACH is not set
CONFIG_UBIMKVOL=y
CONFIG_UBIRMVOL=y
CONFIG_UBIRSVOL=y
CONFIG_UBIUPDATEVOL=y
# CONFIG_ADJTIMEX is not set
# CONFIG_BBCONFIG is not set
# CONFIG_FEATURE_COMPRESS_BBCONFIG is not set
CONFIG_BEEP=y
CONFIG_FEATURE_BEEP_FREQ=4000
CONFIG_FEATURE_BEEP_LENGTH_MS=30
# CONFIG_CHAT is not set
# CONFIG_FEATURE_CHAT_NOFAIL is not set
# CONFIG_FEATURE_CHAT_TTY_HIFI is not set
# CONFIG_FEATURE_CHAT_IMPLICIT_CR is not set
# CONFIG_FEATURE_CHAT_SWALLOW_OPTS is not set
# CONFIG_FEATURE_CHAT_SEND_ESCAPES is not set
# CONFIG_FEATURE_CHAT_VAR_ABORT_LEN is not set
# CONFIG_FEATURE_CHAT_CLR_ABORT is not set
# CONFIG_CHRT is not set
# CONFIG_CROND is not set
# CONFIG_FEATURE_CROND_D is not set
# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set
CONFIG_FEATURE_CROND_DIR=””
# CONFIG_CRONTAB is not set
# CONFIG_DC is not set
# CONFIG_FEATURE_DC_LIBM is not set
# CONFIG_DEVFSD is not set
# CONFIG_DEVFSD_MODLOAD is not set
# CONFIG_DEVFSD_FG_NP is not set
# CONFIG_DEVFSD_VERBOSE is not set
# CONFIG_FEATURE_DEVFS is not set
# CONFIG_DEVMEM is not set
# CONFIG_EJECT is not set
# CONFIG_FEATURE_EJECT_SCSI is not set
# CONFIG_FBSPLASH is not set
# CONFIG_FLASHCP is not set
# CONFIG_FLASH_LOCK is not set
# CONFIG_FLASH_UNLOCK is not set
# CONFIG_FLASH_ERASEALL is not set
# CONFIG_IONICE is not set
# CONFIG_INOTIFYD is not set
# CONFIG_LAST is not set
# CONFIG_FEATURE_LAST_SMALL is not set
# CONFIG_FEATURE_LAST_FANCY is not set
# CONFIG_HDPARM is not set
# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set
# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set
# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set
# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set
# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set
# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set
# CONFIG_MAKEDEVS is not set
# CONFIG_FEATURE_MAKEDEVS_LEAF is not set
# CONFIG_FEATURE_MAKEDEVS_TABLE is not set
# CONFIG_MAN is not set
# CONFIG_MICROCOM is not set
# CONFIG_MOUNTPOINT is not set
# CONFIG_MT is not set
# CONFIG_RAIDAUTORUN is not set
# CONFIG_READAHEAD is not set
# CONFIG_RFKILL is not set
# CONFIG_RUNLEVEL is not set
# CONFIG_RX is not set
# CONFIG_SETSID is not set
# CONFIG_STRINGS is not set
# CONFIG_TASKSET is not set
# CONFIG_FEATURE_TASKSET_FANCY is not set
# CONFIG_TIME is not set
# CONFIG_TIMEOUT is not set
# CONFIG_TTYSIZE is not set
# CONFIG_VOLNAME is not set
# CONFIG_WALL is not set
# CONFIG_WATCHDOG is not set

#
# Networking Utilities
#
# CONFIG_NAMEIF is not set
# CONFIG_FEATURE_NAMEIF_EXTENDED is not set
# CONFIG_NBDCLIENT is not set
# CONFIG_NC is not set
# CONFIG_NC_SERVER is not set
# CONFIG_NC_EXTRA is not set
# CONFIG_NC_110_COMPAT is not set
CONFIG_PING=y
# CONFIG_PING6 is not set
CONFIG_FEATURE_FANCY_PING=y
# CONFIG_WHOIS is not set
# CONFIG_FEATURE_IPV6 is not set
# CONFIG_FEATURE_UNIX_LOCAL is not set
# CONFIG_FEATURE_PREFER_IPV4_ADDRESS is not set
# CONFIG_VERBOSE_RESOLUTION_ERRORS is not set
# CONFIG_ARP is not set
# CONFIG_ARPING is not set
# CONFIG_BRCTL is not set
# CONFIG_FEATURE_BRCTL_FANCY is not set
# CONFIG_FEATURE_BRCTL_SHOW is not set
# CONFIG_DNSD is not set
# CONFIG_ETHER_WAKE is not set
# CONFIG_FAKEIDENTD is not set
# CONFIG_FTPD is not set
# CONFIG_FEATURE_FTP_WRITE is not set
# CONFIG_FEATURE_FTPD_ACCEPT_BROKEN_LIST is not set
# CONFIG_FTPGET is not set
# CONFIG_FTPPUT is not set
# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set
# CONFIG_HOSTNAME is not set
CONFIG_HTTPD=y
# CONFIG_FEATURE_HTTPD_RANGES is not set
# CONFIG_FEATURE_HTTPD_USE_SENDFILE is not set
# CONFIG_FEATURE_HTTPD_SETUID is not set
# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set
# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set
CONFIG_FEATURE_HTTPD_CGI=y
# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set
# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set
# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set
# CONFIG_FEATURE_HTTPD_ERROR_PAGES is not set
# CONFIG_FEATURE_HTTPD_PROXY is not set
CONFIG_FEATURE_HTTPD_GZIP=y
CONFIG_IFCONFIG=y
CONFIG_FEATURE_IFCONFIG_STATUS=y
# CONFIG_FEATURE_IFCONFIG_SLIP is not set
# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set
# CONFIG_FEATURE_IFCONFIG_HW is not set
CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS=y
# CONFIG_IFENSLAVE is not set
# CONFIG_IFPLUGD is not set
# CONFIG_IFUPDOWN is not set
CONFIG_IFUPDOWN_IFSTATE_PATH=””
# CONFIG_FEATURE_IFUPDOWN_IP is not set
# CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN is not set
# CONFIG_FEATURE_IFUPDOWN_IFCONFIG_BUILTIN is not set
# CONFIG_FEATURE_IFUPDOWN_IPV4 is not set
# CONFIG_FEATURE_IFUPDOWN_IPV6 is not set
# CONFIG_FEATURE_IFUPDOWN_MAPPING is not set
# CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP is not set
# CONFIG_INETD is not set
# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set
# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set
# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set
# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set
# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set
# CONFIG_FEATURE_INETD_RPC is not set
# CONFIG_IP is not set
# CONFIG_FEATURE_IP_ADDRESS is not set
# CONFIG_FEATURE_IP_LINK is not set
# CONFIG_FEATURE_IP_ROUTE is not set
# CONFIG_FEATURE_IP_TUNNEL is not set
# CONFIG_FEATURE_IP_RULE is not set
# CONFIG_FEATURE_IP_SHORT_FORMS is not set
# CONFIG_FEATURE_IP_RARE_PROTOCOLS is not set
# CONFIG_IPADDR is not set
# CONFIG_IPLINK is not set
# CONFIG_IPROUTE is not set
# CONFIG_IPTUNNEL is not set
# CONFIG_IPRULE is not set
# CONFIG_IPCALC is not set
# CONFIG_FEATURE_IPCALC_FANCY is not set
# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set
# CONFIG_NETSTAT is not set
# CONFIG_FEATURE_NETSTAT_WIDE is not set
# CONFIG_FEATURE_NETSTAT_PRG is not set
# CONFIG_NSLOOKUP is not set
# CONFIG_NTPD is not set
# CONFIG_FEATURE_NTPD_SERVER is not set
# CONFIG_PSCAN is not set
CONFIG_ROUTE=y
# CONFIG_SLATTACH is not set
# CONFIG_TCPSVD is not set
# CONFIG_TELNET is not set
# CONFIG_FEATURE_TELNET_TTYPE is not set
# CONFIG_FEATURE_TELNET_AUTOLOGIN is not set
# CONFIG_TELNETD is not set
# CONFIG_FEATURE_TELNETD_STANDALONE is not set
# CONFIG_FEATURE_TELNETD_INETD_WAIT is not set
# CONFIG_TFTP is not set
# CONFIG_TFTPD is not set
# CONFIG_FEATURE_TFTP_GET is not set
# CONFIG_FEATURE_TFTP_PUT is not set
# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set
# CONFIG_FEATURE_TFTP_PROGRESS_BAR is not set
# CONFIG_TFTP_DEBUG is not set
# CONFIG_TRACEROUTE is not set
# CONFIG_TRACEROUTE6 is not set
# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set
# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set
# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set
# CONFIG_TUNCTL is not set
# CONFIG_FEATURE_TUNCTL_UG is not set
# CONFIG_UDHCPC6 is not set
# CONFIG_UDHCPD is not set
# CONFIG_DHCPRELAY is not set
# CONFIG_DUMPLEASES is not set
# CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY is not set
# CONFIG_FEATURE_UDHCPD_BASE_IP_ON_MAC is not set
CONFIG_DHCPD_LEASES_FILE=””
# CONFIG_UDHCPC is not set
# CONFIG_FEATURE_UDHCPC_ARPING is not set
# CONFIG_FEATURE_UDHCP_PORT is not set
CONFIG_UDHCP_DEBUG=0
# CONFIG_FEATURE_UDHCP_RFC3397 is not set
# CONFIG_FEATURE_UDHCP_8021Q is not set
CONFIG_UDHCPC_DEFAULT_SCRIPT=””
CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=0
CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS=””
# CONFIG_UDPSVD is not set
# CONFIG_VCONFIG is not set
CONFIG_WGET=y
CONFIG_FEATURE_WGET_STATUSBAR=y
CONFIG_FEATURE_WGET_AUTHENTICATION=y
CONFIG_FEATURE_WGET_LONG_OPTIONS=y
# CONFIG_FEATURE_WGET_TIMEOUT is not set
# CONFIG_ZCIP is not set

#
# Print Utilities
#
# CONFIG_LPD is not set
# CONFIG_LPR is not set
# CONFIG_LPQ is not set

#
# Mail Utilities
#
# CONFIG_MAKEMIME is not set
CONFIG_FEATURE_MIME_CHARSET=””
# CONFIG_POPMAILDIR is not set
# CONFIG_FEATURE_POPMAILDIR_DELIVERY is not set
# CONFIG_REFORMIME is not set
# CONFIG_FEATURE_REFORMIME_COMPAT is not set
# CONFIG_SENDMAIL is not set

#
# Process Utilities
#
# CONFIG_IOSTAT is not set
CONFIG_LSOF=y
# CONFIG_MPSTAT is not set
# CONFIG_NMETER is not set
# CONFIG_PMAP is not set
# CONFIG_POWERTOP is not set
# CONFIG_PSTREE is not set
# CONFIG_PWDX is not set
# CONFIG_SMEMCAP is not set
CONFIG_UPTIME=y
# CONFIG_FEATURE_UPTIME_UTMP_SUPPORT is not set
# CONFIG_FREE is not set
# CONFIG_FUSER is not set
CONFIG_KILL=y
# CONFIG_KILLALL is not set
# CONFIG_KILLALL5 is not set
# CONFIG_PGREP is not set
# CONFIG_PIDOF is not set
# CONFIG_FEATURE_PIDOF_SINGLE is not set
# CONFIG_FEATURE_PIDOF_OMIT is not set
# CONFIG_PKILL is not set
CONFIG_PS=y
# CONFIG_FEATURE_PS_WIDE is not set
CONFIG_FEATURE_PS_LONG=y
# CONFIG_FEATURE_PS_TIME is not set
# CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS is not set
# CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set
# CONFIG_RENICE is not set
# CONFIG_BB_SYSCTL is not set
CONFIG_TOP=y
CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y
CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y
CONFIG_FEATURE_TOP_SMP_CPU=y
CONFIG_FEATURE_TOP_DECIMALS=y
CONFIG_FEATURE_TOP_SMP_PROCESS=y
CONFIG_FEATURE_TOPMEM=y
CONFIG_FEATURE_SHOW_THREADS=y
# CONFIG_WATCH is not set

#
# Runit Utilities
#
# CONFIG_RUNSV is not set
# CONFIG_RUNSVDIR is not set
# CONFIG_FEATURE_RUNSVDIR_LOG is not set
# CONFIG_SV is not set
CONFIG_SV_DEFAULT_SERVICE_DIR=””
# CONFIG_SVLOGD is not set
# CONFIG_CHPST is not set
# CONFIG_SETUIDGID is not set
# CONFIG_ENVUIDGID is not set
# CONFIG_ENVDIR is not set
# CONFIG_SOFTLIMIT is not set
# CONFIG_CHCON is not set
# CONFIG_FEATURE_CHCON_LONG_OPTIONS is not set
# CONFIG_GETENFORCE is not set
# CONFIG_GETSEBOOL is not set
# CONFIG_LOAD_POLICY is not set
# CONFIG_MATCHPATHCON is not set
# CONFIG_RESTORECON is not set
# CONFIG_RUNCON is not set
# CONFIG_FEATURE_RUNCON_LONG_OPTIONS is not set
# CONFIG_SELINUXENABLED is not set
# CONFIG_SETENFORCE is not set
# CONFIG_SETFILES is not set
# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set
# CONFIG_SETSEBOOL is not set
# CONFIG_SESTATUS is not set

#
# Shells
#
CONFIG_ASH=y
CONFIG_ASH_BASH_COMPAT=y
# CONFIG_ASH_IDLE_TIMEOUT is not set
CONFIG_ASH_JOB_CONTROL=y
# CONFIG_ASH_ALIAS is not set
# CONFIG_ASH_GETOPTS is not set
CONFIG_ASH_BUILTIN_ECHO=y
CONFIG_ASH_BUILTIN_PRINTF=y
CONFIG_ASH_BUILTIN_TEST=y
# CONFIG_ASH_CMDCMD is not set
# CONFIG_ASH_MAIL is not set
CONFIG_ASH_OPTIMIZE_FOR_SIZE=y
# CONFIG_ASH_RANDOM_SUPPORT is not set
# CONFIG_ASH_EXPAND_PRMT is not set
# CONFIG_CTTYHACK is not set
# CONFIG_HUSH is not set
# CONFIG_HUSH_BASH_COMPAT is not set
# CONFIG_HUSH_BRACE_EXPANSION is not set
# CONFIG_HUSH_HELP is not set
# CONFIG_HUSH_INTERACTIVE is not set
# CONFIG_HUSH_SAVEHISTORY is not set
# CONFIG_HUSH_JOB is not set
# CONFIG_HUSH_TICK is not set
# CONFIG_HUSH_IF is not set
# CONFIG_HUSH_LOOPS is not set
# CONFIG_HUSH_CASE is not set
# CONFIG_HUSH_FUNCTIONS is not set
# CONFIG_HUSH_LOCAL is not set
# CONFIG_HUSH_RANDOM_SUPPORT is not set
# CONFIG_HUSH_EXPORT_N is not set
# CONFIG_HUSH_MODE_X is not set
# CONFIG_MSH is not set
CONFIG_FEATURE_SH_IS_ASH=y
# CONFIG_FEATURE_SH_IS_HUSH is not set
# CONFIG_FEATURE_SH_IS_NONE is not set
# CONFIG_FEATURE_BASH_IS_ASH is not set
# CONFIG_FEATURE_BASH_IS_HUSH is not set
CONFIG_FEATURE_BASH_IS_NONE=y
CONFIG_SH_MATH_SUPPORT=y
CONFIG_SH_MATH_SUPPORT_64=y
# CONFIG_FEATURE_SH_EXTRA_QUIET is not set
# CONFIG_FEATURE_SH_STANDALONE is not set
# CONFIG_FEATURE_SH_NOFORK is not set
CONFIG_FEATURE_SH_HISTFILESIZE=y

#
# System Logging Utilities
#
# CONFIG_SYSLOGD is not set
# CONFIG_FEATURE_ROTATE_LOGFILE is not set
# CONFIG_FEATURE_REMOTE_LOG is not set
# CONFIG_FEATURE_SYSLOGD_DUP is not set
# CONFIG_FEATURE_SYSLOGD_CFG is not set
CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE=0
# CONFIG_FEATURE_IPC_SYSLOG is not set
CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=0
# CONFIG_LOGREAD is not set
# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set
# CONFIG_KLOGD is not set
# CONFIG_FEATURE_KLOGD_KLOGCTL is not set
# CONFIG_LOGGER is not set

Copy this file, and name as ‘busybox.config’, copy ‘busybox.config’ inside source code directory of Busybox, proceed further.

While configuring busybox,

$ make menuconfig

go to “Load an Alternate Configuration File”, type same ‘busybox.config’

Enjoy..!