嵌入式链接脚本示例
来源:互联网 发布:date转string java 编辑:程序博客网 时间:2024/06/06 02:23
MEMORY
{
/* boot ram area, only used for boot.S, merge this section whit run_ram if normal code can run at this section */
boot_ram : ORIGIN = 0x01000000, LENGTH = 0x0100
/* run ram area, used for normal text, copy LMA to VMA if need boot section */
run_ram : ORIGIN = 0x02000000, LENGTH = 0x010000
/* reserve ram area, used for bss/heap/stack, bss need clear to 0 */
rsv_ram : ORIGIN = 0x04000000, LENTH = 0x01000
}
SECTIONS
{
.boot :
{
KEEP(*.(.text.Start_Entry))
*.o(.boot)
} > boot_ram
text_vma = ALIGN(4);
.text : AT(text_vma)
{
KEEP(*(.text.main))
*.o(.text*)
*.(.rodata*)
} > run_ram
data_vma = ALIGN(4);
.data ALIGN(4) : AT(data_vma)
{
*(.data*)
} > run_ram
bss_vma = ALIGN(4);
.bss SIZEOF(.data) + ADDR(.data) : AT(bss_vma)
{
bss_start_addr = ALIGN(0x08);
*(.bss*)
*(COMMON)
bss_end_addr = ALIGN(0x08);
} > rsv_ram
.heap (COPY):
{
__end__ = .;
end = __end__;
*(.heap*)
__HeapLimit = .;
} > rsv_ram
.stack :
{
stack_base_addr = ALIGN(0x08);
*(.stack)
stack_top = ALIGN(0x08);
} > rsv_ram
}
boot.S
. cpu armx
.arm
.global main
.section .boot,"ax",%progbits
.type Start_Entry, %function
Start_Entry:
xxx
@ copy to run_ram
ldr r0, =text_vma
ldr r1, =main
ldr r2, =data_vma
copy_to_rumram:
ldr r3, [r0], #4
str r3, [r1], #4
cmp r1, r2
blo copy_to_runram
ldr r0, =bss_start_addr
ldr r1, =bss_end_addr
mov r2, #0
init_bss_loop:
str r2, [r0, #4]!
cmp r1, r0
bne init_bss_loop
ldr r0, =main
bx r0
比较简单,不支持 C++,后续会继续修改完善。
参考:http://www.embeddedlinux.org.cn/html/xinshourumen/201203/04-1989.html
http://11383016.blog.51cto.com/11373016/1867197
- 嵌入式链接脚本示例
- SHELL 脚本链接数据库示例
- 嵌入式链接脚本(Link Script)介绍
- 【嵌入式开发】 嵌入式开发工具简介 (裸板调试示例 | 交叉工具链 | Makefile | 链接器脚本 | eclipse JLink 调试环境)
- 嵌入式Linux系统中的.lds链接脚本基础
- 嵌入式Linux系统中的.lds链接脚本基础
- 嵌入式Linux系统中的.lds链接脚本基础
- 嵌入式Linux系统中的.lds链接脚本基础
- 嵌入式Linux系统中的.lds链接脚本基础
- 嵌入式Linux系统中的.lds链接脚本基础
- 嵌入式学习-uboot-lesson1-链接器脚本基础知识
- 国嵌嵌入式学习笔记-链接器脚本语法格式
- Java自动化脚本示例1->linkText定位百度登录链接
- 嵌入式 链接
- 脚本示例
- 链接脚本
- 链接脚本
- 链接脚本
- 关于table的tBodies中的某一句
- Spring中AOP的两种代理方式(Java动态代理和CGLIB代理)
- R语言用RODBC连接oracle时报错“negative length vectors are not allowed”的解决方案记录
- 关系型 数据库
- 项目启动后开启定时任务方法-->InitializingBean和ServletContextListener比较
- 嵌入式链接脚本示例
- Linux操作系统安装memcached
- git学习1
- angular +ionic app跨域请求
- linux【ContOS】安装 mongodb
- 小心使用strcpy函数时越界
- 勾选了记住密码但下次登录时仍然需要输入密码,已解决
- hibernate
- JAVA学习心得