色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          "); //-->

          博客專欄

          EEPW首頁(yè) > 博客 > RK3568驅(qū)動(dòng)指南|第二篇 字符設(shè)備基礎(chǔ)-第16章 一個(gè)驅(qū)動(dòng)兼容不同設(shè)備實(shí)驗(yàn)

          RK3568驅(qū)動(dòng)指南|第二篇 字符設(shè)備基礎(chǔ)-第16章 一個(gè)驅(qū)動(dòng)兼容不同設(shè)備實(shí)驗(yàn)

          發(fā)布人:紅李亞 時(shí)間:2024-04-17 來源:工程師 發(fā)布文章

          瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工藝,搭載一顆四核Cortex-A55處理器和Mali G52 2EE 圖形處理器。RK3568 支持4K 解碼和 1080P 編碼,支持SATA/PCIE/USB3.0 外圍接口。RK3568內(nèi)置獨(dú)立NPU,可用于輕量級(jí)人工智能應(yīng)用。RK3568 支持安卓 11 和 linux 系統(tǒng),主要面向物聯(lián)網(wǎng)網(wǎng)關(guān)、NVR 存儲(chǔ)、工控平板、工業(yè)檢測(cè)、工控盒、卡拉 OK、云終端、車載中控等行業(yè)。

          第16章 一個(gè)驅(qū)動(dòng)兼容不同設(shè)備實(shí)驗(yàn)
          在Linux中,使用主設(shè)備號(hào)來表示對(duì)應(yīng)某一類驅(qū)動(dòng),使用次設(shè)備號(hào)來表示這類驅(qū)動(dòng)下的各個(gè)設(shè)備。假如現(xiàn)在驅(qū)動(dòng)要支持的主設(shè)備號(hào)相同,但是次設(shè)備號(hào)不同的設(shè)備。驅(qū)動(dòng)程序要怎樣編寫呢,上一章節(jié)學(xué)習(xí)的私有數(shù)據(jù)private_date在此時(shí)就派上了用場(chǎng),具體是怎樣使用的呢,多個(gè)設(shè)備是如何在一個(gè)驅(qū)動(dòng)中兼容的呢,帶著疑問,讓我們開始本章節(jié)的學(xué)習(xí)吧。

          16.1 container_of函數(shù)簡(jiǎn)介
          container_of在Linux內(nèi)核中是一個(gè)常用的宏,用于從包含在某個(gè)結(jié)構(gòu)中的指針獲得結(jié)構(gòu)本身的指針,通俗地講就是通過結(jié)構(gòu)體變量中某個(gè)成員的首地址進(jìn)而獲得整個(gè)結(jié)構(gòu)體變量的首地址。那么可以使用這個(gè)函數(shù)獲取不同設(shè)備的地址,來對(duì)不同的設(shè)備進(jìn)行操作,從而一個(gè)驅(qū)動(dòng)可以兼容不同的設(shè)備。

          container_of

          函數(shù)原型:

          container_of(ptr,type,member)

          函數(shù)作用:

          通過結(jié)構(gòu)體變量中某個(gè)成員的首地址獲取到整個(gè)結(jié)構(gòu)體變量的首地址。

          參數(shù)含義:

          ptr是結(jié)構(gòu)體變量中某個(gè)成員的地址。

          type是結(jié)構(gòu)體的類型

          member是該結(jié)構(gòu)體變量的具體名字

          container_of宏的作用是通過結(jié)構(gòu)體內(nèi)某個(gè)成員變量的地址和該變量名,以及結(jié)構(gòu)體類型。找到該結(jié)構(gòu)體變量的地址。

          16.2 實(shí)驗(yàn)程序編寫
          16.2.1 驅(qū)動(dòng)程序編寫
          本驅(qū)動(dòng)程序?qū)?yīng)的網(wǎng)盤路徑為:iTOP-RK3568開發(fā)板【底板V1.7版本】\03_【iTOP-RK3568開發(fā)板】指南教程\02_Linux驅(qū)動(dòng)配套資料\04_Linux驅(qū)動(dòng)例程\11\module。

          本章實(shí)驗(yàn)將使用container_of函數(shù)編寫一個(gè)驅(qū)動(dòng)兼容不同設(shè)備的實(shí)例代碼,編寫完成的代碼如下所示:

            

            

          16.2.2 編寫測(cè)試 APP
          本應(yīng)用程序?qū)?yīng)的網(wǎng)盤路徑為:iTOP-RK3568開發(fā)板【底板V1.7版本】\03_【iTOP-RK3568開發(fā)板】指南教程\02_Linux驅(qū)動(dòng)配套資料\04_Linux驅(qū)動(dòng)例程\11\app。

          編寫應(yīng)用程序,打開生成的倆個(gè)設(shè)備,并向倆個(gè)設(shè)備中寫入數(shù)據(jù),編寫完成的應(yīng)用程序app.c代碼如下所示:

           16.3 運(yùn)行測(cè)試

          16.3.1 編譯驅(qū)動(dòng)程序

          在上一小節(jié)中的file.c代碼同一目錄下創(chuàng)建 Makefile 文件,Makefile 文件內(nèi)容如下(圖5-4)所示:

            對(duì)于Makefile的內(nèi)容注釋已在上圖添加,保存退出之后,來到存放file.c和Makefile文件目錄下,如下圖(圖16-1)所示:

            16.3 運(yùn)行測(cè)試

          16.3.1 編譯驅(qū)動(dòng)程序

          在上一小節(jié)中的file.c代碼同一目錄下創(chuàng)建 Makefile 文件,Makefile 文件內(nèi)容如下(圖5-4)所示:

            對(duì)于Makefile的內(nèi)容注釋已在上圖添加,保存退出之后,來到存放file.c和Makefile文件目錄下,如下圖(圖16-1)所示:

            然后使用命令“make”進(jìn)行驅(qū)動(dòng)的編譯,編譯完成如下圖(圖16-2)所示:

            編譯完生成 file.ko目標(biāo)文件,如下圖(圖16-3)所示:

            至此我們的驅(qū)動(dòng)模塊就編譯成功了,下面進(jìn)行應(yīng)用程序編譯

          16.3.2 編譯應(yīng)用程序
          因?yàn)闇y(cè)試APP是要在開發(fā)板上運(yùn)行的,所以需要aarch64-linux-gnu-gcc來編譯,輸入以下命令,編譯完成以后會(huì)生成一個(gè)app的可執(zhí)行程序,如下圖(圖 16-4)所示:

          aarch64-linux-gnu-gcc app.c -o app

            下面進(jìn)行驅(qū)動(dòng)程序的測(cè)試。

          16.3.2 運(yùn)行測(cè)試
          驅(qū)動(dòng)模塊file.ko和測(cè)試程序app都已經(jīng)準(zhǔn)備好了,接下來就是運(yùn)行測(cè)試。

          輸入以下命令加載驅(qū)動(dòng)模塊,如下圖(圖 16-6)所示:

          insmod file.ko

            驅(qū)動(dòng)加載成功之后會(huì)生成/dev/test1和/dev/test2設(shè)備驅(qū)動(dòng)文件,輸入以下命令查看設(shè)備,可以看到一個(gè)驅(qū)動(dòng)創(chuàng)建并管理了多個(gè)驅(qū)動(dòng)設(shè)備,如下圖(圖 16-8)所示:

            運(yùn)行應(yīng)用程序,如下(圖 16-10)所示:

            如上圖所示,可以看到用戶順利向倆個(gè)設(shè)備寫入數(shù)據(jù),且每個(gè)設(shè)備擁有私有數(shù)據(jù)。


          *博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



          關(guān)鍵詞: 開發(fā)板

          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉