在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux驅動file_operations結構體函數的作用

麥辣雞腿堡 ? 來源:嵌入式Linux系統開發 ? 作者:嵌入式Linux系統開 ? 2023-07-20 11:08 ? 次閱讀

寫過 Linux 驅動的小伙伴,一定對 file_operations 結構體不陌生,我們常常實現其中的 open、read、write、poll 等函數,今天為大家講解其中每個函數的作用。

1、struct module *owner;

這不是一個操作,它是一個指向擁有這個結構的模塊的指針。用來在它的操作還在被使用時阻止模塊被卸載。一般情況下, 它被簡單初始化為 THIS_MODULE, 一個在《linux/module.h》 中定義的宏。

2、loff_t (*llseek)

llseek 方法用作改變文件中的當前【讀/寫】位置, 并且新位置作為(正的)返回值。錯誤返回負值。

3、ssize_t (*read)

從設備中同步讀取數據,也就是讀節點。讀取成功返回讀取的字節數。

4、ssize_t (*write)

向設備同步發送數據,也就是寫節點。

5、ssize_t (*read_iter)

初始化一個異步讀。可能在函數返回前不結束的讀操作。如果這個方法是 NULL,所有的操作會由 read 代替進行(同步)。

6、ssize_t (*write_iter)

初始化一個異步寫。

7、int (*iterate)

迭代

8、int (*iterate_shared)

共享迭代

9、unsigned int (*poll)

poll 方法是 3 個系統調用的后端:poll, epoll, 和 select, 都用作查詢對一個或多個文件描述符的讀或寫是否會阻塞。poll 方法應當返回一個位掩碼指示是否非阻塞的讀或寫是可能的,并且提供給內核信息用來使調用進程睡眠直到可以進行讀寫。如果一個驅動的 poll 方法為 NULL,設備假定為不阻塞地可讀可寫。

10、long (*unlocked_ioctl)

kernel-2.6 以前,使用的是 ioctl;kernel-2.6 以后,使用 unlocked_ioctl。

11、long (*compat_ioctl)

兼容性的 ioctl,為了讓 32-bit 的 process 可以在 64-bit 上的 system 來執行 ioctl()

12、int (*mmap)

用來請求將設備內存映射到進程的地址空間。一般涉及到圖像方面,會使用此函數,比如 framebuffer。如果這個方法是 NULL,mmap 系統調用返回 -ENODEV。

13、int (*open)

打開文件,盡管這常常是對設備文件進行的第一個操作,不要求驅動聲明一個對應的方法。如果這個項是 NULL,設備打開一直成功,但是你的驅動不會得到通知。

14、int (*flush)

flush 操作在進程關閉它的設備文件描述符的拷貝時調用; 它應當執行(并且等待)設備的任何未完成的操作。我們很少使用 flush,SCSI 磁帶驅動使用它,為確保所有寫的數據在設備關閉前寫到磁帶上。如果 flush 為 NULL,內核簡單地忽略用戶應用程序的請求。

15、int (*release)

在文件結構被釋放時引用這個操作。

16、int (*fsync)

這個方法是 fsync 系統調用的后端, 用戶調用來刷新任何掛著的數據。 如果這個指針是 NULL, 系統調用返回 -EINVAL.

17、int (*fasync)

通知設備 FASYNC 標志發生變化,如果設備不支持異步通知,該字段可以為NULL

18、int (*lock)

lock 方法用來實現文件加鎖; 加鎖對常規文件是必不可少的特性, 但是設備驅動幾乎從不實現它。

19、ssize_t (*sendpage)

它由內核調用來發送數據, 一次一頁,到對應的文件。設備驅動實際上不實現 sendpage。

20、unsigned long (*get_unmapped_area)

這個方法的目的是在進程的地址空間找一個合適的位置來映射在底層設備上的內存段中。 這個任務通常由內存管理代碼進行; 這個方法存在為了使驅動能強制特殊設備可能有的任何的對齊請求。 大部分驅動可以置這個方法為 NULL。

21、int (*check_flags)

這個方法允許模塊檢查傳遞給 fnctl(F_SETFL.。.) 調用的標志。

22、int (*flock)

為解決多進程對同一文件的讀寫沖突,在 Linux 系統中,提供了 flock 這一系統調用,用來實現對文件的讀寫保護,即文件鎖的功能。

23、ssize_t (*splice_write)

類似于 write,splice 用于在兩個文件描述符之間移動數據,是一種重要零拷貝技術。

24、ssize_t (*splice_read)

類似于 read,splice 用于在兩個文件描述符之間移動數據,是一種重要零拷貝技術。

25、int (*setlease)

設置租約?

26、long (*fallocate)

快速創建文件。

27、void (*show_fdinfo)

展示 fd 文件描述符的信息。

28、unsigned (*mmap_capabilities)

mmap 的權限限制信息。

29、ssize_t (*copy_file_range)

Copy a range of data from one file to another.

30、int (*clone_file_range)

將一系列的數據從一個文件復制到另一個文件,希望在這一過程中能以比較優化的方式來完成。

31、ssize_t (*dedupe_file_range)

用于將文件一定范圍內的重復數據消除。

一般情況下,大家只需要實現最常見幾個就可以,比如 llseek、open、read、write、poll 、unlocked_ioctl、mmap、flush 等。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 驅動
    +關注

    關注

    12

    文章

    1878

    瀏覽量

    86346
  • Linux
    +關注

    關注

    87

    文章

    11420

    瀏覽量

    212322
  • 函數
    +關注

    關注

    3

    文章

    4365

    瀏覽量

    63852
收藏 人收藏

    評論

    相關推薦

    ArmSoM系列板卡 嵌入式Linux驅動開發實戰指南 之 字符設備驅動

    的抽象,字符設備設計思路; 字符設備相關的概念以及數據結構,了解設備號等基本概念以及file_operations、file、inode相關數據結構; 字符字符設備
    的頭像 發表于 04-10 09:53 ?1257次閱讀
    ArmSoM系列板卡 嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>驅動</b>開發實戰指南 之 字符設備<b class='flag-5'>驅動</b>

    嵌入式Linux字符驅動LED燈設計

    );MODULE_LICENSE("GPL");2)Linux字符IO驅動設計步驟如下:1.定義描述字符IO設備的結構Linux中,每個
    發表于 02-03 14:28

    編譯字符設備驅動file_operations結構問題?

    file_operations tdd_fops = {read:read_test,open:open_test,release:release_test,};int init_module(void) { int
    發表于 03-31 09:13

    編譯字符設備驅動file_operations結構問題?

    file_operations tdd_fops = {read:read_test,openpen_test,release:release_test,};int init_module(void
    發表于 03-31 09:30

    linux驅動-Input輸入子系統

    file_operations結構中的函數。在Input子系統中,這些步驟會分布到不同的層中,最后三個層通過一些聯系構成了一個完整的驅動
    發表于 05-21 00:05

    十一天學會Linux驅動編程(第十天)

    。如上圖所示紅框中的函數“void cdev_init(struct cdev *, const struct file_operations *)”和結構“cdev”。cdev_i
    發表于 01-22 22:24

    芯靈思Sinlinx A33實現linux led驅動

    驅動(和塊設備驅動),注意這里并不是驅動文件設備節點!4) Linux使用file_operations
    發表于 12-25 12:10

    帶大家走進嵌入式Linux-arm驅動開發

    一、本文將會以最簡單的LED驅動程序帶大家走進嵌入式Linux-arm驅動開發,首先,來了解一下最簡單的驅動框架。1.首先struct file_o
    發表于 12-15 07:59

    file_operations函數詳解

    struct file_operations,struct module *owner; // 指向擁有該結構的模塊的指針,避免正在操作時被卸載,一般為初始化為THIS_MODULES
    發表于 06-16 11:30 ?4989次閱讀

    LCD的ARM編程方式,LCD Linux程序如何寫入?

    目前還沒有討論的 file_operations 方法是 ioctl ()。用戶應用程序使用 ioctrl 系統調用操作 LCD 硬件。fb_ops 結構中定義的方法為這些操作提供支 持。注意
    發表于 05-25 14:48 ?1755次閱讀
    LCD的ARM編程方式,LCD <b class='flag-5'>Linux</b>程序如何寫入?

    用戶與內核空間數據交換的方式之一seq_file

    要想使用seq_file功能,開發者需要包含頭文件linux/seq_file.h,并定義與設置一個seq_operations結構(類似于
    發表于 05-14 15:34 ?1610次閱讀

    深入剖析Linux文件系統的架構

    函數都必須由底層派生出的實例實現,使用成員函數 file_operations。在linux里面的文件操作,底層都要實現file_operatio
    發表于 05-16 09:15 ?1142次閱讀
    深入剖析<b class='flag-5'>Linux</b>文件系統的架構

    Linux內核如何使用結構函數指針?

    我將結合具體的Linux內核驅動框架代碼來展示Linux內核如何使用結構函數指針。
    的頭像 發表于 09-06 14:17 ?1238次閱讀
    <b class='flag-5'>Linux</b>內核如何使用<b class='flag-5'>結構</b><b class='flag-5'>體</b>和<b class='flag-5'>函數</b>指針?

    Linux驅動函數接口說明

    *parent, void *data, const struct file_operations *fops); name :要創建的 /sys/kernel/debug 下的目錄名 parent
    的頭像 發表于 09-27 11:20 ?600次閱讀

    怎么編寫Framebuffer驅動程序

    Framebuffer 驅動程序框架 分為上下兩層: fbmem.c:承上啟下 實現、注冊 file_operations 結構 把 APP 的調用向下轉發到
    的頭像 發表于 03-22 09:13 ?767次閱讀
    怎么編寫Framebuffer<b class='flag-5'>驅動</b>程序
    主站蜘蛛池模板: 国产精品一区在线观看你懂的 | 黄色字幕网 | 欧美不卡视频在线 | 四虎精品永久在线网址 | 亚洲第一区视频 | 射吧亚洲| 色婷婷色综合缴情在线 | 国产精品成人观看视频国产奇米 | 日本网站免费观看 | 毛片爽爽爽免费看 | 新激情五月| 爱爱的免费视频 | 日韩在线视频一区 | 色宅男看片午夜大片免费看 | 丁香五香天堂网卡 | 色妹子在线 | 日本一级大片 | 久久国产高清视频 | 国产精品热久久毛片 | 一区二区三区四区视频在线 | 白嫩少妇激情无码 | 一级片在线视频 | 香蕉成人国产精品免费看网站 | 伊人久久狼人 | 精品精品国产高清a毛片牛牛 | 六月激情网 | 色综合色综合色综合色综合 | 种子天堂bt磁力在线资源 | 日本黄色视屏 | 极品国产一区二区三区 | 97久草 | 欧美一级视频免费看 | 欧美极品一区 | 作爱在线观看 | 亚洲三级黄色 | 天堂网www在线资源链接 | 色视频网| 天天干妹子 | sihu永久在线播放地址 | 国产日本三级在线播放线观看 | 青草青青产国视频在线 |