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
-
控制器
+关注
关注
112文章
16332浏览量
177806 -
Linux
+关注
关注
87文章
11292浏览量
209327 -
移植
+关注
关注
1文章
379浏览量
28124 -
SPI
+关注
关注
17文章
1706浏览量
91505 -
QSPI
+关注
关注
0文章
41浏览量
12197
发布评论请先 登录
相关推荐
评论