uboot等同于其他所有的bootloader程序,从根本上讲是一个稍复杂的裸机程序,是最底层的东西,要分析裸机程序我们要从它的连接文件开始。连 接文件(.lds文件)定义了程序编译之后整个连接过程歼神扒,这样氏昌我们就可以找到这个程序的第一句汇编代码,进而来下一步分析。uboot的链接文件代码在 android\瞎衫bootable\bootloader\uboot-imx\u-boot.lds
[cpp] view plaincopy
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") //文件输出格式
OUTPUT_ARCH(arm)
ENTRY(_start) //首地址标示符
SECTIONS
{
. = 0x00000000 //其实地址0
. = ALIGN(4) //4字节对齐
.text ://代码段
{
board/freescale/mx6q_sabresd/flash_header.o (.text.flasheader) //第一个文件是board/freescale/mx6q_sabresd/flash_header.o
cpu/arm_cortexa8/start.o //第二个cpu/arm_cortexa8/start.o
board/freescale/mx6q_sabresd/libmx6q_sabresd.a (.text)
lib_arm/libarm.a (.text)
net/libnet.a (.text)
drivers/mtd/libmtd.a (.text)
drivers/mmc/libmmc.a (.text)
. = DEFINED(env_offset) ? env_offset : .
common/env_embedded.o(.text)
*(.text) //剩余的所有代码
}
. = ALIGN(4)
.rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) } //readonly data 段
. = ALIGN(4)
.data : { *(.data) } //所有的readonly data
. = ALIGN(4)
.got : { *(.got) }
. = .
__u_boot_cmd_start = . //u_boot_cmd段,里面是所有uboot命令的一个列表
.u_boot_cmd : { *(.u_boot_cmd) }
__u_boot_cmd_end = .
. = ALIGN(4)
_end_of_copy = .
__bss_start = . //bss段 就是内存数据段
.bss : { *(.bss) }
_end = .
}
从上面的代码可以看出我们编译生成的二进制应用程序组成是:代码段->rodata段->uboot命令列表->bss段。我们启动这个应用程序时候是从,0地址开始的,因此我们来看
board/freescale/mx6q_sabresd/flash_header.s这个文件。
这个文件中除了分配内存和宏定义的伪汇编指令以外,真正执行的命令有一条
[cpp] view plaincopy
.section ".text.flasheader", "x"
b _start
.orgCONFIG_FLASH_HEADER_OFFSET
也就是说,这个文件一执行就直接跳到_start 位置处。_start 在android\bootable\bootloader\uboot-imx\cpu\arm_cortexa8\ start.S中,因此我们来看这个文件代码
[cpp] view plaincopy
.globl _start
_start: b reset
这里直接跳转的reset中接下来看
[csharp] view plaincopy
reset:
/*
* set the cpu to SVC32 modecpu设置成32位管理模式
*/
mrs r0, cpsr
bic r0, r0, #0x1f
orr r0, r0, #0xd3
msr cpsr,r0
#if (CONFIG_OMAP34XX) //因为我们的cpu不是ompa的 所以这段不会编译
.............................
#endif
/* the mask ROM code should have PLL and others stable */
#ifndef CONFIG_SKIP_LOWLEVEL_INIT
bl cpu_init_crit
#endif
这里接下来执行cpu_init_crit
[csharp] view plaincopy
/*************************************************************************
*
* CPU_init_critical registers
*
* setup important registers
* setup memory timing
*
*************************************************************************/
cpu_init_crit:
/*
* Invalidate L1 I/D
*/
mov r0, #0 @ set up for MCR
mcr p15, 0, r0, c8, c7, 0 @ invalidate TLBs
mcr p15, 0, r0, c7, c5, 0 @ invalidate icache
/*
* disable MMU stuff and caches //关闭mmu
*/
mrc p15, 0, r0, c1, c0, 0
bic r0, r0, #0x00002000 @ clear bits 13 (--V-)
bic r0, r0, #0x00000007 @ clear bits 2:0 (-CAM)
orr r0, r0, #0x00000002 @ set bit 1 (--A-) Align
orr r0, r0, #0x00000800 @ set bit 12 (Z---) BTB
mcr p15, 0, r0, c1, c0, 0
/*
* Jump to board specific initialization...
* The Mask ROM will have already initialized
* basic memory. Go here to bump up clock rate and handle
* wake up conditions.
*/
mov ip, lr @ persevere link reg across call
bl lowlevel_init @ go setup pll,mux,memory//执行lowlevel_init这个函数代码在
@\bootloader\uboot-imx\board\freescale\mx6q_sabresd\lowlevel_init.S中
@主要对时钟,外部ram,rom等进行了初始化代码不贴了。
mov lr, ip @ restore link
mov pc, lr @ back to my caller
初始化完成后,接下来执行
[csharp] view plaincopy
#ifndef CONFIG_SKIP_RELOCATE_UBOOT
relocate: @ relocate U-Boot to RAM将uboot重新定位到内存中
adr r0, _start @ r0 <- current position of code
ldr r1, _TEXT_BASE @ test if we run from flash or RAM
cmp r0, r1 @ don't reloc during debug测试当前代码是否已经在内存中
beq stack_setup @如果在的话就直接跳转到stack_setup
ldr r2, _armboot_start @如果不在的话,加载_armboot_start地址到r2中。_armboot_start是uboot执行的主体c函数。
ldr r3, _bss_start
sub r2, r3, r2 @ r2 <- size of armboot计算bss_start-armboot_start 保存到R2中,也就是uboot的总大小
add r2, r0, r2 @ r2 <- source end address 计算出uboot代码和rodata地址
copy_loop: @ copy 32 bytes at a time //开始拷贝
ldmia r0!, {r3 - r10} @ copy from source address [r0]
stmia r1!, {r3 - r10} @ copy to target address [r1]
cmp r0, r2 @ until source end addreee [r2]
ble copy_loop
#endif /* CONFIG_SKIP_RELOCATE_UBOOT */
rt1052 linux手册,i.MX RT1052核心板仅68元-飞凌嵌入式最新发布跨界开发平台 转载2021-05-14 03:40:13
Emmamkq0.~
码龄6年
关注
原标题:i.MX RT1052核心板仅68元-飞凌嵌入式最新发布跨界开发平台
2018年8月23日飞凌嵌入式最新发布基于NXP i.MX RT1052处理器的核心板FET1052-C与开发板套件OK1052-C,核心板最低售价68元!
NXP推出的全球首款跨界处理器i.MX RT系列,融合了低功耗应用处理器MCU和高性能微控制器MPU的优势,深受电子界的欢迎,被评为最强M芯,它巧妙的把应用在简单、实时性要求较高的产品与场合的MCU与具备更为全面的拓展性,可以进行更为复杂的运算的MPU的特点相结合,使其兼具应用处理器的高集成度、扩展性和高性能,以及微控制器的易用性、低功耗和实时性,实现了MCU和MPU的优势重合,开创了嵌入式领域处理器应用的新篇章!
4dccd7d49df98709c31b3ade2ec7caad.png
飞凌嵌入式与NXP进行技术与产品上的密切合作乎携,此次推出的OK1052-C开发板与FET1052-C核心板,具备i.MX RT1052处理器的跨界与功能优势,采用工业级要求进行设计,运行温宽-40℃~85℃,核心板体积小巧,尺寸31mm* 43mm,除支持裸机外,独家开发、优化移植了uCLinux系统,配合行业最低爆炸性售价,飞凌嵌入式致力于打造一款最强M核(核心板),最低成本的嵌入式核心板!
下面我们来详细了解下OK1052-C开发板/FET1052-C核心板:
★ 兼容性设计,一种设计,两种配置
5b9f88cf5bea420977f5dd73a4896b38.png
核心板配置1:
7df87c54ca9f2905b07590ab904f58d6.png
产品售价:68元
核心板配置2:
4492bde56285609f49c5ff6195a71735.png
产品售价:88元
★ 双形态诠释跨界,独家支持uclinux
FET1052-C核心板支持裸机运行与uCLinux *** 作系统,兼具MCU与MPU的双重形态,按需选择,更加灵活。支持裸机程序,简单易用、实时性高、功耗更低;支持uCLinux *** 作系统,多任务运行、代码易维护、应用移植性强。
ef4c754f189a62f076f123afb6b99cd9.png
★ 工业级品质
板卡设弯空计充分考虑信号完整性,保证最佳电气性能;优化电源架构,调整电源上电时序,提高了系统鲁棒性
ae741cfae2ff4e365ce731a1fea05ef7.png
★ 多媒体能力突出
24位LCD接口,最大支持1366*768分辨率,支持2D图形加速,MCU模式下支持emWin图形库,支持并行摄像头接口和3路IIS音频接口
2adb56213ef3957791b6b7f49f2557fc.png
★ 体积小巧岁闹伏
核心板体积小巧,仅31mm* 43mm,采用防反插板对板连接器设计,方便前期开发测试与后期批量装配并且连接器设计方式,焊接简单
595dd862522241cc34629e36c2e28e2b.png
★丰富实用的通讯接口 支持8路UART,最高5Mbps;10/100M自适应以太网,支持lwip协议包;支持2路CAN,2.0B协议;支持20路ADC,12位精度;支持32路PWM,互补输出、正交解码、电机故障检测;
fe41b061c95de0bf418db8013c4c7a38.png
★开发板评估套件接口展示
c6fa2b8ba2a565eee457fff9044dd79d.png
产品优势不胜枚举,想要深入了解的朋友们,请关注飞凌官网产品详细介绍或咨询我们专业的销售工程师!
飞凌嵌入式愿与您一起,共同打造出高品质的嵌入式产品!
产品更多信息,请至飞凌官网查询
NXP i.MXRT1052系列FET1052-C核心板:http://www.forlinx.com/99.htm
NXP iMXRT1052系列OK1052-C开发板:http://www.forlinx.com/imxrt1052.htm返回搜狐,查看更多
责任编辑:
文章知识点与官方知识档案匹配
CS入门技能树Linux入门初识Linux
24015 人正在系统学习中
打开CSDN,阅读体验更佳
IMX6Q 核心板的原理图和PCB.zip
内含 iMX6Q 开发原理图和 PCB 文件,分享给各位一起学习参考。
rtp包抖动计算公式_RTP 协议详解
概述:实时传送协议(Real-time Transport Protocol或简写RTP,也可以写成RTTP)是一个网络传输协议,它是由IETF的多媒体传输工作小组1996年在RFC 1889中公布的。RTP协议详细说明了在互联网上传递音频和视频的标准数据包格式。它一开始被设计为一个多播协议,但后来被用在很多单播应用中。RTP协议常用于流媒体系统(配合RTCP协议或者RTSP协议)。因为RTP自身...
继续访问
如何选择一款合适的核心板进行开发
很多工程师在选择嵌入式核心板的时候往往会陷入选择困难症,选择ARM9还是A8平台?选择Linux还是Android、选择创客平台还是主流核心板?选择芯片方案还是核心板方案?本文将为大家提供一些参考意见。 选择硬件平台是一个项目的开始,选择是否正确有时候往往关乎到一个项目的成败。但是当下是一个信息爆炸的年代,放到我们眼前的方案多种多样。作为一名合格的工程师不仅要关注产品性能是否够用,还要把握项目的
继续访问
linux内核开机进度条,ARM核心板如何在Linux启动时显示开机进度条?
ARM核心板如何在Linux启动时显示开机进度条?本文基于ZLG ARM9开发套件,主要介绍了如何实现在Linux *** 作系统启动时显示开机进度条,其方法适用于其他产品。开发主机环境:Ubuntu 12.04(64位)、arm-none-linux-gnueabi-gcc系列交叉工具链硬件清单:EasyARM-i.MX257开发套件或EasyARM-i.MX283A/287A开发套件或EPC-28xC...
继续访问
rt1052 linux手册,开箱折腾处女贴--在Linux下配合MCUXpresso开发RT1052
本帖最后由 msr06rr 于 2018-5-2 18:05 编辑熬夜盖楼,有幸获得iMX-X1开发板,我就不多晒板子的图了,避免拉来仇恨板子靓照gg.jpg (311.59 KB, 下载次数: 1)2018-5-2 18:04 上传安富莱给的教程一般都是针对Keil的,我花了大半天尝试了在Linux下做开发,当然IDE选择官方的MCUXpresso咯,同样都是基于Eclipse,比起英飞凌的DA...
继续访问
rt1052 linux手册,【正点原子号令者RT1052使用】8.RT1052之USMART调试组件
本帖最后由 煮饺子水洗脚 于 2018-7-22 16:09 编辑USMART 是由 ALIENTEK 开发的一个灵巧的串口调试互交组件,通过它你可以通过串口助手调用程序里面的任何函数,并执行。因此,你可以随意更改函数的输入参数(支持数字 ( 10/16进制, 支持负数)、字符串、函数入口地址等作为参数),单个函数最多支持 10 个输入参数,并支持函数返回值显示。USMART 的功能类似 linu...
继续访问
最新发布 NXP i.MX RT1052介绍
1-NXP i.MX RT1052 连载之 MCU 简介【1】_KiFF的博客-CSDN博客 2-NXP i.MX RT1052 连载之 Boot 简介【2】_KiFF的博客-CSDN博客(重要) 3-i.MXRT单片机-Cortex-M7 i.MX RT1052 跨界核心板 - ARM核心板 - 保定飞凌嵌入式技术有限公司 这两个插座型号是什么? 在核心板上安装的这两个插座,是3710F插座(公头)。 那么与之对应的是3710F插座(母座),如下图所示。 正点原子官网...
继续访问
rt1052 linux手册,i.mx rt1052 ucLinux烧写
使用的开发平台是飞凌嵌入式的开发板,按照厂家提供的烧写教程遇到问题,特此记录,提供给其他网友作为参考。按照手册《OK1052-C_Linux-用户手册》附录中的烧写步骤,使用createSdcard.sh创建SD卡启动盘后发现SD卡的文件系统被损坏了,然后查看了脚本代码,发现写入启动盘的内容如下:dd if=/dev/zero of=${DRIVE} bs=1k seek=384 conv=fsy...
继续访问
RT1052-初次相识
1.RT1052性能介绍 i.MX RT1050 是业界首款跨界处理器,兼具应用处理器的高性能与高度集成,以及微控制器的易用性和实时功能。i.MX RT1050基于Arm® Cortex®-M7内核,运行频率为600 MHz。 高性能Arm Cortex-M7 芯片采用六级流水线,集成双精度浮点计算单元DPFPU和DSP指令 3020 CoreMark/1284 DMIPS @ 600 ...
继续访问
AWTK G2D 硬件加速移植案例
目录一、简介二、AWTK 默认自带的 STM32 的移植分析三、NXP 的 PXP 的硬件加速移植教程 一、简介 AWTK是 ZLG 开发的开源 GUI 引擎,官网地址:https://www.zlg.cn/index/pub/awtk.html。 G2D 硬件加速是指将计算量较大的图像处理工作分配给专门的硬件外设来处理,减轻 CPU 的计算量,以此提高图像绘制的性能。 不同硬件平台的硬件加速外设不一样,其实现方法也有区别,在 AWTK 中,用户需要实现 awtk/src/base/g2d.h 文件中的相
继续访问
NXP i.MX RT1052 连载之 MCU 简介【1】
i.MX RT 系列芯片,是由 NXP 半导体公司推出的跨界处理理器芯片,该系列下又包括 i.MX RT1010、 i.MX RT1015、 i.MX RT1020、 、 i.MX RT1024、 i.MX RT1050、 i.MX RT1060、 i.MX RT1064、 i.MX RT1160、 i.MX RT1170、 i.MX RT500 以及 i.MX RT600 等子系列芯片。所谓 “跨界”,是指它自身的定位既非传统的应用处理器也非传统的微控制器。
继续访问
rt1052 usb速率_如何才能赋予RT1052超级视频编解码能力?
本文导读Cortex-M7处理器的核心本质为微控制器,却拥有高达600MHz的主频,高密度的512KB TCM SRAM和16MB的高速SDRAM,超快的实时响应,超强处理性能赋予了RT1052视频编解码的能力。对于视屏应用来说,当处理器内部不具备GPU单元时,编解码库对视频文件的解码需要由CPU提供快速的运算能力以及大量的内存作为缓冲,这是传统单片机无法胜任的主要因素,所以视频应用多采用M6Y2...
继续访问
linux开发板最好芯片,既然是中国十大最有影响力的芯片之一 一定要有个好开发板...
原标题:既然是中国十大最有影响力的芯片之一 一定要有个好开发板要评选中国影响力十大芯片,ESP8266必在其中。虽然开发文档有些混乱,各种生态纷杂,但它的低价,给了开发者更低门槛,也让更多人都参与到WiFi的开发体验中来。 从这种意义上来说,ESP8266是一款伟大的SoC!可能生态太繁茂了,所以官方开发板显得并不重要,曝光度也不高。但是我们还是想要尝试一下它的开发体验。下面正文开始ESP8266...
继续访问
热门推荐 【Linux】Linux版本介绍(内核版本和发行版本)
百度百科 linux内核版本的分类 内核版本 稳定版本 开
imx890更好。imx890是一款高性能处理器,具有更高的处理能力和更低的功耗。它拥有更多的内存和存储空间,支持更多的多媒体功能,支持更多的网络姿漏协议,支持更多的 *** 作系统,谨册衫支持更多的应祥腔用程序,支持更多的设备,支持更多的接口,支持更多的设备管理功能,支持更多的安全功能,支持欢迎分享,转载请注明来源:内存溢出
评论列表(0条)