❶ 14-linux gpio模擬spi
首先是spidev,要在/dev/下面產生設備文件,需要spidev的支持
使用的是gpio模擬spi,gpio模擬spi的時序原理是bitbang文件實現的,所以這個也需要打開,如果是在openwrt下動態載入的話就是如下兩個配置
如果是直接內核的話是如下兩個
跟I2C的arch層一樣,主要是devices的添加和board_info的添加,如下
對於platform_add_devices,因為是使用spi_gpio,所以name是"spi_gpio"這樣才可以與driver裡面的spi_gpio相互匹配probe到。
因為SPI是可以一個匯流排上面掛多個,然後通過片選腳CS進行硬體切換,所以這變有個num_chipselect需要設置,如果有2個設置就設置2,一個設備就設置1,這邊設置好之後,後面board_info也要有對應的個數,而且片選引腳需要不同。
I2C是通過每個設備有自己不同的地址,通過地址來進行軟體切換。
對於board_info使用的是spidev,drivers/spi/spidev.c文件,該文件的內容是注冊一個spidev驅動。該驅動是一個字元設備驅動。
如果設備與驅動匹配,那麼就會執行spidev_probe()的內容。在spidev_probe()函數中會調用device_create()成功後在 /dev 目錄下就會生成 spidev 相關的設備節點。
這邊有幾個參數要注意:
調試過程想看一些細節的debug信息可以打開內核的動態debug信息,這個在以前的print system裡面有
printk的等級設置成8.
開始
定位到是 spi_gpio_request 的時候報錯
後仿橘者面就將zkernel/3.10.49/arch/mips/mtk/ziroom/zrmt7628.c裡面GPIO的信息調整下, 因為SPI的引腳和LED的引腳號一樣 ,內核不知道哪裡會檢測到。
修改後列印備薯如下:
之後在/dev/下面就生成了spidev1.0的設備
有了/dev/spidev1.0設備之後,就可以在應用成操作改設備收發數據。
在drivers/spi/spidev.c裡面已經封裝好了ioctl的對應介面,根據這些伍禪介面就可以測試使用。
在Documentation/spi/spidev_test.c下面有個應用層的實例,打開看下就清除了。
$(cc) spidev_test.c -o spidev_test生成可執行文件spidev_test
然後拷貝到板子上,將MOSI和MISO短接就可以測試回環數據是否正常。
有邏輯分析儀的接上logic看波形就更加直觀。
gpio模擬SPI:
https://blog.csdn.net/luckywang1103/article/details/70145870
在ARM Linux下使用GPIO模擬SPI時序詳解:
https://blog.csdn.net/yangzheng_yz/article/details/50470577
linux SPI驅動:
https://www.cnblogs.com/xuyh/category/903809.html
❷ linux下的SPI使用方法是怎樣的
如果linux中已經提供了驅動,並且在/dev/目錄下已經提供了相應的設備文件節點。那麼可以和串口一樣直接打開設置讀寫。如果內核中有驅動,但是沒有生成設備文件節點,那麼只要知道設備的主次設備號,可以使用mknode建立設備文件節點,然後直接來使用。如果沒有驅動就需要自己添加設備驅動了。這個也分兩種情況,看你外設怎麼和你的板子連接的。如果接到板子上的spi控制器上,可以直接編寫通過控制器來控制外設的驅動,這種情況一般生產主控晶元的廠家都已經提供了驅動。如果沒有接到spi控制器上,而是通過gpio連接的外設,你編寫的驅動就需要自己來模擬spi協議來控制外設。
❸ linux驅動調用spi標准函數spi_sync發送速率慢的問題
/*這是一個簡單的用戶程序與驅動交互的常式*/
void main(void)
{
int testdev;
int i;
char buf[10];
/* 這里是用的open系統調用,是linux內核介面函數,不是庫亮余燃函數,返回fd,詳細請google ,這個open最終會調用驅動中的open函數(代碼流程是這樣的open()->sys_open()->filp_open()->dentry_open()->驅動open)*/
testdev=open("/dev/test",O_RDWR);
if(testdev==-1)
{
printf("Cann'topenfile...../n");
exit(0);
}
printf("buf=0x%x/n",buf);
/*下面的readwrite和ioctl是用戶程序和內核驅動的最直接的交互方式*/
read(testdev,buf,10);
write(testdev,buf,1);
led_ctl.port='G';
led_ctl.bit=5;
led_ctl.value=0;敬虛毀搜
ioctl(testdev,GPIO_IO_SET_GPG,&led_ctl);
printf("%s",buf);
pause();
close(testdev);
❹ 基於LINUX環境的自動化測試的研究應用
(一)各種技術應用的前提。對於在開源社區和一些開源項目中獲得的測試工具,首先需要了解工具適用於哪些類型應用的測試,以及工具發布後的發布說明和FAQ。開源的工具通常不像商業工具那樣成熟穩定,因此找出工具的適用范圍以及探索工具的實現程度是進行自動化測試應用的前提。
(二)各種技術應用的環境需求。對於各類工具,需要關注編譯和運行時對各種包和庫及其版本的依賴關系以及對預先安裝的應用的依賴關系。這些在用戶手冊中都有詳盡的說明。
(三)伺服器性能監視器。大部分測試工具沒有提供伺服器端的性能監控功能,測試工程師需要根據實際的需求編寫性能監控腳本來配合工具的使用。
下面結合曾經參與進行過的Linux平台下的自動化測試的研究,面向不同類別的測試用例自動化的需求,將主要從功能測試,如GUI測試、命令行客戶端的測試,以及性能測試等幾個方面對Linux平台下的測試工作的自動化進行分析和說明。
GZW自動化洲試
對於GUI測試的自動化,通常的測試工具所使用的捕捉/回放技術有兩種,一種是通過記錄界面的滑鼠事件(如點擊、移動)和鍵盤事件來完成錄制和回放,另外一種則是錄制和回放都是基於控制項的識別和操作進行的掘空,每個腳本的執行都是控制項對象的屬性改變或事件觸發。我們從開源社區可以獲得如上兩種類型的運行於Linux平台之上的典型測試工具,如Knee和LDTP等。
(一)Xnee工具
在Linux操作系統的xll環境下,Xnee能夠錄制、回放和分發用戶的動作。Xnee的捕捉/回放技術是記錄滑鼠事件和鍵盤事件。進入錄制模式時,Xnee記錄發送至和來自X server之間的協議數據拷貝,並生成Xneesession文件。在回放模式下,Xnee讀取Xnee Session中的事件,模仿整個錄制過程(即用戶操作過程)完成和x server之間的通訊,被錄制的應用軟體(Xclient)則接收來自xserver的消息,完成預設的動作。
(二)LDTP測試工具/框架
Linux Desktop Testing Project(LDTP)測試工具/框架能夠基於用戶在應用界面的選擇進行腳本的錄制。LDTPI具使用了Gnome環境下的Accessibility庫即輔助選項庫(at-spi)。使用輔助選項能夠獲得應用通過AT-SPI協議提供的關於用戶界面的信息和界面控制項的當前狀態或者屬性。LDTPI具/框架的體系結構如下:
AT-SPI的基礎思想就是為用戶界面的可視化元素提供對應的輔助對象,而錄制完成的每個腳本的執行都是基於這些輔助對象進行的。對於希望利用LDTPI具進行測試的應用,需要激活輔助選項。
(三)GUI自動化測試工具的應用
在實際的GUI自動化測試中,LDTPI具應用的場景會更廣泛一些。LDTPI具可以識別窗口中的對象(如按鈕),測試腳本使用LDTP的API介面,每個API介面對UI對象進行操作判局瞎存在兩個最基本的入口,即窗口和對象臘早,窗口通過窗口的類型和名稱(即標題)識別,對象通過希望操作的控制項的類型和名稱(標簽或者關聯的標簽)識別。我們同樣可以通過at-pokel具展現激活了輔助選項的應用程序窗口的對象及對象屬性。在測試Linux桌面產品和伺服器產品的過程中,使用LDTPI具可以測試任何啟用輔助選項的Gnome應用,如Mozilla,OpenOffice.org、Evolution郵件客戶端,Nautilus文件瀏覽器等等,此外還可以測試UI界面基於Swing的Java應用,以及KDE4.O上基於QT4.0的應用等等。
而Xneel具所針對的應用程序類型就沒有特別的限制,對於一些簡單的窗口驗證測試和界面的穩定性測試等則比較有效。Xnee相對於基於控制項方式捕獲和回放的工具而言,不用擔心存在控制項不能被識別的問題。
從使用的情況來看,各個工具也都因為實現技術而存在一定的缺陷,如兩個工具均不能插入驗證點,從而不能實現用例級別的結果驗證;LDTP對於界面的個別元素捕獲不到以及不能對不支持輔助選項的應用進行測試等等;而Xneel具生成的腳本可編輯性差,同時由於錄制生成的腳本中的事件和屏幕坐標相關,因此當出現窗口彈出位置發生變化等問題時,就需要考慮回放時應該如何來處理這些變化。
❺ 請教linux的SPI驅動問題
內核版本2.6.30。編進內核的SPI驅動,通過看代碼我明白了,大致過程是這樣:
1、先創建一個spi_board_info結構描述spi設備信息,調用spi_register_board_info將這個結構添加到board_list中。
2、然後調用spi_register_master注冊SPI控制器驅動,此時會調用scan_boardinfo掃描board_list,根據spi_board_info調用spi_new_device生成spi_device結構,用spi_add_device添加設備。
3、調用spi_register_driver注冊spi_driver,通過與device匹配驅動設備。