hello world 简单内核模块
转:http://www.groad.net/bbs/read.php?tid-1006.html
程序代码:
引用#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>MODULE_LICENSE("Dual BSD/GPL");
static int hello_init (void)
{
printk("hello linux kernel\n");
return 0;
}static void hello_exit (void)
{
printk("bye..lwave from the kernel\n");
}module_init(hello_init);
module_exit(hello_exit);
编译方法( 只针对 2.6 内核 )
:
编写 Makefile 文件,Makefile 文件内容很简单,只有一行:
引用obj-m := hello.o
执行命令
:
引用beyes@linux-beyes:~/C/kernel> make -C /usr/src/linux-2.6.30 M=`pwd` modules
make: Entering directory `/usr/src/linux-2.6.30'
CC [M] /home/beyes/C/kernel/hello.o
Building modules, stage 2.
MODPOST 1 modules
CC /home/beyes/C/kernel/hello.mod.o
LD [M] /home/beyes/C/kernel/hello.ko
make: Leaving directory `/usr/src/linux-2.6.30'
引用beyes@linux-beyes:~/C/kernel> ls
hello.c hello.ko hello.mod.c hello.mod.o hello.o Makefile Module.markers modules.order Module.symvers
说明
:
经过以上简单几步后,即生成了一个简单的模块。这个模块在加载之后,属于内核空间,是内核空间的一部分,而不是用户空间。
在 2.6 内核版本里,编译模块,首先需要有一份完整的,编译了的内核源代码树。编译内核见:
http://www.groad.net/bbs/read.php?tid=770
在 Makefile 文件里,obj-m 名字不能改变成别的,假如写成 objj-m ,那么编译后并不会输出 hello.ko 内核模块文件,而是只有:
引用make: Entering directory `/usr/src/linux-2.6.30'
Building modules, stage 2.
MODPOST 0 modules
make: Leaving directory `/usr/src/linux-2.6.30'
beyes@linux-beyes:~/C/kernel> ls
hello.c Makefile Module.markers modules.order Module.symvers
假如要从两个源文件里编译得到一个名为 module.ko 的模块,那么 Makefile 文件可写成:
引用obj-m := module.o
module-objs := file1.o file2.o
在编译命令 make -C /usr/src/linux-2.6.30 M=`pwd` modules 中,
-C 参数后面接内核源码树路径,这是个顶层路径,也就是说在这目录下可以找到编译内核的 Makefile 文件;
M= 选项使 "makefile" 移动回到所要编译的源码所在的目录下。也就是说,一开始,需要找到内核源码树下的 Makefile,然后需要再找到欲编译源码下的 Makefile
转载于:https://blog.51cto.com/jkers/670174
hello world 简单内核模块相关推荐
- _Linux内核分析(二)-内核模块简介和简单内核模块实现
一.Linux内核模块简介 1. 何为内核模块 在上一篇博文中我们先通过内核配置,在配置的过程中我们对内核的组件进行了选择(当然这个选择决定了我们内核的大小),然后才生成了我们最终的内核,那么我们如果 ...
- 从零开始学Linux内核驱动--(二)简单内核模块驱动程序
Linux驱动–(二)简单的内核模块驱动程序 一.概述 Linux中所有的驱动都是以内核模块的形式来实现的,他们与其他所有的内核编译在一起形成一个单独的内核镜像文件(所以说Linux是一个宏内核).当 ...
- Linux内核驱动学习(一)编写最简单Linux内核模块HelloWorld
文章目录 准备工作 什么是内核模块 编写 hello.c 模块编译 相关指令 测试结果 模块加载 模块卸载 准备工作 在进行以下操作前,首先我准备了一台电脑,并且安装了虚拟机,系统是Ubuntu16. ...
- Linux Rootkit 系列五:感染系统关键内核模块实现持久化
前言 照旧,本文所需的相关代码位于如下代码仓库:Github 测试建议:为了愉快地 Happy Hacking,请不要在物理机玩火. 概要 本文分为两大部分, 第一部分是基于链接与修改符号表感染并劫持 ...
- java中include标签的用法_原 ng-include用法分析以及多标签页面的简单实现方式
在平时的项目开发中,应该会经常遇到上图所示的需求,就是在一个页面中有多个标签,被选中的标签颜色会高亮显示,切换不同标签显示相应的不同内容.如果内容代码过多则写在同一个html文件就会显得特别乱,所以这 ...
- Linux设备驱动02:Linux内核模块
目录 1. 内核模块概述 1.1 引入原因 1.2 内核模块含义 1.3 内核模块构成 2. 内核模块操作命令 2.1 加载模块 2.2 卸载模块 2.3 查看模块信息 2.3.1 lsmod 2.3 ...
- Mach-O 二进制文件解析
0x01 Mach-O格式简单介绍 Mach-O文件格式是 OS X 与 iOS 系统上的可执行文件格式,类似于windows的 PE 文件 与 Linux(其他 Unix like)的 ELF 文 ...
- 深入分析Linux内核源码oss.org.cn/kernel-book/
本html页面地址:http://oss.org.cn/kernel-book/ 深入分析Linux内核源码 前言 第一章 走进linux 1.1 GNU与Linux的成长 1.2 L ...
- Linux 进程管理剖析--转
地址:http://www.ibm.com/developerworks/cn/linux/l-linux-process-management/index.html Linux 是一种动态系统,能够 ...
最新文章
- 数据结构笔记--二叉查找树概述以及java代码实现
- java 手机号隐藏_Java隐藏银行卡号或者手机号中间几位,用*号代替工具类实现HideDataUtil...
- 21IC上关于stm32 option bytes的操作帖子记录
- 在.net 2.0/3.0程序中使用扩展方法
- 一台电脑,内外网同时使用
- python 爬虫 糗百成人
- 怎么把苹果手机通讯录导入华为手机_批量Excel表格号码导入苹果、安卓智能手机通讯录...
- Jdom的安装和使用
- 利用VLMCSD部署本地KMS服务器(Windows + CentOS7)
- 如何方便手机在线抖音去水印更有热门技巧
- 全球AI泰斗Stuart Rusell:研究人工智能太诱人了,不可抗拒
- 开发Android应用赚钱
- 花卉拍摄技巧 8 — 荷莲
- 制作立体图像(上):红蓝眼镜原理
- 马悦凌:从初级护士到“民间奇医”[1]
- Bean Definition到底是什么,附spring思维导图分享
- 【学习笔记】斯坦福SCI写作课 Unit 1
- SpringCloud DataFlow — 0. 本地部署
- 【日期】找找哪些日期是星期几
- java截取字符串中间的某个部分