國嵌視頻學習筆記—linux核心開發1

來源:互聯網
上載者:User

一、linux核心簡介

1.linux系統由兩部分組成:核心空間和使用者空間。

2.使用者空間包括:使用者應用程式和C庫

3.核心空間包括:系統調用介面、核心和體繫結構相關代碼。

4.ARM處理器7種工作模式:使用者模式,快速中斷模式、外部中斷模式、管理員模式、資料訪問終止、系統模式、未定義指令異常

5.為什麼linux系統劃分為使用者空間和核心空間?

出於安全的考慮,linux利用處理器的分級的工作模式的特點,使用其中兩級分別運行核心和應用程式。使作業系統得到充分保護。

6.系統調用和硬體中斷:使程式執行在核心空間和使用者空間兩個狀態切換。

7.Linux核心結構(組成):

   系統調用介面:串連核心空間與使用者空間

   進程管理:進程建立、進程通訊、進程調度

   記憶體管理:記憶體配置回收、地址轉換(虛-物理)

   體繫結構相關代碼:CPU相關代碼

    裝置驅動:

    網路通訊協定棧:

    虛擬檔案系統:

二、核心原始碼

 

arch:architecture縮寫。體繫結構相關代碼。

block:部分塊裝置驅動。

crypto:加密。

drivers:裝置驅動

fs:檔案系統

include:核心需要的標頭檔

lib:庫檔案

mm:記憶體管理代碼(與體繫結構無關的)

三、核心配置與編譯

1.清除臨時檔案、中間檔案、設定檔

make clean:刪除大部分中間產生的檔案儲存設定檔.o

make mrproper:刪除中間檔案及設定檔

make distclean:在mrproper基礎上刪除補丁、編輯器備份等。

2.配置核心

 make config:基於文字模式的互動式配置

make menuconfig:基於文字模式的菜單型配置(菜單由核心內scripts產生)

make oldconfig:使用已有的設定檔(.config)

make xconfig:圖形化配置

3.如何配置

Arch/$cpu/configs目錄下有供參考的設定檔。可以在此基礎上修改,進行配置。

4.編譯核心

x86:

make zImage:x86下只能用於小於512k的核心。

make bzImage。

如需擷取詳細編譯資訊,後面添加V=1,如

make zImage V=1

5.編譯核心模組:(必須先編譯核心)

make modules

6.安裝核心模組:

make modules_install

四、Linux核心模組開發

1.什麼是核心模組(特點)

模組本身不被編譯進核心

可以根據需求,在核心運行期間動態安裝或卸載

2.核心模組程式

   模組載入函數(必須):通過module_init宏指定。

   模組卸載函數(必須):通過module_exit宏指定。

3.核心模組編譯

  通過makefile

單個檔案的

ifneq ($(KERNELRELEASE),)obj-m := hello.oelseKDIR :=/lib/modules/2.6.18-53.e15/build   //核心原始碼的路徑all:             make -C $(KDIR) M=$(PWD) modules //進入-C後面的目錄,使用其makefile編譯;核心模組代碼的位置,PWD=目前的目錄clean:            rm -f *.ko *.o *.mod.o *.mod.c *.symversendif

多個檔案的

ifneq ($(KERNELRELEASE),)obj-m := hello.o //內科模組的名字hello-objs := main.o add.o //核心模組需要的源檔案elseKDIR :=/lib/modules/2.6.18-53.e15/build   //核心原始碼的路徑all:             make -C $(KDIR) M=$(PWD) modules //進入-C後面的目錄,使用其makefile編譯;核心模組代碼的位置,PWD=目前的目錄clean:            rm -f *.ko *.o *.mod.o *.mod.c *.symversendif

4.核心模組的安裝與卸載

insmod  載入

rmmod 卸載

lsmod  查看

modprobe 載入:會查看依賴的模組,並首先載入

5.模組可選資訊

  許可證聲明:MODULE_LICENSE("GPL")

  作者聲明:MODULE_AUTHOR

   ………………

   模組參數:module_param指定模組參數,用於在載入模組是傳遞參數給模組。

module_param(name,type,perm)

  name:模組參數的名稱

  type:參數的類型  bool,int,charp

  perm:模組參數的存取權限 S_IRUGO :任何使用者都有讀許可權 S_IWUSR

int a=3;char *st;module_param(a,int,S_IRUGO);module_param(st,charp,S_IRUGO);

6.核心符號匯出

EXPORT_SYMBOL(符號名)

EXPORT_SYMBOL_GPL(符號名):只能用於包含GPL許可證的模組。

7.核心版本不匹配問題

核心模組的版本由所依賴的核心代碼版本決定。

當前正在啟動並執行核心的版本。

insmod程式在這兩個版本不同時,會出現錯誤。

解決辦法:

(1)使用modprobe  --force-modversion強行載入

(2)確保相同,uname  -r可以查看當前啟動並執行核心版本。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.