日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

什么是linux內核

linux就像是一個哲學的最佳實踐。如果非要對它評價,我真的不知道該怎么贊嘆,我只能自豪地說著:“linux的美麗簡直讓人沉醉。”

我只能說是我處在linux學習的修煉之路上的一個小菜鳥,linux的東西真的太豐富了,讓你感覺只要掌握了其中的一個部分,就可以在求職之路上大放光彩,因此我常常感嘆自己的弱小和無知,我離著linux的中心是多么的遙遠,我只看到眾多高聳的山峰。

前面的幾個是我比較關心的方向。我現在主要在學習linux嵌入式編程方面的知識。此外就是復雜的linux編程。我在后面會說一下我對linux編程的淺薄認識。眾多的有趣的方向,常常讓我們感覺無所適從。我不談專業的知識,我就談談我學習linux的故事,以及站在專業角度上的評論和展望好了。

我們張家亮老師曾經提起說LInux的設計是行為需求驅動型。似乎是這么說的,覺得不對勁。我對linux的感覺就是自由,合作,兼容。

linux內核體系結構

1.操作系統原理

什么是linux內核?linux內核模塊是什么?內核模塊詳解

 

2.匯編語言精講

什么是linux內核?linux內核模塊是什么?內核模塊詳解

 

3.內存管理專題

什么是linux內核?linux內核模塊是什么?內核模塊詳解

 

4.網絡協議棧專題

什么是linux內核?linux內核模塊是什么?內核模塊詳解

 

5.設備驅動專題

什么是linux內核?linux內核模塊是什么?內核模塊詳解

 

6.文件系統專題

什么是linux內核?linux內核模塊是什么?內核模塊詳解

 

7.內核項目實戰專題

什么是linux內核?linux內核模塊是什么?內核模塊詳解

 

1. 何為內核模塊

最笨的方法是對內核進行重新配置,然后再重新編譯。這樣的話豈不是說我加一個組件就得重新編譯內核,這顯然不是很科學的方法,其實我們的linux內核提供在運行時可進行擴展的特性,這意味著當系統啟動并運行時,我們可以向內核添加或移除部分功能。

更多linux內核視頻教程文本資料免費獲取可以后臺私信【內核】獲取。

什么是linux內核?linux內核模塊是什么?內核模塊詳解

 


什么是linux內核?linux內核模塊是什么?內核模塊詳解

 

我們在運行時添加到內核中的代碼就被稱為動態可加載內核模塊,我們簡稱為內核模塊。

2. 內核模塊的相關操作

a) 加載內核模塊:insmod

b) 卸載內核模塊:rmmod

c) 查看內核模塊:lsmod

3. 模塊聲明

a) MODULE_LICENSE(“GPL”):內核可以識別的許可證有GPL(任意版本GNU通用公共許可證)、GPL v2等

b) MODULE_AUTHOR(“作者”):聲明作者信息可以不用

c) MODULE_VERSION(“版本”):聲明版本信息也可以不用

d) MODULE_DESCRIPTION(“功能描述”):聲明模塊功能,可不用

4. 模塊參數

我們可以在加載內核模塊的時候向其傳遞參數,以讓同一代碼達到不同的效果。當然我們的參數必須用module_param宏來聲明具體如下:

1 module_param(name,type,perm)

a) name:變量名

b) type:數據類型內核支持模塊參數類型有:bool、invbool(bool的發轉,true變為false,false變為true)、charp(char類型指針值)、int、long、short、uint、ulong、ushort、

c) perm:常見的訪問許可值通常為S_IRUGO和S_IWUSR。通常情況下將他們按位或

同時我們也可以用下面的宏聲明數組:

  1. 1 Module_param_array(name,type,num,perm)

5. 模塊符號導出

當一個模塊要使用另一個模塊的函數(變量)的時候,要使用EXPORT_SYMBOL(符號名)或者EXPORT_SYMBOL_GPL(符號名)來申明。

注:EXPORT_SYMBOL_GPL()只適用于遵循GPL協議的模塊

簡單內核模塊實現

想必大家都記得我們在學習某種語言的時候,寫的第一個程序大部分都是輸出hello world,所以我接下來用我們剛才介紹的內核模塊去完成hello world。

1. 內核模塊編寫

通過上面部分內容的介紹,要完成第一個內核模塊不是很難,下面是自己的代碼。

  1. 1 #include<linux/init.h> 2 #include<linux/module.h> 3 MODULE_LICENSE("GPL"); 4 staticint hello_init(void) 5 { 6 printk("<0> hello worldn"); 7 return0; 8 } 9 staticvoid hello_exit(void) 10 { 11 printk("<0> goodbyen"); 12 } 13 module_init(hello_init);//該宏在模塊的目標代碼中增加一個特殊地段,用于說明內核初始化函數所在的位置 14 module_exit(hello_exit);//跟上面的宏對立

2. Makefile編寫

Makefile的編寫也比較簡單,要注意的地方代碼中已經說明。

1 obj-m := hello.o
2 DIRS :=/smbshare/linux-2.6.39///此處路徑為內核源碼路徑,該內核源碼必須要經過編譯,不然會報錯
3 all:
4 make -C $(DIRS) M=$(PWD) modules
5 clean:
6 rm -Rf*.o *.ko *.mod.c *.order *.symvers

經過了上面兩個步驟,我們然后編譯加載然后卸載我們的模塊進行試驗。

編譯:

什么是linux內核?linux內核模塊是什么?內核模塊詳解

 

加載:

什么是linux內核?linux內核模塊是什么?內核模塊詳解

 

查看:

什么是linux內核?linux內核模塊是什么?內核模塊詳解

 

卸載:

什么是linux內核?linux內核模塊是什么?內核模塊詳解

 

3. Printk函數簡介

printk函數為內核打印函數,其和printf函數功能類似,不過比printf多了打印權限一共有8個級別,printk的日志級別定義如下(在include/linux/kernel.h中):

什么是linux內核?linux內核模塊是什么?內核模塊詳解

 

1 #define KERN_EMERG 0 //緊急事件消息,系統崩潰之前提示,表示系統不可用
2 #define KERN_ALERT  1 //報告消息,表示必須立即采取措施
3 #define KERN_CRIT    2 //臨界條件,通常涉及嚴重的硬件或軟件操作失敗
4 #define KERN_ERR     3 //錯誤條件,驅動程序常用KERN_ERR來報告硬件的錯誤
5 #define KERN_WARNING  4 //警告條件,對可能出現問題的情況進行警告
6 #define KERN_NOTICE 5 //正常但又重要的條件,用于提醒
7 #define KERN_INFO 6    //提示信息,如驅動程序啟動時,打印硬件信息
8 #define KERN_DEBUG 7 //調試級別的消息
什么是linux內核?linux內核模塊是什么?內核模塊詳解

 

今天的內容比較簡單,只是對內核模塊有了一個初步的了解,所以我今天在給大家推薦一個比較好用的工具,叫做exvim其將好多vim的工具進行了集成,個人感覺十分方便,就是換電腦什么的也不怕自己的配置丟失了。貼一張自己使用的圖,大家有興趣的可以去http://exvim.github.io/ 了解。

分享到:
標簽:內核 linux
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定