当前位置: 首页 > 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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 阅信云CTO向永清:35岁不应该成为技术职业发展的瓶颈|OceanBase 《DB大咖说》
  • 比backtrader还简单的量化回测框架,bt的使用方式以及示例
  • SpringCache
  • 简明linux系统编程--共享内存消息队列信号量
  • Chainlit集成Langchain并使用通义千问实现和数据库交互的网页对话应用增强扩展(text2sql)
  • 8.sklearn-模型保存
  • VirtualBox7.1.0 安装 Ubuntu22.04.5 虚拟机
  • @JsonFormat 和 @DateTimeFormat 的区别
  • JavaScript substring() 方法
  • Redisson 分布式锁的使用详解
  • 将有序数组——>二叉搜索树
  • Leetcode 3290. Maximum Multiplication Score
  • Python 数学建模——高斯核密度估计
  • 【读书笔记-《30天自制操作系统》-22】Day23
  • vue实现二维码生成器应用
  • 【译】JS基础算法脚本:字符串结尾
  • Java应用性能调优
  • java中的hashCode
  • Laravel 实践之路: 数据库迁移与数据填充
  • Mithril.js 入门介绍
  • October CMS - 快速入门 9 Images And Galleries
  • SpingCloudBus整合RabbitMQ
  • 阿里云应用高可用服务公测发布
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 批量截取pdf文件
  • 前端自动化解决方案
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 突破自己的技术思维
  • 微服务核心架构梳理
  • 优秀架构师必须掌握的架构思维
  • 做一名精致的JavaScripter 01:JavaScript简介
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (C)一些题4
  • (C++)八皇后问题
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (poj1.2.1)1970(筛选法模拟)
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (七)Java对象在Hibernate持久化层的状态
  • (四)软件性能测试
  • (转)EXC_BREAKPOINT僵尸错误
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .NET/C# 的字符串暂存池
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • @Transactional 竟也能解决分布式事务?
  • @拔赤:Web前端开发十日谈