Zynq-Linux移植学习笔记之11-qspi驱动配置

1、  devicetree配置

devicetree中涉及到QSPI FLASH的部分如下:

spi@e000d000 {
                            clock-names= "ref_clk", "pclk";
                            clocks= <0x1 0xa 0x1 0x2b>;
                            compatible ="xlnx,zynq-qspi-1.0";
                            status= "okay";
                            interrupt-parent= <0x3>;
                            interrupts= <0x0 0x13 0x4>;
                            reg= <0xe000d000 0x1000>;
                            #address-cells= <0x1>;
                            #size-cells= <0x0>;
                            is-dual = <0x0>;
                            num-cs = <0x1>;
 
                            flash@0{
                                     compatible ="n25q256a13";
                                     reg= <0x0>;
                                     spi-tx-bus-width= <0x1>;
                                     spi-rx-bus-width= <0x4>;
                                     spi-max-frequency= <0x2faf080>;
                                     #address-cells= <0x1>;
                                     #size-cells= <0x1>;
 
                                     partition@qspi-fsbl-uboot{
                                               label= "qspi-fsbl-uboot";
                                               reg= <0x0 0x100000>;
                                     };
 
                                     partition@qspi-linux{
                                               label= "qspi-linux";
                                               reg= <0x100000 0x500000>;
                                     };
 
                                     partition@qspi-device-tree{
                                               label= "qspi-device-tree";
                                               reg= <0x600000 0x20000>;
                                     };
 
                                     partition@qspi-rootfs{
                                               label= "qspi-rootfs";
                                               reg= <0x620000 0x5e0000>;
                                     };
 
                                     partition@qspi-bitstream{
                                               label= "qspi-bitstream";
                                               reg= <0xc00000 0x400000>;
                                     };
                            };
                   };


一般qspi flash被区分为五个分区,配置时需要注意下面几点:

Is_dual表示并行模式,如果不是并行设置为0(Set if parallel. Reset if single or stacked.)

Num_cs表示flash芯片数量,目前zynq把qspi flash当成一个芯片,即使板子上贴了两块芯片,zynq也只是当成一片使用

 

配置完devicetree后在xilinx_zynq_defconfig中也需要配置MTD分区

CONFIG_CMDLINE="

console=ttyPS0,115200n8

root=/dev/ram rw

initrd=0x00800000,16M

earlyprintk

mtdparts=physmap-flash.0:512K(nor-fsbl),512K(nor-u-boot),5M(nor-linux),9M(nor-user),1M(nor-scratch),-(nor-rootfs)"

通过对比devicetree中的分区和defconfig中的分区可以发现共同点:

fsbl和u-boot位于前1M(nor-fsbl+nor-u-boot)分区

linux内核位于接下来的5M(nor-linux)分区

devicetree,rootfs,bitstream中位于后面9M(nor-user)中(实际只占用6M)

 

 

2、  kernel配置

配置完devicetree后需要对kernel进行配置,在编译产生kernel时将相应的驱动加入kernel。


上图中需要将boot选项设置为采用bootloader内核参数。


将zynq QSPI控制器添加到内核中

 

3、  qspi flash测试

启动linux,在启动过程中能找到如下打印,当前linux kernel版本为3.14


从这里可以看出启动分区信息。

1)文件读写测试

当linux启动完成后,可以通过

#cat /proc/mtd

列出所有的分区


很显然,两个分区信息一致。

接下来进行flash文件读写,首先在本地创建一个文件(大小4M)

#ddif=/dev/urandom of=./sample.bin bs=1024 count=4096


拷贝到mtd3中

#flashcp-v ./sample.bin /dev/mtd3


 

2)文件系统测试

除了对flash进行文件读写测试外,Qspiflash中也可以挂载文件系统进行测试

首先列出所有分区信息

#cat/proc/mtd

对要挂载文件系统的分区进行擦除操作

#flash_eraseall -j /dev/mtd3



创建目录

#mkdirqspi_flash0


将分区挂载到qspi_flash0

#mount-t jffs2 /dev/mtdblock3 /qspi_flash0


创建要写入flash的文件

#ddif=/dev/urandom of=./sample.bin bs=1024 count=4096


将文件写入flash

#cp./sample.bin /qspi_flash0/


列出文件系统中文件

ls/qspi_flash0


卸载文件系统

#umount qspi_flash0


再次挂载文件系统

#mount-t jffs2 /dev/mtdblock3 /qspi_flash0


比较之前产生的文件与文件系统中的文件是否一致,一致证明文件系统有效

#diff./sample.bin /qspi_flash0/sample.bin


再次卸载文件系统

#umountqspi_flash0


只要不擦除flash,Sample.bin将一直存在flash中,这样就验证了文件系统的正确性。

  • 2
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
### 回答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移植学习和实践中,需要认真学习基础知识,仔细操作每个步骤,及时排查并解决问题,并在成功移植之后持续进行应用与拓展。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值