@@ -8,7 +8,7 @@ SCRIPT_DIR := $(ROOT_DIR)/scripts
8
8
CONFIG_DIR := $(ROOT_DIR ) /config
9
9
CLANG_DIR ?= $(ROOT_DIR ) /toolchain/clang
10
10
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
12
12
13
13
SHARED_DIR := $(ROOT_DIR ) /shared
14
14
41
41
42
42
43
43
.PHONY : default
44
- default : linux tools-vm
44
+ default : linux linux_modules tools-vm
45
45
46
46
.PHONY : clean
47
47
clean : linux_clean tools-vm_clean
151
151
LINUX_DEFCONFIG ?= defconfig
152
152
endif
153
153
154
+ TRUSTY_LINUX_CONFIG_FRAGMENT := $(ROOT_DIR ) /trusty/external/linux/arch/arm64/configs/trusty_qemu_defconfig.fragment
155
+
154
156
LINUX_CONFIG_FRAGMENT ?= $(CONFIG_DIR ) /config.fragment
155
157
LINUX_OUT_MODULES_DEP := $(LINUX_OUT ) /modules_install.stamp
156
158
LINUX_MODULES_INSTALL_PATH := $(LINUX_OUT ) /modules_install
@@ -448,17 +450,43 @@ trusty $(ATF_BL1): | $(TRUSTY_SRC)
448
450
$(BEAR_CMD ) $(TRUSTY_SRC ) /trusty/vendor/google/aosp/scripts/build.py \
449
451
--build-root $(TRUSTY_BUILD_ROOT ) \
450
452
--skip-tests $(TRUSTY_TARGET )
451
- $(MAKE ) trusty_bl33
453
+ $(MAKE ) trusty-bl33
452
454
453
- .PHONY : trusty_bl33
454
- trusty_bl33 $(ATF_BL33 ) : $(UBOOT_BIN )
455
+ .PHONY : trusty-bl33
456
+ trusty-bl33 $(ATF_BL33 ) : $(UBOOT_BIN )
455
457
rm $(ATF_BL33 )
456
458
cp $(UBOOT_BIN ) $(ATF_BL33 )
457
459
458
460
.PHONY : trusty_clean
459
461
trusty_clean :
460
462
rm -rf $(TRUSTY_OUT )
461
463
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
+
462
490
# #
463
491
# # Run QEMU
464
492
# #
@@ -479,7 +507,13 @@ KASLR ?= 0
479
507
UBOOT ?= 0
480
508
TRUSTY ?= 0
481
509
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 )
483
517
484
518
QEMU_ARGS := \
485
519
-m $(MEM ) \
@@ -488,17 +522,30 @@ QEMU_ARGS := \
488
522
-no-reboot \
489
523
-kernel $(QEMU_KERNEL_IMAGE ) \
490
524
-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 \
493
525
$(QEMU_EXTRA_ARGS )
494
526
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
+
495
533
ifeq ($(TRUSTY ) ,1)
496
534
QEMU_ARGS += -bios $(ATF_BL1 )
497
535
else ifeq ($(UBOOT),1)
498
536
QEMU_ARGS += -bios $(UBOOT_BIN )
499
537
endif
500
538
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),)
502
549
ifeq ($(INITRD),1)
503
550
INITRD := $(CPIO_FILE )
504
551
endif
@@ -529,9 +576,10 @@ else ifeq ($(ARCH),i386)
529
576
else
530
577
ifeq ($(TRUSTY),1)
531
578
# 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
533
581
else
534
- QEMU_BIN ?= qemu-system-aarch64
582
+ QEMU_BIN ?= qemu-system-aarch64
535
583
endif
536
584
537
585
QEMU_KERNEL_CMDLINE += console=ttyAMA0
@@ -554,6 +602,11 @@ endif
554
602
555
603
QEMU_ARGS += -append "$(QEMU_KERNEL_CMDLINE ) $(QEMU_EXTRA_KERNEL_CMDLINE ) "
556
604
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
+
557
610
RUN_DEPS := $(QEMU_KERNEL_IMAGE )
558
611
RUN_DIR := $(ROOT_DIR )
559
612
@@ -567,6 +620,11 @@ ifeq ($(TRUSTY),1)
567
620
RUN_DIR := $(ATF_DIR )
568
621
endif
569
622
623
+ ifeq ($(ANDROID_USERSPACE ) ,1)
624
+ # We need this device tree blob to mount /vendor
625
+ RUN_DEPS += $(ANDROID_DTB )
626
+ endif
627
+
570
628
.PHONY : run
571
629
run : $(RUN_DEPS ) | $(SHARED_DIR )
572
630
@echo " $( GREEN) Running QEMU, press 'ctrl-a x' to quit $( NC) "
0 commit comments