核心開發 hello(1)

2021-06-28 02:52:16 字數 1991 閱讀 4784

1.第乙個模組

hello.c:

#include #include #include static int __init hello_init( void )

static void __exit hello_exit(void)

module_init( hello_init);

module_exit( hello_exit);

module_license( "gpl" );

module_author( "myname" );

這個簡單的程式以包含了模組的主要特徵,每個模組都有乙個入口和出口,在這個程式中是hello_init()和hello_exit(),它們分別通過module_init()和module_exit()系統呼叫註冊到核心中,核心在載入這個模組時,呼叫hello_init()函式,在這個函式中一般做一些初始化工作,如果初始化順利完成,返回零,否則返回乙個非零值。hello_exit()是模組的出口函式,核心在解除安裝該模組是呼叫,負責釋放資源等。

module_license用於指定版權,linux一般使用"gpl"。

module_author用於指定**的工作。

2.構建模組

makefile:

obj-m := hello.o

kerneldir := /lib/modules/$(shell uname -r)/build

pwd := $(shell pwd)

all:

$(make) -c $(kerneldir) m=$(pwd)

clean:

rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions

3.載入模組

要載入或

解除安裝以root使用者執行命令insmod或rmmod:

insmod ./hello.ko

使用下面的命令可以看到我們的模組已經載入了:

lsmod | grep hello
使用下面的命令可以解除安裝該模組:

rmmod hello

modinfo hello.ko

4.這是在用lsmod就看不到hello模組了。但是我們的輸入資訊到那去了呢,不急,如果你是在x windows下的xterm中insmod的,你不會看到輸出,使用dmesg就可能看到在載入和解除安裝模組時的輸出內容,只有直接在console下才能直接顯示到螢幕上。

5.4.printk()函式

記住這裡用的是printk而不是printf,在核心中我們是不能呼叫c庫中的函式的,不過c庫上的大部份函式在核心中都有實現。

printk主要是為核心提供日誌功能, 記錄核心資訊或用來給出警告用的,因些在呼叫printk時,我們可以指定輸入資訊的級別,下表列出了可用的級別。

---------------------------

級別                               說明

---------------------------

|  kern_emerg              緊急情況

|  kern_alert              需要立即被注意的錯誤

|  kern_crit                 臨界情況

|  kern_err                  錯誤

|  kern_warning         警告

|  kern_notice            普通的

|  kern_info               非正式的訊息

|  kern_debug            除錯資訊

---------------------------

以上級別沒有乙個絕對的定義應該在什麼時候用,只能你自己拿主意了。

openwrt開發 1 核心編譯

1.核心編譯前的工具準備。a.安裝vmare10,ubuntu10.04,筆者安裝的為前面的版本。可以選擇其他版本,盡量版本不要太高,不利於開發。b.部署linux系統的環境,例如gcc 服務等環境。2.獲取openwrt原始碼包,可以使用git或svn從openwrt官網獲取。因為筆者使用的是台灣...

Linux應用程式開發 Hello

第一步 在linux平台 我用的是redhat9.2 上安裝好gcc編譯工具,例如編譯arm平台的應用程式可用arm linux gcc,如用在pc平台下執行,可用pc自帶的gcc。第二步 編寫hello程式,可以使用redhat自帶的gedit。程式如下 include int main 並將程式...

ZYNQ開發(一) PS裸奔hello

zynq開發 一 ps裸奔hello world 工具 vivado 2015.4 步驟 1 開啟vivado建立乙個新的工程,選擇工程資料夾存放目錄,填寫工程的名字。2 選擇器件,我的是xc7z010clg400 1根據嚮導一直next。二 ip integrator 1,建立空的block de...