裸机开发(5)start.S imx6ul.lds Makefile文件(随着学习更新)

1. imx6ul.lds

链接脚本文件的作用是:用于描述不同文件如何链接在一起形成最终的可执行文件,其主要目的是描述输入文件中的段如何被映射到输出文件中,并且控制输出文件中的内存排布,比如编译生成的文件一般都包含text段,data段,rodata段,bss段等。我们在imx6ull中要设定将程序文件链接到DDR的0x87800000地址。
在使用链接脚本之前,使用arm-linux-gnueabihf-ld -Ttext 0X87800000 -o ledc.elf $^设置链接地址,再把编译后的文件链接为elf格式的文件。
使用lds链接脚本后,使用arm-linux-gnueabihf-ld -Timx6ul.lds -o ledc.elf $^,程序链接地址,代码段数据段等都在imx6ul.lds中设置好了。

imx6ul.lds 1.0

SECTIONS{
   
	. = 0X87800000;
	.text :
	{
   
		obj/start.o 
		*(.text)
	}
	.rodata ALIGN(4) : {
   *(.rodata*)}     
	.data ALIGN(4)   : {
    *(.data) }    
	__bss_start = .;    
	.bss ALIGN(4)  : {
    *(.bss)  *(COMMON) }    
	__bss_end = .;
}
  1. 第2行对特殊符号“.”进行赋值,“.”在链接脚本中叫做定位计数器,默认为 0。我们要求代码链接到0X87800000。
  2. 第3行的“.text”是段名,后面的冒号是语法要求,大括号里填上要链接到“.text”这个段里面的所有文件,start.o要放在起始位置,“* (.text)”中的“ * ”是通配符,表示剩余所有输入文件的.text段都放到“.text”中start的后面。
  3. 定义了一个“.bss”段并进行4字节对齐,“.bss”数据就是那些定义了但是没有被初始化的变量,“.data”是全局变量,“.rodata”是全局常量。
  4. “__bss_start”和“__bss_end”是符号,赋值为定位符“.”,这两个符号用来保存.bss段的起始地址和结束地址。前面说了.bss段是定义了但是没有被初始化的变量,我们需要手动对.bss段的变量清零,需要知道.bss段的起始和结束地址,这样直接对这段内存赋0即可完成清零。可以直接在汇编或者C文件里面使用这两个符号。

2.start.S

start.S 1.0

.global _start  		/* 全局标号 */
/*
 * 描述:	_start函数,程序从此函数开始执行,此函数主要功能是设置C
 *		 运行环境。
 */
_start:
	/* 进入SVC模式 */
	mrs r0, cpsr
	bic r0, r0, #0x1f 	/* 将r0寄存器中的低5位清零,也就是cpsr的M0~M4 	*/
	orr r0,
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值