这两天在看《The Linux Kernel Module Programming Guide》,自己尝试从书中的样例入手,编写简单的内核模块。在编译的过程中遇到了一些问题,总结如下。
1. 编写模块代码hello.c
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
static int hello_init(void)
{
printk(KERN_ALERT"hello, world./n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT"hello,world./n");
return;
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");
2. 编写Makefile文件
obj-m := hello.o
default:
......make -C /usr/src/kernels/2.6.18-128.el5-i686/ M=/home/dhshuai/ modules
注意点:上面红点处必须是一个TAB空格,否则编译出错
-C后面是内核目录树,就是内核源码所在的位置,Redhat系统内核和书中的不同,
M=后面是编译后的目标所在位置,一般和hello.c置于相同的目录下
3.编译,cd到hello.c所在的目录,直接执行make命令,得到的信息为:
make -C /usr/src/kernels/2.6.18-128.el5-i686/ M=/home/dhshuai/ modules
make[1]: Entering directory `/usr/src/kernels/2.6.18-128.el5-i686'
Building modules, stage 2.
MODPOST
make[1]: Leaving directory `/usr/src/kernels/2.6.18-128.el5-i686'
在编译目录下可看到有hello.ko hello.o和其它中间编译文件,表示编译已经成功了。
分享到:
相关推荐
- **编译环境**:提供编译Linux内核所需的软件环境设置指南。 - **MAKEFILE文件**:解读MAKEFILE的作用和编写技巧。 - **小结**:总结本章内容并引出下一章节。 3. **第3章:引导启动程序(BOOT)** - **概述**...
6、Linux内核模块编程:内核模块编程、卸载模块编程、参数模块编程 8、Linux内存管理:编写模块程序、编译、插入模块、查看打印信息 8、Linux设备驱动:编写一个简单的字符设备驱动、查看设备号、编写测试程序 使用...
- **模块概念**:Linux内核模块是一种特殊的程序,可以动态加载到正在运行的内核中,以扩展内核的功能而不需重新启动整个系统。 - **编写与加载**:模块的编写通常使用C语言,并遵循特定的接口和规则。模块可以使用`...
然后对Linux内核的3大核心模块——内存管理、进程管理、中断和异常处理进行了深入的分析; 在此基础上,对时间度量、系统调用进行了分析和讨论;最后讲解了Linux内核中常见的同步机制,使读者掌握每处理器变量和RCU...
在《Linux内核编程经验实践》这篇文章中,作者分享了自己在Linux内核开发方面的经验和心得,并着重介绍了如何编译内核以及如何添加自定义系统调用等内容。本文将深入解析文中的关键知识点,帮助读者更好地理解Linux...
5. **阅读和学习内核**:对于想要深入了解Linux内核的人来说,这一部分可能会提供一些学习策略和工具,如使用调试器、阅读源代码、分析内核模块等。 6. **第一章概览**:作者会给出整个第一章的具体内容概览,包括...
#### 三、小结 Linux模块是内核灵活性和可扩展性的关键组成部分。通过理解和掌握模块的编写与编译技巧,开发者能够有效地定制和优化内核,以满足特定的应用需求。无论是2.4还是2.6内核,模块的编写虽然存在差异,但...
然后对Linux内核的3大核心模块——内存管理、进程管理、中断和异常处理进行了深入的分析; 在此基础上,对时间度量、系统调用进行了分析和讨论;最后讲解了Linux内核中常见的同步机制,使读者掌握每处理器变量和RCU...
然后对Linux内核的3大核心模块——内存管理、进程管理、中断和异常处理进行了深入的分析; 在此基础上,对时间度量、系统调用进行了分析和讨论;最后讲解了Linux内核中常见的同步机制,使读者掌握每处理器变量和RCU...
然后对Linux内核的3大核心模块——内存管理、进程管理、中断和异常处理进行了深入的分析; 在此基础上,对时间度量、系统调用进行了分析和讨论;最后讲解了Linux内核中常见的同步机制,使读者掌握每处理器变量和RCU...
然后对Linux内核的3大核心模块——内存管理、进程管理、中断和异常处理进行了深入的分析; 在此基础上,对时间度量、系统调用进行了分析和讨论;最后讲解了Linux内核中常见的同步机制,使读者掌握每处理器变量和RCU...
#### 四、小结 通过本文的介绍,我们了解了在Linux内核中启用调试选项的具体步骤,并深入探讨了如何利用`printk()`这一工具进行调试。此外,我们还提到了几个关键的调试选项,如spinlock调试和使用gdb调试内核的...
### Linux中断学习小结 #### 一、中断的基本概念与原理 中断是计算机硬件系统向处理器发出的一个信号,用于通知处理器某个外部事件已经发生。在Linux操作系统中,中断处理是核心的一部分,它允许系统响应外部事件...
然后对Linux内核的3大核心模块——内存管理、进程管理、中断和异常处理进行了深入的分析; 在此基础上,对时间度量、系统调用进行了分析和讨论;最后讲解了Linux内核中常见的同步机制,使读者掌握每处理器变量和RCU...
然后对Linux内核的3大核心模块——内存管理、进程管理、中断和异常处理进行了深入的分析; 在此基础上,对时间度量、系统调用进行了分析和讨论;最后讲解了Linux内核中常见的同步机制,使读者掌握每处理器变量和RCU...
然后对Linux内核的3大核心模块——内存管理、进程管理、中断和异常处理进行了深入的分析; 在此基础上,对时间度量、系统调用进行了分析和讨论;最后讲解了Linux内核中常见的同步机制,使读者掌握每处理器变量和RCU...
内核模块是可以在运行时动态加载和卸载的可执行代码段,它们提供了一种灵活的方式来扩展内核的功能而不必重新编译整个内核。 - **动态加载内核模块**:在开发初期,通过动态加载内核模块来测试新添加的功能是非常...