赞
踩
$nm -n main_elf
段 | 描述 |
---|---|
b/B | .bss(b静态/B非静态)未初始化变量 |
d/D | .data(d静态/D非静态)已初始化变量 |
r/R | .rodata(r静态/R非静态)只读数据段 |
t/T | .text(t静态/T非静态)函数 |
A | 不可改变的绝对值 |
C | .o中未初始化非静态变量 |
N | 调试用的符号 |
U | 表示符号只有声明没有定义 |
剪除elf格式信息,这样才能在裸机状态下执行
最后一步是将目标文件交给链接器链接生成 可执行文件
将所用到的文件, 吧相应的代码放到相应的段里面,并给每个段安排一个起始地址;
ld -o main main.o
//连接文件app.lds为:
ENTRY(main)
SECTIONS
{
//“*”号指所有目标,可以指定.o目标文件,多个用空格隔开
.=0x30000;//“.”指的是当前位置
.text:{*(.text)}
.=0x40000;
.data:{*(.data)}
.bss:{*(.bss)}
}
为什么需要我们自己完成链接过程?
案例,打印 hello IoT
int main()
{
char *str = "\nhello IoT";
char *p = 0xc00a1020;
int i = 11;
while(i--)
{
*p = *str++;
}
return 0;
}
裸机程序完整编译过程:
arm-linux-gcc -c -o t.o t.c //只编译不连接
arm-linux-ld -o t t.o -e main -Ttext=0x47000000 //手动连接
arm-linux-objcopy -O binary -S t t.bin
使用超级终端:
设置串口默认下载地址:
setenv loadaddr 0x47000000
查看设置的环境变量:printenv
上传.bin文件:loadb
运行:go 0x47000000
加粗样式
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。