ZYNQ7000 学习(二十二)SPI FLASH里启动LINUX的详细分析和实现

SPI FLASH里启动LINUX的详细分析和实现

第一部分,LINUX启动分析

之前我们跑LINUX例子都是从 SD卡启动,固化在 BOOTROM里面的启动代码先从 SD卡的第一个分区查找 BOOT.BIN文件,从 BOOT.BIN文件找到 FSBL,之后将执行 FSBL。 FSBL执行之后从 BOOT.BIN文件里面找出 U BOOT启动代码(如果不引导系统这部分也可以是用
户程序)。
在这里插入图片描述
之后
UBOOT运行,执行我们给 UBOOT写的命令,我们可以看一下 INCLUDE / CONFIGS / ZYNQ_ZED.H
“sdboot=echo Copying Linux from SD to RAM…;”
“mmcinfo;”
“fatload mmc 0 0x8000 zImage;”
“fatload mmc 0 0x1000000 devicetree.dtb;”
“fatload mmc 0 0x800000 ramdisk8M.image.gz;”
“go 0x8000\0”
当从
SD卡启动的时候,就是执行这些命令行。
大家看到压缩的内核是保存在
0X8000这个位置开始, ,8M的软件盘是存在 0X800000这
个位置开始,设备树是存放在 0X1000000这个位置开始。之后就到内核处执行 go 0x8000 .LINUX内核在编译时候有对应的设置告知编译器将内核编译在 0X8000做为开始位置,
devicetree是 UBOOT在启动内核的时候通过 R2寄存器传递给 LINUX内核,而后面的 RAMDISK所在地址则 DEVICETREE.DTb内的的启动参数告诉 LINUX内核的(参见 LINUX内核的
arch/arm/boot/dts/digilent_zed.dts )。
这是我们以上的分析,我们在想在执行
go 0x8000之前,需要将三个文件拷贝到三个对
应的地址就可以了,而不需要在意从什么存储媒介取得这三个文件。我们可以分析其他的启
动命令行,也说明这点。
在这里插入图片描述

Step 2:按照规定好的空间信息以及三个文件的大小编写启动命令行。

从新编译UBOOT。对应根据:内核ZIMAGE 最终拷贝到0X8000,DEVICETREE.DTB 最终拷贝到0x1000000
(16M 位置) ,RAMDISK 拷贝到0x800000 (8M 位置)。
修改文件INCLUDE / CONFIGS / ZYNQ_ZED.H 。当采用QSPI FLASH 启动的时候就执行下列命令
“qspiboot=sf probe 0 0 0;”
“sf read 0x8000 0x800000 0x300000;”
“sf read 0x1000000 0xC00000 0x10000;”
“sf read 0x800000 0xC10000 0x400000;”
“go 0x8000\0”
依次输入命令行:
make CROSS_COMPILE=arm-xilinx-linux-gnueabi- zynq_zed_config
make CROSS_COMPILE=arm-xilinx-linux-gnueabicp
u-boot …/u-boot.elf 这个文件是我们所需要的。

Step 3:做好QSPI FLASH 的存储。

之后我们根据对应的分配图编写对应的的bif 脚本:指定BOOTLOADER 以及BIT 流配置文
件以及
UBOOT,之后再添加入这三个文件并指定存储的开始位置。之后用批处理生成
BOOT.mcs.
the_ROM_image:
{
[bootloader]./zynq_fsbl.elf
./system.bit
./u boot.elf
[offset = 0x800000]./zImage
[offset = 0xC00000]./devicetree.dtb
[offset = 0xC10000]./ramdisk8M.image.gz
}
下面我们来生成
BOOT.mcs,编写脚本,

Step 4:烧写到 QSPI FLASH里面。设置成 QSPI FLASH启动,从新启动系统,可以看到 LINUX正确执行。

总结:
1 BOOT.mcs是 BOOT.BIN的 HEX文本表达方式。
2 BOOT.mcs或者说 BOOT.BIN本身就是一个简单的只读文件系统。
3 FSBL启动了 UBOOT,之后 UBOOT由很多方式进行拷贝数据,并最终启动内核。更方便
的是这么多操作方式可以通过简单命令形式完成。实际的产品根据情况选用(甚至可以从网
络启动)。
4)注意规 划好 QSPI FLASH的存储空间,这是 BOOT.MCS文件和 UBOOT数据拷贝命令行的约
定。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值