`
tcspecial
  • 浏览: 894967 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

内核模块之hello world

阅读更多

  Linnx提供了非常丰富的网络,IO等内核API,可以很方便开发驱动模块。典型的应用程序有一个main函数,内核模块只需要一个初始化,退出函数。下面看下第一个hello world内核模块。

 

一. 准备环境

#uname -a
2.6.32-431.el6.x86_64
#yum -y install   kernel-devel.x86_64     #开发内核必须安装对应的内核源码 

  

二. 编码

 

// hello.c
#include <linux/module.h>
#include <linux/init.h>

static int __init helloworld_init(void)
{
	printk(KERN_ALERT "Hello world module init\n");
	return 0;
}


static void __exit helloworld_exit(void)
{
	printk(KERN_ALERT "Hello world module exit\n");
}

module_init(helloworld_init);	// 模块初始化
module_exit(helloworld_exit);	 // 模块退出

MODULE_LICENSE("GPL");	        // 版权
MODULE_AUTHOR("kettas"); 	// 作者
MODULE_DESCRIPTION("Hello world Demo");	// 描述
MODULE_VERSION("1.0.1");	// 版本
MODULE_ALIAS("hello 01");	// 别名

   注:内核模块为纯C代码,对代码格式要求严格,1.变量声明必须放在函数第一行,否则报ISO C90 不允许混合使用声明和代码警告。2. 无参函数声明参数要加上void,否则报函数声明不是一个原型的警告

 

三. 编译

#hello.ko

obj-m += hello.o     #指定编译模块名称,会自动寻找hello.c
CURRENT_PATH:=$(shell pwd)
LINUX_KERNEL:=$(shell uname -r)

LINUX_KERNEL_PATH:=/usr/src/kernels/2.6.32-431.el6.x86_64/         #内核源码目录

all:
	make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules     #C进入内核目录读取Makefile,M表明后回到当前目录读取Makefile

clean:
	make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) clean

 

 

四. 运行

#modinfo helloworld.ko                         #查看内核模块信息
filename:       hello.ko
alias:          Example 01
version:        1.0.1
description:    Hello world Demo
author:         kettas
license:        Dual BSD/GPL
srcversion:     478008C1F7974ACC15407DB
depends:        
vermagic:       2.6.32-431.el6.x86_64 SMP mod_unload modversions
#sudo inmsmod helloworld.ko                    #安装helloworld内核模块,此时控制台没有打印hello world
#dmesg                                         #printk日志信息会写入内核环形缓冲区内,运行dmesg可查看
hello world module init
hello world module exit

 

 

 

分享到:
评论

相关推荐

    linux-2.4内核模块 helloworld

    以helloworld模块在linux-2.4内核下的编写,编译,连接和运行例,简单介绍下linux-2.4下内核模块的编写。

    Windows x64内核模块-HelloWorld

    Windows内核安全与驱动开发书的第一个示例程序,在新版本开发环境中调试通过,使用Visual Studio 2017加上WDK 1803环境编译。在调试过程中,由于x64驱动程序禁止使用嵌入汇编,采用Shellcode方式进行软件中断调用,...

    Ubuntu下内核编程之第一个模块helloworld(附源码)

    图文并茂的描述了Ubuntu下内核编程之第一个模块helloworld的编写全过程,另附有代码。

    LINUX内核模块编程

    LINUX内核模块编程LINUX内核模块编程LINUX内核模块编程

    Linux驱动开发之编写第一个内核模块--Hello World源码

    Linux驱动开发之编写第一个内核模块--Hello World源码, 亲测OK,对应文章链接: https://dingdong.blog.csdn.net/article/details/106329048

    Linux 2.6内核模块编程范例

    Linux2.6内核模块编程范例,内含helloworld程序及标准的makefile范本

    Linux内核驱动模块编程指南 (内核版本2.2, 2.4)The Linux Kernel Module Programming Guide CHS

    2.5. Hello World (part 4): 内核模块证书和内核模块文档说明 2.6. 从命令行传递参数给内核模块 2.7. 由多个文件构成的内核模块 3. 开始热身 3.1. 内核模块和用户程序的区别 4. 字符设备文件 4.1. 字符设备驱动程序 ...

    Linux编程--Linux内核模块编程指南

    第1章 Hello, World 145 1.1 内核模块的Makefiles文件 146 1.2 多重文件内核模块 147 第2章 字符设备文件 149 第3章 /proc文件系统 158 第4章 把/proc用于输入 162 第5章 把设备文件用于输入 170 第6章 启动参数 182...

    linux内核编程环境搭建并编写helloworld模块

    一、linux内核编程环境搭建 升级kernel yum update kernel 原创文章 9获赞 10访问量 362 关注 私信 展开阅读全文 作者:权左

    Linux实验课设报告

    6、Linux内核模块编程:内核模块编程、卸载模块编程、参数模块编程 8、Linux内存管理:编写模块程序、编译、插入模块、查看打印信息 8、Linux设备驱动:编写一个简单的字符设备驱动、查看设备号、编写测试程序 使用...

    FS4412内核各类模块实验代码

    FS4412内核hello world模块实验代码、ubuntu18.04_helloworld实验代码、FS412 LED 字符设备驱动程序 传统模型、FS4412 LED字符设备、FS4412 LED字符设备驱动程序 平台总线(platformbus)模型、FS4412 串口模块实验...

    Linux内核修炼之道精华版之方法论

    Linux内核修炼之道精华版,精华版方法论部分导读、缅怀已逝去的十八年(1991~1998)、缅怀已逝去的十八年(1999~2002)、缅怀已逝去的十八年(2003~2006)、缅怀已逝去的十八年(2007~2009)、Kernel地图、分析内核...

    linux-kernel-module-rust:在安全的Rust中编写Linux内核模块的框架

    hello-world目录中有一个简单的演示模块,而tests /目录中有各种其他示例。 设计 我们在内核头文件上运行以生成自动Rust FFI绑定。 bindgen由提供支持,因此我们使用内核自己的构建系统来确定适当的CFLAGS。 然后,...

    Linux内核编程 中文版

    1.Hello, world Exhello.c 1.1内核模块的编译文件 1.2 多文件内核模块 2.字符设备文件 2.1多内核版本源文件 3./proc文件系统 4.使用/proc进行输入 5.和设备文件对话(写和IOCTLS) 6.启动参数 7....

    uClinux内核编程

    1.Hello, world 3 Exhello.c 3 1.1内核模块的编译文件 4 1.2 多文件内核模块 5 2.字符设备文件 8 2.1多内核版本源文件 16 3./proc文件系统 17 4.使用/proc进行输入 22 5.和设备文件对话(写和...

    leetcoderust-CSCI340-KernelHacking:CSCI340操作系统的内核模块编写作业

    锈编写内核模块 加州州立大学-奇科 通过布莱恩·迪克森 介绍 此作业的目的是让您更加熟悉内核模块的编写方式以及使用这些模块的 Linux 操作系统的各个方面。 物流 唯一的“交接”将是电子的。 对作业的任何澄清和...

    (1)学习 Linux 内核的系统调用方法 理解并掌握 Limux 系统调用的实现框架、用户界面、参数传递、进入返回过程

    使用编译内核法和内核模块法这两种添加系统调用的方法添加一个不用传递参数的系统调用,其功能是简单输出类似“hello wold”这样的字符串。 三. 实验步骤 3.1内核编译法添加系统调用 (1)通过su root 输入密码后...

    linux设备驱动程序中英文加源码

    内核模块相比于应用程序 2.3.1. 用户空间和内核空间 2.3.2. 内核的并发 2.3.3. 当前进程 2.3.4. 几个别的细节 2.4. 编译和加载 2.4.1. 编译模块 2.4.2. 加载和卸载模块 2.4.3. 版本依赖 2.4.4. 平台依赖性 2.5. ...

    centos7下编译hello.ko驱动程序

    1. 查看内核版本 [root@localhost test]# uname -r 3.10.0-862.el7.x86_64 2. 切换到相应的内核源码中 [root@localhost test]# cd /usr/src/kernels/3.10.0-862.el7.x86_64/drivers/ [root@localhost test]# ...

    Linux内核修炼之道-pdf版

    内核学习的方法论..........................................................................................................................9 驱动开发的方法论..............................................

Global site tag (gtag.js) - Google Analytics