我开始学习为微控制器编写一些底层软件,并且我已经开始研究链接器脚本。
我真的不明白 ENTRY 命令在这种情况下的含义。由于大多数微控制器在预定地址开始执行,因此我们在链接描述文件中选择哪个入口点有什么区别?
我正在编写一个裸机 aarch64 程序(工具链 aarch64-unknown-elf-),我使用以下链接器脚本构建该程序:
SECTIONS {
.text : {
*(.text*)
}
.rodata ALIGN(CONSTANT(COMMONPAGESIZE)) : {
*(.rodata*)
}
.data ALIGN(CONSTANT(COMMONPAGESIZE)) : {
*(.data .data.*)
}
.bss (NOLOAD) : {
__bss_start = .;
*(.bss*)
*(COMMON)
__bss_end = .;
}
}
Run Code Online (Sandbox Code Playgroud)
使用 readelf 分析最终的可执行文件,我得到以下部分和段(即程序头):
There are 19 section headers, starting at offset 0xa4f58:
Section Headers:
[Nr] Name Type Address Off Size ES Flg Lk Inf Al
[ 0] NULL 0000000000000000 000000 000000 00 0 0 0
[ 1] .text PROGBITS 0000000000000000 010000 00f600 …Run Code Online (Sandbox Code Playgroud)