Skip to content

Commit 4fbbf58

Browse files
author
Gulshan Singh
committed
WIP: android userspace
1 parent 646a513 commit 4fbbf58

File tree

1 file changed

+69
-11
lines changed

1 file changed

+69
-11
lines changed

Makefile

Lines changed: 69 additions & 11 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

@@ -41,7 +41,7 @@ endif
4141

4242

4343
.PHONY: default
44-
default: linux tools-vm
44+
default: linux linux_modules tools-vm
4545

4646
.PHONY: clean
4747
clean: linux_clean tools-vm_clean
@@ -151,6 +151,8 @@ else
151151
LINUX_DEFCONFIG ?= defconfig
152152
endif
153153

154+
TRUSTY_LINUX_CONFIG_FRAGMENT := $(ROOT_DIR)/trusty/external/linux/arch/arm64/configs/trusty_qemu_defconfig.fragment
155+
154156
LINUX_CONFIG_FRAGMENT ?= $(CONFIG_DIR)/config.fragment
155157
LINUX_OUT_MODULES_DEP := $(LINUX_OUT)/modules_install.stamp
156158
LINUX_MODULES_INSTALL_PATH := $(LINUX_OUT)/modules_install
@@ -448,17 +450,43 @@ trusty $(ATF_BL1): | $(TRUSTY_SRC)
448450
$(BEAR_CMD) $(TRUSTY_SRC)/trusty/vendor/google/aosp/scripts/build.py \
449451
--build-root $(TRUSTY_BUILD_ROOT) \
450452
--skip-tests $(TRUSTY_TARGET)
451-
$(MAKE) trusty_bl33
453+
$(MAKE) trusty-bl33
452454

453-
.PHONY: trusty_bl33
454-
trusty_bl33 $(ATF_BL33): $(UBOOT_BIN)
455+
.PHONY: trusty-bl33
456+
trusty-bl33 $(ATF_BL33): $(UBOOT_BIN)
455457
rm $(ATF_BL33)
456458
cp $(UBOOT_BIN) $(ATF_BL33)
457459

458460
.PHONY: trusty_clean
459461
trusty_clean:
460462
rm -rf $(TRUSTY_OUT)
461463

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

482-
QEMU_KERNEL_CMDLINE := selinux=0
510+
ifeq ($(ANDROID_USERSPACE),1)
511+
SELINUX ?= 1
512+
else
513+
SELINUX ?= 0
514+
endif
515+
516+
QEMU_KERNEL_CMDLINE := selinux=$(SELINUX)
483517

484518
QEMU_ARGS := \
485519
-m $(MEM) \
@@ -488,17 +522,30 @@ QEMU_ARGS := \
488522
-no-reboot \
489523
-kernel $(QEMU_KERNEL_IMAGE) \
490524
-echr $(ECHR) \
491-
-netdev user,id=eth0,hostfwd=tcp::7777-:7777,hostfwd=tcp::2222-:22,hostfwd=tcp::2223-:23 -device virtio-net-pci,netdev=eth0 \
492-
-virtfs local,security_model=mapped-xattr,path=$(SHARED_DIR),mount_tag=shared \
493525
$(QEMU_EXTRA_ARGS)
494526

527+
ifneq ($(TRUSTY),1)
528+
QEMU_ARGS += -netdev user,id=eth0,hostfwd=tcp::7777-:7777,hostfwd=tcp::2222-:22,hostfwd=tcp::2223-:23 -device virtio-net-pci,netdev=eth0
529+
QEMU_ARGS += -virtfs local,security_model=mapped-xattr,path=$(SHARED_DIR),mount_tag=shared
530+
#QEMU_ARGS += -virtfs local,security_model=mapped-xattr,path=$(LINUX_MODULES_INSTALL_PATH)/lib/modules,mount_tag=modules
531+
endif
532+
495533
ifeq ($(TRUSTY),1)
496534
QEMU_ARGS += -bios $(ATF_BL1)
497535
else ifeq ($(UBOOT),1)
498536
QEMU_ARGS += -bios $(UBOOT_BIN)
499537
endif
500538

501-
ifneq ($(INITRD),)
539+
# TODO: check that ROOTFS and ANDROID_USERSPACE aren't both passed at the same time?
540+
ifeq ($(ANDROID_USERSPACE),1)
541+
QEMU_ARGS += \
542+
-device virtio-blk,drive=vda -drive file=$(SYSTEM_IMG),index=0,if=none,id=vda,format=raw \
543+
-device virtio-blk,drive=vdb -drive file=$(VENDOR_IMG),index=1,if=none,id=vdb,format=raw \
544+
-device virtio-blk,drive=vdc -drive file=$(USERDATA_IMG),index=2,if=none,id=vdc,format=raw \
545+
-device virtio-net,netdev=adbnet0 -netdev user,id=adbnet0,hostfwd=tcp::5554-:5554,hostfwd=tcp::5555-:5555
546+
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
547+
QEMU_ARGS += -dtb $(ANDROID_DTB)
548+
else ifneq ($(INITRD),)
502549
ifeq ($(INITRD),1)
503550
INITRD := $(CPIO_FILE)
504551
endif
@@ -529,9 +576,10 @@ else ifeq ($(ARCH),i386)
529576
else
530577
ifeq ($(TRUSTY),1)
531578
# Trusty needs to use its own build of QEMU which has some custom patches
532-
QEMU_BIN ?= $(TRUSTY_OUT)/qemu-build/qemu-system-aarch64
579+
# QEMU_BIN ?= $(TRUSTY_OUT)/qemu-build/qemu-system-aarch64
580+
QEMU_BIN ?= $(TRUSTY_OUT)/qemu-build/aarch64-softmmu/qemu-system-aarch64
533581
else
534-
QEMU_BIN ?= qemu-system-aarch64
582+
QEMU_BIN ?= qemu-system-aarch64
535583
endif
536584

537585
QEMU_KERNEL_CMDLINE += console=ttyAMA0
@@ -554,6 +602,11 @@ endif
554602

555603
QEMU_ARGS += -append "$(QEMU_KERNEL_CMDLINE) $(QEMU_EXTRA_KERNEL_CMDLINE)"
556604

605+
# Force using the Trusty kernel image for now, there are boot errors with other images
606+
ifeq ($(TRUSTY),1)
607+
QEMU_KERNEL_IMAGE := $(TRUSTY_OUT)/linux-build/arch/arm64/boot/Image
608+
endif
609+
557610
RUN_DEPS := $(QEMU_KERNEL_IMAGE)
558611
RUN_DIR := $(ROOT_DIR)
559612

@@ -567,6 +620,11 @@ ifeq ($(TRUSTY),1)
567620
RUN_DIR := $(ATF_DIR)
568621
endif
569622

623+
ifeq ($(ANDROID_USERSPACE),1)
624+
# We need this device tree blob to mount /vendor
625+
RUN_DEPS += $(ANDROID_DTB)
626+
endif
627+
570628
.PHONY: run
571629
run: $(RUN_DEPS) | $(SHARED_DIR)
572630
@echo "$(GREEN)Running QEMU, press 'ctrl-a x' to quit $(NC)"

0 commit comments

Comments
 (0)