what?linux核心的整體結構非常龐大,其包含的元件也非常多,如何使用需要的元件呢?① 把所有元件都編譯進核心檔案,即:zlmage或bzlmage,但這樣會導致兩個問題:一是生成的核心檔案過大;二是如果要新增或刪除某個元件,需要重新編譯整個核心。
模組功能:有沒有一種機制能讓核心檔案(zlmage或bzlmage)本身並不包含某元件,而是在該元件需要被使用的時候,動態地新增正在執行的核心中?答:有一種機制可以實現,linux提供了一種叫做「核心模組」的機制,就可以實現以上效果。
核心模組特點:模組本身並不被編譯進核心檔案(zlmage或bzlmage)。
可以根據需求,在核心執行期間動態的安裝或解除安裝。
程式結構:
hello.c
#include#includestatic int hello_init(void)
static void hello_exit(void)
module_init(hello_init);
module_exit(hello_exit);
makefile
ifneq ($(kernelrelease),)
obj-m :=hello.o
else
kdir :=/lib/modules/3.13.0-32-generic/build
all:
make -c $(kdir) m=$(pwd) modules
clean:
rm -f *.ko *.o *.mod.c *.symvers
endif
顯示結果:
#include#include//#includemodule_license("gpl"); //許可證申明
module_author("hello_worldmy"); //作者申明
module_description("hello world module"); //模組描述
module_alias("a ******st module"); //模組別名
extern int add(int a,int b);
static int hello_init(void)
static void hello_exit(void)
module_init(hello_init);
module_exit(hello_exit);
add.c
int add(int a,int b)
makefile
ifneq ($(kernelrelease),)
obj-m :=mymodule.o
mymodule-objs :=main.o add.o
else
kdir := /lib/modules/3.13.0-32-generic/build
all:
make -c $(kdir) m=$(pwd) modules
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers
endif
顯示結果:在makefile檔案中mymodule為模組名,必須與下面的mymodule-objs中的mymodule保持一致。
mymodule-objs後新增的是源**檔案:main.o add.o;如果在操作中,超過兩個的檔案只需向後一直新增即可,檔案與檔案之間以空格間隔。
在該核心模組開發中,核心模組由單個原始檔構成或核心模組由多個原始檔構成生成的模組是以 .ko結尾的檔案。在該示例中,示例一的模組為hello.ko;示例二的模組為mymodule.ko。
模組安裝與解除安裝:
載入insmod (insmod hello.ko)
解除安裝 rmmod (rmmod hello)
檢視 lsmod
載入 modprobe (modprobe hello)
modprobe如同insmod,也是載入乙個模組到核心。它的不同之處在於它會根據檔案
示例一:
示例二:
模組可選資訊:1、許可證申明:巨集module_license用來告知核心,該模組帶有乙個許可證,沒有這樣的說明,載入核心模組時核心會抱怨。有效的許可證有「gpl」、「gplv2」、「gpl and additional rights」、「dual bsd/gpl」、「dual mpl/gpl」和「proprietary」。2、作者申明(可選)
module_author(「sir」);
3、模組描述(可選)
module_description(「hello world module」);
4、模組版本(可選)
module_version(「v1.0」);
5、模組別名(可選)
module_alias(「a ****** module」);
核心模組嵌入式
linux核心模組程式設計特點 1 不能使用c庫和c標準標頭檔案 2 必須使用gnu規範 3.沒有記憶體保護機制 4.不能處理浮點運算 5.注意同步和併發的問題 6.注意可移植性 一,模組函式 1 載入函式 將模組函式用關鍵字static修飾,避免和核心函式重名 init 把標記的函式放在elf檔案...
linux嵌入式開發
我的環境 主機 ubuntu 64位 開發板 mini2440 6 makefile檔案修改 在 opt friendlyarm mini2440 linux 2.6.29下執行 sudo vi.makefile 搜尋arm linux得到乙個結果 cross compile?arm linux 然...
嵌入式Linux核心製作
一.linux核心簡介 linux系統架構分為核心空間和使用者空間。它們之間切換條件 1.系統呼叫 2.硬體中斷。核心架構 1.系統呼叫介面 2.程序管理塊 3.記憶體管理 4.體系結構相關 4.虛擬檔案系統 5.網路棧 6.裝置驅動 二.製作linux核心 1.修改配置檔案 make config...