-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMakefile
More file actions
140 lines (112 loc) · 3.09 KB
/
Copy pathMakefile
File metadata and controls
140 lines (112 loc) · 3.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
##############################################
# Copyright (C) 2018-2019 胡启航<Hu Qihang>
#
# Author: wkcs
#
# Email: hqh2030@gmail.com, huqihan@live.com
##############################################
VERSION = 1
PATCHLEVEL = 0
SUBLEVEL = 6
#打开显示选项
ifneq ($(V),1)
Q := @
endif
ifneq ($(MV), 1)
N := --no-print-directory
endif
ifndef $(ARCH)
ARCH := arm
endif
ifndef $(BOARD)
BOARD := keyboard
endif
ifndef $(CONFIG)
CONFIG := keyboard_config
endif
dir-y = app
dir-y += arch
dir-y += drivers
dir-y += fs
dir-y += init
dir-y += kernel
dir-y += lib
dir-y += mm
dir-y += net
#dir-y += test
dir-run := $(dir-y:%=%-run)
ifndef $(out-dir)
out-dir := out
endif
obj-dir := $(dir-y:%=$(out-dir)/%)
obj-all := $(out-dir)/app/app.a
obj-all += $(out-dir)/arch/arch.a
obj-all += $(out-dir)/drivers/drivers.a
#obj-all += $(out-dir)/fs/fs.a
obj-all += $(out-dir)/init/init.a
obj-all += $(out-dir)/kernel/kernel.a
obj-all += $(out-dir)/lib/lib.a
obj-all += $(out-dir)/mm/mm.a
#obj-all += $(out-dir)/net/net.a
#obj-all += $(out-dir)/test/test.a
#链接脚本
LDSCRIPT :=
include scripts/Makefile.config
include arch/$(ARCH)/board/$(BOARD)/Makefile.config
-include .config
OOCD := openocd
OOCD_INTERFACE := flossjtag
LDFLAGS += $(LDSCRIPT:%=-T%)
.PHONY: all flash debug clean config size $(obj-all) stflash
all:$(TARGET_LIST) $(TARGET_BIN) $(TARGET_HEX) $(TARGET_ELF) $(TARGET_IMG) size
size: $(TARGET_ELF)
@echo "SIZE $(<:$(out-dir)/%=%)"
$(Q)$(SIZE) --format=berkeley $<
@echo build done
$(TARGET_HEX): $(TARGET_ELF)
@echo "OBJCOPY $(@:$(out-dir)/%=%)"
$(Q)$(OBJCOPY) $< $@ -Oihex
$(TARGET_BIN): $(TARGET_ELF)
@echo "OBJCOPY $(@:$(out-dir)/%=%)"
$(Q)$(OBJCOPY) $< $@ -Obinary
$(TARGET_IMG): $(TARGET_BIN)
@echo "CREATE $(@:$(out-dir)/%=%)"
$(Q)$(PYTHON) scripts/create_img.py $< $(VERSION) $(PATCHLEVEL) $(SUBLEVEL) 1 $@
$(TARGET_LIST): $(TARGET_ELF)
@echo "OBJDUMP $(@:$(out-dir)/%=%)"
$(Q)$(OBJDUMP) -S $< > $@
$(TARGET_ELF):$(obj-all) $(LDSCRIPT)
@echo "LD $(@:$(out-dir)/%=%)"
$(Q)$(CC) $(LDFLAGS) -o $@ $(obj-all)
$(obj-all): $(obj-dir) .config
$(Q)$(MAKE) $(N) -f scripts/Makefile.build dir=$(@:$(out-dir)/%/$(notdir $@)=%) \
out-dir=$(out-dir) Q=$(Q) N=$(N) ARCH=$(ARCH) BOARD=$(BOARD) \
TARGET=$(notdir $@) built-in.o
$(obj-dir):$(out-dir)
$(Q)if [ ! -d $@ ]; then \
mkdir $@; \
fi
$(out-dir):
$(Q)if [ ! -d $@ ]; then \
mkdir $@; \
fi
# 使用OpenOCD下载hex程序
flash:
@echo "OPEN_OCD FLASH $(TARGET_HEX:$(out-dir)/%=%)"
$(Q)$(OOCD) $(OOCDFLAGS) -c "program $(TARGET_HEX) verify reset exit"
# 使用st-link下载bin程序
stflash:
@echo "ST-FLASH $(TARGET_BIN:$(out-dir)/%=%)"
$(Q)st-flash write $(TARGET_BIN) 0x08000000
# 使用GDB 通过sdtin/out管道与OpenOCD连接 并在main函数处打断点后运行
debug: $(TARGET_ELF)
@echo "GDB DEBUG $<"
$(Q)$(GDB) -iex 'target extended | $(OOCD) $(OOCDFLAGS) -c "gdb_port pipe"' \
-iex 'monitor reset halt' -ex 'load' -ex 'break wkos_start' -ex 'c' $<
config:
@echo "write to .config"
$(Q)cat arch/$(ARCH)/config/$(CONFIG) > .config
clean:
$(Q)-$(RM) $(out-dir)
$(Q)-$(RM) .config
@echo "clean done"