日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

内核编程之Hello_kernel

發布時間:2024/8/23 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 内核编程之Hello_kernel 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

通過hello_kernel編程達到以下目的:

  • 內核編程框架了解
  • 模塊參數調用
  • 模塊間函數調用
  • 內核模塊相關關的命令使用

環境準備

內核源碼樹準備,有兩種方法:

方法1:從kernel.org下載內核源碼,手動編譯
方法2:通過yum安裝與系統版本一致的內核源碼樹

yum install -y kernel-devel-`uname -r`

安裝后/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_versions

KDIR: 源碼樹路徑,也可以直接指定/usr/src/kernels/2.6.32-642.13.1.el6.x86_64

總結

以上是生活随笔為你收集整理的内核编程之Hello_kernel的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。