directions derived from https://www.raspberrypi.org/documentation/linux/kernel/building.md http://elinux.org/RPi_Upstream_Kernel_Compilation http://elinux.org/RPi_U-Boot good resources https://www.raspberrypi.org/documentation/configuration/config-txt.md http://cellux.github.io/articles/diy-linux-with-buildroot-part-1/ http://blog.flexvdi.com/2015/02/25/enabling-hyp-mode-on-the-raspberry-pi-2/ http://blog.flexvdi.com/2015/03/17/enabling-kvm-virtualization-on-the-raspberry-pi-2/ http://kariddi.blogspot.com/2012/08/raspberry-pi-bare-metal-part-1-boot.html Eric Anholt's open GPU driver work http://www.serverphorums.com/read.php?12,1257154 http://anholt.livejournal.com/ https://dri.freedesktop.org/wiki/VC4/ http://www.broadcom.com/docs/support/videocore/VideoCoreIV-AG100-R.pdf sudo screen /dev/ttyUSB0 115200 C-a \ (quit) Kill all windows and terminate screen. --- rpi kernel source --- git clone --branch rpi-4.1.y --depth 1 https://github.com/raspberrypi/linux.git --- mainline kernel source --- git clone --depth 1 git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git git clone --depth 1 git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git git clone --depth 1 --branch linux-4.5.y git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git cp linux-rpi/arch/arm/configs/bcm2709_defconfig linux/arch/arm/configs/bcm2709_defconfig from the rpi-4.5.y branch --- kernel compilation --- export KERNEL=kernel7 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- clean make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mrproper rpi: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig mainline: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2835_defconfig enable loadable module support {module unloading, module versioning support, source checksum for all modules} enable kernel features -> SMP floating point emulation -> advanced SIMD (NEON) extension support floating point emulation -> Support for NEON in kernel mode enable kernel features -> high memory support make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs -j 8 > buildoutput.log 2> buildoutput2.log later - play with more kernel configs kernel message: consider using a HIGHMEM enabled kernel autofs4 kdbus systemctl status kmod-static-nodes.service select General Setup -> uselib syscall Broadcom SoC Support -> Broadcom BCM2835 family Kernel features -> Xen guest support on ARM Device drivers -> Virtualization drivers Device drivers -> Xen driver support -> all enabled Virtualization Device Drivers ---> USB support ---> DesignWare USB2 DRD Core Support and check both Host only mode and DWC2 Platform Networking support -> Networking Options -> TCP/IP networking -> IP: kernel level autoconfiguration Networking support -> Networking Options -> TCP/IP networking -> IP: DHCP support File Systems -> Network File Systems -> Root file system on NFS --- create minimal image & mount it --- sudo mkdir /mnt/ramdisk sudo mount -t tmpfs -o size=6g tmpfs /mnt/ramdisk dd if=/dev/zero of=/mnt/ramdisk/minimal.img bs=512M count=1 sudo losetup /dev/loop0 /mnt/ramdisk/minimal.img sudo losetup -d /dev/loop0 sudo gparted /dev/loop0 create partitions & click to mount sudo kpartx -av /mnt/ramdisk/minimal.img export BOOT=/media/stew/boot export ROOTFS=/media/stew/ext4 --- rpi kernel & modules install --- sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=$ROOTFS modules_install sudo scripts/mkknlimg arch/arm/boot/zImage $BOOT/$KERNEL.img sudo cp arch/arm/boot/dts/*.dtb $BOOT mkdir $BOOT/overlays/ sudo cp arch/arm/boot/dts/overlays/*.dtb* $BOOT/overlays/ sudo cp arch/arm/boot/dts/overlays/README $BOOT/overlays/ --- mainline kernel & modules install --- sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=$ROOTFS modules_install cp arch/arm/boot/zImage $BOOT/$KERNEL.img cp arch/arm/boot/dts/bcm2836-rpi-2-b.dtb $BOOT --- ubuntu bootstrap --- directions derived in part from https://wiki.ubuntu.com/ARM/RootfsFromScratch/QemuDebootstrap and in part from http://wiki.xen.org/wiki/Xen_ARM_with_Virtualization_Extensions/RootFilesystem sudo mount -o remount,dev $ROOTFS sudo debootstrap --foreign --arch=armhf --include=ca-certificates --variant=minbase wily $ROOTFS http://us.ports.ubuntu.com/ todo: leaving off --variant=minbase produces errors, so exclude python3 and resolvconf unused options: --verbose --components=main,restricted,universe,multiverse fakeroot http://archive.raspbian.com/raspbian http://ports.ubuntu.com/ubuntu-ports/ --no-check-gpg try to see if this gets rid of the "Keyring file not available at /usr/share/keyrings/ubuntu-archive-keyring.gpg; switching to https mirror https://mirrors.kernel.org/debian" warning? --keyring=/usr/share/keyrings/ubuntu-archive-keyring.gpg ... nope it didn't. sudo cp `which qemu-arm-static` $ROOTFS/usr/bin/ sudo chroot $ROOTFS /debootstrap/debootstrap --second-stage unused commands: sudo mount -t proc proc $ROOTFS/proc sudo cp /etc/resolv.conf $ROOTFS/etc/resolv.conf exit sudo chroot $ROOTFS passwd adduser stew echo "stew-pi" > /etc/hostname not needed: echo "127.0.0.1 localhost qemu" > /etc/hosts todo: sources.list sudo rm $ROOTFS/usr/bin/qemu-arm-static --- u-boot --- git clone --depth 1 git://git.denx.de/u-boot.git make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- clean make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mrproper make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- rpi_2_defconfig make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j 8 cp ./u-boot.bin $BOOT ./tools/mkimage -A arm -O linux -T script -C none -n boot.scr -d ../stewconfig/boot-mainline.scr $BOOT/boot.scr.uimg ./tools/mkimage -A arm -O linux -T script -C none -n boot.scr -d ../stewconfig/boot-xen.scr $BOOT/boot.scr.uimg unused mkimage options: -a 0x00000000 -e 0x00000000 -n "RPi2 Boot Script" boot-rpi.scr: mmc dev 0 setenv fdtfile bcm2709-rpi-2-b.dtb setenv bootargs "dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait" fatload mmc 0:1 ${kernel_addr_r} kernel7.img fatload mmc 0:1 ${fdt_addr_r} ${fdtfile} bootz ${kernel_addr_r} - ${fdt_addr_r} boot-mainline.scr: mmc dev 0 setenv fdtfile bcm2836-rpi-2-b.dtb setenv bootargs "earlyprintk console=tty1 console=ttyAMA0 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait" fatload mmc 0:1 ${kernel_addr_r} kernel7.img fatload mmc 0:1 ${fdt_addr_r} ${fdtfile} bootz ${kernel_addr_r} - ${fdt_addr_r} boot-xen.scr (broken): mmc dev 0 setenv fdtfile bcm2836-rpi-2-b.dtb setenv xen_addr_r 0x01C00000 setenv bootargs "earlyprintk console=tty1 console=ttyAMA0 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait" fatload mmc 0:1 ${kernel_addr_r} kernel7.img fatload mmc 0:1 ${fdt_addr_r} ${fdtfile} fatload mmc 0:1 ${xen_addr_r} xen-uImage fdt addr ${fdt_addr_r} fdt resize fdt set /chosen \#address-cells <1> fdt set /chosen \#size-cells <1> fdt mknod /chosen module@0 fdt set /chosen/module@0 compatible "xen,linux-zimage" "xen,multiboot-module" fdt set /chosen/module@0 reg <${kernel_addr_r} 0x00c00000> bootm ${xen_addr_r} - ${fdt_addr_r} --- rpi firmware & config --- cd .. git clone --depth 1 git://github.com/raspberrypi/firmware.git cp firmware/boot/bootcode.bin $BOOT cp firmware/boot/start.elf $BOOT cp firmware/boot/fixup.dat $BOOT cp stewconfig/cmdline.txt $BOOT rpi loader: cp stewconfig/config.txt $BOOT u-boot: cp stewconfig/config_u-boot.txt $BOOT/config.txt sudo cp stewconfig/fstab $ROOTFS/etc/fstab cmdline.txt: dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait config_u-boot.txt: kernel=u-boot.bin fstab: proc /proc proc defaults 0 0 /dev/mmcblk0p1 /boot vfat defaults 0 2 /dev/mmcblk0p2 / ext4 defaults,noatime 0 1 --- unmount stuff --- sudo umount $BOOT sudo umount $ROOTFS sudo kpartx -d /mnt/ramdisk/minimal.img sudo losetup -d /dev/loop0 shasum /mnt/ramdisk/minimal.img mv /mnt/ramdisk/minimal.img . sudo umount /mnt/ramdisk --- xen (broken) --- required libs sudo apt-get install zlib1g-dev python-dev libncurses5-dev libssl-dev libx11-dev uuid-dev libyajl-dev libaio-dev libglib2.0-dev libpixman-1-dev pkg-config bridge-utils iproute bison flex gettext iasl libc6-dev libc6-dev-i386 optional libs sudo apt-get install ocaml-nox ocaml-findlib cmake markdown figlet libsystemd-daemon-dev libnl-3-200 libnl-3-dev links http://wiki.xen.org/wiki/Category:XenARM http://wiki.xen.org/wiki/Xen_ARM_with_Virtualization_Extensions http://wiki.xen.org/wiki/Dom0_Kernels_for_Xen http://wiki.xen.org/wiki/XenParavirtOps http://wiki.xen.org/wiki/Mainline_Linux_Kernel_Configs git clone --depth 1 git://xenbits.xen.org/xen.git docs/misc/arm/early-printk.txt: rpi: printk with pl011 for Raspberry Pi 2 xen/arch/arm/Rules.mk: EARLY_PRINTK_rpi := pl011,0x7e201000,115200 make XEN_TARGET_ARCH=arm32 CROSS_COMPILE=arm-linux-gnueabihf- CONFIG_EARLY_PRINTK=rpi clean make XEN_TARGET_ARCH=arm32 CROSS_COMPILE=arm-linux-gnueabihf- CONFIG_EARLY_PRINTK=rpi mrproper make -C xen XEN_TARGET_ARCH=arm32 CROSS_COMPILE=arm-linux-gnueabihf- CONFIG_EARLY_PRINTK=rpi menuconfig make XEN_TARGET_ARCH=arm32 CROSS_COMPILE=arm-linux-gnueabihf- CONFIG_EARLY_PRINTK=rpi dist-xen ../u-boot/tools/mkimage -A arm -C none -T kernel -n "XEN" -d xen/xen xen-uImage ../u-boot/tools/mkimage -A arm -C none -T kernel -a 0x01C00000 -e 0x01C00000 -n "XEN" -d xen/xen xen-uImage cp xen-uImage $BOOT notes below debug=y DESTDIR=/some/path * To build xen and tools using a cross compiler: ./configure --build=x86_64-unknown-linux-gnu --host=aarch64-linux-gnu make make install add some stuff to boot.scr: mmc dev 0 setenv fdtfile bcm2836-rpi-2-b.dtb setenv bootargs "earlyprintk console=tty1 console=ttyAMA0 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait" setenv xen_addr_r 0x01C00000 setenv kernel_addr_r 0x01000000 setenv fdt_addr_r 0x00000100 setenv xen_bootargs 'sync_console console=dtuart dtuart=/serial@7e201000 dom0_mem=512M' setenv dom0_bootargs 'console=hvc0 ignore_loglevel psci=enable clk_ignore_unused root=/dev/mmcblk1p3' saveenv fatload mmc 0:1 ${kernel_addr_r} kernel7.img fatload mmc 0:1 ${fdt_addr_r} ${fdtfile} fatload mmc 0:1 $xen_addr_r xen-uImage fdt addr $fdt_addr_r fdt resize fdt set /chosen xen,xen-bootargs \"$xen_bootargs\" fdt set /chosen xen,dom0-bootargs \"$dom0_bootargs\" fdt mknode /chosen modules fdt set /chosen/modules '#address-cells' <1> fdt set /chosen/modules '#size-cells' <1> fdt mknode /chosen/modules module@0 fdt set /chosen/modules/module@0 compatible xen,linux-zimage xen,multiboot-module fdt set /chosen/modules/module@0 reg <$kernel_addr_r 0x00c00000> bootm ${xen_addr_r} - ${fdt_addr_r} bootz ${xen_addr_r} - ${fdt_addr_r} fdt addr ${fdt_addr_r} fdt resize fdt set /chosen \#address-cells <1> fdt set /chosen \#size-cells <1> fdt mknod /chosen module@0 fdt set /chosen/module@0 compatible "xen,linux-zimage" "xen,multiboot-module" fdt set /chosen/module@0 reg <${kernel_addr_r} 0x00c00000> fdt set /chosen/module@0 bootargs "<DOMAIN 0 COMMAND LINE>" --- reference - interrupt controller info --- http://lists.infradead.org/pipermail/linux-rpi-kernel/2015-July/thread.html http://lists.infradead.org/pipermail/linux-rpi-kernel/2015-August/thread.html linux/Documentation/devicetree/bindings/interrupt-controller/brcm,bcm2836-l1-intc.txt linux/Documentation/devicetree/bindings/interrupt-controller/brcm,bcm2835-armctrl-ic.txt linux/Documentation/devicetree/bindings/interrupt-controller/arm,gic.txt linux/arch/arm/boot/dts/bcm283x.dtsi linux/arch/arm/boot/dts/bcm2836.dtsi --- reference - install rpi kernel on raspbian image --- stew@Stew-SS:~/Desktop/raspi$ sudo losetup /dev/loop0 2016-03-18-raspbian-jessie-lite.img stew@Stew-SS:~/Desktop/raspi$ sudo fdisk -l /dev/loop0 Disk /dev/loop0: 1361 MB, 1361051648 bytes 255 heads, 63 sectors/track, 165 cylinders, total 2658304 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x6f92008e Device Boot Start End Blocks Id System /dev/loop0p1 8192 131071 61440 c W95 FAT32 (LBA) 60.00 MiB gparted reports fat16, lba flag /dev/loop0p2 131072 2658303 1263616 83 Linux 1.21 GiB ext4 sudo losetup -o 4194304 /dev/loop0 2016-03-18-raspbian-jessie-lite.img sudo losetup -o 67108864 /dev/loop1 2016-03-18-raspbian-jessie-lite.img click on the icon to mount /media/stew/boot /media/stew/eda95d8a-9cdd-4224-96d0-890b4791600c sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=/media/stew/eda95d8a-9cdd-4224-96d0-890b4791600c modules_install sudo cp /media/stew/boot/$KERNEL.img /media/stew/boot/$KERNEL-backup.img sudo scripts/mkknlimg arch/arm/boot/zImage /media/stew/boot/$KERNEL.img sudo cp arch/arm/boot/dts/*.dtb /media/stew/boot sudo cp arch/arm/boot/dts/overlays/*.dtb* /media/stew/boot/overlays/ sudo cp arch/arm/boot/dts/overlays/README /media/stew/boot/overlays/ --- obsolete Busybox (missing init stuff) --- cd busybox make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- clean make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mrproper make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- defconfig make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j 8 sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- CONFIG_PREFIX=$ROOTFS install sudo mkdir -p $ROOTFS/{etc,boot,proc,sys,mnt,dev} sudo cp stewconfig/fstab $ROOTFS/etc/fstab mknod -m 644 myinitfs/dev/console c 5 1 mknod -m 644 myinitfs/dev/loop0 b 7 0 |