Linux的QSPI驱动移植方法及验证方法

描述

1.概述

本文主要讲述了Linux的QSPI驱动移植方法及验证方法。

示例Linux内核版本:6.8.2。硬件平台:ARM SOC。

2.原理

Linux内核的SPI驱动子系统集成了主流厂家的QSPI控制器驱动,驱动源码位于目录linux-6.2.8/drivers/spi。本文以移植Cadence QSPI控制器驱动为例,通过使能CONFIG_SPI_CADENCE_QUADSPI开关,即可将Cadence QSPI控制器驱动spi-cadence-quadspi.c编译进内核。在设备树,添加QSPI控制器设备节点及其Flash设备子节点,以加载相应的驱动。

Linux内核的MTD子系统是一个抽象层,提供统一的API对Flash设备进行访问操作。Linux内核提供了MTD tests模块工具,可以用来对Flash进行操作,完成QSPI设备驱动的测试和验证。

3.移植方法

(1)配置内核

控制器

图1 Cadence QSPI驱动配置选项说明

(2)设备树添加QSPI控制器和Flash节点

在设备树添加Cadence QSPI控制器节点及其Flash节点。添加方法可参考如下文件:

./Documentation/devicetree/bindings/spi/cdns,qspi-nor.yaml

./Documentation/devicetree/bindings/spi/cdns,qspi-nor-peripheral-props.yaml

4.验证方法

(1)编译MTD tests工具

为编译MTD tests工具,应配置内核,使能CONFIG_MTD_TESTS,以编译出MTD tests模块。

控制器

图2 MTD tests工具配置选项说明

MTD tests模块随内核一起完成编译,编译完成后在linux-6.2.8/drivers/mtd/tests下生成*.ko测试模块。其中,mtd_stresstest.ko模块内包含了擦除、读、写等操作,选取该模块作为测试工具。mtd_stresstest.ko对应的源码为stresstest.c,原始代码中读、写操作通过do_operation()函数随机选择,do_read()函数包括读操作,do_write()函数包括擦除和写操作,操作的目标扇区是随机选择的,为便于测试,可在编译前手动修改操作的目标扇区号,即变量int eb值。

(2)使用mtd_stresstest.ko测试

内核启动后,通过查看,可以发现生成了/sys/class/mtd/mtd0设备,即可使用mtd_stresstest.ko通过mtd0设备对Flash进行擦除、读、写操作,以测试驱动功能的正确性。加载测试模块的命令如下,表示测试的目标设备为mtd0,次数为1。

insmod mtd_stresstest.ko dev=0 count=1


 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分