OK6410A 开发板 (三) 3 u-boot-2021.01 boot 解析概览

发布者:平静的33号最新更新时间:2022-09-26 来源: csdn关键字:OK6410A  开发板  u-boot 手机看文章 扫描二维码
随时随地手机看文章

// 需要分析的一套过程

1.配置文件分析

2.配置过程分析

3.编译过程分析

4.链接过程分析

5.生成文件分析

6.镜像加载分析

7.镜像运行分析


u-boot-2021.01 配置出来了 两个镜像,spl(output/spl/u-boot-spl.bin)和u-boot(output/u-boot.bin)

所以有两套过程需要分析

两套板子 宏观角度上 共享同一个 配置文件,同一个配置过程,同一个编译过程,同一链接过程

但是可以 从微观角度 将  配置过程,编译过程,链接过程  分别分为两个


SPL

1.配置文件分析

ok6410a_mini_defconfig 中的配置中

CONFIG_SPL 开头的配置 是 SPL的配置

同时 

CONFIG_ARM=y

CONFIG_ARCH_S3C64XX=y

CONFIG_TARGET_OK6410A=y

也是SPL的配置


2.配置过程分析

同 linux 配置过程


3.编译过程分析

宏观来看,和 u-boot 的编译过程在一起

微观来看,是先将 u-boot 编译链接完,然后再编译链接spl


4.链接过程分析

在 output目录运行如下

1. 生成 output/spl/u-boot-spl.lds 

arm-linux-gnueabi-gcc -E -Wp,-MD,spl/.u-boot-spl.lds.d -D__KERNEL__ -D__UBOOT__  -DCONFIG_SPL_BUILD  -D__ARM__ -marm -mno-thumb-interwork  -mabi=aapcs-linux  -ffunction-sections -fdata-sections -fno-common -ffixed-r9  -msoft-float    -pipe -march=armv5t -D__LINUX_ARM_ARCH__=6  -I../arch/arm/mach-s3c64xx/include -Ispl/include -Iinclude  -I../include  -I../arch/arm/include -include ../include/linux/kconfig.h  -nostdinc -isystem /home/suws/ok6410/system-new/toolchain/gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi/bin/../lib/gcc/arm-linux-gnueabi/7.4.1/include -include ../include/u-boot/u-boot.lds.h -include ./include/config.h -DCPUDIR=arch/arm/cpu/arm1176  -DIMAGE_TEXT_BASE=0x0C000000 -ansi -D__ASSEMBLY__ -x assembler-with-cpp -std=c99 -P -o spl/u-boot-spl.lds ../board/samsung/ok6410a/u-boot-spl.lds

2.链接 生成 output/spl/u-boot-spl

(cd spl && arm-linux-gnueabi-ld.bfd  -T u-boot-spl.lds  --gc-sections -Bstatic --gc-sections  --no-dynamic-linker -Ttext 0x0C000000 arch/arm/cpu/arm1176/start.o --start-group arch/arm/mach-s3c64xx/built-in.o arch/arm/cpu/arm1176/built-in.o arch/arm/cpu/built-in.o arch/arm/lib/built-in.o board/samsung/ok6410a/built-in.o board/samsung/common/built-in.o common/spl/built-in.o common/init/built-in.o lib/built-in.o disk/built-in.o drivers/built-in.o dts/built-in.o fs/built-in.o  --end-group arch/arm/lib/eabi_compat.o arch/arm/lib/lib.a -Map u-boot-spl.map -o u-boot-spl)


5.生成文件分析

1. 链接后生成了 output/spl/u-boot-spl

2. objcopy  生成 output/spl/u-boot-spl-nodtb.bin

arm-linux-gnueabi-objcopy  -j .text -j .secure_text -j .secure_data -j .rodata -j .hash -j .data -j .got -j .got.plt -j .u_boot_list -j .rel.dyn -j .binman_sym_table -j .text_rest -j .dtb.init.rodata  -O binary  spl/u-boot-spl spl/u-boot-spl-nodtb.bin

3. 拷贝得到 最终烧写文件 output/spl/u-boot-spl.bin 

cp spl/u-boot-spl-nodtb.bin spl/u-boot-spl.bin 


6.镜像加载分析

bl0 从 mmc (起始地址?) 加载 8KB 到 0x0c00 0000

并以 0x0c00 0000 位置起始的 4字节数据 为第一个指令,开始执行.


7.镜像运行分析

spl 中 有 位置相关码,...

初始化ddr

调用 itcm 中的 拷贝函数

将 sd卡中的数据(u-boot.bin,起始地址和大小?) 拷贝到 sdram(0x5FB00000)

并以 0x5FB00000 位置起始的 4字节数据 为第一个指令,开始执行.


U-boot

1.配置文件分析

ok6410a_mini_defconfig 中的配置中

不以CONFIG_SPL 开头的配置 都是 u-boot 的配置


2.配置过程分析

同 linux 配置过程


3.编译过程分析

宏观来看,和 u-boot 的编译过程在一起

微观来看,是先将 u-boot 编译链接完,然后再编译链接spl


4.链接过程分析

1.生成链接文件

arm-linux-gnueabi-gcc -E -Wp,-MD,./.u-boot.lds.d -D__KERNEL__ -D__UBOOT__   -D__ARM__ -marm -mno-thumb-interwork  -mabi=aapcs-linux  -mword-relocations  -fno-pic  -ffunction-sections -fdata-sections -fno-common -ffixed-r9  -msoft-float    -pipe -march=armv5t -D__LINUX_ARM_ARCH__=6  -I../arch/arm/mach-s3c64xx/include -Iinclude  -I../include  -I../arch/arm/include -include ../include/linux/kconfig.h  -nostdinc -isystem /home/suws/ok6410/system-new/toolchain/gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi/bin/../lib/gcc/arm-linux-gnueabi/7.4.1/include -ansi -include ../include/u-boot/u-boot.lds.h -DCPUDIR=arch/arm/cpu/arm1176  -D__ASSEMBLY__ -x assembler-with-cpp -std=c99 -P -o u-boot.lds ../board/samsung/ok6410a/u-boot.lds

2. 链接生成 output/u-boot

arm-linux-gnueabi-ld.bfd  -pie  --gc-sections -Bstatic  --no-dynamic-linker -Ttext 0x5FB00000 -o u-boot -T u-boot.lds arch/arm/cpu/arm1176/start.o --start-group  arch/arm/cpu/built-in.o  arch/arm/cpu/arm1176/built-in.o  arch/arm/lib/built-in.o  arch/arm/mach-s3c64xx/built-in.o  board/samsung/common/built-in.o  board/samsung/ok6410a/built-in.o  cmd/built-in.o  common/built-in.o  disk/built-in.o  drivers/built-in.o  drivers/dma/built-in.o  drivers/gpio/built-in.o  drivers/i2c/built-in.o  drivers/net/built-in.o  drivers/net/phy/built-in.o  drivers/power/built-in.o  drivers/power/battery/built-in.o  drivers/power/domain/built-in.o  drivers/power/fuel_gauge/built-in.o  drivers/power/mfd/built-in.o  drivers/power/pmic/built-in.o  drivers/power/regulator/built-in.o  drivers/serial/built-in.o  drivers/spi/built-in.o  drivers/usb/cdns3/built-in.o  drivers/usb/common/built-in.o  drivers/usb/dwc3/built-in.o  drivers/usb/emul/built-in.o  drivers/usb/eth/built-in.o  drivers/usb/host/built-in.o  drivers/usb/mtu3/built-in.o  drivers/usb/musb-new/built-in.o  drivers/usb/musb/built-in.o  drivers/usb/phy/built-in.o  drivers/usb/ulpi/built-in.o  env/built-in.o  fs/built-in.o  lib/built-in.o  net/built-in.o --end-group arch/arm/lib/eabi_compat.o  arch/arm/lib/lib.a -Map u-boot.map;  true


5.生成文件分析

A.1 链接生成 output/u-boot

A.2 objcopy 生成 output/u-boot-nodtb.bin

arm-linux-gnueabi-objcopy --gap-fill=0xff  -j .text -j .secure_text -j .secure_data -j .rodata -j .hash -j .data -j .got -j .got.plt -j .u_boot_list -j .rel.dyn -j .binman_sym_table -j .text_rest -j .dtb.init.rodata -O binary   u-boot u-boot-nodtb.bin && {  echo '  true'; true; } || rm -f u-boot-nodtb.bin

B.1 生成 output/dts/dt.dtb

mkdir -p arch/arm/dts/ ; (cat ../arch/arm/dts/s3c64xx-ok6410a.dts; ) > arch/arm/dts/.s3c64xx-ok6410a.dtb.pre.tmp; arm-linux-gnueabi-gcc -E -Wp,-MD,arch/arm/dts/.s3c64xx-ok6410a.dtb.d.pre.tmp -nostdinc -I../arch/arm/dts -I../arch/arm/dts/include -Iinclude -I../include -I../arch/arm/include -include ../include/linux/kconfig.h -D__ASSEMBLY__ -undef -D__DTS__ -x assembler-with-cpp -o arch/arm/dts/.s3c64xx-ok6410a.dtb.dts.tmp arch/arm/dts/.s3c64xx-ok6410a.dtb.pre.tmp ; ./scripts/dtc/dtc -O dtb -o arch/arm/dts/s3c64xx-ok6410a.dtb -b 0 -i ../arch/arm/dts/  -Wno-unit_address_vs_reg -Wno-unit_address_format -Wno-avoid_unnecessary_addr_size -Wno-alias_paths -Wno-graph_child_address -Wno-graph_port -Wno-unique_unit_address -Wno-simple_bus_reg -Wno-pci_device_reg -Wno-pci_bridge -Wno-pci_device_bus_num   -Wno-unit_address_vs_reg -Wno-unit_address_format -Wno-avoid_unnecessary_addr_size -Wno-alias_paths -Wno-graph_child_address -Wno-graph_port -Wno-unique_unit_address -Wno-simple_bus_reg -Wno-pci_device_reg -Wno-pci_bridge -Wno-pci_device_bus_num  -d arch/arm/dts/.s3c64xx-ok6410a.dtb.d.dtc.tmp arch/arm/dts/.s3c64xx-ok6410a.dtb.dts.tmp || (echo "Check /home/suws/ok6410/system-new/u-boot/output/arch/arm/dts/.s3c64xx-ok6410a.dtb.pre.tmp for errors" && false) ; cat arch/arm/dts/.s3c64xx-ok6410a.dtb.d.pre.tmp arch/arm/dts/.s3c64xx-ok6410a.dtb.d.dtc.tmp > arch/arm/dts/.s3c64xx-ok6410a.dtb.d ; sed -i "s:arch/arm/dts/.s3c64xx-ok6410a.dtb.pre.tmp:../arch/arm/dts/s3c64xx-ok6410a.dts:" arch/arm/dts/.s3c64xx-ok6410a.dtb.d

cat arch/arm/dts/s3c64xx-ok6410a.dtb > dts/dt.dtb

1. 生成 output/u-boot-dtb.bin

cat u-boot-nodtb.bin dts/dt.dtb > u-boot-dtb.bin

2. 拷贝生成 output/u-boot.bin

cp u-boot-dtb.bin u-boot.bin


6.镜像加载分析

spl 加载 u-boot.bin到 sdram(0x5FB00000)

并以 0x5FB00000 位置起始的 4字节数据 为第一个指令,开始执行.


7.镜像运行分析

u-boot.bin 中 有 位置相关码

之前已经初始化好ddr

然后初始化sd卡

设置好 TAG

加载 fat分区的 uImage 到 0x50008000.

并以 0x50008000位置起始的 4字节数据 为第一个指令,开始执行.

关键字:OK6410A  开发板  u-boot 引用地址:OK6410A 开发板 (三) 3 u-boot-2021.01 boot 解析概览

上一篇:OK6410A 开发板 (三) 4 u-boot-2021.01 boot 解析 SPL 编译链接部分
下一篇:OK6410A 开发板 (七) 1 OK6410A 文件系统 busybox和buildroot 移植

推荐阅读最新更新时间:2024-11-18 06:23

ARM+FPGA开发板的强劲图形系统体验——米尔基于NXP i.MX 8M Mini+Artix-7开发板
ARM+FPGA开发板的强劲图形系统体验——米尔基于NXP i.MX 8M Mini+Artix-7开发板 关键词:NXP、Xilinx、i.MX 8M Mini、Artix-7、ARM+FPGA、图像处理、异构处理器 本篇测评由优秀测评者“qinyunti”提供。 01 ARM+FPGA异核架构开发板简单介绍 MYD-JX8MMA7的这款ARM+FPGA异核架构开发板, 拥有2个GPU核,一个用来做3D数据处理,另一个用来做2D和 3D加速。3D GPU核支持:  OpenGL ES 1.1,2.0  Open VG 1.1  2D GPU核支持  多图层混合 基于ARM+FPG
[嵌入式]
ARM+FPGA<font color='red'>开发板</font>的强劲图形系统体验——米尔基于NXP i.MX 8M Mini+Artix-7<font color='red'>开发板</font>
u-boot-2009.08在mini2440上的移植(十)---增加I2C EEPROM功能
移植环境 1,主机环境:VMare下CentOS 5.5 ,1G内存。 2,集成开发环境:Elipse IDE 3,编译编译环境:arm-linux-gcc v4.4.3,arm-none-eabi-gcc v4.5.1。 4,开发板:mini2440,2M nor flash,128M nand flash。 5,u-boot版本:u-boot-2009.08 6,参考文章: http://blogimg.chinaunix.net/blog/upfile2/100811115954.pdf 10.1,实现u-boot的I2C EEPROM功能 mini2440开发板上的AT24C08A芯片提供了8kbyte的非易失的EEP
[单片机]
OK6410A 开发板 (八) 68 linux-5.11 OK6410A linux 内核同步机制 atomic 的实现
解决的问题是什么 所有竞态原因 实现 32bit // 下面为 atomic_add 的定义 arch/arm/include/asm/atomic.h 36 #define ATOMIC_OP(op, c_op, asm_op) 37 static inline void atomic_##op(int i, atomic_t *v) 38 { 39 unsigned long tmp; 40
[单片机]
限量6折!米尔NXP i.MX 8M Plus开发板
近期,关注米尔的工程师都说 米尔活动不断,大大福利了年底做项目 ST、TI、全志的开发板都搞活动, 那NXP的粉丝咋办呢? 别慌!这就来了 一直关注米尔工程师都知道, 米尔推出基于NXP系列的低、中、高端核心板开发板,为客户提供不同功耗、可扩展性、计算性能、安全性的产品,满足客户多样化的开发需求。分别有i.mx6ul、i.mx 8mini、i.mx 8m plus、LS1028A等产品。 米尔为了回馈广大NXP平台客户 上线NXP i.MX 8M Plus开发板6折活动 NXP i.MX 8M Plus开发板原价1820起 打完折只要1092元起,足足节省了700多元
[嵌入式]
限量6折!米尔NXP i.MX 8M Plus<font color='red'>开发板</font>
MSP430 DM430-A开发板学习笔记(三)测速模块(计数传对射感器)的使用
1.传感器说明 简要说明: 一、长尺寸:32mm X宽11mm X高20mm 二、主要芯片:LM393、对射式红外头 三、工作电压:直流5伏 四、特点: 1、具有信号输出指示。 2、单路信号输出。 3、输出有效信号为低电平。 4、灵敏度不可调。 5、可用于工件计数、电机测速。。。。 6、电路板输出开关量! 2.传感器连接实物图及测试代码 将传感器供电 将其out接到msp430的io口上 在iar编程软件中设置好相应的io口p1.2为输入端,检测p1.2是否输入低电平,若是低电平,则让另外一个io口p1.4输出低电平,从而使与之相连的led灯亮 代码如下 #include msp430x14x.h int ma
[单片机]
MSP430 DM430-A<font color='red'>开发板</font>学习笔记(三)测速模块(计数传对射感器)的使用
STM32开发板JLINK调试步骤
STM32调试步骤 调试前,首先跳线J9的2-3脚短接,跳线J4的右边两个脚短接,跳线J5短接,J8短接,J2的1-2短接,3-4短接。 将Jlink与学习板,USB延长线与学习板,串口延长线与学习板(或者USB转串口线与学习板)连接起来, 这时LED灯LED5,LED6都应该点亮,如果不亮,说明板子有问题。 打开串口助手,按照如下设置: 1、从桌面打开J-Flash ARM V4.02如图所示。 也可以按照如下顺序打开J-Flash ARM 。 “开始à程序àSEGGERàJ-Link ARM V4.02àJ-Flash ARM”,如下图所示。 2、打开J-Flash ARM后,先进行芯片选项设置,打开Optio
[单片机]
TQ2440 学习笔记—— 29、移植U-BootU-Boot 的编译、链接过程】
U-Boot 的编译、链接过程 配置完后,执行” make all“即可编译,从Makefile 中可以了解 U-Boot 使用了哪些文件、哪个文件首先执行、可执行文件占用的内存情况。 先确定用到哪些文件,下面所示为Makefile 中与ARM 相关的部分。 第117、164 行用于包含其他的config.mk 文件,第117行所要包含文件的就是上面的配置过程中制作出来的 include/config.mk文件, 其中定义了 ARCH、CPU、BOARD、SOC等4个变量的值为arm、arm920t、EmbedSky、s3c24x0。 第164行包含顶层目录的config.mk 文件,它们根据上面4个变量的值确定
[单片机]
TQ2440 学习笔记—— 29、移植<font color='red'>U-Boot</font>【<font color='red'>U-Boot</font> 的编译、链接过程】
mini2440系统移植篇之u-boot分析
1. Bootloader概念 系统上电后,需要一段程序来初始化重要的硬件,有些程序是固化在固件firmwware上的,如PC的BIOS。然后是Bootloader,如PC上的GRUB。对于嵌入式系统来说,一般只有Bootloader,它负责初始化内核运行的硬件环境,如内存,然后调用操作系统内核。一般最终产品它只需要启动内核就足够了,为了方便开发,还可以增强Bootloader功能,比如网络功能,通过网络下载文件,烧写文件到Flash中。 2. 嵌入式系统结构 嵌入式系统一般包含4部分。 1、引导加载程序,包括固化在固件的boot代码(可选)和Bootloader。 2、Linux内核 3、文件系统,包括根文件系统和其他挂载
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved