無法使用 -Og/-O0 選項編譯 Linux 核心以進行偵錯

無法使用 -Og/-O0 選項編譯 Linux 核心以進行偵錯

擁有運行嵌入式 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使用選項建構的尺寸-O239Mb。使用-O1給了我37Mb圖像,所以我希望我的 DDR3 RAM (128Mb) 有足夠的空間來容納透過-O0配置編譯的更大圖像。所以我想知道如何為部分提供更多空間?有人可以指出我可以做的地方嗎?對 Linux 核心的了解有限,因此無法找到用於此目的的任何連結器腳本。

相關內容