拥有运行嵌入式 Linux (OpenWrt) 的定制硬件就像一个魅力。 CPU - 是 IMX6ULL (ArmV7),因此 Jlink 支持通过 JTAG 接口进行调试。启动 GDB 服务器并逐步调试 Linux 内核会显示大量optimized out
消息,因为内核是使用KBUILD_CFLAGS += -O2 -fno-reorder-blocks -fno-tree-ch $(EXTRA_OPTIMIZATION)
标志编译的。所以我尝试编译它,-O0
它为我提供了以下选项:
$ make -j64 V=s all
CHK include/config/kernel.release
CHK include/generated/uapi/linux/version.h
CC scripts/mod/empty.o
....
AR built-in.o
LD vmlinux.o
MODPOST vmlinux.o
WARNING: modpost: Found 4 section mismatch(es).
To see full details build your kernel with:
'make CONFIG_DEBUG_SECTION_MISMATCH=y'
arm-openwrt-linux-muslgnueabi-ld: arch/arm/kernel/setup.o: in function `setup_arch':
/opt/eclipse/imx6ull-openwrt/build_dir/target-arm_cortex-a7+neon-vfpv4_musl_eabi/linux-imx6ull_cortexa7/linux-4.14.199/arch/arm/kernel/setup.c:1134: undefined reference to `psci_smp_ops'
arm-openwrt-linux-muslgnueabi-ld: /opt/eclipse/imx6ull-openwrt/build_dir/target-arm_cortex-a7+neon-vfpv4_musl_eabi/linux-imx6ull_cortexa7/linux-4.14.199/arch/arm/kernel/setup.c:1134: undefined reference to `psci_smp_ops'
arm-openwrt-linux-muslgnueabi-ld: kernel/panic.o: in function `__xchg':
/opt/eclipse/imx6ull-openwrt/build_dir/target-arm_cortex-a7+neon-vfpv4_musl_eabi/linux-imx6ull_cortexa7/linux-4.14.199/./arch/arm/include/asm/cmpxchg.h:110: undefined reference to `__bad_xchg'
arm-openwrt-linux-muslgnueabi-ld: kernel/exit.o: in function `__xchg':
检查了WARNING: modpost: Found x section mismatch(es).
这里。似乎生成的二进制文件比通过某些设置配置的空间占用更多的空间。vmlinux
使用选项构建的尺寸-O2
为39Mb
。使用-O1
给了我37Mb
图像,所以我希望我的 DDR3 RAM (128Mb) 有足够的空间来容纳通过-O0
配置编译的更大图像。所以我想知道如何为部分提供更多空间?有人可以指出我可以做的地方吗?对 Linux 内核的了解有限,因此无法找到用于此目的的任何链接器脚本。