#包含 Rules.make 文件,如果没有包含 - 表示不会报警,继续运行
-include Rules.make
#MAKE_JOBS 在下面和 make -j 搭配使用,表示使用MAKE_JOBS个CPU进行编译,这个数值的设定与电脑性能有关,在Rules.make文件也有定义,如果没有包含Rules.make文件,这里为1核心,
#包含了Rules.make文件,在该文件中定义了多核数量为4,下文使用4代替MAKE_JOBS.
MAKE_JOBS ?= 1
#下面可以分成三组进行分析,make all,make clean,make install
all: linux arm-benchmarks am-sysinfo oprofile-example cryptodev linux-dtbs-jacinto u-boot-spl-j7200
clean: linux_clean arm-benchmarks_clean am-sysinfo_clean oprofile-example_clean cryptodev_clean linux-dtbs-jacinto_clean u-boot-spl-j7200_clean
install: linux_install arm-benchmarks_install am-sysinfo_install oprofile-example_install cryptodev_install linux-dtbs-jacinto_install u-boot-spl-j7200_install
#Kernel build targets
linux: linux-dtbs
#@表示在终端中不打印后面的信息,如果调试makefile,可以去掉@,查看makefile运行到哪一步出问题
@echo =================================
@echo Building the Linux Kernel
@echo =================================
#这里使用dir/代指
(
L
I
N
U
X
K
E
R
N
E
L
I
N
S
T
A
L
L
D
I
R
)
所代表的路径
,
此路径在
R
u
l
e
s
.
m
a
k
e
定义为
"
(LINUXKERNEL_INSTALL_DIR)所代表的路径,此路径在Rules.make定义为"
(LINUXKERNELINSTALLDIR)所代表的路径,此路径在Rules.make定义为"(TI_SDK_PATH)/board-support/linux-5.10.100+gitAUTOINC+7a7a3af903-g7a7a3af903"
#make -c dir/ 表示跳转到dir目录下执行dir/makefile, 同时向dir/makefile传ARCH(板子的芯片架构) 和 CROSS_COMPILE(交叉编译工具链所在的路径)的参数
#make -c 运行完后,还会返回到之前的路径下
$(MAKE) -C
(
L
I
N
U
X
K
E
R
N
E
L
I
N
S
T
A
L
L
D
I
R
)
A
R
C
H
=
a
r
m
64
C
R
O
S
S
C
O
M
P
I
L
E
=
(LINUXKERNEL_INSTALL_DIR) ARCH=arm64 CROSS_COMPILE=
(LINUXKERNELINSTALLDIR)ARCH=arm64CROSSCOMPILE=(CROSS_COMPILE) $(DEFCONFIG)
#make -j4 -c dir/ 使用4核心编译dir/路径下的makefile,同时传入3个参数架构,交叉编译工具链,image
$(MAKE) -j $(MAKE_JOBS) -C
(
L
I
N
U
X
K
E
R
N
E
L
I
N
S
T
A
L
L
D
I
R
)
A
R
C
H
=
a
r
m
64
C
R
O
S
S
C
O
M
P
I
L
E
=
(LINUXKERNEL_INSTALL_DIR) ARCH=arm64 CROSS_COMPILE=
(LINUXKERNELINSTALLDIR)ARCH=arm64CROSSCOMPILE=(CROSS_COMPILE) Image
#make -j4 -c dir/ 使用4核心编译dir/路径下的makefile,同时传入3个参数架构,交叉编译工具链,modules
$(MAKE) -j $(MAKE_JOBS) -C
(
L
I
N
U
X
K
E
R
N
E
L
I
N
S
T
A
L
L
D
I
R
)
A
R
C
H
=
a
r
m
64
C
R
O
S
S
C
O
M
P
I
L
E
=
(LINUXKERNEL_INSTALL_DIR) ARCH=arm64 CROSS_COMPILE=
(LINUXKERNELINSTALLDIR)ARCH=arm64CROSSCOMPILE=(CROSS_COMPILE) modules
linux_install: linux-dtbs_install
@echo ===================================
@echo Installing the Linux Kernel
@echo ===================================
#if判断[]内条件是否成立, -d 判断路径是否为存在,存在为1,DESTDIR在Rules.make有定义,所以存在为1,同时 ! 表示取反, 即if[0],不执行选择程序.
@if [ ! -d $(DESTDIR) ] ; then
echo “The extracted target filesystem directory doesn’t exist.”;
echo “Please run setup.sh in the SDK’s root directory and then try again.”;
exit 1;
fi
#install -d 确认是否有后面的路径,没有自动新建一个
install -d KaTeX parse error: Expected 'EOF', got '#' at position 16: (DESTDIR)/boot #̲install a/ b/ 将…(DESTDIR)/boot 路径下
install $(LINUXKERNEL_INSTALL_DIR)/arch/arm64/boot/Image $(DESTDIR)/boot
install $(LINUXKERNEL_INSTALL_DIR)/vmlinux $(DESTDIR)/boot
install $(LINUXKERNEL_INSTALL_DIR)/System.map KaTeX parse error: Expected 'EOF', got '#' at position 16: (DESTDIR)/boot #̲跳转执行(LINUXKERNEL_INSTALL_DIR)路径下的makefile,并给它传入后面的参数,ARCH,CROSS_COMPILE,INSTALL_MOD_PATH,INSTALL_MOD_STRIP,modules_install
$(MAKE) -C
(
L
I
N
U
X
K
E
R
N
E
L
I
N
S
T
A
L
L
D
I
R
)
A
R
C
H
=
a
r
m
64
C
R
O
S
S
C
O
M
P
I
L
E
=
(LINUXKERNEL_INSTALL_DIR) ARCH=arm64 CROSS_COMPILE=
(LINUXKERNELINSTALLDIR)ARCH=arm64CROSSCOMPILE=(CROSS_COMPILE) INSTALL_MOD_PATH=
(
D
E
S
T
D
I
R
)
I
N
S
T
A
L
L
M
O
D
S
T
R
I
P
=
(DESTDIR) INSTALL_MOD_STRIP=
(DESTDIR)INSTALLMODSTRIP=(INSTALL_MOD_STRIP) modules_install
linux_clean:
@echo =================================
@echo Cleaning the Linux Kernel
@echo =================================
#跳转执行$(LINUXKERNEL_INSTALL_DIR)路径下的makefile,并给它传入后面的参数,ARCH,CROSS_COMPILE,mrproper
$(MAKE) -C
(
L
I
N
U
X
K
E
R
N
E
L
I
N
S
T
A
L
L
D
I
R
)
A
R
C
H
=
a
r
m
64
C
R
O
S
S
C
O
M
P
I
L
E
=
(LINUXKERNEL_INSTALL_DIR) ARCH=arm64 CROSS_COMPILE=
(LINUXKERNELINSTALLDIR)ARCH=arm64CROSSCOMPILE=(CROSS_COMPILE) mrproper
#mrproper 在Linux内核下是这样定义的:
#@echo ‘Cleaning targets:’
#@echo ’ clean - 删除大多数生成的文件,但保留配置和足够的构建支持来构建外部模块’
#@echo ’ mrproper - 删除所有生成的文件+配置+各种备份文件’
#@echo ’ distclean - 删除编辑器备份和补丁文件’
#arm-benchmarks build targets
arm-benchmarks:
@echo =============================
@echo Building ARM Benchmarks
@echo =============================
#ARM Benchmarks ARM平台的性能测试工具 ,现在的路径是KaTeX parse error: Expected 'EOF', got '#' at position 58: …pplications文件夹 #̲''括起来表示shell命令,…(SDK_PATH_TARGET)进行编译,
(
S
D
K
P
A
T
H
T
A
R
G
E
T
)
路径在
R
u
l
e
s
.
m
a
k
e
定义为
"
(SDK_PATH_TARGET)路径在Rules.make定义为"
(SDKPATHTARGET)路径在Rules.make定义为"(TI_SDK_PATH)/linux-devkit/sysroots/aarch64-linux/"
@cd example-applications; cd find . -maxdepth 1 -type d -name "*arm-benchmarks*"
; make CC=“$(CC)”
arm-benchmarks_clean:
@echo =============================
@echo Cleaning ARM Benchmarks
@echo =============================
#进入查找到的目录下,清理
@cd example-applications; cd find . -maxdepth 1 -type d -name "*arm-benchmarks*"
; make clean
arm-benchmarks_install:
@echo ==============================================
@echo Installing ARM Benchmarks - Release version
@echo ==============================================
#进入查找到的目录下,安装
@cd example-applications; cd find . -maxdepth 1 -type d -name "*arm-benchmarks*"
; make install
arm-benchmarks_install_debug:
@echo ============================================
@echo Installing ARM Benchmarks - Debug Version
@echo ============================================
#进入查找到的目录下,debug
@cd example-applications; cd find . -maxdepth 1 -type d -name "*arm-benchmarks*"
; make install_debug
#am-sysinfo build targets
am-sysinfo:
@echo =============================
@echo Building AM Sysinfo
@echo =============================
@cd example-applications; cd find . -maxdepth 1 -type d -name "*am-sysinfo*"
; make CC=“$(CC)”
am-sysinfo_clean:
@echo =============================
@echo Cleaning AM Sysinfo
@echo =============================
@cd example-applications; cd find . -maxdepth 1 -type d -name "*am-sysinfo*"
; make clean
am-sysinfo_install:
@echo ===============================================
@echo Installing AM Sysinfo - Release version
@echo ===============================================
@cd example-applications; cd find . -maxdepth 1 -type d -name "*am-sysinfo*"
; make install
am-sysinfo_install_debug:
@echo =============================================
@echo Installing AM Sysinfo - Debug version
@echo =============================================
@cd example-applications; cd find . -maxdepth 1 -type d -name "*am-sysinfo*"
; make install_debug
#oprofile-example build targets
#OProfile是Linux内核支持的一种性能分析机制,是用于 Linux 评测和性能监控的工具。
oprofile-example:
@echo =============================
@echo Building OProfile Example
@echo =============================
@cd example-applications; cd find . -maxdepth 1 -type d -name "*oprofile-example*"
; make CC=“$(CC)”
oprofile-example_clean:
@echo =============================
@echo Cleaning OProfile Example
@echo =============================
@cd example-applications; cd find . -maxdepth 1 -type d -name "*oprofile-example*"
; make clean
oprofile-example_install:
@echo =============================================
@echo Installing OProfile Example - Debug version
@echo =============================================
@cd example-applications; cd find . -maxdepth 1 -type d -name "*oprofile-example*"
; make install
#cryptodev是加密框架
cryptodev: linux
@echo ================================
@echo Building cryptodev-linux
@echo ================================
@cd board-support/extra-drivers;
cd find . -maxdepth 1 -type d -name "cryptodev*"
;
make ARCH=arm64 KERNEL_DIR=$(LINUXKERNEL_INSTALL_DIR)
cryptodev_clean:
@echo ================================
@echo Cleaning cryptodev-linux
@echo ================================
@cd board-support/extra-drivers;
cd find . -maxdepth 1 -type d -name "cryptodev*"
;
make ARCH=arm64 KERNEL_DIR=$(LINUXKERNEL_INSTALL_DIR) clean
cryptodev_install:
@echo ================================
@echo Installing cryptodev-linux
@echo ================================
@if [ ! -d KaTeX parse error: Expected 'EOF', got '#' at position 187: … exit 1; \ fi #̲makefile 运行正常应该…(LINUXKERNEL_INSTALL_DIR) INSTALL_MOD_PATH=
(
D
E
S
T
D
I
R
)
P
R
E
F
I
X
=
(DESTDIR) PREFIX=
(DESTDIR)PREFIX=(SDK_PATH_TARGET) INSTALL_MOD_STRIP=$(INSTALL_MOD_STRIP) install
#Kernel DTB build targets
linux-dtbs-jacinto: linux-dtbs
linux-dtbs-jacinto_clean: linux-dtbs_clean
linux-dtbs-jacinto_install: linux-dtbs_install
linux-dtbs:
@echo =====================================
@echo Building the Linux Kernel DTBs
@echo =====================================
$(MAKE) -C
(
L
I
N
U
X
K
E
R
N
E
L
I
N
S
T
A
L
L
D
I
R
)
A
R
C
H
=
a
r
m
64
C
R
O
S
S
C
O
M
P
I
L
E
=
(LINUXKERNEL_INSTALL_DIR) ARCH=arm64 CROSS_COMPILE=
(LINUXKERNELINSTALLDIR)ARCH=arm64CROSSCOMPILE=(CROSS_COMPILE) $(DEFCONFIG)
@for DTB in ti/k3-j7200-common-proc-board.dtb ; do
$(MAKE) -j $(MAKE_JOBS) -C
(
L
I
N
U
X
K
E
R
N
E
L
I
N
S
T
A
L
L
D
I
R
)
D
T
C
F
L
A
G
S
=
−
@
A
R
C
H
=
a
r
m
64
C
R
O
S
S
C
O
M
P
I
L
E
=
(LINUXKERNEL_INSTALL_DIR) DTC_FLAGS=-@ ARCH=arm64 CROSS_COMPILE=
(LINUXKERNELINSTALLDIR)DTCFLAGS=−@ARCH=arm64CROSSCOMPILE=(CROSS_COMPILE) $$DTB;
done
#makefile 是弱类型的语言, 在这里调用shell的循环逻辑
#时刻要清楚知道现在处的目录,MAKE -C 执行完后,会退回到之前的路径,ti/k3-j7200-common-proc-board.dtb是相对路径,但是在当前路径下并没有此文件夹,因此for的次数为0;
linux-dtbs_install:
@echo =======================================
@echo Installing the Linux Kernel DTBs
@echo =======================================
@if [ ! -d $(DESTDIR) ] ; then
echo “The extracted target filesystem directory doesn’t exist.”;
echo “Please run setup.sh in the SDK’s root directory and then try again.”;
exit 1;
fi
install -d $(DESTDIR)/boot
@for DTB in ti/k3-j7200-common-proc-board.dtb ; do
install -m 0644
(
L
I
N
U
X
K
E
R
N
E
L
I
N
S
T
A
L
L
D
I
R
)
/
a
r
c
h
/
a
r
m
64
/
b
o
o
t
/
d
t
s
/
(LINUXKERNEL_INSTALL_DIR)/arch/arm64/boot/dts/
(LINUXKERNELINSTALLDIR)/arch/arm64/boot/dts/$DTB $(DESTDIR)/boot/;
done
#Linux文件属性是这样的结构 - — — —
#文件类型 主用户权限 组用户权限 其他用户权限
#权限为rwx,表示可读可写可执行,对应为111,二进制111转十进制是7 所以 chmod 777表示给这个文件所有用户,可读可写可执行的权限
#0644可以看成 0 6 4 4
#对应二进制为 0 rw- r-- r–
#在Linux下,使用ls -l 可以看到对应文件为 -rw-r–r–
#主用户可读可写,其余用户只读
linux-dtbs_clean:
@echo =======================================
@echo Cleaning the Linux Kernel DTBs
@echo =======================================
@echo “Nothing to do”
#u-boot build targets
u-boot-spl-j7200: u-boot
u-boot-spl-j7200_clean: u-boot_clean
u-boot-spl-j7200_install: u-boot_install
UBOOT_A72_BUILD_DIR= ( T I S D K P A T H ) / b o a r d − s u p p o r t / u − b o o t b u i l d / a 72 U B O O T R 5 B U I L D D I R = (TI_SDK_PATH)/board-support/u-boot_build/a72 UBOOT_R5_BUILD_DIR= (TISDKPATH)/board−support/u−bootbuild/a72UBOOTR5BUILDDIR=(TI_SDK_PATH)/board-support/u-boot_build/r5
UBOOT_ATF=
(
T
I
S
D
K
P
A
T
H
)
/
b
o
a
r
d
−
s
u
p
p
o
r
t
/
p
r
e
b
u
i
l
t
−
i
m
a
g
e
s
/
b
l
31.
b
i
n
U
B
O
O
T
T
E
E
=
(TI_SDK_PATH)/board-support/prebuilt-images/bl31.bin UBOOT_TEE=
(TISDKPATH)/board−support/prebuilt−images/bl31.binUBOOTTEE=(TI_SDK_PATH)/board-support/prebuilt-images/bl32.bin
UBOOT_SYSFW=
(
T
I
S
D
K
P
A
T
H
)
/
b
o
a
r
d
−
s
u
p
p
o
r
t
/
p
r
e
b
u
i
l
t
−
i
m
a
g
e
s
/
s
y
s
f
w
.
b
i
n
U
B
O
O
T
D
M
=
(TI_SDK_PATH)/board-support/prebuilt-images/sysfw.bin UBOOT_DM=
(TISDKPATH)/board−support/prebuilt−images/sysfw.binUBOOTDM=(TI_SDK_PATH)/board-support/prebuilt-images/ipc_echo_testb_mcu1_0_release_strip.xer5f
UBOOT_SOC=j7200
u-boot: u-boot-a72 u-boot-r5
u-boot_clean: u-boot-a72_clean u-boot-r5_clean
u-boot-a72:
@echo ===================================
@echo Building U-boot for A72
@echo ===================================
#跳转到$(TI_SDK_PATH)/board-support/路径下,编译所有名为u-boot-的文件,输入参数为交叉工具链,UBOOT_MACHINE(在Rules.make文件中定义)以及出路径为UBOOT_A72_BUILD_DIR
$(MAKE) -j $(MAKE_JOBS) -C
(
T
I
S
D
K
P
A
T
H
)
/
b
o
a
r
d
−
s
u
p
p
o
r
t
/
u
−
b
o
o
t
−
∗
C
R
O
S
S
C
O
M
P
I
L
E
=
(TI_SDK_PATH)/board-support/u-boot-* CROSS_COMPILE=
(TISDKPATH)/board−support/u−boot−∗CROSSCOMPILE=(CROSS_COMPILE)
(
U
B
O
O
T
M
A
C
H
I
N
E
)
O
=
(UBOOT_MACHINE) O=
(UBOOTMACHINE)O=(UBOOT_A72_BUILD_DIR)
$(MAKE) -j $(MAKE_JOBS) -C
(
T
I
S
D
K
P
A
T
H
)
/
b
o
a
r
d
−
s
u
p
p
o
r
t
/
u
−
b
o
o
t
−
∗
C
R
O
S
S
C
O
M
P
I
L
E
=
(TI_SDK_PATH)/board-support/u-boot-* CROSS_COMPILE=
(TISDKPATH)/board−support/u−boot−∗CROSSCOMPILE=(CROSS_COMPILE)
CONFIG_MKIMAGE_DTC_PATH=
(
U
B
O
O
T
A
7
2
B
U
I
L
D
D
I
R
)
/
s
c
r
i
p
t
s
/
d
t
c
/
d
t
c
A
T
F
=
(UBOOT_A72_BUILD_DIR)/scripts/dtc/dtc \ ATF=
(UBOOTA72BUILDDIR)/scripts/dtc/dtc ATF=(UBOOT_ATF) TEE=
(
U
B
O
O
T
T
E
E
)
D
M
=
(UBOOT_TEE) DM=
(UBOOTTEE)DM=(UBOOT_DM)
O=$(UBOOT_A72_BUILD_DIR)
u-boot-a72_clean:
@echo ===================================
@echo Cleaining U-boot for A72
@echo ===================================
$(MAKE) -C
(
T
I
S
D
K
P
A
T
H
)
/
b
o
a
r
d
−
s
u
p
p
o
r
t
/
u
−
b
o
o
t
−
∗
C
R
O
S
S
C
O
M
P
I
L
E
=
(TI_SDK_PATH)/board-support/u-boot-* CROSS_COMPILE=
(TISDKPATH)/board−support/u−boot−∗CROSSCOMPILE=(CROSS_COMPILE)
O=$(UBOOT_A72_BUILD_DIR) distclean
@rm -rf $(UBOOT_A72_BUILD_DIR)
u-boot-r5:
@echo ===================================
@echo Building U-boot for R5
@echo ===================================
$(MAKE) -j $(MAKE_JOBS) -C
(
T
I
S
D
K
P
A
T
H
)
/
b
o
a
r
d
−
s
u
p
p
o
r
t
/
u
−
b
o
o
t
−
∗
C
R
O
S
S
C
O
M
P
I
L
E
=
(TI_SDK_PATH)/board-support/u-boot-* CROSS_COMPILE=
(TISDKPATH)/board−support/u−boot−∗CROSSCOMPILE=(CROSS_COMPILE_ARMV7)
(
U
B
O
O
T
M
A
C
H
I
N
E
R
5
)
O
=
(UBOOT_MACHINE_R5) O=
(UBOOTMACHINER5)O=(UBOOT_R5_BUILD_DIR)
$(MAKE) -j $(MAKE_JOBS) -C
(
T
I
S
D
K
P
A
T
H
)
/
b
o
a
r
d
−
s
u
p
p
o
r
t
/
u
−
b
o
o
t
−
∗
C
R
O
S
S
C
O
M
P
I
L
E
=
(TI_SDK_PATH)/board-support/u-boot-* CROSS_COMPILE=
(TISDKPATH)/board−support/u−boot−∗CROSSCOMPILE=(CROSS_COMPILE_ARMV7)
O=$(UBOOT_R5_BUILD_DIR)
$(MAKE) -j $(MAKE_JOBS) -C
(
T
I
S
D
K
P
A
T
H
)
/
b
o
a
r
d
−
s
u
p
p
o
r
t
/
k
3
−
i
m
a
g
e
−
g
e
n
−
∗
C
R
O
S
S
C
O
M
P
I
L
E
=
(TI_SDK_PATH)/board-support/k3-image-gen-* CROSS_COMPILE=
(TISDKPATH)/board−support/k3−image−gen−∗CROSSCOMPILE=(CROSS_COMPILE_ARMV7)
SOC=
(
U
B
O
O
T
S
O
C
)
S
B
L
=
(UBOOT_SOC) SBL=
(UBOOTSOC)SBL=(UBOOT_R5_BUILD_DIR)/spl/u-boot-spl.bin
u-boot-r5_clean:
@echo ===================================
@echo Cleaining U-boot for R5
@echo ===================================
$(MAKE) -C
(
T
I
S
D
K
P
A
T
H
)
/
b
o
a
r
d
−
s
u
p
p
o
r
t
/
u
−
b
o
o
t
−
∗
C
R
O
S
S
C
O
M
P
I
L
E
=
(TI_SDK_PATH)/board-support/u-boot-* CROSS_COMPILE=
(TISDKPATH)/board−support/u−boot−∗CROSSCOMPILE=(CROSS_COMPILE_ARMV7)
O=$(UBOOT_R5_BUILD_DIR) distclean
$(MAKE) -j $(MAKE_JOBS) -C
(
T
I
S
D
K
P
A
T
H
)
/
b
o
a
r
d
−
s
u
p
p
o
r
t
/
k
3
−
i
m
a
g
e
−
g
e
n
−
∗
c
l
e
a
n
S
O
C
=
(TI_SDK_PATH)/board-support/k3-image-gen-* clean SOC=
(TISDKPATH)/board−support/k3−image−gen−∗cleanSOC=(UBOOT_SOC)
@rm -rf $(UBOOT_R5_BUILD_DIR)
u-boot_install:
@echo ===================================
@echo Installing U-boot
@echo ===================================
@echo “Nothing to do”
#uboot编译之后,直接拷贝到分区好的SD卡中,按照SBL,SPL的要求存放,即可