-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
175 lines (130 loc) · 4.8 KB
/
Makefile
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
# Copyright (c) 2017-2018 embed-dsp
# All Rights Reserved
# $Author: Gudmundur Bogason <gb@embed-dsp.com> $
# $Date: $
# $Revision: $
# ----------------------------------------
# Cross Compiler
# ----------------------------------------
# Cross Compile: Raspberry Pi tool chain (Linux): GCC 4.8.3, Default: 32-bit ARMv6 Cortex-A, hard-float, little-endian
#TOOL_CHAIN := /opt/raspberry/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin
#TOOL_TRIPLET := arm-linux-gnueabihf
#TOOL_PREFIX := $(TOOL_TRIPLET)-
# Cross Compile: Raspberry Pi tool chain (Linux): GCC 4.9.3, Default: 32-bit ARMv6 Cortex-A, hard-float, little-endian
TOOL_CHAIN := /opt/raspberry/tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin
TOOL_TRIPLET := arm-linux-gnueabihf
TOOL_PREFIX := $(TOOL_TRIPLET)-
# Cross Compile: Linaro tool chain (Linux): GCC 7.1.1, Default: 32-bit ARMv8 Cortex-A, hard-float, little-endian
#TOOL_CHAIN := /opt/gcc-arm/gcc-linaro-7.1.1-2017.08-x86_64_armv8l-linux-gnueabihf/bin
#TOOL_TRIPLET := armv8l-linux-gnueabihf
#TOOL_PREFIX := $(TOOL_TRIPLET)-
# Cross Compile: Linaro tool chain (Linux): GCC 7.2.1, Default: 32-bit ARMv8 Cortex-A, hard-float, little-endian
# TOOL_CHAIN := /opt/gcc-arm/gcc-linaro-7.2.1-2017.11-x86_64_armv8l-linux-gnueabihf/bin
# TOOL_TRIPLET := armv8l-linux-gnueabihf
# TOOL_PREFIX := $(TOOL_TRIPLET)-
CCPREFIX := $(TOOL_CHAIN)/$(TOOL_PREFIX)
# ----------------------------------------
# ...
# ----------------------------------------
ifeq ($(RPI),rpi)
# Raspberry Pi Zero
# Raspberry Pi Zero Wireless
# Raspberry Pi 1
# Compute Module
KCFLAGS := "-march=armv6zk -mtune=arm1176jzf-s"
KERNEL := kernel
DEFCONFIG := bcmrpi_defconfig
else ifeq ($(RPI),rpi2)
# Raspberry Pi 2 Model B
KCFLAGS := "-march=armv7-a -mtune=cortex-a7"
KERNEL := kernel7
DEFCONFIG := bcm2709_defconfig
else ifeq ($(RPI),rpi3)
# Raspberry Pi 3 Model B
# Compute Module 3
KCFLAGS := "-march=armv8-a -mtune=cortex-a53"
KERNEL := kernel7
DEFCONFIG := bcm2709_defconfig
else
$(error "Invallid value for RPI variable.")
endif
ifeq ($(J),)
J := 4
endif
# ...
BUILD_DIR := $(shell pwd)/build
# Directory for installing modules
# ROOT = $(BUILD_DIR)/$(KERNEL)_$(shell date +%Y%m%d)
ROOT := $(BUILD_DIR)/$(RPI)_kernel_$(shell date +%Y%m%d)
# Directory for installing kernel and device tree blobs
BOOT := $(ROOT)/boot
all:
@echo ""
@echo "# Optionaly clean old build artifacts."
@echo "sudo make clean RPI=..."
@echo ""
@echo "# Create a default configuration."
@echo "sudo make defconfig RPI=..."
@echo ""
@echo "# Build kernel, modules and device tree blobs."
@echo "sudo make build RPI=... [J=...]"
@echo ""
@echo "# Install kernel, modules and device tree blobs into build/ folder."
@echo "make install RPI=..."
@echo ""
# ...
.PHONY: help
help:
make -C linux ARCH=arm CROSS_COMPILE=$(CCPREFIX) help
# New config with default from ARCH supplied defconfig
.PHONY: defconfig
defconfig:
make -C linux ARCH=arm CROSS_COMPILE=$(CCPREFIX) $(DEFCONFIG)
# Update current config utilising a provided .config as base
.PHONY: oldconfig
oldconfig:
make -C linux ARCH=arm CROSS_COMPILE=$(CCPREFIX) oldconfig
# Update current config utilising a menu based program
.PHONY: menuconfig
menuconfig:
make -C linux ARCH=arm CROSS_COMPILE=$(CCPREFIX) menuconfig
# Compressed kernel image (arch/arm/boot/zImage)
.PHONY: zImage
zImage:
make -C linux ARCH=arm CROSS_COMPILE=$(CCPREFIX) KCFLAGS=$(KCFLAGS) -j$(J) zImage
# Build all modules
.PHONY: modules
modules:
make -C linux ARCH=arm CROSS_COMPILE=$(CCPREFIX) KCFLAGS=$(KCFLAGS) -j$(J) modules
# Build device tree blobs for enabled boards
.PHONY: dtbs
dtbs:
make -C linux ARCH=arm CROSS_COMPILE=$(CCPREFIX) KCFLAGS=$(KCFLAGS) -j$(J) dtbs
# Remove most generated files but keep the config and enough build support to build external modules
.PHONY: clean
clean:
make -C linux ARCH=arm CROSS_COMPILE=$(CCPREFIX) clean
# mrproper + remove editor backup and patch files
.PHONY: distclean
distclean:
make -C linux ARCH=arm CROSS_COMPILE=$(CCPREFIX) distclean
# Build zImage, modules and dtbs
.PHONY: build
build:
make -C linux ARCH=arm CROSS_COMPILE=$(CCPREFIX) KCFLAGS=$(KCFLAGS) -j$(J) zImage modules dtbs
# Install modules, kernel and device tree blobs
.PHONY: install
install: modules_install kernel_install
cp install.sh $(ROOT)
# Install all modules to INSTALL_MOD_PATH (default: /)
.PHONY: modules_install
modules_install:
make -C linux ARCH=arm CROSS_COMPILE=$(CCPREFIX) INSTALL_MOD_PATH=$(ROOT) modules_install
# Install kernel and device tree blobs
.PHONY: kernel_install
kernel_install:
-mkdir -p $(BOOT)/overlays
cp linux/arch/arm/boot/dts/*.dtb $(BOOT)/
cp linux/arch/arm/boot/dts/overlays/*.dtb* $(BOOT)/overlays/
cp linux/arch/arm/boot/dts/overlays/README $(BOOT)/overlays/
cp linux/arch/arm/boot/zImage $(BOOT)/$(KERNEL).img