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瀏覽量
177812 -
Linux
+關注
關注
87文章
11292瀏覽量
209333 -
移植
+關注
關注
1文章
379瀏覽量
28124 -
SPI
+關注
關注
17文章
1706瀏覽量
91508 -
QSPI
+關注
關注
0文章
41瀏覽量
12197
發布評論請先 登錄
相關推薦
評論