linux設備驅動之字符設備驅動

一、cdev結構體

?成員/功能??說明??相關操作函數/宏?
?kobj?內嵌的kobject對象,用于Linux設備模型管理,實現引用計數和sysfs接口kobject_init()
?owner?指向擁有該結構體的模塊指針(通常為THIS_MODULE),防止模塊卸載時設備仍被使用模塊宏THIS_MODULE
?ops?指向file_operations結構體的指針,定義設備操作接口(如read/writecdev_init()初始化時綁定
?list?鏈表頭,用于將多個cdev連接成鏈表,由內核統一管理list_add()等內核鏈表操作
?dev?設備號(32位),高12位為主設備號,低20位為次設備號MKDEV()MAJOR()MINOR()
?count?設備實例數量(如一個驅動管理多個同類設備)注冊時通過cdev_add()count參數指定
?初始化函數?cdev_init():關聯cdevfile_operationscdev_alloc():動態分配cdev內存cdev_init(struct cdev *, struct file_operations *)
?注冊/注銷函數?cdev_add():向內核注冊設備;cdev_del():注銷設備需配合register_chrdev_region()alloc_chrdev_region()使用
?設備號管理?register_chrdev_region():已知設備號時注冊;alloc_chrdev_region():動態申請未占用設備號釋放設備號需調用unregister_chrdev_region()

?二、字符設備驅動的組成

?組件??功能描述??關鍵數據結構/API??開發注意事項?
?設備號管理?標識設備實例(主設備號區分驅動,次設備號區分實例)dev_t類型、MKDEV()/MAJOR()/MINOR()宏、register_chrdev_region()或動態分配alloc_chrdev_region()48需避免直接操作設備號位寬,使用內核宏保證兼容性4
?cdev結構體?內核中描述字符設備的核心對象,關聯操作方法與設備號struct cdev(含kobjopsdev等成員)、cdev_init()初始化、cdev_add()注冊58需通過cdev_del()注銷防止內存泄漏8
?file_operations?定義設備操作接口(如open/read/write/ioctlstruct file_operations(需實現至少ownerreadwrite等函數指針)35用戶空間數據交互需使用copy_{to,from}_user()保證安全23
?設備文件節點?用戶空間訪問設備的入口(如/dev/xxx手動mknod或自動生成(class_create()+device_create())18推薦自動生成節點以適配現代內核1
?模塊初始化/退出?驅動加載/卸載時的資源管理module_init()/module_exit()宏、資源釋放函數(如unregister_chrdev_region())12必須實現清理邏輯防止殘留2
?同步機制?處理多進程/線程并發訪問mutex_lock()spin_lock()等內核同步原語7需根據場景選擇鎖類型(如互斥鎖適合長時間持有)7
?調試與日志?驅動調試信息輸出printk()分級日志、dynamic_debug動態調試3生產環境需控制日志級別3

注意:

  1. ?完整驅動流程?:設備號申請 →?cdev初始化 → 實現file_operations?→ 注冊設備 → 創建設備節點。
  2. ?用戶空間交互?:通過/dev/下的文件節點調用驅動接口,內核通過file_operations轉發到具體函數。

?

總結:?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/93394.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/93394.shtml
英文地址,請注明出處:http://en.pswp.cn/web/93394.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

★CentOS:MySQL數據備份

一、cp 命令備份特點:優點:備份恢復數據快:直接復制文件,無需進行數據轉換和復雜的處理,因此備份恢復速度非常快缺點:需要停止數據庫服務,靈活性差,占用空間大,可移植性差…

Python代碼規范與靜態檢查(ruff/black/mypy + pyproject.toml + Makefile)自動化工具鏈介紹

文章目錄**1. 核心工具的作用****(1) black:代碼格式化工具****(2) ruff:代碼質量檢查工具****(3) mypy:靜態類型檢查工具****2. pyproject.toml:統一配置中心****示例配置**(pyproject.toml):*…

軟件需求管理過程詳解

需求管理過程需求管理是軟件工程和系統開發中的核心過程,它確保項目始終圍繞正確、穩定且可追溯的需求進行。在復雜系統開發中,需求往往動態變化,需求管理通過系統化的方法控制變更、維護版本、建立追溯關系,從而降低項目風險、保…

MySQL性能優化實戰指南:從入門到精通的完整優化體系

MySQL性能優化實戰指南:從入門到精通的完整優化體系🚀 前言:在當今數據驅動的時代,MySQL作為世界上最流行的開源關系型數據庫,其性能優化能力直接決定了應用系統的響應速度和用戶體驗。本文將從多個維度深入探討MySQL優…

KingbaseES主備讀寫分離集群安裝教程

首先我們先要找數據庫集群安裝軟件和腳本。這里我事先安裝一臺單機。 [rootlocalhost zip]# mkdir -p /home/kingbase/software [rootlocalhost zip]# scp -r * /home/kingbase/software/ #安裝軟件和腳本在單機版本的/opt/Kingbase/ES/V9/ClientTools/guitools/DeployTools/z…

electron程序適配loongArch64

一、原始項目 1.原始程序適配arm,x86國產linux設備;新增需求適配loongArch64麒麟v10sp1。 2.原始devDependencies "devDependencies": {"electron": "^17.2.0","electron-builder": "^23.0.3",}二、可能遇到的問…

窗口系統(windowing system)的架構思考

我想做一個通用窗口系統,窗口、控件等,一切都抽象成樹形結構的層疊矩形塊,可支持半透明、模糊等混合選項,那么每個窗口是不是需要一塊存儲區?我之前的代碼為了計算模糊,還不止一塊,要三塊。那么…

極簡工具箱:安卓工具箱合集

軟件介紹 極簡工具箱是一個安卓工具箱合集軟件;軟件支持安卓。 它支持將近 400 個實用功能,支持將近 40 款單機游戲,提供 140 多個實用網站導航,包括電子書導航、學習導航、設計導航、產品經理導航、大數據導航、文檔格式轉換、…

TOGAF八步一法筆記2

業務需求和驗收標準一旦方向確定,接下來的關鍵就是:創建業務需求、明確驗收標準當“預備階段”完成,能力愿景和范圍被管理層確認后,我們正式進入能力建設的“實施軌道”。而這個軌道的起點,是兩個核心動作:…

各種讀取csv文件的工具性能比較

在翻閱calamine作者的quick-csv存儲庫時無意中看到有個10年前的csv讀取比賽, 把比賽選手源程序下載下來測試看到底有多快。 git clone https://bitbucket.org/ewanhiggs/csv-game.git這些源程序只有比賽程序本身,依賴的文件有的在主頁,有的在makefile中…

HTML <iframe> 標簽 如何把html寫入iframe標簽

標簽 如何把html寫入iframe標簽 使用srcdoc屬性 HTML iframe 標簽 參考 定義和用法 <iframe> 標簽定義行內框架&#xff08;內聯框架&#xff09;。 行內框架用于在當前 HTML 文檔中嵌入另一個文檔。

Java Spark例子程序

目錄spark基礎&rdddocsRDDspark架構Spark 對比 hadoop MapReducespark maven依賴Spark的checkpointtransformations、shuffle、actionsreduceByKey的用法groupByKey的用法count / count distinct例子&#xff1a;單詞計數例子&#xff1a;一批人員年齡數據求平均(rdd)例子&…

《代碼重生:楊蓉與62.webp》

《代碼重生&#xff1a;楊蓉與62.webp》2045年&#xff0c;星耀城。雨絲斜織在量子玻璃幕墻上&#xff0c;霓虹倒影如液態代碼流淌。楊蓉坐在“時光回溯實驗室”的終端前&#xff0c;面前懸浮著一行行泛黃的日志——那是從2018年GitHub快照中提取的原始構建記錄。她指尖輕點&am…

軟考 系統架構設計師系列知識點之雜項集萃(123)

接前一篇文章:軟考 系統架構設計師系列知識點之雜項集萃(122) 第227題 某公司欲開發一種工業機器人,用來進行汽車零件的裝配。公司的架構師經過分析與討論,給出了該機器人控制軟件的兩種候選架構方案:閉環控制和分層結構。以下對于這兩者候選框架的選擇路由,錯誤的是(…

Sonatype Nexus Repository Manager docker版本安裝

docker 網址 https://hub.docker.com/r/sonatype/nexus3 拉取鏡像 docker pull sonatype/nexus3創建docker docker run -d -p 8081:8081 --name nexus --restart always sonatype/nexus3查看密碼 docker exec nexus cat /nexus-data/admin.password導出docker image 鏡像 …

Java Stream API:讓業務數據處理更優雅

在 Java 業務開發中&#xff0c;我們經常需要對集合數據進行**篩選&#xff08;filter&#xff09;、轉換&#xff08;map&#xff09;、聚合&#xff08;collect&#xff09;**等操作。比如從一批結果中過濾出符合條件的記錄&#xff0c;就像這樣&#xff1a; 假數據&#xf…

Win11和Win10共享打印機提示709用添加Windows憑據來解決的小方法

我們在使用共享打印機打印文件時或者添加共享打印機的時候&#xff0c;遇到了系統提示錯誤709的問題&#xff0c;導致打印失敗、共享失敗&#xff0c;如果你現在正好也遇到了這一問題&#xff0c;那么不妨來看看下面吳師傅使用過的這個方法&#xff0c;希望可以能夠幫助大家有效…

【嵌入式STM32】I2C總結

I2C誕生于上世紀80年代初&#xff0c;由飛利浦&#xff08;現在的恩智浦NXP&#xff09;為解決微控制器與外圍芯片之間繁瑣的連接問題而設計。 僅僅兩根線——SCL&#xff08;時鐘線&#xff09;和SDA&#xff08;數據線&#xff09;&#xff0c;就能實現多設備間的雙向通信。 …

WPF 監控CPU、內存性能

本段代碼是一個封裝的用戶控件<UserControl x:Class"YF_Frame.PerformanceMonitor"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc"http://schemas.…

Rust學習筆記(四)|結構體與枚舉(面向對象、模式匹配)

本篇文章包含的內容1 結構體1.1 定義和初始化結構體1.2 Tuple Struct1.3 結構體方法&#xff08;Rust 面向對象&#xff09;1.4 關聯函數2 枚舉2.1 定義和使用枚舉2.2 將數據附加到枚舉的變體中2.3 Option 枚舉2.4 模式匹配2.4.1 match語句2.4.2 if let語句1 結構體 1.1 定義和…