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。
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 权限下重新进行内核模块的插入、删除操作。
- Linux 内核、驱动编程起步:Hello world
- linux内核驱动模块编程框架---(hello world模块)
- Linux内核驱动模块编写(Hello,World)
- Linux内核驱动模块编写(Hello,World)
- linux内核驱动之hello world module
- linux 2.6内核编程-Hello world程序
- Linux 内核模块编程 Hello World 模块
- linux内核编程之hello,world
- Linux内核编程入门hello,world!
- Linux驱动编程之“Hello World”
- Hello,world驱动编程
- linux内核模块编程----ubuntu下我的第一个Hello World驱动
- Linux hello world 驱动
- linux 驱动 hello world
- 内核编程的hello world!
- 内核模块编程---hello world
- Linux内核编程初体验 —— hello world
- Linux内核模块编程入门——Hello World
- 如何写出好的PRD
- Udacity cs344-Introduction to Parallel Programming学习笔记-第二单元
- 开篇:序
- VMWare下虚拟机ubuntu 和 windows文件共享
- session和cookie
- Linux 内核、驱动编程起步:Hello world
- 黑马程序员----泛型
- Linux学习笔记(二)——文件、目录与磁盘格式
- CSS学习拾遗
- 题目1185:特殊排序
- ORACLE record is locked by another user?解锁
- C++ Primer 读书笔记
- AOP实践:java.lang.instrument的使用
- 模板方法模式