国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
linux2.4與2.6下的模塊編程對比
模塊編程在2.4和2.6的kernel中的區(qū)別

以hello world為例:

2.4:
========================
hello.c
========================
/* How to compile:
* gcc -I /usr/src/linux-2.4/include -DMODULE -D__KERNEL__ -c hello.c
*/
#ifndef MODULE
#define MODULE
#endif
#ifndef __KERNEL__
#define __KERNEL__
#endif
#include <linux/kernel.h>
#include <linux/module.h>

int init_module(void)
{
printk(KERN_ALERT "Hello World!\n");
return 0; // Must return 0!
}

void cleanup_module(void)
{
printk(KERN_ALERT "Goodbye world!\n");
}

MODULE_LICENSE("GPL"); // Avoid "no license" warning.

========================
Makefile
========================
CC=gcc
MODCFLAGS := -I /usr/src/linux-2.4/include -DMODULE -D__KERNEL__

hello.o:hello.c
$(CC) $(MODCFLAGS) -c hello.c

.PHONY:clean

clean:
rm -f hello.o
========================

# make
# insmod hello.o
# lsmod
# rmmod hello

注:2.4的模塊編程中,MODULE和__KERNEL__這兩個宏必須要定義,不管你是在編譯時定義還是寫在源文件里。我這里是兩邊都寫了,不過加了保護,不會出現重復定義,也不會忘記定義。linux/kernel.h這個文件中,定義了KERN_ALERT這個宏,如果你直接改寫成"<1>",就可以不用包含這個頭文件。而linux/module.h是模塊編譯必須的頭文件,不可以省略。

2.6:
========================
hello.c
========================
#include <linux/init.h>
#include <linux/module.h>
#include <linux/moduleparam.h>
MODULE_LICENSE("Dual BSD/GPL");

static char *whom = "world";
module_param(whom, charp, 0);
static int howmany = 1;
module_param(howmany, int, 0);

static int hello_init(void)
{
int i;
for( i=0; i<howmany; i++)
  printk(KERN_ALERT "(%d) Hello, %s!\n",i,whom);
return 0;
}

static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye!\n");
}

module_init(hello_init);
module_exit(hello_exit);

========================
Makefile
========================
obj-m += hello.o

all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
========================

# make
# insmod hello.ko
或者
# insmod hello.ko howmany=2 whom=linux
# lsmod
# rmmod hello

注:在2.6中,初始化函數和收尾函數可以寫成任何名字,只要在源文件中分別用module_init()和module_exit()宏調用一下就可以了,其實本質還是init_module()和cleanup_module()函數,這點你可以在/lib/modules/$(shell uname-r)/build/include/linux/init.h中看到。而在moduleparam.h中則是關于參數調用的內容。

P.S.
KERN_EMERG <0>
KERN_ALERT <1>
KERN_CRIT <2>
KERN_ERR <3>
KERN_WARNING <4>
KERN_NOTICE <5>
KERN_INFO <6>
KERN_DEBUG <7>

如果要想看到hello world的打印消息,必須切換到字符模式下,在x-window中的控制臺中是收不到消息的,但是可以在/var/log/messages里看到響應的消息記錄。
本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
hello內核模塊編譯的全過程
Linux驅動編程 step-by-step (一)
開發(fā)一個簡單的內核程序
linux 內核模塊開發(fā)相關的文章搜集和模塊開發(fā)過程中的小技巧
linux驅動開發(fā)第1講:帶你編寫一個最簡單的字符設備驅動
linux設備驅動第二篇:構造和運行模塊
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服