annotate Makefile @ 2:77a5fa9bee07 default tip

add kernel.elf
author mir3636
date Sun, 06 Jan 2019 19:37:16 +0900
parents ed10291ff195
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
ed10291ff195 first commit
mir3636
parents:
diff changeset
1 UNAME := $(shell uname -m)
ed10291ff195 first commit
mir3636
parents:
diff changeset
2
ed10291ff195 first commit
mir3636
parents:
diff changeset
3 ifeq ($(UNAME), x86_64)
ed10291ff195 first commit
mir3636
parents:
diff changeset
4 # set FVP as default on x86_64 systems
ed10291ff195 first commit
mir3636
parents:
diff changeset
5 hw?=rpi2
ed10291ff195 first commit
mir3636
parents:
diff changeset
6 TOOLCHAIN?=~/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-
ed10291ff195 first commit
mir3636
parents:
diff changeset
7 else
ed10291ff195 first commit
mir3636
parents:
diff changeset
8 # RPI reports 'uname -m' as: armv7l
ed10291ff195 first commit
mir3636
parents:
diff changeset
9 hw?=rpi2
ed10291ff195 first commit
mir3636
parents:
diff changeset
10 endif
ed10291ff195 first commit
mir3636
parents:
diff changeset
11
ed10291ff195 first commit
mir3636
parents:
diff changeset
12 # PHYSTART : start of memory (RAM)
ed10291ff195 first commit
mir3636
parents:
diff changeset
13 # PHYSIZE : size of memory
ed10291ff195 first commit
mir3636
parents:
diff changeset
14 # KERNBASE : address of high memory schema
ed10291ff195 first commit
mir3636
parents:
diff changeset
15 # MMIO_PA : physical address of peripherals (MMIO)
ed10291ff195 first commit
mir3636
parents:
diff changeset
16 # MMIO_VA : virtal address of peripherals
ed10291ff195 first commit
mir3636
parents:
diff changeset
17 # MMIO_SIZE : size of peripherals
ed10291ff195 first commit
mir3636
parents:
diff changeset
18 # PERIPHBASE: virtal address of PERIPHBASE[39:15]
ed10291ff195 first commit
mir3636
parents:
diff changeset
19
ed10291ff195 first commit
mir3636
parents:
diff changeset
20 ifeq ($(hw), fvp)
ed10291ff195 first commit
mir3636
parents:
diff changeset
21 PHYSTART = 0x80000000
ed10291ff195 first commit
mir3636
parents:
diff changeset
22 PHYSIZE = 0x08000000
ed10291ff195 first commit
mir3636
parents:
diff changeset
23 KERNBASE = 0xC0000000
ed10291ff195 first commit
mir3636
parents:
diff changeset
24 MMIO_PA = 0x1C000000
ed10291ff195 first commit
mir3636
parents:
diff changeset
25 MMIO_VA = 0xD0000000
ed10291ff195 first commit
mir3636
parents:
diff changeset
26 MMIO_SIZE = 0x04000000
ed10291ff195 first commit
mir3636
parents:
diff changeset
27 PERIPHBASE= 0xDF000000
ed10291ff195 first commit
mir3636
parents:
diff changeset
28 CFLAGS = -ffreestanding -nostdlib -nostartfiles -O0 -Wall -MD -ggdb -Wall -mcpu=cortex-a9 -mfloat-abi=hard -fno-short-enums -I include
ed10291ff195 first commit
mir3636
parents:
diff changeset
29 #CFLAGS = -ffreestanding -nostdlib -nostartfiles -O2 -Wall -MD -ggdb -Wall -mcpu=cortex-a9 -mfloat-abi=hard -fno-short-enums -I include
ed10291ff195 first commit
mir3636
parents:
diff changeset
30 TARGET = fvp.img
ed10291ff195 first commit
mir3636
parents:
diff changeset
31 CC_OPTIONS = -DFVP
ed10291ff195 first commit
mir3636
parents:
diff changeset
32 else ifeq ($(hw), rpi1)
ed10291ff195 first commit
mir3636
parents:
diff changeset
33 PHYSTART = 0x00000000
ed10291ff195 first commit
mir3636
parents:
diff changeset
34 # PHYSIZE set to 128mb
ed10291ff195 first commit
mir3636
parents:
diff changeset
35 PHYSIZE = 0x08000000
ed10291ff195 first commit
mir3636
parents:
diff changeset
36 KERNBASE = 0x80000000
ed10291ff195 first commit
mir3636
parents:
diff changeset
37 MMIO_PA = 0x20000000
ed10291ff195 first commit
mir3636
parents:
diff changeset
38 MMIO_VA = 0xD0000000
ed10291ff195 first commit
mir3636
parents:
diff changeset
39 MMIO_SIZE = 0x01000000
ed10291ff195 first commit
mir3636
parents:
diff changeset
40 PERIPHBASE= 0xDF000000
ed10291ff195 first commit
mir3636
parents:
diff changeset
41 #CFLAGS = -fno-pic -static -Wno-packed-bitfield-compat -fno-builtin -fno-strict-aliasing -fshort-wchar -O2 -Wall -MD -ggdb -Werror -fno-omit-frame-pointer -fno-stack-protector -Wa,-march=armv6 -Wa,-mcpu=arm1176jzf-s -mfloat-abi=hard -fno-short-enums -I include
ed10291ff195 first commit
mir3636
parents:
diff changeset
42 CFLAGS = -ffreestanding -nostdlib -nostartfiles -O2 -Wall -MD -ggdb -Wall -mcpu=arm1176jzf-s -mfloat-abi=hard -fno-short-enums -I include
ed10291ff195 first commit
mir3636
parents:
diff changeset
43 TARGET = kernel.img
ed10291ff195 first commit
mir3636
parents:
diff changeset
44 CC_OPTIONS = -DRPI1
ed10291ff195 first commit
mir3636
parents:
diff changeset
45 else ifeq ($(hw), rpi2)
ed10291ff195 first commit
mir3636
parents:
diff changeset
46 PHYSTART = 0x00000000
ed10291ff195 first commit
mir3636
parents:
diff changeset
47 # PHYSIZE set to 256mb
ed10291ff195 first commit
mir3636
parents:
diff changeset
48 PHYSIZE = 0x10000000
ed10291ff195 first commit
mir3636
parents:
diff changeset
49 KERNBASE = 0x80000000
ed10291ff195 first commit
mir3636
parents:
diff changeset
50 MMIO_PA = 0x3F000000
ed10291ff195 first commit
mir3636
parents:
diff changeset
51 MMIO_VA = 0xD0000000
ed10291ff195 first commit
mir3636
parents:
diff changeset
52 MMIO_SIZE = 0x01000000
ed10291ff195 first commit
mir3636
parents:
diff changeset
53 PERIPHBASE= 0xDF000000
ed10291ff195 first commit
mir3636
parents:
diff changeset
54 CFLAGS = -ffreestanding -nostdlib -nostartfiles -O2 -Wall -MD -ggdb -Wall -mcpu=cortex-a7 -mfloat-abi=hard -fno-short-enums -I include
ed10291ff195 first commit
mir3636
parents:
diff changeset
55 TARGET = kernel7.bin
ed10291ff195 first commit
mir3636
parents:
diff changeset
56 CC_OPTIONS = -DRPI2
ed10291ff195 first commit
mir3636
parents:
diff changeset
57 else
ed10291ff195 first commit
mir3636
parents:
diff changeset
58 $(error Hardware (hw) should be fvp, rpi1 or rpi2, eg. make hw=rpi2)
ed10291ff195 first commit
mir3636
parents:
diff changeset
59 endif
ed10291ff195 first commit
mir3636
parents:
diff changeset
60
ed10291ff195 first commit
mir3636
parents:
diff changeset
61
ed10291ff195 first commit
mir3636
parents:
diff changeset
62 K_PDX_BASE=$(shell printf "0x%X\n" $$(( $(PHYSTART) + 0x4000 )) )
ed10291ff195 first commit
mir3636
parents:
diff changeset
63 K_PTX_BASE=$(shell printf "0x%X\n" $$(( $(PHYSTART) + 0x3000 )) )
ed10291ff195 first commit
mir3636
parents:
diff changeset
64 OFFSET=0x8000
ed10291ff195 first commit
mir3636
parents:
diff changeset
65 PHYSOFFSET=$(shell printf "0x%X\n" $$(( $(PHYSTART) + $(OFFSET) )) )
ed10291ff195 first commit
mir3636
parents:
diff changeset
66 KERNOFFSET=$(shell printf "0x%X\n" $$(( $(KERNBASE) + $(OFFSET) )) )
ed10291ff195 first commit
mir3636
parents:
diff changeset
67
ed10291ff195 first commit
mir3636
parents:
diff changeset
68 CC_OPTIONS += -DPHYSTART=$(PHYSTART) -DPHYSIZE=$(PHYSIZE) -DKERNBASE=$(KERNBASE) -DMMIO_PA=$(MMIO_PA) -DMMIO_VA=$(MMIO_VA) -DMMIO_SIZE=$(MMIO_SIZE) -DPERIPHBASE=$(PERIPHBASE)
ed10291ff195 first commit
mir3636
parents:
diff changeset
69 CC_OPTIONS += -DK_PDX_BASE=$(K_PDX_BASE) -DK_PTX_BASE=$(K_PTX_BASE) -DPHYSOFFSET=$(PHYSOFFSET) -DKERNOFFSET=$(KERNOFFSET)
ed10291ff195 first commit
mir3636
parents:
diff changeset
70
ed10291ff195 first commit
mir3636
parents:
diff changeset
71 LD_OPTIONS = --defsym=PHYSTART=$(PHYSTART) --defsym=PHYSIZE=$(PHYSIZE) --defsym=KERNBASE=$(KERNBASE) --defsym=MMIO_PA=$(MMIO_PA) --defsym=MMIO_VA=$(MMIO_VA) --defsym=MMIO_SIZE=$(MMIO_SIZE) --defsym=PERIPHBASE=$(PERIPHBASE)
ed10291ff195 first commit
mir3636
parents:
diff changeset
72 LD_OPTIONS += --defsym=K_PDX_BASE=$(K_PDX_BASE) --defsym=K_PTX_BASE=$(K_PTX_BASE) --defsym=PHYSOFFSET=$(PHYSOFFSET) --defsym=KERNOFFSET=$(KERNOFFSET)
ed10291ff195 first commit
mir3636
parents:
diff changeset
73
ed10291ff195 first commit
mir3636
parents:
diff changeset
74 # Build directory
ed10291ff195 first commit
mir3636
parents:
diff changeset
75 BUILD=build/
ed10291ff195 first commit
mir3636
parents:
diff changeset
76 # Sources directory.
ed10291ff195 first commit
mir3636
parents:
diff changeset
77 SOURCE=source/
ed10291ff195 first commit
mir3636
parents:
diff changeset
78 # Generated listing file.
ed10291ff195 first commit
mir3636
parents:
diff changeset
79 LIBRARIES=
ed10291ff195 first commit
mir3636
parents:
diff changeset
80
ed10291ff195 first commit
mir3636
parents:
diff changeset
81 # The names of all object files that must be generated. Deduced from the
ed10291ff195 first commit
mir3636
parents:
diff changeset
82 # assembly code files in source.
ed10291ff195 first commit
mir3636
parents:
diff changeset
83 ASM_OBJECTS = $(patsubst $(SOURCE)%.S,$(BUILD)%.o,$(wildcard $(SOURCE)*.S))
ed10291ff195 first commit
mir3636
parents:
diff changeset
84
ed10291ff195 first commit
mir3636
parents:
diff changeset
85 C_OBJECTS = $(patsubst $(SOURCE)%.c,$(BUILD)%.o,$(wildcard $(SOURCE)*.c))
ed10291ff195 first commit
mir3636
parents:
diff changeset
86
ed10291ff195 first commit
mir3636
parents:
diff changeset
87 # Rule to make everything.
ed10291ff195 first commit
mir3636
parents:
diff changeset
88 all : $(TARGET)
ed10291ff195 first commit
mir3636
parents:
diff changeset
89
ed10291ff195 first commit
mir3636
parents:
diff changeset
90 # Rule to make the elf file.
ed10291ff195 first commit
mir3636
parents:
diff changeset
91 $(TARGET): $(ASM_OBJECTS) $(C_OBJECTS) kernel.ld
ed10291ff195 first commit
mir3636
parents:
diff changeset
92 $(TOOLCHAIN)ld $(ASM_OBJECTS) $(C_OBJECTS) -L. $(patsubst %,-l %,$(LIBRARIES)) $(LD_OPTIONS) -Map kernel.map -o $(BUILD)kernel.elf -T kernel.ld
ed10291ff195 first commit
mir3636
parents:
diff changeset
93 $(TOOLCHAIN)objdump -d $(BUILD)kernel.elf > kernel.list
ed10291ff195 first commit
mir3636
parents:
diff changeset
94 $(TOOLCHAIN)objcopy $(BUILD)kernel.elf -O binary $(TARGET)
ed10291ff195 first commit
mir3636
parents:
diff changeset
95
ed10291ff195 first commit
mir3636
parents:
diff changeset
96 # Build ASM files
ed10291ff195 first commit
mir3636
parents:
diff changeset
97 $(BUILD)%.o: $(SOURCE)%.S $(BUILD)
ed10291ff195 first commit
mir3636
parents:
diff changeset
98 $(TOOLCHAIN)gcc -c $(CFLAGS) $(CC_OPTIONS) -I source $< -o $@
ed10291ff195 first commit
mir3636
parents:
diff changeset
99
ed10291ff195 first commit
mir3636
parents:
diff changeset
100 # Build C files
ed10291ff195 first commit
mir3636
parents:
diff changeset
101 $(BUILD)%.o: $(SOURCE)%.c $(BUILD)
ed10291ff195 first commit
mir3636
parents:
diff changeset
102 $(TOOLCHAIN)gcc -c $(CFLAGS) $(CC_OPTIONS) $< -o $@
ed10291ff195 first commit
mir3636
parents:
diff changeset
103
ed10291ff195 first commit
mir3636
parents:
diff changeset
104 loader: loader.S kernel7.bin
ed10291ff195 first commit
mir3636
parents:
diff changeset
105 $(TOOLCHAIN)gcc -c loader.S -o loader.elf -fpic -ffreestanding -nostdlib -nostartfiles -O0 -Wall -ggdb -Wall -mcpu=cortex-a7 -mfloat-abi=hard -fno-short-enums -o loader.o
ed10291ff195 first commit
mir3636
parents:
diff changeset
106 $(TOOLCHAIN)ld loader.o -o loader.elf -T loader.ld
ed10291ff195 first commit
mir3636
parents:
diff changeset
107 #$(TOOLCHAIN)objdump -D loader.elf > loader.list
ed10291ff195 first commit
mir3636
parents:
diff changeset
108 $(TOOLCHAIN)objcopy loader.elf -O binary kernel7.img
ed10291ff195 first commit
mir3636
parents:
diff changeset
109 -rm loader.elf loader.o
ed10291ff195 first commit
mir3636
parents:
diff changeset
110
ed10291ff195 first commit
mir3636
parents:
diff changeset
111 $(BUILD):
ed10291ff195 first commit
mir3636
parents:
diff changeset
112 mkdir $@
ed10291ff195 first commit
mir3636
parents:
diff changeset
113
ed10291ff195 first commit
mir3636
parents:
diff changeset
114 .PHONY: report
ed10291ff195 first commit
mir3636
parents:
diff changeset
115 report:
ed10291ff195 first commit
mir3636
parents:
diff changeset
116 @echo 'Hardware :' $(hw)
ed10291ff195 first commit
mir3636
parents:
diff changeset
117 @echo 'TARGET :' $(TARGET)
ed10291ff195 first commit
mir3636
parents:
diff changeset
118 @echo 'PHYSTART :' $(PHYSTART)
ed10291ff195 first commit
mir3636
parents:
diff changeset
119 @echo 'PHYSIZE :' $(PHYSIZE)
ed10291ff195 first commit
mir3636
parents:
diff changeset
120
ed10291ff195 first commit
mir3636
parents:
diff changeset
121 @echo 'K_PDX_BASE:' $(K_PDX_BASE)
ed10291ff195 first commit
mir3636
parents:
diff changeset
122 @echo 'K_PTX_BASE:' $(K_PTX_BASE)
ed10291ff195 first commit
mir3636
parents:
diff changeset
123 @echo 'PHYSOFFSET:' $(PHYSOFFSET)
ed10291ff195 first commit
mir3636
parents:
diff changeset
124
ed10291ff195 first commit
mir3636
parents:
diff changeset
125 @echo 'KERNBASE :' $(KERNBASE)
ed10291ff195 first commit
mir3636
parents:
diff changeset
126 @echo 'KERNOFFSET:' $(KERNOFFSET)
ed10291ff195 first commit
mir3636
parents:
diff changeset
127
ed10291ff195 first commit
mir3636
parents:
diff changeset
128 @echo 'MMIO_PA :' $(MMIO_PA)
ed10291ff195 first commit
mir3636
parents:
diff changeset
129 @echo 'MMIO_SIZE :' $(MMIO_SIZE)
ed10291ff195 first commit
mir3636
parents:
diff changeset
130 @echo 'MMIO_VA :' $(MMIO_VA)
ed10291ff195 first commit
mir3636
parents:
diff changeset
131 @echo 'PERIPHBASE:' $(PERIPHBASE)
ed10291ff195 first commit
mir3636
parents:
diff changeset
132
ed10291ff195 first commit
mir3636
parents:
diff changeset
133 @echo 'CFLAGS :' $(CFLAGS)
ed10291ff195 first commit
mir3636
parents:
diff changeset
134 @echo 'CC_OPTIONS:' $(CC_OPTIONS)
ed10291ff195 first commit
mir3636
parents:
diff changeset
135 @echo 'LD_OPTIONS:' $(LD_OPTIONS)
ed10291ff195 first commit
mir3636
parents:
diff changeset
136
ed10291ff195 first commit
mir3636
parents:
diff changeset
137 .PHONY: install
ed10291ff195 first commit
mir3636
parents:
diff changeset
138 install:
ed10291ff195 first commit
mir3636
parents:
diff changeset
139 cp kernel*.img /media/$(USER)/boot/
ed10291ff195 first commit
mir3636
parents:
diff changeset
140 sync
ed10291ff195 first commit
mir3636
parents:
diff changeset
141 umount /media/$(USER)/*
ed10291ff195 first commit
mir3636
parents:
diff changeset
142
ed10291ff195 first commit
mir3636
parents:
diff changeset
143 # Rule to clean files.
ed10291ff195 first commit
mir3636
parents:
diff changeset
144 clean :
ed10291ff195 first commit
mir3636
parents:
diff changeset
145 -rm -rf $(BUILD)
ed10291ff195 first commit
mir3636
parents:
diff changeset
146 -rm -f *.img
ed10291ff195 first commit
mir3636
parents:
diff changeset
147 -rm -f *.bin
ed10291ff195 first commit
mir3636
parents:
diff changeset
148 -rm -f kernel.list
ed10291ff195 first commit
mir3636
parents:
diff changeset
149 -rm -f kernel.map