Zynq-Linux移植学习笔记之一-入门

1、相关网站

zynq linux软件网站:www.wiki.xilinx.com

zynq u-boot github地址:https://github.com/xilinx

 

2、启动过程


3、u-boot配置

3.1 下载u-boot

UBOOT有多个版本,可以去网站上下载相应的版本。14.5及早期的版本对Micron的QSPI Flash芯片支持不完整。建议下载后期版本

$ git clone git://git.xilinx.com/u-boot-xlnx.git(下载u-boot源码命令)

3.2 u-boot参数修改

1)  .\u-boot\arch\arm\cpu\armv7\zynq\clk.c

由于使用的是50M参考时钟,需要更改参考时钟

# define CONFIG_ZYNQ_PS_CLK_FREQ    33333333UL更改为

# define CONFIG_ZYNQ_PS_CLK_FREQ    50000000UL

2)  .\u-boot\include\configs\zynq_zc70x.h

由于使用的是串口0,需要更改串口定义

#define CONFIG_ZYNQ_SERIAL_UART1更改为

#define CONFIG_ZYNQ_SERIAL_UART0

3)  .\u-boot\include\configs\zynq_zc70x.h

根据DDR实际大小修改内存配置参数

#define CONFIG_SYS_SDRAM_SIZE          (1024* 1024 * 1024)更改为

#define CONFIG_SYS_SDRAM_SIZE          (512 * 1024 * 1024)(根据实际内存大小修改)

3.3 u-boot编译

在linux系统下进入u-boot

$ cd u-boot

$ git apply 0001-Xilinx.patch

(这条命令可以不执行,该命令的目的是将ramdisk8M.image.gz改为ramdisk32M.image.gz)

$ make distclean

$ make zynq_xxx_config

(zynq_xxx是在/include/configs/下的h文件名,根据需要编译的文件名而定。在执行命令之前,如果要求文件进行编辑,执行gedit xxx.h)

$ make

编译结束后会在当前文件夹下生成u-boot文件,拷贝后,改成u-boot.elf文件

4、Linux配置

4.1 下载Linux

$ git clonegit://git.xilinx.com/linux-xlnx.git(下载Linux源码)

4.2 Linux编译

$su

$cp mkimage /bin

(转换为root用户,将.\u-boot\tools\mkimage文件拷贝到根目录的bin目录下,生成uImage文件需要使用)

$ cd linux-xlnx

$ make distclean

$make ARCH=arm xilinx_zynq_defconfig

(xilinx_zynq_defconfig可根据实际情况选择,目录为.\linux-xlnx\arch\arm\configs)

$ make ARCH=arm menuconfig

选择 Exit

$make ARCH=arm UIMAGE_LOADADDR=0x8000uImage

编译完成后,生成的uImage文件和zImage文件存放在.\linux-xlnx\arch\arm\boot下

5、Linux设备树配置

5.1 修改dts文件

从\linux-xlnx\arch\arm\boot\dts目录下选择对应的开发板修改,本设计选择zynq-zc706.dts

$ gedit xxx.dts

(如果不用编辑,可略过此步骤)

对xxx.dts的修改,根据实际配置进行修改,本设计需修改三个地方,一个是更改为串口0,一个是修改参考时钟(由33333333改为50000000),最后修改内存大小配置

1、  修改串口地址,修改为串口0的地址


2、  修改clocks数组中的数值(串口0对应23和40),按照下图中的clks数组,从0开始。


3、修改串口0的中断号,根据UG585中的中断号分配表,查找对应的设备中断号,减去32

4、修改参考时钟


5、修改内存配置(根据硬件实际使用的内存大小修改,本设计中内存大小为512MB)


将修改好的dts文件拷贝到linux-xlnx /scripts/dtc目录下

5.2 编译devicetree

$ cd linux-xlnx

$ ./scripts/dtc/dtc -O dtb -I dts -odevicetree.dtb xxx.dts

(如果前面没有编译生成uImage文件,此命令会报错,找不到dtc命令)

将linux-xlnx目录生成的devicetree.dtb拷贝到相应的地方

5.3 下载ramdisk

从网上下载ramdisk32M.image.gz

由于git clonegit://git.xilinx.com/apps/busybox.git无法正常运行,所以直接拷贝了zed板的文件,未做任何改动。下载地址见:http://download.csdn.net/detail/jj12345jj198999/9717091

6、启动Linux

6.1 JTAG启动

超级终端的速率选择115200

将u-boot.elf,uImage,devicetree.dtb和ramdisk32M.image.gz文件拷贝到工程路径的/hw目录下

进入XMD命令窗口

cdD:/shen/switch/v20/20130825prj1/project_1/project_1.sdk/SDK/SDK_Export/hw

(根据实际的工程路径选择)

connect arm hw

source ps7_init.tcl

ps7_init

dow -data devicetree.dtb 0x2a00000

(地址可以根据实际情况更改)

dow -data ramdisk32M.image.gz 0x2000000

(地址可以根据实际情况更改)

dow -data uImage 0x3000000

(地址可以根据实际情况更改)

dow u-boot.elf

con

在超级终端上回车

在超级终端上运行 bootm 0x30000000x2000000 0x2a00000(和上面下载地址一致)

对于14.5以前的版本,如果使用的还是ramdisk32Mramdisk8M,需要注意:

dow -data ramdisk32M.image.gz 0x2000000

(这一步的偏移量和下载文件有关,如果是ramdisk8M.image.gz,偏移量为0x800000;如果是ramdisk32M.image.gz,偏移量为0x2000000)

6.2 SD卡启动

1)在SDK中将FSBL、XXX.bit和u-boot.elf文件生成xxx.bin和xxx.mcs文件,把xxx.bin命名为boot.bin。

2)SD卡格式化为FAT32格式,将boot.bin,zImage,devicetree.dtb和ramdisk32M.image.gz(注意使用同一版本)拷贝到SD卡里。

6.3 QSPI启动

在SDK中,生成启动文件xxx.bin,运行界面如下所示。


图2 生成QSPI启动文件

备注:可以根据uImage、devicetree和ramdisk的实际文件大小调整offset,这样可以调整最终生成的可烧写文件的大小,在做了offset调整后,在uboot目录下.\include\configs\zynq-common.h作相应的修改,注意三个文件在QSPI flash中所处的偏移地址一定要和sfread中的一致。另外还要注意读取到内存中时的数据大小,不能小于文件的实际大小。

 

进入XMD命令窗口

connect arm hw

cdD:/shen/switch/v20/20130825prj1/project_1/project_1.sdk/SDK/SDK_Export/hw

(根据实际的工程路径选择)

source ps7_init.tcl

ps7_init

dow u-boot.elf

dow -data xxx.bin 0x08000000

(需要烧写的文件,缓存地址可以改变,如变为0x04000000)

con

在超级终端中Enter

sf probe 0 0 0

sf erase 0 0x02000000

(32MB,根据实际flash大小调整)

(如果是Micron的Flash,删除时间比较久,一个subsector(4KB)需要花费0.3s,8192个subsector需要40.96s)

sf write 0x08000000 0 0x01ffffff

(根据实际flash大小调整,缓存地址需要和前面的缓存地址一致)

  • 14
    点赞
  • 154
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: "Zynq-Linux移植学习笔记"是一篇关于在Zynq SoC平台上移植Linux操作系统的学习笔记。该笔记主要介绍了如何在Zynq平台上搭建交叉编译环境、编译内核、制作根文件系统以及启动Linux系统等方面的知识。通过学习这篇笔记,读者可以了解到如何将Linux操作系统移植Zynq平台上,并且可以通过实践来深入理解相关的知识和技 ### 回答2: Zynq Linux移植是搭建Zynq硬件平台和在该平台上运行Linux系统的过程。它包括了硬件的设计和软件的开发,这有助于实现在Zynq平台上开发Linux应用程序的目标。 首先,进行Zynq Linux移植前需要研究设备的结构和硬件构造。zynq硬件平台包含两个主要组成部分:PS和PL。PS负责处理器系统和外设的管理和控制,PL则是可编程逻辑,支持FPGA逻辑的定制化,同时也支持外设的实现。在移植时,需要设计PS的硬件架构和软件驱动程序,同时也需要配置PL。一般情况下,需要进行如(Xilinx SDK)和(Petalinux)等的软件开发环境安装和配置。 接下来,进行Linux系统的移植。这部分工作需要了解Linux内核的结构、功能和特性,然后根据硬件架构,对Linux系统进行调整和定制,构建出适合硬件平台的Linux系统。这个过程需要进行的工作包括:解编译适合SOC的内核、制定设备树、调整内核参数等。 最后,这些工作完成后,就可以在Zynq平台上编译和运行Linux应用程序了。开发者可以尝试通过开发板上的GPIO、I2C、SPI或UART等接口,学习Linux的设备驱动程序、网络编程、文件系统管理等知识点。可逐步学习如何掌握Linux的shell、打包工具、交叉编译工具等。 总结来说,Zynq Linux移植工作是基础的硬件构造、嵌入式软件和Linux知识的综合应用,需要开发者有至少三方面的技能。需要熟练编写硬件设计,熟练掌握Linux内核编程以及Linux系统软件的维护和管理。这些技能的应用能力对于移植Zynq平台Linux系统和应用程序的开发工程师来说是非常必要的。 ### 回答3: 随着嵌入式系统的广泛应用,zynq-linux移植成为了嵌入式开发的一个重要研究课题。zynq-linux移植涉及到许多方面的知识,在学习过程中需要注意以下几点: 一、zynq-linux移植前需要了解的基础知识 在开始进行zynq-linux移植之前,需要对Linux系统、ARM技术、FPGA开发、C语言等基础知识有一定的了解。同时需要熟悉zynq系列的基本架构和应用场景。 二、zynq-linux移植必要的步骤 zynq-linux移植的过程主要分为以下几个步骤:首先是确定硬件平台和环境搭建;其次是进行内核编译和配置;然后是uboot编译和烧录;最后是Linux文件系统的制作和烧录。在整个移植过程中,需要注意各个步骤的顺序和详细操作,确保每一步都正确完成。 三、zynq-linux移植中可能会遇到的问题 在zynq-linux移植过程中,可能会遇到各种问题,例如硬件平台的兼容性、内核配置的错误、uboot烧录问题、文件系统制作出错等。在遇到这些问题时,需要耐心地进行排查和解决,同时也可以借助搜索引擎和社区的技术支持。 四、zynq-linux移植之后的应用与拓展 zynq-linux移植成功之后,可以将其应用于各种嵌入式系统中,例如网络设备、智能家居、工业控制等领域。同时,还可以进行拓展和优化,例如添加各种驱动程序、优化系统性能等。 总之,在进行zynq-linux移植学习和实践中,需要认真学习基础知识,仔细操作每个步骤,及时排查并解决问题,并在成功移植之后持续进行应用与拓展。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值