内核编程之Hello_kernel
生活随笔
收集整理的這篇文章主要介紹了
内核编程之Hello_kernel
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言
通過hello_kernel編程達到以下目的:
- 內核編程框架了解
- 模塊參數調用
- 模塊間函數調用
- 內核模塊相關關的命令使用
環境準備
內核源碼樹準備,有兩種方法:
方法1:從kernel.org下載內核源碼,手動編譯
方法2:通過yum安裝與系統版本一致的內核源碼樹
安裝后/usr/src/kernels路徑下會有相應版本的源碼目錄,/lib/modules/uname -r/build會指向對應的源碼目錄。
內核編程實例
這里內核編程有三個實例:
- 初見內核模塊
- 模塊參數傳遞
模塊間函數調用
初見內核模塊
kernel_hello.c
#include <linux/init.h> // module_init module_exit 宏定義 #include <linux/module.h> // MODULE_LICENSE MODULE_AUTHOR MODULE_DESCRIPTION MODULE_VERSION/* 以下4個宏分別是許可證,作者,模塊描述,模塊版本 */ MODULE_LICENSE("Dual BSD/GPL"); MODULE_AUTHOR("calling love"); MODULE_DESCRIPTION("hello kernel programming"); MODULE_VERSION("1.0");/* 模塊入口函數 */ static int hello_init(void) {printk(KERN_ALERT "hello_init() start\n"); // 內核日志輸出,KERN_ALERT表示日志的級別,是個字符串return 0; }/* 模塊退出函數 */ static void hello_exit(void) {printk(KERN_ALERT "hello_exit() start\n"); }/* 注冊到內核 */ module_init(hello_init); module_exit(hello_exit);Makefile
KDIR := /lib/modules/$(shell uname -r)/build PWD := $(shell pwd)obj-m := kernel_hello.oall:$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modulesclean:rm -f *.o *.ko .*.o.d *~ .*.cmd *.mod.c *.order *.ko.* *.symvers -r .tmp_versionsKDIR: 源碼樹路徑,也可以直接指定/usr/src/kernels/2.6.32-642.13.1.el6.x86_64
總結
以上是生活随笔為你收集整理的内核编程之Hello_kernel的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IO之随机访问文件(RandomAcce
- 下一篇: 多线程笔记补充之线程通信wait和not