zybo的linux开发教程,Zybo全栈开发入门教程——连载三:创建Linux设备驱动和应用程序...
作者:Commanderfranz,編譯: kenshin
通過前面兩篇文章我們不僅創(chuàng)建的自定義IP模塊還移植了Linux操作系統(tǒng),今天這篇文章的內(nèi)容是將這兩部分聯(lián)系起來,其實我們創(chuàng)建的myLed IP相對于Linux操作系統(tǒng)可以是它的一個底層設(shè)備,因為PS總線為myLed IP分配了尋址地址,這樣我們就可以創(chuàng)建myLed IP模塊的硬件驅(qū)動,然后搭建應(yīng)用程序,實現(xiàn)軟硬件協(xié)同設(shè)計。
當(dāng)然開始之前還需要大家了解一下Linux驅(qū)動的基礎(chǔ)知識,以及Makefile的用法。
步驟一:設(shè)置工作目錄,創(chuàng)建Makefile
我們先建立drivers的工作目錄,并在此目錄下編寫好Makefile文件(如上圖)。Makefile文件定義了編譯規(guī)則,只需要使用make命令就可以實現(xiàn)整個工程的自動化編譯。
步驟二:編寫myLed模塊驅(qū)動源文件
我們的要求是當(dāng)這個模塊加載后會在linux的/proc/目錄創(chuàng)建一個可操作的文件myled,通過向這個文件寫入數(shù)據(jù)可以控制zybo板卡上led燈的亮滅狀態(tài)(根據(jù)myLed IP功能邏輯相關(guān))。
步驟三:編譯驅(qū)動程序,生成驅(qū)動模塊
直接使用make命令即可,但是注意make命令之前確保已經(jīng)配置了交叉編譯環(huán)境。生成的myLed.ko文件就是我們需要的驅(qū)動模塊。
步驟四:修改設(shè)備樹文件
從上圖我們可以看到myLed模塊的尋址空間為0x43c30000—0x43c3FFFF,因此我們要在設(shè)備數(shù)源碼文件中加入這個設(shè)備節(jié)點。
源碼修改完成后我們要重新編譯生成devicetree.dtb文件
步驟五:測試驅(qū)動模塊
我們將驅(qū)動模塊myLed.ko文件和修改后的devicetree.dtb文件拷貝到SD卡,重新讓zybo以SD卡模式啟動。
通過insmod和rmmod命令我們可以加載和卸載驅(qū)動模塊,加載myled.ko模塊后我們可以看到在/proc/目錄下可以看到myled文件,并且支持?jǐn)?shù)據(jù)的讀寫操作,說明驅(qū)動程序一切正常。
步驟六:創(chuàng)建應(yīng)用程序led_blink.c
在目錄內(nèi)創(chuàng)建user_app文件夾,然后創(chuàng)建led_blink.c程序。這個應(yīng)用程序通過向/proc/myled文件分別寫入0x0F和0x00數(shù)據(jù)實現(xiàn)四個Led燈的亮滅,達到閃爍的效果。
步驟七:編譯應(yīng)用程序
編譯方式我們同樣采用Makefile方式,編譯規(guī)則如上圖所示,修改makefile。
通過make命令生成了可執(zhí)行應(yīng)用程序led_blink。
步驟八:功能測試
我們需要將上一步中生成的led_blink拷貝到SD卡,然后zybo重新上電以SD卡模式啟動
啟動完畢后我們手動掛載SD卡到/mnt/目錄下,然后通過insmod myled.ko命令安裝驅(qū)動模塊,最后執(zhí)行我們的應(yīng)用程序(./led_blink),我們會看到zybo板卡上的四個led燈的閃爍狀態(tài)。
至此zybo全棧開發(fā)入門教程也告一段落,Zynq開發(fā)方式不同于傳統(tǒng)的FPGA或者ARM開發(fā),它將兩者友好的進行了結(jié)合,實現(xiàn)了軟硬件協(xié)同設(shè)計。當(dāng)然在實際的項目中工程量比較大也是需要進行任務(wù)分工的,本系列入門教程只是讓大家對zynq全面的開發(fā)模式具有了一個了解,當(dāng)然更深入的內(nèi)容還需要各位親自動手來體會。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的zybo的linux开发教程,Zybo全栈开发入门教程——连载三:创建Linux设备驱动和应用程序...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux rpm mysql mysq
- 下一篇: linux 二进制差分工具,打造Andr