aboutsummaryrefslogtreecommitdiffstats
path: root/docs/linux/setup_linux-host_qemu-vm_arm-kernel.md
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2018-04-26 16:20:02 +0200
committerDmitry Vyukov <dvyukov@google.com>2018-04-27 14:33:01 +0200
commitb9e02d57596fa52cf799e0848284d6d5ace78765 (patch)
tree6c685f82cd1d1004b25281d38e4b1a4559bf8568 /docs/linux/setup_linux-host_qemu-vm_arm-kernel.md
parentbcd6198db5f0e61a6b5c824bbc58c954c4287d56 (diff)
docs: add instructions for arm kernel
Diffstat (limited to 'docs/linux/setup_linux-host_qemu-vm_arm-kernel.md')
-rw-r--r--docs/linux/setup_linux-host_qemu-vm_arm-kernel.md134
1 files changed, 134 insertions, 0 deletions
diff --git a/docs/linux/setup_linux-host_qemu-vm_arm-kernel.md b/docs/linux/setup_linux-host_qemu-vm_arm-kernel.md
new file mode 100644
index 000000000..7684f54ea
--- /dev/null
+++ b/docs/linux/setup_linux-host_qemu-vm_arm-kernel.md
@@ -0,0 +1,134 @@
+# Setup: Debian host, QEMU vm, arm kernel
+
+# GCC
+
+Obtain a fresh `arm-linux-gnueabihf-gcc`. Latest Debian distributions provide
+version 7.2.0, which should be enough. Otherwise you can download Linaro
+compiler [here](https://www.linaro.org/downloads).
+
+# Kernel
+
+The instructions are tested with `v4.16.1`. Check that you have/backport
+["arm: port KCOV to arm"](https://groups.google.com/d/msg/syzkaller/zLThPHplyIc/9ncfpRvVCAAJ)
+patch. Create kernel config with:
+
+```shell
+make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- vexpress_defconfig
+```
+
+Then enable the following configs on top:
+
+```
+CONFIG_KCOV=y
+CONFIG_DEBUG_INFO=y
+CONFIG_DEVTMPFS_MOUNT=y
+CONFIG_NAMESPACES=y
+CONFIG_USER_NS=y
+CONFIG_UTS_NS=y
+CONFIG_IPC_NS=y
+CONFIG_PID_NS=y
+CONFIG_NET_NS=y
+
+Also check out general kernel configuration [recommendations](/docs/linux/kernel_configs.md).
+
+Then build kernel with:
+
+```
+make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
+```
+
+# Image
+
+We will use buildroot to create the disk image. You can obtain buildroot
+[here](https://buildroot.uclibc.org/download.html). Instructions were tested
+with buildroot `c665c7c9cd6646b135cdd9aa7036809f7771ab80`. First run:
+
+```
+make qemu_arm_vexpress_defconfig
+make menuconfig
+```
+
+Choose the following options:
+
+```
+ Target packages
+ Networking applications
+ [*] dhcpcd
+ [*] iproute2
+ [*] openssh
+ Filesystem images
+ exact size - 1g
+```
+
+Unselect:
+
+```
+ Kernel
+ Linux Kernel
+```
+
+Run `make`.
+
+Then add the following line to `output/target/etc/fstab`:
+
+```
+debugfs /sys/kernel/debug debugfs defaults 0 0
+```
+
+Then replace `output/target/etc/ssh/sshd_config` with the following contents:
+
+```
+PermitRootLogin yes
+PasswordAuthentication yes
+PermitEmptyPasswords yes
+```
+
+Run `make` again.
+
+# Test kernel and image
+
+Run:
+
+```
+qemu-system-arm -m 512 -smp 2 -net nic -net user,host=10.0.2.10,hostfwd=tcp::10022-:22 -display none -serial stdio -machine vexpress-a15 -dtb /linux/arch/arm/boot/dts/vexpress-v2p-ca15-tc1.dtb -sd /buildroot/output/images/rootfs.ext2 -snapshot -kernel /linux/arch/arm/boot/zImage -append "earlyprintk=serial console=ttyAMA0 root=/dev/sda root=/dev/mmcblk0"
+```
+
+This should boot the kernel. Wait for login prompt, then in another console run:
+
+```
+ssh -p 10022 root@localhost
+```
+
+ssh should succeed.
+
+# syzkaller
+
+Build `syzkaller` with `make TARGETARCH=arm`. Create manager config `arm.cfg`
+similar to the following one (changing paths as necessary):
+
+```
+{
+ "name": "arm",
+ "target": "linux/arm",
+ "http": ":12345",
+ "workdir": "/workdir",
+ "vmlinux": "/linux/vmlinux",
+ "syzkaller": "/gopath/src/github.com/google/syzkaller",
+ "image": "/buildroot/output/images/rootfs.ext2",
+ "sandbox": "none",
+ "reproduce": false,
+ "procs": 4,
+ "type": "qemu",
+ "vm": {
+ "count": 10,
+ "qemu_args": "-machine vexpress-a15 -dtb /linux/arch/arm/boot/dts/vexpress-v2p-ca15-tc1.dtb",
+ "cmdline": "console=ttyAMA0 root=/dev/mmcblk0",
+ "kernel": "/linux/arch/arm/boot/zImage",
+ "image_device": "sd",
+ "mem": 512
+ "cpu": 2,
+ }
+}
+```
+
+Finally, run `bin/syz-manager -config arm.cfg`.