1 CFLAGS ?
= -Wall
-std
=gnu99
-O2
3 ARM_BASE ?
= arm-none-eabi
5 ARM_CC ?
= $(ARM_BASE
)-gcc
7 ARM_CFLAGS ?
= -mcpu
=cortex-a7
-ffreestanding
-std
=gnu11
-Wall \
8 -Wextra
$(addprefix -I
, $(dirs
))
10 ARM_AS ?
= $(ARM_BASE
)-as
12 ARM_OBJCOPY ?
= $(ARM_BASE
)-objcopy
14 ARM_ELFFLAGS ?
= -nostdlib
-lgcc
17 KERNEL_STAGE2_OBJECTS
:= setup.o interrupt_vector.o interrupts.o \
18 uart.o demo_functionality.o paging.o ramfs_embeddable.o \
19 ramfs.o strings.o io.o atags.o scheduler.o
21 PL_0_TEST_OBJECTS
:= PL0_utils.o svc.o PL0_test.o strings.o io.o
23 LOADER_STAGE2_OBJECTS
:= uart.o strings.o io.o loader_stage2.o
25 RAMFS_FILES
:= PL0_test.img
29 space
:= $(empty
) $(empty
)
31 dirs
:=$(shell find ..
/src
/ -type d
)
32 dirs_colon
:=$(subst $(space
),:,$(dirs
))
33 vpath
%.S
$(dirs_colon
)
34 vpath
%.c
$(dirs_colon
)
35 vpath
%.
ld $(dirs_colon
)
42 $(if
$(findstring /arm
/,$<),\
43 $(ARM_CC
) $(ARM_CFLAGS
),$(HOST_CC
) $(HOST_CFLAGS
)) -c
$< -o
$@
46 $(ARM_OBJCOPY
) $^
-O binary
$@
49 $(ARM_AS
) -mcpu
=cortex-a7
$< -o
$@
51 %_embeddable.o
: %.img
52 $(ARM_OBJCOPY
) -I binary
-O elf32-littlearm
-B arm
$^
$@
55 $(ARM_CC
) -T
$< -o
$@
$(ARM_ELFFLAGS
) $(filter %.o
,$^
)
58 PL0_test.elf
: $(PL_0_TEST_OBJECTS
)
60 kernel.elf
: kernel_stage1.o
62 kernel_stage2.elf
: $(KERNEL_STAGE2_OBJECTS
)
64 loader_stage2.elf
: $(LOADER_STAGE2_OBJECTS
)
66 loader.elf
: loader_stage1.o
69 kernel_stage1.o
: kernel_stage2.img
71 loader_stage1.o
: loader_stage2.img
74 ramfs.img
: makefs
$(RAMFS_FILES
)
75 .
/makefs
$(RAMFS_FILES
) > $@
79 qemu-system-arm
-m
256 -M raspi2
-serial stdio
-kernel
$^
82 qemu-system-arm
-m
256 -M raspi2
-serial stdio
-kernel
$^
84 qemu-loader
: loader.img kernel.img pipe_image
86 qemu-system-arm
-m
256 -M raspi2
-serial stdio
-kernel
$<
88 run-on-rpi
: kernel.img pipe_image
90 sudo socat FILE
:/dev
/ttyUSB0
,b115200
,raw
-
91 sudo screen
/dev
/ttyUSB0
115200,cs8
,-parenb
,-cstopb
,-hupcl
95 -rm -f
*.img
*.elf
*.o pipe_image makefs
97 .PHONY
: all qemu-elf qemu-bin qemu-loader run-on-rpi
clean