This is an old revision of the document!
This set of instructions assumes you have already Setup and Configured the B@D Virtual Machine. If that is not the case please go back to the Beaglebone Black Setup & Configuration.
BusyBox combines tiny versions of many common UNIX utilities into a single small executable. It provides replacements for most of the utilities you usually find in GNU fileutils, shellutils, etc. BusyBox provides a fairly complete environment from which to boot any embedded system.
Prerequisites:
You must have the CIP Board-at-Desk Single-Developer (B@D) v0.9 Virtual Machine set up with make, gcc and the arm cross compilers.
1. Connect to the B@D Virtual Machine.
user@host:~/location-of-B@D-Vagrant-files$ vagrant ssh
2. Install the library for curses which is used by the make menuconfig command
vagrant@guest:~$ sudo apt-get install libncurses5-dev
Create a directory to work in
3. Make the necessary directories in which to work and where the output will be stored so it is accessible from the website.
vagrant@guest:~$ mkdir -p work/initramfs
vagrant@guest:~$ cd work
vagrant@guest:~/work$ sudo mkdir /var/www/images/kernel-ci/initramfs
4. Download the busybox source code and unzip it.
vagrant@guest:~/work$ wget https://www.busybox.net/downloads/busybox-1.26.2.tar.bz2
vagrant@guest:~/work$ tar -xvf busybox-1.26.2.tar.bz2
vagrant@guest:~/work$ cd busybox-1.26.2
5. Create the default configuration
vagrant@guest:~/work/busybox-1.26.2$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- defconfig
6. Configure and make the initramfs
vagrant@guest:~/work/busybox-1.26.2$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
7. Select the following settings: Busybox Settings → Build Options → Build Busybox as a static binary (no shared libs)
8. Press Y or the space bar to select that option.
9. Press the Tab key to move to the buttons at the bottom of the window and select the < Exit > button twice.
10. On the dialog box that asks “Do you wish to save your new configuration?” Select Yes and press Enter.
11. Execute the following commands for building the initramfs
vagrant@guest:~/work/busybox-1.26.2$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- CONFIG_PREFIX=/home/vagrant/work/initramfs /home/vagrant/work/initramfs install
vagrant@guest:~/work/busybox-1.26.2$ cd ..
vagrant@guest:~/work$ cd initramfs
Note:
After the successful completion of the above commands, you can see 3 directories (bin
, sbin
, usr
) and one file, linuxrc
created in your initramfs
directory.
The /dev
Directory:
12. Create the /dev
directory and create some special files under it.
vagrant@guest:~/work/initramfs$ mkdir dev
vagrant@guest:~/work/initramfs$ sudo mknod dev/console c 5 1
vagrant@guest:~/work/initramfs$ sudo mknod dev/null c 1 3
vagrant@guest:~/work/initramfs$ sudo mknod dev/zero c 1 5
Note:
- /dev/console, is the place which the kernel uses for interaction.
- /dev/null behaves like an empty file and is used to suppress the output from commands/programs.
- /dev/zero contains sequence of zeros used to fill up the memory regions.
The /lib
and /usr/lib
Directories:
13. For the static libraries, copy from the ARM cross compiler toolchain path.
vagrant@guest:~/work/initramfs$ mkdir lib usr/lib
vagrant@guest:~/work/initramfs$ rsync -a /usr/arm-linux-gnueabihf/lib/ ./lib/
vagrant@guest:~/work/initramfs$ rsync -a /usr/arm-linux-gnueabihf/lib/ ./usr/lib/
The /proc
, /sys
, and /root
Directories:
14. Create directories for mounting the virtual filesystems procfs
, sysfs
and root
directory.
vagrant@guest:~/work/initramfs$ mkdir proc sys root
The /etc
Directory:
15. Create /etc
and then, create additional files inside this directory.
vagrant@guest:~/work/initramfs$ mkdir etc
vagrant@guest:~/work/initramfs$ nano etc/inittab
null::sysinit:/bin/mount -a null::sysinit:/bin/hostname -F /etc/hostname null::respawn:/bin/cttyhack /bin/login root null::restart:/sbin/reboot
16. Create another file called fstab
and populate it. This file will mount the virtual file systems.
vagrant@guest:~/work/initramfs$ nano etc/fstab
proc /proc proc defaults 0 0 sysfs /sys sysfs defaults 0 0
17. Create the hostname
file.
vagrant@guest:~/work/initramfs$ nano etc/hostname
beagleboneblack
18. Create the passwd
file.
vagrant@guest:~/work/initramfs$ nano etc/passwd
root::0:0:root:/root:/bin/sh
19. Create an init
file.
vagrant@guest:~/work/initramfs$ touch init
vagrant@guest:~/work/initramfs$ chmod +x init
Edit init giving it the following contents: https://gitlab.com/cip-project/cip-testing/testing/snippets/1666441
20. Create the initramfs.cpio.gz
vagrant@guest:~/work/initramfs$ find . -depth -print | cpio -ocvB | gzip -c > ../initramfs.cpio.gz
Test it on the Beaglebone Black:
21. Copy the initramfs.cpio.gz
to the initramfs
directory where it can be retrieved by LAVA.
vagrant@guest:~/work/initramfs$ sudo cp ../initramfs.cpio.gz /var/www/images/kernel-ci/initramfs
22. In the LAVA web-based frontend, click on Scheduler → Submit Job
23. Copy the Beaglebone Black Health Check Job and paste it into the Job Definition box.
24. Change the link for the initramfs.cpio.gz
file to the VM's IP Address and the path to the file:
ramdisk: url: http://localhost:8010/initramfs/initramfs.cpio.gz compression: gz
1. Connect to the B@D Virtual Machine.
user@host:~/location-of-B@D-Vagrant-files$ vagrant ssh
vagrant@guest:~$
2. Change to the git-repos
directory
vagrant@guest:~$ cd git-repos
Note that in the case of the pre-provisioned Vagrant instance it already has a clone of the linux-cip repository, you only need a git pull
from within the linux-cip directory to ensure that it is up to date and proceed to step 4.
3. Clone the CIP Linux Kernel
vagrant@guest:~/git-repos$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/bwh/linux-cip.git
4. Find the branch of the kernel version you want (We will use '4.4.69-cip4' for this example)
vagrant@guest:~/git-repos$ cd linux-cip
vagrant@guest:~/git-repos/linux-cip$ git tag -l | grep cip
v4.4.42-cip1 v4.4.48-cip2 v4.4.55-cip3 v4.4.69-cip4
5. Create a new branch using the latest CIP tag.
vagrant@guest:~/git-repos/linux-cip$ git checkout -b cip_v4.4.69 v4.4.69-cip4
6. Set the environment variables. You can create a tree name that describes your project. Select the Architecture of the target device (i.e. arm, arm64, mips, i386, amd64, etc.). Choose the cross compiler you need for that architecture.
vagrant@guest:~/git-repos/linux-cip$ export TREE_NAME=cip-example
vagrant@guest:~/git-repos/linux-cip$ export ARCH=arm
vagrant@guest:~/git-repos/linux-cip$ export CROSS_COMPILE=arm-linux-gnueabihf-
Note: Don't forget the dash (-) at the end of the CROSS_COMPILE
line!
7. Execute the build.py
command, passing in the Beaglebone Black configuration.
vagrant@guest:~/git-repos/linux-cip$ ~/kernelci-build/build.py -c omap2plus_defconfig -p CIP-KernelCI
make -j4 -k -s ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- O=build-arm omap2plus_defconfig make -j4 -k -s ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- O=build-arm make -j4 -k -s ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- O=build-arm modules make -j4 -k -s ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- O=build-arm modules_install INFO: published artifacts ... cip-example/cip_v4.4.69/v4.4.69-cip4/arm/omap2plus_defconfig/dtbs/am335x-boneblack.dtb ... INFO: triggering build 202
8. Start the Kernel CI web server
vagrant@guest:/vagrant/scripts/start_webserver.sh &
9. On your host machine, open a web browser and enter the following in the address box:
http://localhost:5000
10. You will see the KernelCI Website home page from which, you can navigate to the different builds and Trees that you've created (see the Example Builds section below).
11. Click on the Jobs button at the top of the page and you will see all of the available Trees
12. Click on the Tree name (cip-example) and you will see the list of available builds, or kernel versions for that tree.
13. Click on the v4.4.69 kernel and you will see the list of build configurations (omap2plus).
14. The files that resulted from the build are available in the KernelCI website by navigating to the Tree Name, Kernel version, and Configuration. They are stored on the hard drive at:
/var/www/images/kernel-ci/TREE_NAME/KERNEL_VERSION/BRANCH/ARCH/CONFIG
15. For instance, for the build with the following parameters:
git checkout
step.)The files will be located at:
/var/www/images/kernel-ci/cip-example/v4.4.69-cip4/cip_v4.4.69/arm/omap2plus
16. Kernel CI generates the following files. Make a note of the ones in bold. They will be needed for testing the CIP Kernel:
build.log
shows the output of the build process to help track down any issues in compilation.kernel.config
holds the configuration settings used to build the kernel.system.map
is the kernel's symbol table that is used to debug kernel runtime errors.zImage
is the compressed kernel image to be installed on target device.modules
is a directory that holds all of the kernel modules needed for the CIP Kernel.dtbs
directory which holds all of the generated Device Tree Binary's.17. Check the reference test cases and try them as reference examples.