[linux驅動]linux驅動模塊

一,內核模塊的概念

經常在內核驅動代碼看到類似fs_init()等驅動初始化函數,那么這個和module_init()函數的差別在哪里,宏定義__define_initcall(level,fn)對于內核的初始化很重要,他指示編譯器在編譯的時候,將一系列初始化函數的起始地址值按照一定的順序放在一個section中。在內核初始化段,do_initcalls() 將按順序從該section中以函數指針的形式取出這些函數的起始地址,來依次完成相應的初始化。于內核某些部分的初始化需要依賴于其他某些部分的初始化的完成,因此這個順序排列常常很重要

點擊打開鏈接

其中module_init()對應的是如下的device_initcall(fn)

[cpp]?view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. 189?#define?core_initcall(fn)???????????????__define_initcall("1",fn,1)??
  2. 190?#define?core_initcall_sync(fn)??????????__define_initcall("1s",fn,1s)??
  3. 191?#define?postcore_initcall(fn)???????????__define_initcall("2",fn,2)??
  4. 192?#define?postcore_initcall_sync(fn)??????__define_initcall("2s",fn,2s)??
  5. 193?#define?arch_initcall(fn)???????????????__define_initcall("3",fn,3)??
  6. 194?#define?arch_initcall_sync(fn)??????????__define_initcall("3s",fn,3s)??
  7. 195?#define?subsys_initcall(fn)?????????????__define_initcall("4",fn,4)??
  8. 196?#define?subsys_initcall_sync(fn)????????__define_initcall("4s",fn,4s)??
  9. 197?#define?fs_initcall(fn)?????????????????__define_initcall("5",fn,5)??
  10. 198?#define?fs_initcall_sync(fn)????????????__define_initcall("5s",fn,5s)??
  11. 199?#define?rootfs_initcall(fn)?????????????__define_initcall("rootfs",fn,rootfs)??
  12. 200?#define?device_initcall(fn)?????????????__define_initcall("6",fn,6)??
  13. 201?#define?device_initcall_sync(fn)????????__define_initcall("6s",fn,6s)??
  14. 202?#define?late_initcall(fn)???????????????__define_initcall("7",fn,7)??
  15. 203?#define?late_initcall_sync(fn)??????????__define_initcall("7s",fn,7s)??
  16. ??
  17. 170?#define?__define_initcall(level,fn,id)?\??
  18. 171?????????static?initcall_t?__initcall_##fn##id?__used?\??
  19. 172?????????__attribute__((__section__(".initcall"?level?".init")))?=?fn??


?二,內核模塊和應用程序之間的差別
1,應用程序可以使用一些庫函數,而內核模塊只能使用內核其它模塊導出的一些函數
2,處理錯誤的方式不一樣。
3,應用程序是從頭到尾執行單個任務,而模塊是預先注冊自己以便服務于將來某個請求。

三,構建內核模塊
構建hello.ko模塊 obj-m := hello.o
構建module.ko模塊,并由兩個源文件生成(file1.c和file2.c)

[cpp]?view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. obj-m?:=?module.o??
  2. module-objs?:=?file1.o?file2.o??

?
四,模塊操作相關的命令
insmod:裝載一個模塊
modprobe:裝載一個模塊,同時檢查模塊是否引用了一些當前內核不存在的符合,如果有,modprobe會在當前模塊搜索路徑中查找定義了這些符合的其它模塊并加載
rmmod,卸載一個模塊。

五,模塊之間的引用
將一個模塊的函數或者變量導出讓其它模塊可以使用

[cpp]?view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. EXPORT_SYMBOL(name);??
  2. EXPORT_SYMBOL_GPL(name);??//導出的模塊只能被GPL許可證下的模塊使用??


六,模塊參數
insmod hello howmany=10 whom="Mom"
在hello.c的驅動程序中

?

?

[cpp]?view plaincopy在CODE上查看代碼片派生到我的代碼片
    1. static?char*whom="world"??
    2. static?int?howmany=1;??
    3. module_param(howmany,int,S_IRUGO);??
    4. module_param(whom,charp,S_IRUGO)

轉載于:https://www.cnblogs.com/zhiliao112/p/4237209.html

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

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

相關文章

看我如何基于PythonFacepp打造智能監控系統

由于種種原因,最近想親自做一個基于python&facepp打造的智能監控系統。 000:萌芽 1:暑假在家很無聊 想出去玩,找不到人。玩個lol(已卸載),老是坑人。實在是無聊至極,不過&#x…

c++ 遍歷所有點且距離最短_編程小白暑期進階筆記41-C語言數據結構與算法圖遍歷的應用...

基于廣度優先遍歷算法的應用思考題:(思考題答案:BFS(廣度優先遍歷)在一般的帶權圖中是不能解決最短路問題,了解BFS的都知道,BFS是根據節點到源節點之間的節點數遍歷的,也就是先訪問離源節點節點數最少的點。…

underscorejs-groupBy學習

2.18 groupBy 2.18.1 語法 _.groupBy(list, iteratee, [context]) 2.18.2 說明 把list分為多個集合,iterator為分組的依據,返回值為Object list可以是數組、對象、字符串或arguments等iteratee為分組的依據.iterator的參數(value, key, list)iterator如果是function…

關于@WebServlet(“LoginServlet“)404 報錯的解決辦法 “請求的資源[/test/LoginServlet] 不可用”

關于WebServlet(“LoginServlet”)404 報錯的解決辦法 “請求的資源[/test/LoginServlet] 不可用” *一切事物的開頭總是困難這句話,在任何一種科學上都是適用的。 * ——馬克思 一個困擾了我n天的問題,終于終于還是解決了&#…

ASP.NET MVC+EF框架+EasyUI實現權限管理系列(14)-主框架搭建

ASP.NET MVCEF框架EasyUI實現權限管理系列(14)-主框架搭建 原文:ASP.NET MVCEF框架EasyUI實現權限管理系列(14)-主框架搭建ASP.NET MVCEF框架EasyUI實現權限管系列 (開篇) (1):框架搭建 (2):數據庫訪問層的設計Demo (3):面向接口編程 (4 ):業務邏輯層的封裝 (5):前臺…

常用事務代碼 sap_SAP_PS_事務代碼

[轉]SAP PS常用事務代碼T-CODESAP項目系統(Project System,以下簡稱PS)模塊作為傳統的非常規模塊(除FI、CO、MM、PP、SD之外的模塊)之一,在最近幾年在國內也得到的較為廣泛的應用,與PS應用火熱場景相對應的是PS內外部顧問的極度缺乏。這種缺乏一方面表現…

Java 冒泡排序的實現

實現原理: 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最后一對。在這一點,最后的元素應該會是最大的數。 針對所有的元素重復以上的步驟,除了最后一個…

CLion for mac安裝配置

前言 本文詳細多圖介紹 IntelliJ IDEA For Mac的激活教程,相當于永久激活 文件包百度云下載:(通過與熊論道網站解密) 熊曰:呋溫捕嘿誘襲氏樣溫住既非破哮誒襲非捕溫肉性盜森魚非襲啽蜜呦訴嘿溫類盜山寶住出森非喜誘捕發嗥既肉嗅…

solr后臺界面介紹——(十一)

1.加一個collection的方法 復制solr-home下的collection1,修改名字為collection2。并且修改collection2文件夾中配置文件core.properties中的名字為collection2,重啟服務器。 2.后臺界面介紹 Dashboard 儀表盤,顯示了該Solr實例開始啟動運行的…

功率信號與能量信號的超棒理解!

功率信號與能量信號的理解! 功率信號和能量信號一直是一個令我疑惑的概念,一個無限一個為零。但是下面令我茅塞頓開! ~~~分割線啊分割線~~~

vscode終端不識別python_VSCode無法識別我的已安裝Python包

Windows上的VSCode與Python。 Don安裝的Python擴展,不確定它有什么不同,但考慮給我的環境使用VSCode for Python,在那個過程中,我安裝了metapy包。我能夠在VSCode中的終端窗口內運行此metapy,但不能在編輯器中運行PS C…

現在也是只能謝謝隨筆了,但是在以后收貨的日子里會有更多的感想記下

每天雖然都會在各個方面都記下一點日常事務的說明,但是會有重復,以后工作了向高中一樣一定會有許多的話,但是我不希望這是一些抱怨,更多的應該是收貨,這幾天也是早上不知怎么會有點頭疼,加上每天取暖口有點…

[轉載]AngularJS之Factory vs Service vs Provider

http://www.oschina.net/translate/angularjs-factory-vs-service-vs-provider http://tylermcginnis.com/angularjs-factory-vs-service-vs-provider/ 要注意的文章中,app.provider(...)里的代碼有點出處,之后作者改過,但是轉載的網站上圖片…

C#學習筆記:預處理指令

C#和C/C一樣,也支持預處理指令,下面我們來看看C#中的預處理指令。 #region 代碼折疊功能,配合#endregion使用,如下: 點擊后如下: 條件預處理 條件預處理可以根據給出的條件決定最終進行編譯的代碼&#xff…

android sh 指令_Java/Android中實現Shell命令

有時候我們需要實現一個功能。不過這個功能用我們傳統的Java代碼實現起來會有一些困難,這時我們可以嘗試利用Shell命令來實現。你可以按照下面的代碼模塊來進行你想要實現的Shell命令(注:也不是所有的Shell命令都能用Java代碼來實現)。public class Main…

【數字信號處理】 第二章、時域中的離散時間信號

前言 學而時習之,不亦樂乎? ——《論語學而》 Is it not pleasant to learn with a constant perseverance and application? 。 第二章 時域中的離散時間信號 一、離散信號的基本定義 1、兩個基本類型 抽樣數據類型:即模擬信號通過定周期進行采樣…

開機流程與主引導分區(MBR)——鳥哥私房菜

在前篇隨筆中,已經談到了CMOS與BIOS,CMOS是記錄各項硬件參數(包括系統時間、設備的I/O地址、CPU的電壓和頻率等)且嵌入到主板上面的存儲器,BIOS是一個寫入到主板上的韌體(韌體是寫入到硬件上的一個軟件程序…

整車廠核心制造系統及數據流

轉載于:https://www.cnblogs.com/tallrain/p/MES_Auto_Core_System.html

ch12 GUI

《Head First Java 2nd Edition》 摘錄 JFrame 代表屏幕上的一個窗口,可以把 buttons, checkboxes, test fields 等等界面相關的東西置于其上。它可以有一個有菜單項的菜單條。無論在哪個平臺上,都有窗口圖標,最小化、最大化和關閉窗口的按鈕…

兩物體的相對速度公式_《百答相對論》連載(二十一)質疑狹義相對論速度的疊加公式...

狹義相對論部分:(21)質疑狹義相對論速度的疊加公式參考《相對論百問》第28頁 21相對論的速度疊加公式怎么寫?可以用速度疊加達到和超過光速嗎?在經典力學中,物體在力的作用下改變原有的速度遵守牛頓第二定律,物體失去了…