Linux 内核、驱动编程起步:Hello world

来源:互联网 发布:java线程实例 编辑:程序博客网 时间:2024/06/07 16:45

1、工具准备

(1) 编译器:GCC 编译器。

(2) 程序调试工具:GDB。

(3) 内核开发文件库:kernel-devel。应当安装与当前系统内核版本一致的 kernel-devel 文件库。可通过 uname -r 指令查看当前系统内核版本。 

(4) 编译管理工具:GNU make。


2、示例程序:hello.c

/*  hello.c - The simplest kernel module. * *  Copyright (C) 2001 by Peter Jay Salzman * *  08/02/2006 - Updated by Rodrigo Rubira Branco <rodrigo@kernelhacking.com> *//* Kernel Programming */#define MODULE#define LINUX#define __KERNEL__#include <linux/module.h>  /* Needed by all modules */#include <linux/kernel.h>  /* Needed for KERN_ALERT */int init_module(void){    printk("<1>Hello world.\n");     // A non 0 return means init_module failed; module can't be loaded.    return 0;}void cleanup_module(void){    printk(KERN_ALERT "Goodbye world.\n");}  MODULE_LICENSE("GPL");

将上述代码保存为 hello.c。


3、Make

Makefile 文件如下:

obj-m := hello.oall :$(MAKE) -C /lib/modules/3.7.10-1.28-default/build M=$(PWD) modulesclean:$(MAKE) -C /lib/modules/3.7.10-1.28-default/build M=$(PWD) clean
注意上述脚本中的 /lib/modules/3.7.10-1.28-default/build,需要根据 kernel-devel 安装后生成的实际目录名进行更改。将上述脚本保存在 hello.c 同一目录下,文件名为 Makefile。然后在该目录下执行 make 指令,将在当前目录下生成 hello.ko 文件。


4、向内核插入、删除模块

(1) 插入模块

在 root 权限下执行如下指令:insmod ./hello.ko

上述指令将触发 hello.c 文件中的 init_module 函数,通过 printk 函数打印字符串 "Hello world."

(2) 删除模块

在 root 权限下执行如下指令:rmmod ./hello.ko

上述指令将触发 hello.c 文件中的 clean_module 函数,通过 printk 函数打印字符串 "Goodbye world."


5、为何插入、删除模块时,未在终端上打印字符串?

(1) 可能与 printk 的日志级别设置有关,请查询 printk 的相关文档。可在 root 权限下执行如下指令:

echo 8 > /proc/sys/kernel/printk

将终端日志级别设为最低,然后重新进行内核模块的插入、删除操作。

(2) printk 函数可能无法打印到 konsole 等虚拟终端。可尝试通过 dmesg 指令查询日志,或者查看 /var/log/messages 文件中的日志记录。

(3) 尝试 Ctrl-Alt-F2 进入 TTY 终端,在 root 权限下重新进行内核模块的插入、删除操作。






0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 幼儿早上不早起怎么办 工作中不细心怎么办 小孩没时间观念怎么办 高中厌学想回家怎么办 一年级孩子不喜欢数学怎么办 孩子做事不细心怎么办 孩子学习不够细心怎么办 孩子不用心学习怎么办? 恋爱中不够细心怎么办 孩子不愿学英语怎么办 孩子不愿学数学怎么办 孩子不愿学钢琴怎么办 小孩子学习不开窍怎么办 一年级没有读好怎么办 小孩眉毛很杂乱怎么办 孩子不好好听课怎么办 成绩差的孩子怎么办 三年级语文太差怎么办? 孩子叛逆不学习怎么办 三年级阅读理解能力差怎么办 孩子静不下心怎么办 孩子体温低于35怎么办 小孩体温突然低怎么办 宝宝35.5度体温怎么办 宝宝出汗体温低怎么办 小孩体温35.2度怎么办 孩子睡觉出冷汗怎么办 小孩感冒发烧咳嗽怎么办 小孩咳嗽出汗多怎么办 小孩手脚出汗多怎么办 小孩感冒出虚汗怎么办 宝宝感冒出冷汗怎么办 宝宝感冒睡觉出汗怎么办 宝宝感冒冒冷汗怎么办 宝宝感冒爱出汗怎么办 宝宝感冒老出汗怎么办 两只小鸡打架怎么办 老年人老是换保姆怎么办 孩子9不吃饭怎么办 两岁半宝宝不爱喝水怎么办 宝宝老是不吃饭怎么办