当前位置: 首页 > news >正文

正点原子阿尔法ARM开发板-IMX6ULL(七)——BSP工程管理实验(补:链接文件和.s文件)

文章目录

  • 一、关于链接脚本文件
  • 二、start.s
  • 三、工程管理
    • 3.1 bsp
    • 3.2 im6ull
    • 3.3 obj
    • 3.4 project
  • 四、makefile

一、关于链接脚本文件

imx6ul.lds

SECTIONS{. = 0X87800000;.text :{start.o main.o *(.text)}.rodata ALIGN(4) : {*(.rodata*)}     .data ALIGN(4)   : { *(.data) }    __bss_start = .;    .bss ALIGN(4)  : { *(.bss)  *(COMMON) }    __bss_end = .;}

SECTIONS{:开始定义段的布局。

. = 0X87800000;:设置当前地址为0x87800000,这通常是程序的起始地址。

.text ::定义一个名为.text的段,用于存放程序的代码。

{:开始列出.text段中包含的文件。

start.o:包含名为start.o的对象文件,这通常是程序的启动代码。

main.o:包含名为main.o的对象文件,这通常是程序的主函数。

*(.text):包含所有其他.text段的对象文件。

}:结束.text段的定义。

.rodata ALIGN(4) : {(.rodata)} :定义一个名为.rodata的段,用于存放只读数据,并且要求地址按照4字节对齐。这里.rodata*模式匹配所有以.rodata开头的段。

.data ALIGN(4) : { *(.data) } :定义一个名为.data的段,用于存放初始化的数据,并且要求地址按照4字节对齐。

__bss_start = .;:定义一个符号__bss_start,它的值是当前地址,通常用于标记未初始化数据段(BSS段)的开始。

.bss ALIGN(4) : { (.bss) (COMMON) } :定义一个名为.bss的段,用于存放未初始化的数据,并且要求地址按照4字节对齐。(.bss)匹配所有.bss段的对象文件,(COMMON)匹配所有公共符号。

__bss_end = .;:定义一个符号__bss_end,它的值是当前地址,通常用于标记BSS段的结束。

}:结束SECTIONS的定义。

SECTIONS{ . = 0X10000000; .text : {*(.text)} . = 0X30000000; .data ALIGN(4) : { *(.data) } .bss ALIGN(4) : { *(.bss) } }

“*”是通配符,表示所有输入文件的 .text段都放到“ “.text”中。
data和bss也是这样

二、start.s

中断向量表、初始化C环境

.global _start  		/* 全局标号 *//** 描述:	_start函数,程序从此函数开始执行,此函数主要功能是设置C*		 运行环境。*/_start:/* 进入SVC模式 */mrs r0, cpsrbic r0, r0, #0x1f 	/* 将r0寄存器中的低5位清零,也就是cpsr的M0~M4 	*/orr r0, r0, #0x13 	/* r0或上0x13,表示使用SVC模式					*/msr cpsr, r0		/* 将r0 的数据写入到cpsr_c中 					*/ldr sp,=0X80200000	/* 设置栈指针			 */b main				/* 跳转到main函数 		 */

三、工程管理

3.1 bsp

存放驱动文件
比如时钟驱动、LED驱动、延时驱动

3.2 im6ull

跟芯片相关的文件
cc.h、 fsl_common.h、 fsl_iomuxc.h和 MCIMX6Y2.h

3.3 obj

存放.o文件

3.4 project

存在start.S、main.c等应用文件

四、makefile

CROSS_COMPILE 	?= arm-linux-gnueabihf-TARGET		  	?= bspCC 				:= $(CROSS_COMPILE)gccLD				:= $(CROSS_COMPILE)ldOBJCOPY 		:= $(CROSS_COMPILE)objcopyOBJDUMP 		:= $(CROSS_COMPILE)objdumpINCDIRS 		:= imx6ul \bsp/clk \bsp/led \bsp/delay SRCDIRS			:= project \bsp/clk \bsp/led \bsp/delay INCLUDE			:= $(patsubst %, -I %, $(INCDIRS))SFILES			:= $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.S))CFILES			:= $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.c))SFILENDIR		:= $(notdir  $(SFILES))CFILENDIR		:= $(notdir  $(CFILES))SOBJS			:= $(patsubst %, obj/%, $(SFILENDIR:.S=.o))COBJS			:= $(patsubst %, obj/%, $(CFILENDIR:.c=.o))OBJS			:= $(SOBJS) $(COBJS)VPATH			:= $(SRCDIRS).PHONY: clean$(TARGET).bin : $(OBJS)$(LD) -Timx6ul.lds -o $(TARGET).elf $^$(OBJCOPY) -O binary -S $(TARGET).elf $@$(OBJDUMP) -D -m arm $(TARGET).elf > $(TARGET).dis$(SOBJS) : obj/%.o : %.S$(CC) -Wall -nostdlib -c -O2  $(INCLUDE) -o $@ $<$(COBJS) : obj/%.o : %.c$(CC) -Wall -nostdlib -c -O2  $(INCLUDE) -o $@ $<clean:rm -rf $(TARGET).elf $(TARGET).dis $(TARGET).bin $(COBJS) $(SOBJS)

要改的话,主要是更改INCDIRS、SRCDIRS


http://www.mrgr.cn/news/30470.html

相关文章:

  • EN 1335-2办公家具.办公椅.第2部分:安全要求
  • 苍穹外卖 数据可视化
  • PHPCUSTOM用久了占用变大,请关闭日志功能即可
  • 瞧瞧别人家的异常处理,那叫一个优雅!
  • 在SpringBoot3中启用HTTP2
  • SQLI LABS | Less-39 GET-Stacked Query Injection-Intiger Based
  • [学习笔记]树链剖分(简易版) 及其LCA
  • ROS第五梯:ROS+VSCode+C++单步调试
  • shell指令及笔试题
  • 视觉语言大模型模型介绍-CLIP学习
  • HTB-Blue(永恒之蓝漏洞复现)
  • CTFshow——萌新隐写(未完待续)
  • 现在市场上有哪些大模型?什么样的大模型适合国内企业?
  • 机器学习之非监督学习(四)K-means 聚类算法
  • Gradio 自定义组件
  • 算法-查找算法(顺序查找二分查找)
  • YOLOv8的GPU环境搭建方法
  • Java 之网络编程
  • c++ static(详解)
  • C++中的哑元和内联函数
  • github的使用
  • Redis---卸载Redis
  • PyTorch经典模型
  • java序列化对象后读取数据错误的问题
  • 初学者笔记本电脑玩转大模型系列一:利用ollama跑大模型
  • Ceph官方文档_01_Ceph简介