博客專欄

        EEPW首頁 > 博客 > RK3568驅動指南|第二篇 字符設備基礎-第16章 一個驅動兼容不同設備實驗

        RK3568驅動指南|第二篇 字符設備基礎-第16章 一個驅動兼容不同設備實驗

        發布人:紅李亞 時間:2024-04-17 來源:工程師 發布文章

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

        第16章 一個驅動兼容不同設備實驗
        在Linux中,使用主設備號來表示對應某一類驅動,使用次設備號來表示這類驅動下的各個設備。假如現在驅動要支持的主設備號相同,但是次設備號不同的設備。驅動程序要怎樣編寫呢,上一章節學習的私有數據private_date在此時就派上了用場,具體是怎樣使用的呢,多個設備是如何在一個驅動中兼容的呢,帶著疑問,讓我們開始本章節的學習吧。

        16.1 container_of函數簡介
        container_of在Linux內核中是一個常用的宏,用于從包含在某個結構中的指針獲得結構本身的指針,通俗地講就是通過結構體變量中某個成員的首地址進而獲得整個結構體變量的首地址。那么可以使用這個函數獲取不同設備的地址,來對不同的設備進行操作,從而一個驅動可以兼容不同的設備。

        container_of

        函數原型:

        container_of(ptr,type,member)

        函數作用:

        通過結構體變量中某個成員的首地址獲取到整個結構體變量的首地址。

        參數含義:

        ptr是結構體變量中某個成員的地址。

        type是結構體的類型

        member是該結構體變量的具體名字

        container_of宏的作用是通過結構體內某個成員變量的地址和該變量名,以及結構體類型。找到該結構體變量的地址。

        16.2 實驗程序編寫
        16.2.1 驅動程序編寫
        本驅動程序對應的網盤路徑為:iTOP-RK3568開發板【底板V1.7版本】\03_【iTOP-RK3568開發板】指南教程\02_Linux驅動配套資料\04_Linux驅動例程\11\module。

        本章實驗將使用container_of函數編寫一個驅動兼容不同設備的實例代碼,編寫完成的代碼如下所示:

          

          

        16.2.2 編寫測試 APP
        本應用程序對應的網盤路徑為:iTOP-RK3568開發板【底板V1.7版本】\03_【iTOP-RK3568開發板】指南教程\02_Linux驅動配套資料\04_Linux驅動例程\11\app。

        編寫應用程序,打開生成的倆個設備,并向倆個設備中寫入數據,編寫完成的應用程序app.c代碼如下所示:

         16.3 運行測試

        16.3.1 編譯驅動程序

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

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

          16.3 運行測試

        16.3.1 編譯驅動程序

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

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

          然后使用命令“make”進行驅動的編譯,編譯完成如下圖(圖16-2)所示:

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

          至此我們的驅動模塊就編譯成功了,下面進行應用程序編譯

        16.3.2 編譯應用程序
        因為測試APP是要在開發板上運行的,所以需要aarch64-linux-gnu-gcc來編譯,輸入以下命令,編譯完成以后會生成一個app的可執行程序,如下圖(圖 16-4)所示:

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

          下面進行驅動程序的測試。

        16.3.2 運行測試
        驅動模塊file.ko和測試程序app都已經準備好了,接下來就是運行測試。

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

        insmod file.ko

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

          運行應用程序,如下(圖 16-10)所示:

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


        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: 開發板

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 铜陵市| 金阳县| 南涧| 临泽县| 长泰县| 昭通市| 融水| 石楼县| 隆昌县| 芒康县| 观塘区| 祁连县| 新建县| 鄂托克前旗| 华阴市| 江口县| 靖远县| 榆林市| 雷州市| 泉州市| 张家港市| 文成县| 当雄县| 米易县| 方正县| 奎屯市| 隆昌县| 锡林郭勒盟| 湾仔区| 新安县| 龙里县| 宁德市| 毕节市| 肇东市| 襄樊市| 梁平县| 班戈县| 武威市| 且末县| 台北市| 佛教|