博客專欄

        EEPW首頁 > 博客 > RK3568驅動指南|第二篇 字符設備基礎-第12章 字符設備驅動框架實驗

        RK3568驅動指南|第二篇 字符設備基礎-第12章 字符設備驅動框架實驗

        發布人:紅李亞 時間:2024-03-19 來源:工程師 發布文章
        瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工藝,搭載一顆四核Cortex-A55處理器和Mali G52 2EE 圖形處理器。RK3568 支持4K 解碼和 1080P 編碼,支持SATA/PCIE/USB3.0 外圍接口。RK3568內置獨立NPU,可用于輕量級人工智能應用。RK3568 支持安卓 11 和 linux 系統,主要面向物聯網網關、NVR 存儲、工控平板、工業檢測、工控盒、卡拉 OK、云終端、車載中控等行業。
        第12章 字符設備驅動框架實驗
        下面對前面三個章節進行總結,首先驅動向Linux內核進行設備號申請,之后的字符設備注冊時,會對申請的設備號進行使用。而Linux 內核會將字符設備抽象成一個具體的struct cdev結構體,該結構體記錄了字符設備的字符設備號、內核對象等信息,cdev_init(…)函數對結構體進行初始化之后,cdev_add(…)函數將設備號和cdev結構體進行鏈接,這時設備號才真正指向了內核中注冊的設備。設備注冊成功之后,此時還不能對字符設備進行文件操作,所以需要設備節節點來充當內核和用戶層通信的橋梁,至此,前面三個章節就總結完成了,以上步驟并沒有涉及到操作設備文件,本章節將對字符設備框架進行最終的完善。

        12.1 文件操作集簡介
        在進行注冊字符設備實驗章節中,使用cdev_init(…)函數對struct cdev結構體類型變量和struct file_operations結構體類型變量相鏈接,struct file_operations結構體就是把系統調用和驅動程序關聯起來的關鍵數據結構。該結構體的每一個成員都對應著一個系統調用,讀取file_operation中相應的函數指針,接著把控制權轉交給函數,從而完成了Linux設備驅動程序的工作。

        file_operations結構體定義在“內核源碼/include/linux/fs.h”文件中,下面對部分常用函數進行說明:
        struct module *owner;
        owner是第一個 file_operations 成員,它并不是一個操作, 而一個指向擁有該結構的模塊的指針,避免正在操作時被卸載,一般為初始化為THIS_MODULES (在 <linux/module.h> 中定義的宏)
        ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
        read函數指針用來從設備中同步讀取數據,讀取成功返回讀取的字節數。與應用程序中的 read函數對應。
        ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
        write函數指針用來發送數據給設備. 寫入成功返回寫入的字節數。與應用程序中的write函數對應。
        long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
        unlocked_ioctl函數指針提供對于設備的控制功能,與應用程序中的ioctl函數對應。
        int (*open) (struct inode *, struct file *);
        open函數指針用于打開設備,與應用程序中的open函數對應。
        int (*release) (struct inode *, struct file *);
        release函數指針在file結構體釋放時被調用
        至此對于file_operations文件操作集的部分常用函數就介紹完了,填充了部分常用函數的 file_operations結構體如下(圖12-1)所示:
        static struct file_operations cdev_fops_test = {
        .owner = THIS_MODULE,//將owner字段指向本模塊,可以避免在模塊的操作正在被使用時卸載該模塊
        .open = chrdev_open,//將open字段指向chrdev_open(...)函數
        .read = chrdev_read,//將open字段指向chrdev_read(...)函數
        .write = chrdev_write,//將open字段指向chrdev_write(...)函數
        .release = chrdev_release,//將open字段指向chrdev_release(...)函數
        };//定義file_operations結構體類型的變量cdev_test_ops
        會在下個小節進行字符設備驅動框架實驗代碼的編寫,在上一章節實驗的基礎上加入file_operations結構體,并通過應用程序對字符設備驅動進行文件操作測試。
        更多內容可以B站搜索:迅為RK3568,關注公眾號:迅為電子


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



        關鍵詞: 開發板

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 保靖县| 通山县| 武威市| 灌南县| 德安县| 邯郸县| 怀集县| 墨玉县| 云浮市| 商都县| 夏津县| 田东县| 大荔县| 海盐县| 大邑县| 孟津县| 渝北区| 安化县| 田阳县| 西峡县| 浦东新区| 江陵县| 青浦区| 沙河市| 南充市| 湖州市| 曲阳县| 米脂县| 即墨市| SHOW| 江门市| 宣城市| 尼玛县| 泊头市| 衡山县| 古蔺县| 景泰县| 望奎县| 来凤县| 壤塘县| 富源县|