Skip to content

Commit 5f03a29

Browse files
Gulshan Singhgsingh93
authored andcommitted
WIP: android userspace
1 parent a89d481 commit 5f03a29

File tree

1 file changed

+69
-10
lines changed

1 file changed

+69
-10
lines changed

Makefile

Lines changed: 69 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ SCRIPT_DIR := $(ROOT_DIR)/scripts
88
CONFIG_DIR := $(ROOT_DIR)/config
99
CLANG_DIR ?= $(ROOT_DIR)/toolchain/clang
1010

11-
CLANG_URL := https://github.com/llvm/llvm-project/releases/download/llvmorg-15.0.6/clang+llvm-15.0.6-x86_64-linux-gnu-ubuntu-18.04.tar.xz
11+
CLANG_URL := https://github.com/llvm/llvm-project/releases/download/llvmorg-17.0.6/clang+llvm-17.0.6-x86_64-linux-gnu-ubuntu-22.04.tar.xz
1212

1313
SHARED_DIR := $(ROOT_DIR)/shared
1414

@@ -42,6 +42,7 @@ endif
4242

4343
.PHONY: default
4444
default: linux linux_modules tools-vm
45+
default: linux linux_modules tools-vm
4546

4647
.PHONY: clean
4748
clean: linux_clean tools-vm_clean
@@ -151,6 +152,8 @@ else
151152
LINUX_DEFCONFIG ?= defconfig
152153
endif
153154

155+
TRUSTY_LINUX_CONFIG_FRAGMENT := $(ROOT_DIR)/trusty/external/linux/arch/arm64/configs/trusty_qemu_defconfig.fragment
156+
154157
LINUX_CONFIG_FRAGMENT ?= $(CONFIG_DIR)/config.fragment
155158
LINUX_OUT_MODULES_DEP := $(LINUX_OUT)/modules_install.stamp
156159
LINUX_MODULES_INSTALL_PATH := $(LINUX_OUT)/modules_install
@@ -451,17 +454,43 @@ trusty $(ATF_BL1): | $(TRUSTY_SRC)
451454
$(BEAR_CMD) $(TRUSTY_SRC)/trusty/vendor/google/aosp/scripts/build.py \
452455
--build-root $(TRUSTY_BUILD_ROOT) \
453456
--skip-tests $(TRUSTY_TARGET)
454-
$(MAKE) trusty_bl33
457+
$(MAKE) trusty-bl33
455458

456-
.PHONY: trusty_bl33
457-
trusty_bl33 $(ATF_BL33): $(UBOOT_BIN)
459+
.PHONY: trusty-bl33
460+
trusty-bl33 $(ATF_BL33): $(UBOOT_BIN)
458461
rm $(ATF_BL33)
459462
cp $(UBOOT_BIN) $(ATF_BL33)
460463

461464
.PHONY: trusty_clean
462465
trusty_clean:
463466
rm -rf $(TRUSTY_OUT)
464467

468+
##
469+
## Android
470+
##
471+
472+
# TODO: We shouldn't depend on Trusty for this
473+
TRUSTY_PREBUILT_IMAGE_DIR := $(TRUSTY_SRC)/trusty/prebuilts/aosp/android/out/target/product/trusty/
474+
SYSTEM_IMG := $(TRUSTY_PREBUILT_IMAGE_DIR)/system.img
475+
VENDOR_IMG := $(TRUSTY_PREBUILT_IMAGE_DIR)/vendor.img
476+
USERDATA_IMG := $(TRUSTY_PREBUILT_IMAGE_DIR)/userdata.img
477+
478+
ANDROID_USERSPACE ?= 0
479+
480+
DTC := dtc
481+
482+
ANDROID_DTS := $(OUT_DIR)/android.dts
483+
ANDROID_DTB := $(OUT_DIR)/android.dtb
484+
QEMU_DTB := $(OUT_DIR)/qemu.dtb
485+
QEMU_DTS := $(OUT_DIR)/qemu.dts
486+
487+
.PHONY: android_dtb
488+
android-dtb $(ANDROID_DTB):
489+
QEMU_EXTRA_ARGS="-M dumpdtb=$(QEMU_DTB)" $(MAKE) run
490+
$(DTC) -I dtb -O dts $(QEMU_DTB) > $(QEMU_DTS)
491+
cat $(QEMU_DTS) $(ATF_DIR)/firmware.android.dts > $(ANDROID_DTS)
492+
$(DTC) -I dts -O dtb $(ANDROID_DTS) > $(ANDROID_DTB)
493+
465494
##
466495
## Run QEMU
467496
##
@@ -482,7 +511,13 @@ KASLR ?= 0
482511
UBOOT ?= 0
483512
TRUSTY ?= 0
484513

485-
QEMU_KERNEL_CMDLINE := selinux=0
514+
ifeq ($(ANDROID_USERSPACE),1)
515+
SELINUX ?= 1
516+
else
517+
SELINUX ?= 0
518+
endif
519+
520+
QEMU_KERNEL_CMDLINE := selinux=$(SELINUX)
486521

487522
QEMU_ARGS := \
488523
-m $(MEM) \
@@ -491,10 +526,14 @@ QEMU_ARGS := \
491526
-no-reboot \
492527
-kernel $(QEMU_KERNEL_IMAGE) \
493528
-echr $(ECHR) \
494-
-netdev user,id=eth0,hostfwd=tcp::7777-:7777,hostfwd=tcp::2222-:22,hostfwd=tcp::2223-:23 -device virtio-net-pci,netdev=eth0 \
495-
-virtfs local,security_model=mapped-xattr,path=$(SHARED_DIR),mount_tag=shared \
496529
$(QEMU_EXTRA_ARGS)
497530

531+
ifneq ($(TRUSTY),1)
532+
QEMU_ARGS += -netdev user,id=eth0,hostfwd=tcp::7777-:7777,hostfwd=tcp::2222-:22,hostfwd=tcp::2223-:23 -device virtio-net-pci,netdev=eth0
533+
QEMU_ARGS += -virtfs local,security_model=mapped-xattr,path=$(SHARED_DIR),mount_tag=shared
534+
#QEMU_ARGS += -virtfs local,security_model=mapped-xattr,path=$(LINUX_MODULES_INSTALL_PATH)/lib/modules,mount_tag=modules
535+
endif
536+
498537
ifeq ($(TRUSTY),1)
499538
QEMU_ARGS += -bios $(ATF_BL1)
500539
else ifeq ($(UBOOT),1)
@@ -509,7 +548,16 @@ ifneq ($(TRUSTY),1)
509548
QEMU_ARGS += -virtfs local,security_model=mapped-xattr,path=$(LINUX_MODULES_INSTALL_PATH)/lib/modules,mount_tag=modules
510549
endif
511550

512-
ifneq ($(INITRD),)
551+
# TODO: check that ROOTFS and ANDROID_USERSPACE aren't both passed at the same time?
552+
ifeq ($(ANDROID_USERSPACE),1)
553+
QEMU_ARGS += \
554+
-device virtio-blk,drive=vda -drive file=$(SYSTEM_IMG),index=0,if=none,id=vda,format=raw \
555+
-device virtio-blk,drive=vdb -drive file=$(VENDOR_IMG),index=1,if=none,id=vdb,format=raw \
556+
-device virtio-blk,drive=vdc -drive file=$(USERDATA_IMG),index=2,if=none,id=vdc,format=raw \
557+
-device virtio-net,netdev=adbnet0 -netdev user,id=adbnet0,hostfwd=tcp::5554-:5554,hostfwd=tcp::5555-:5555
558+
QEMU_KERNEL_CMDLINE += root=$(ROOT) $(RW) kvm-arm.mode=protected earlyprintk androidboot.hardware=qemu_trusty trusty-log.log_ratelimit_interval=0 trusty-log.log_to_dmesg=always
559+
QEMU_ARGS += -dtb $(ANDROID_DTB)
560+
else ifneq ($(INITRD),)
513561
ifeq ($(INITRD),1)
514562
INITRD := $(CPIO_FILE)
515563
endif
@@ -543,9 +591,10 @@ else ifeq ($(ARCH),i386)
543591
else
544592
ifeq ($(TRUSTY),1)
545593
# Trusty needs to use its own build of QEMU which has some custom patches
546-
QEMU_BIN ?= $(TRUSTY_OUT)/qemu-build/qemu-system-aarch64
594+
# QEMU_BIN ?= $(TRUSTY_OUT)/qemu-build/qemu-system-aarch64
595+
QEMU_BIN ?= $(TRUSTY_OUT)/qemu-build/aarch64-softmmu/qemu-system-aarch64
547596
else
548-
QEMU_BIN ?= qemu-system-aarch64
597+
QEMU_BIN ?= qemu-system-aarch64
549598
endif
550599

551600
QEMU_KERNEL_CMDLINE += console=ttyAMA0
@@ -574,6 +623,11 @@ endif
574623

575624
QEMU_ARGS += -append "$(QEMU_KERNEL_CMDLINE) $(QEMU_EXTRA_KERNEL_CMDLINE)"
576625

626+
# Force using the Trusty kernel image for now, there are boot errors with other images
627+
ifeq ($(TRUSTY),1)
628+
QEMU_KERNEL_IMAGE := $(TRUSTY_OUT)/linux-build/arch/arm64/boot/Image
629+
endif
630+
577631
RUN_DEPS := $(QEMU_KERNEL_IMAGE)
578632
RUN_DIR := $(ROOT_DIR)
579633

@@ -587,6 +641,11 @@ ifeq ($(TRUSTY),1)
587641
RUN_DIR := $(ATF_DIR)
588642
endif
589643

644+
ifeq ($(ANDROID_USERSPACE),1)
645+
# We need this device tree blob to mount /vendor
646+
RUN_DEPS += $(ANDROID_DTB)
647+
endif
648+
590649
# Make sure the modules directory exists, even if it's empty. Otherwise mount
591650
# will fail.
592651
$(LINUX_MODULES_INSTALL_PATH)/lib/modules:

0 commit comments

Comments
 (0)