歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux內核 >> Linux內核模塊開發之Hello world

Linux內核模塊開發之Hello world

日期:2017/2/28 16:36:27   编辑:Linux內核

今年打算好好學學Linux下內核的開發,不過萬事開頭難,第一步當然是學著編譯內核,試驗了好多次都是失敗告終,昨天終於第一次在虛擬機上升級內核成功,今天就先來試著寫個hello world的程序,和編寫Linux下的應用程序差別還是很大的。

#include<linux/module.h>
#include<linux/init.h>

int __init hello_init (void)
{
printk("HelloWorld\n");
return 0;
}

void __exit hello_exit(void)
{
printk("GoodBye\n");
}

MODULE_AUTHOR("wanghaifeng <[email protected]>");
MODULE_DESCRIPTION("hello");
MODULE_LICENSE("GPL");

module_init(hello_init);
module_exit(hello_exit);這是很簡單的一個的內核模塊代碼,沒有main函數,編譯的方式不能用gcc的常規方式。模塊調用module_init()和module_exit()將該模塊注冊到內核。每個模塊都有初始化函數和退出函數。下面需要對這個內核模塊進行編譯,新建一個Makefile文件。文件的內容如下

obj-m :=hello.o下面就可以進行編譯了,編譯的環境是RedHat5.3,內核版本是2.6.18-53.el5,使用下面的命令進行編譯:

# make -C /usr/src/kernels/2.6.18-53.el5-i686/ modules M=$PWD
make: Entering directory `/usr/src/kernels/2.6.18-53.el5-i686'
Building modules, stage 2.
MODPOST
make: Leaving directory `/usr/src/kernels/2.6.18-53.el5-i686'

可以看到目錄裡多了幾個文件,編譯成功,hello.ko就是生成的內核模塊。

# ls
hello.c hello.ko hello.mod.c hello.mod.o hello.o Makefile Module.symvers

使用insmod,lsmod,rmmod可以裝載,查看,卸載內核模塊,printk輸出的信息將會打印到日志裡面/var/log/messages

# insmod hello.ko //插入模塊,會調用hello_init()

# lsmod | grep -e hello -e Module //查看模塊
Module Size Used by
hello 5632 0

# rmmod hello //刪除模塊,會調用hello_exit()

# tail -f /var/log/messages //可以查看日志信息

Copyright © Linux教程網 All Rights Reserved