Busybox
- Point
CROSS_COMPILE
andPATH
to the toolchain as usual - Get and configure busybox:
git clone git://busybox.net/busybox.git #wget http://busybox.net/downloads/busybox-1.24.1.tar.bz2 cd busybox make defconfig
- This time wee need to change a few defaults:
-
Busybox needs to re-execute itself sometimes, by default it uses
/proc/self/exe
as a sort of autodetection, we need to change it to an explicit path - We want to compile ti statically to avoid having to copy over all the needed libc libraries
make menuconfig Busybox Settings ---> General Configuration ---> (/bin/busybox) Path to BusyBox executable Busybox Settings ---> Build Options ---> [*] Build BusyBox as a static binary (no shared libs)
-
Busybox needs to re-execute itself sometimes, by default it uses
-
If you are using a toolchain compiled for an older kernel (like the rpi one),
you need to disable
syncfs
syscall insync
utility.Coreutils ---> [*] sync [ ] Enable -d and -f flags (requres syncfs(2) in libc)
- Now we can build and install (by default to ./_install, can be changed in the config)
make -j5 make install
make install
creates symlinks,make install-hardlinks
creates hardlinks (can save inodes / a bit of space, needs hardlink capable fs) - Copy over to rootfs and boot it:
rsync -arv ./_install/ ../../nfsroot/
Note: we don't really care about ownership right now, as long as executable permissions are correct...
Busybox actually instals a
/sbin/init
binary (along withlinuxrc
), so we actually don't need to setinit=...
. (But you can try it withinit=/bin/sh
.)