最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

5、聯(lián)網更新并安裝最新的樹莓派Raspbian OS,編譯生成PCIe ko驅動文件

2021-06-15 16:38 作者:神電測控  | 我要投稿

?? ?5.1、更新樹莓派系統(tǒng)

?????? ?進入VNC虛擬桌面之后,打開里面的CMD窗口,輸入update指令,將樹莓派系統(tǒng)更新到最新版本,因為出廠的時候,樹莓派核心板里面的系統(tǒng)不一定是最新的,另外,在進行更新的時候,一定要保證樹莓派的Wifi能上網。

?????? 具體操作的指令過程如下:

1)????? 首先通過更新存儲庫軟件包列表:sudo apt update

2)????? 更新完成后,再運行升級命令:sudo apt dist-upgrade

3)????? 按照所有提示進行操作,然后等待樹莓派升級完成后,鍵入:sudo apt clean

這條指令可以將升級過程中已下載的所有不需要的文件清除掉,節(jié)省空間。

4)????? 輸入重啟指令:sudo reboot

樹莓派重新啟動后,即可進入最新版本的Raspbian OS!

?? ?5.2、在樹莓派系統(tǒng)里面添加后續(xù)需要參與編譯的Headers和Build文件夾

?????? ?使用樹莓派編譯Linux驅動時,需要在/lib/moudles/*/ 目錄下存在build文件夾以及相關的頭文件,但是樹莓派為了節(jié)省內存空間,所以出廠原生的Raspbian系統(tǒng)是沒有這個Build文件夾的。此時,我們需要安裝Linux Headers內核相關文件。

?????? ?同理,樹莓派下的Linux Headers安裝不同于其他平臺,需要使用帶管理員權限的命令進行安裝:sudo apt install raspberrypi-kernel-headers

?????? ?安裝完成后,打開樹莓派/lib/modules/5.10.17-v7l+路徑,就有了相應的build文件夾了,如圖9-61所示。這個Build里面包含了很多樹莓派系統(tǒng)所需要的編譯文件。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

圖9-61:執(zhí)行headers安裝指令可以下載安裝build文件夾相關文件

?? ? ? ? 細心的用戶,發(fā)現(xiàn)了,在modules文件夾里面有4個跟Raspbian系統(tǒng)相關的文件夾,如圖9-62所示,為什么我們選擇的是5.10.17-v7l+?是因為我們買的這個工業(yè)級樹莓派CM4里面的CPU ARM內核是Cortex-A72,對應的版本是V7L,用戶可以通過輸入sudo uname -a查看到,如圖9-63所示。里面還有一個V8的,這個說明Raspbian樹莓派系統(tǒng)支持V8架構的ARM芯片,在后續(xù)Pro6這本書里面,我們重點給用戶介紹國產的RK3399芯片,就是V8架構,支持64位Linux系統(tǒng)。

圖9-62:找到樹莓派里面對應版本的內核文件


?? ?5.3、從Xillybus官網上下載Linux系統(tǒng)下的FPGA PCIe接口c文件和makefile文件(通過VNC拷貝到樹莓派里面并進行解壓)

?????? ?首先,在瀏覽器里面輸入Xillybus.com,然后找到PCIe資料的下載鏈接:http://xillybus.com/pcie-download/,在這個頁面的下方找到支持Linux系統(tǒng)的PCIe驅動源文件,如圖9-64所示。下載下來的是一個名為“xillybus.tar.gz”壓縮包,里面主要包含Makefile編譯約束,udev文件和簡單的C語言測試程序。

圖9-64:在Xillybus官網上找到Linux系統(tǒng)下的PCIe驅動源文件

? ? ? ? 接下來,用戶有兩種方式可以將這個xillybus.tar.gz文件拷貝到樹莓派上,一是用U盤拷貝,二是用VNC遠程虛擬桌面直接傳輸,這里推薦大家用VNC來操作。在VNC虛擬桌面的上方隱藏了一個工具欄,如圖9-65所示。

圖9-65:將鼠標移動VNC頂部彈出工具欄

? ? ? ? 將鼠標移到VNC虛擬桌面中間頂部,出現(xiàn)工具欄之后,點擊中間的“Transfer files”按鈕,在彈出來的對話框里面將我們剛剛從Xillybus官網上下載到本地電腦的壓縮包文件傳輸?shù)綐漭勺烂嫔?,如圖9-66所示。

圖9-66:將本地電腦上的“xillybus.tar.gz”文件傳輸?shù)綐漭勺烂嫔?/figcaption>

? ? ? ? 然后點擊樹莓派左上角的“新建文件夾”按鈕,在pi根目錄下,新建一個名為“Xillybus-PCIe”的文件夾,如圖9-67所示。

圖9-67:在樹莓派的根目錄下新建一個名為“Xillybus-PCIe”文件夾

? ? ? ? 再把樹莓派桌面上的壓縮包文件“xillybus.tar.gz”利用鼠標左鍵按住之后,直接拖拽到剛剛新建的“Xillybus-PCIe”文件夾里面,如圖9-68所示。

圖9-68:將傳輸?shù)綐漭勺烂嫔系摹皒illybus.tar.gz”文件拖到“Xillybus-PCIe”文件夾里面

? ? ? ? 然后右擊“xillybus.tar.gz”壓縮包,選擇“提取到此處”,如圖9-69所示。相當于將這個壓縮包里面的文件解壓出來,當然,熟悉Linux指令的用戶,也可以通過命令的方式來完成拷貝和解壓,這里選擇利用VNC和鼠標進行操作,可以簡化Linux開發(fā)調試門檻。

?????? ?解壓之后,可以看到里面一共有2個文件夾和1個README.TXT文件,如圖9-70所示。其中,README文件告訴用戶這些文件的含義,比如,里面的兩個文件夾,分別存放的文件是用來做什么的:

?????? ?* module - The kernel module source + udev file

?????? ?* demoapps - Sample C userspace programs for trial and hacking

?????? ?其中,module文件夾里面的是用來編譯生成ko驅動文件所需的makefile和各種c和h文件以及rules文件;demoapps文件夾里面是給用戶參考的PCIe應用程序示例,后續(xù)我們就是基于這些例程進行改寫之后,生成Linux下的so動態(tài)鏈接庫的,類似Windows系統(tǒng)下的DLL。

圖9-69:將“xillybus.tar.gz”壓縮包解壓到相同目錄下
圖9-70:“xillybus.tar.gz”解壓之后的原始文件

? ? ? ? 至此,關于Linux系統(tǒng)下的Xillybus源文件準備工作就完成了。

?? 5.4、查看樹莓派Raspbian OS系統(tǒng)位寬

?????? ?在開始編譯Xillybus驅動文件之前,我們還需要確認一下當前樹莓派里面安裝的Linux系統(tǒng)位寬,到底是32位還是64位系統(tǒng),因為這個位寬決定了后續(xù)編譯KO文件時的條件選擇。我們可以在LXterminal終端里面輸入指令:getconf LONG_BIT,然后回車就能看到,如圖9-71所示。返回的是32,說明當前的Linux系統(tǒng)是32位的,如果返回的是64,就是64位系統(tǒng)。

圖9-71:獲取當前樹莓派里面的系統(tǒng)位寬


?? 5.5、在Linux系統(tǒng)下編譯Xillybus文件并生成KO驅動文件(神電測控已經提前編譯好了,可以跳過這一步)

?????? ?Xillybus官方提供的Linux系統(tǒng)源文件里面有兩處需要進行修改,否則編譯的時候會報錯。第一處是把/home/pi/Xillybus-PCIe/xillybus/module文件夾里面的xillybus_pcie.c文件里面的這個頭文件“l(fā)inux/pci-aspm.h”聲明給注釋掉,如圖9-72所示。這個aspm里面包含的是一套對PCIe總線進行電源管理的函數(shù),感興趣的用戶可以上網找一下這方面的資料自行研究。

圖9-72:雙擊打開xillybus_pcie.c文件,將里面的aspm頭文件給注釋掉

? ? ? ? 另外就是,前面我們獲取的樹莓派Raspbian系統(tǒng)位寬是32位的,而Xillybus官方提供的xillybus_pcie.c源文件里面默認支持的是64位的系統(tǒng),所以我們需要將里面的這段代碼注釋掉,或者添加if條件語句,如圖9-73所示。使其強行支持32位的Linux系統(tǒng),這樣后續(xù)Linux對PCIe板卡進行驅動加載和枚舉的時候,分配的地址和Memory空間就不會錯亂,如果是32的Linux系統(tǒng),這里不做任何處理的話,后續(xù)識別PCIe FPGA板卡的時候,會出現(xiàn)圖9-74所示的錯誤,也就是Memory所需空間無法正常分配,當然了,如果用戶在樹莓派或者RK3399上面移植的是64位Linux系統(tǒng),那么這里就不需要添加if語句了?。?!

圖9-73:雙擊打開xillybus_pcie.c文件,按照系統(tǒng)位寬增加if條件判斷,消除bug
圖9-74:如果不增加if條件判斷,那么在32位Linux系統(tǒng)上面識別PCIe FPGA板卡會提示分配DMA內存空間失敗

? ? ? ? xillybus_pcie.c文件根據(jù)使用環(huán)境修改完成后,保存關閉,然后我們就可以使用Linux gcc編譯器來編譯這些c文件和makefile文件生成ko驅動文件了。具體過程如下:

1)????? 首先判斷一下樹莓派Raspbian系統(tǒng)里面是否存在gcc編譯器,用戶可以通過在LXterminal終端里面輸入指令:sudo gcc,如果返回的是“command not found”,說明這臺樹莓派系統(tǒng)里面沒有安裝過gcc編譯器。則跳入2),如果窗口返回的是“gcc: no input files”,說明Linux系統(tǒng)里面已經安裝了gcc,則跳入3).

2)????? 因此,我們需要在線給樹莓派里面安裝一下gcc編譯器,用戶可以輸入指令:sudo apt-get install gcc make kernel-devel-$(uname -r),安裝成功后,再執(zhí)行sudo gcc可以看到返回的信息變了,如圖9-75所示。

圖9-75:通過輸入 sudo gcc來判斷當前環(huán)境下是否存在gcc編譯器

3)????? 接下來,利用cd命令定位到Xillybus-PCIe文件夾里面的module文件夾,也就是這個目錄:Xillybus-PCIe/xillybus/module,如圖9-76所示。

圖9-76:利用cd指令定位到包含xillybus相關源文件的module文件夾路徑下

4)????? 然后,我們直接輸入sudo make指令對module文件夾下的所有文件進行編譯,如果編譯過程沒有任何錯誤提示,如圖9-77所示,說明編譯成功了,并且module文件夾里面多出來了很多后綴名為ko的驅動文件,如圖9-78所示。其中,最為重要的兩個ko驅動文件就是xillybus_core.ko和xillybus_pcie.ko,從源文件和PCIe驅動加載過程來看,前者xillybus_core.ko是被后者xillybus_pcie.ko調用的。

圖9-77:利用sudo make指令將module文件夾里面的源文件進行編譯生成ko文件
圖9-78:編譯成功后生成的兩個最為核心的ko文件

5)????? 接下來,我們以管理員權限的命令將上面編譯出來的兩個ko文件拷貝到樹莓派Raspbian OS的內核驅動文件夾里面,具體的路徑可以參考下面的命令,如圖9-79所示。需要注意的是,modules后面的系統(tǒng)版本可以通過uname -a命令查看到。打開命令行里面的路徑,可以看到兩個ko文件成功地拷貝進來了,如圖9-80所示。

sudo cp xillybus_core.ko /lib/modules/5.10.17-v7l+/kernel/drivers/char/

sudo cp xillybus_pcie.ko /lib/modules/5.10.17-v7l+/kernel/drivers/char/

圖9-79:將編譯生成的兩個ko驅動文件拷貝到Linux內核的driver驅動文件夾里面去
圖9-80:兩個ko文件拷貝成功


?? 5.6、在樹莓派里面安裝支持Xilinx FPGA PCIe接口的KO驅動(通過lsmod和lspci可以查看插到樹莓派上的PCIe板卡識別狀態(tài),必須要創(chuàng)建出16個文件才算是成功(8上8下))

1)????? 拷貝成功后,我們還需要將ko驅動文件安裝到樹莓派Linux系統(tǒng)里面去,可以輸入指令:depmod -a,來完成靜態(tài)安裝,如圖9-81所示。如果用戶不放心的話,還可以通過sudo make install指令強行安裝ko驅動文件,如圖9-82所示。

圖9-81:靜態(tài)安裝兩個ko驅動文件
圖9-82:通過make install強制安裝兩個ko驅動文件

2)????? 當通過depmod -a指令獲取到所有的文件依賴關系后,用戶還需要通過sudo modprobe xillybus_pcie指令來加載所有跟Xillybus驅動相關的模塊到系統(tǒng)里面來,如圖9-83所示。

圖9-83:利用modprobe指令加載xillybus驅動依賴的所有模塊

3)????? 為了判斷Xillybus驅動是否成功安裝和加載,用戶可以通過輸入lsmod指令進行查詢,如圖9-84所示??梢钥闯?,兩個xillybus相關的ko驅動都加載和運行了,其中xillybus_core有一個被xillybus_pcie調用的進程。

圖9-84:利用lsmod指令查看樹莓派系統(tǒng)里面所有的模塊加載和運行情況(Xillybus)

4)????? 最后一步是,將樹莓派關機,斷電,然后把我們Pro4開發(fā)寶典里面的FPGA bit文件生成bin文件之后固化到黑金的AX7103 FPGA開發(fā)板上,然后利用PCIex8轉PCIex1轉接線接到樹莓派上,實物接線,如圖9-85所示。給樹莓派上電,大約10s之后,F(xiàn)PGA開發(fā)板上的LED1指示燈閃爍起來,說明我們的PCIe FPGA開發(fā)板成功地被樹莓派識別和加載了,這是因為FPGA里面運行的bit文件我們加入了PCIe通信IP核代碼,不熟悉的用戶可以參考我們編寫的Pro4開發(fā)寶典,這里不再贅述了!

圖9-85:將固化了FPGA bit文件的FPGA開發(fā)板通過PCIe線纜接到工業(yè)級樹莓派上面

5)????? 然后打開VNC進入樹莓派虛擬桌面,在LXterminal命令終端里面輸入lspci指令,查看我們的PCIe FPGA板卡是否被樹莓派成功識別了,如圖9-86所示。


圖9-86:利用lspci查看樹莓派里面所有的PCI設備情況

6)????? 上面這個lspci命令無法看到具體的系統(tǒng)識別和加載過程,如果用戶希望能夠看到樹莓派Linux系統(tǒng)對PCIe FPGA設備的完整加載過程,可以輸入這個指令:grep -i xillybus /var/log/syslog | less,如圖9-87所示,它可以將系統(tǒng)日志里面所有關于xillybus關鍵字的信息全部找出來??梢钥闯?,Linux系統(tǒng)識別成功后,一共創(chuàng)建了16個讀寫文件,這是因為我們在FPGA里面下載的bit文件里面包含的PCIe通道是8上8下,共計16個獨立的通道,每個通道對應一個文件名,對PCIe設備的讀寫操作實際上就是對映射出來的文件進行讀寫。

圖9-87:利用grep指令查看系統(tǒng)日志,找到xillybus pcie驅動加載過程


5、聯(lián)網更新并安裝最新的樹莓派Raspbian OS,編譯生成PCIe ko驅動文件的評論 (共 條)

分享到微博請遵守國家法律
奉节县| 苏尼特右旗| 乌拉特前旗| 延边| 图木舒克市| 陇南市| 西平县| 宜宾市| 沅陵县| 河源市| 高碑店市| 汉川市| 隆化县| 淳化县| 保亭| 景德镇市| 襄城县| 兴海县| 从江县| 密山市| 乌兰察布市| 灵台县| 封开县| 临海市| 紫金县| 佛冈县| 静海县| 临泽县| 阆中市| 乐安县| 抚顺县| 霍林郭勒市| 米泉市| 滦平县| 响水县| 乐业县| 玉山县| 黑水县| 虎林市| 三穗县| 浦北县|