歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux內核

Linux內核模塊開發之Hello world

今年打算好好學學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