@@ -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
42
42
43
43
.PHONY : default
44
44
default : linux linux_modules tools-vm
45
+ default : linux linux_modules tools-vm
45
46
46
47
.PHONY : clean
47
48
clean : linux_clean tools-vm_clean
151
152
LINUX_DEFCONFIG ?= defconfig
152
153
endif
153
154
155
+ TRUSTY_LINUX_CONFIG_FRAGMENT := $(ROOT_DIR ) /trusty/external/linux/arch/arm64/configs/trusty_qemu_defconfig.fragment
156
+
154
157
LINUX_CONFIG_FRAGMENT ?= $(CONFIG_DIR ) /config.fragment
155
158
LINUX_OUT_MODULES_DEP := $(LINUX_OUT ) /modules_install.stamp
156
159
LINUX_MODULES_INSTALL_PATH := $(LINUX_OUT ) /modules_install
@@ -451,17 +454,43 @@ trusty $(ATF_BL1): | $(TRUSTY_SRC)
451
454
$(BEAR_CMD ) $(TRUSTY_SRC ) /trusty/vendor/google/aosp/scripts/build.py \
452
455
--build-root $(TRUSTY_BUILD_ROOT ) \
453
456
--skip-tests $(TRUSTY_TARGET )
454
- $(MAKE ) trusty_bl33
457
+ $(MAKE ) trusty-bl33
455
458
456
- .PHONY : trusty_bl33
457
- trusty_bl33 $(ATF_BL33 ) : $(UBOOT_BIN )
459
+ .PHONY : trusty-bl33
460
+ trusty-bl33 $(ATF_BL33 ) : $(UBOOT_BIN )
458
461
rm $(ATF_BL33 )
459
462
cp $(UBOOT_BIN ) $(ATF_BL33 )
460
463
461
464
.PHONY : trusty_clean
462
465
trusty_clean :
463
466
rm -rf $(TRUSTY_OUT )
464
467
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
+
465
494
# #
466
495
# # Run QEMU
467
496
# #
@@ -482,7 +511,13 @@ KASLR ?= 0
482
511
UBOOT ?= 0
483
512
TRUSTY ?= 0
484
513
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 )
486
521
487
522
QEMU_ARGS := \
488
523
-m $(MEM ) \
@@ -491,10 +526,14 @@ QEMU_ARGS := \
491
526
-no-reboot \
492
527
-kernel $(QEMU_KERNEL_IMAGE ) \
493
528
-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 \
496
529
$(QEMU_EXTRA_ARGS )
497
530
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
+
498
537
ifeq ($(TRUSTY ) ,1)
499
538
QEMU_ARGS += -bios $(ATF_BL1 )
500
539
else ifeq ($(UBOOT),1)
@@ -509,7 +548,16 @@ ifneq ($(TRUSTY),1)
509
548
QEMU_ARGS += -virtfs local,security_model=mapped-xattr,path=$(LINUX_MODULES_INSTALL_PATH ) /lib/modules,mount_tag=modules
510
549
endif
511
550
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),)
513
561
ifeq ($(INITRD),1)
514
562
INITRD := $(CPIO_FILE )
515
563
endif
@@ -543,9 +591,10 @@ else ifeq ($(ARCH),i386)
543
591
else
544
592
ifeq ($(TRUSTY),1)
545
593
# 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
547
596
else
548
- QEMU_BIN ?= qemu-system-aarch64
597
+ QEMU_BIN ?= qemu-system-aarch64
549
598
endif
550
599
551
600
QEMU_KERNEL_CMDLINE += console=ttyAMA0
@@ -574,6 +623,11 @@ endif
574
623
575
624
QEMU_ARGS += -append "$(QEMU_KERNEL_CMDLINE ) $(QEMU_EXTRA_KERNEL_CMDLINE ) "
576
625
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
+
577
631
RUN_DEPS := $(QEMU_KERNEL_IMAGE )
578
632
RUN_DIR := $(ROOT_DIR )
579
633
@@ -587,6 +641,11 @@ ifeq ($(TRUSTY),1)
587
641
RUN_DIR := $(ATF_DIR )
588
642
endif
589
643
644
+ ifeq ($(ANDROID_USERSPACE ) ,1)
645
+ # We need this device tree blob to mount /vendor
646
+ RUN_DEPS += $(ANDROID_DTB )
647
+ endif
648
+
590
649
# Make sure the modules directory exists, even if it's empty. Otherwise mount
591
650
# will fail.
592
651
$(LINUX_MODULES_INSTALL_PATH ) /lib/modules :
0 commit comments