Linux驱动部分-(一)内核模块的编写

原创 2015年11月20日 15:59:07

Linux驱动部分-内核模块编写

模块需要生成节点并链入设备链表,必须包含模块初始化函数、模块销毁函数
用module_init用来声明初始化函数
用module_exit用来声明销毁函数
用MODULE_LICENSE声明模块许可信息,可识别许可有:
"GPL"(适用于GNU通用公共许可的任何版本)
"GPL  and additional rights"

eg:简单内核模块

1)编写内核模块
/*************************************************************/
//simple_demo.c
#include<linux/kernel.h>  //printk声明的头文件
#include<linux/init.h>    //module_init和module_exit声明的头文件
#include<linux/module.h>  //所有模块驱动程序必须包括头文件


static int simple_init(void) //模块初始化函数,模块加载时调用的函数
{
printk("--------hello world!\n");
return 0;
}
static void simple_exit(void) //模块销毁函数
{
printk("---------hello goodbye!\n");
}
module_init(simple_init); //module_init用来声明初始化函数
module_exit(simple_exit); //module_exit用来声明销毁函数


MODULE_LICENSE("GPL");
/*************************************************************/
2)编译内核模块
内核的编译必须依赖源码树,否则无法编译内核模块
编写Makefile文件
eg:Makefile编写
obj-m:=simple.o
simple-objs:=simple_demo.obj-m
KDIR:=/lib/modules/2.6.18-8.el5/build
PWD:=$(shell pwd)
default:
make -C $(KDIR)M=$(PWD) modules
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers *.order
运行:
make 
生成的模块为 hello.ko


/**注意**/
ps:文件名通常是大写M
$@ 目标文件
$< 第一个依赖文件
$^ 所有的依赖文件
3)驱动模块的加载与卸载
insmod simple.ko 加载模块
rmmod simple     卸载模块

cat /var/log/messages | grep'hello' 查看模块加载和卸载的情况











































版权声明:本文为博主原创文章,未经博主允许不得转载。

内核模块的基本编写以及Makefile的编写

前面讲了内核模块怎么安装和卸载,那么现在就正式讲解一下内核模块怎么编写。 以一个在内核中打印出”hello world”到终端的例子讲解。 1、  首先要写模块加载时的入口函数和模块卸载时的入口函...
  • yby19870627
  • yby19870627
  • 2012年03月16日 13:13
  • 5241

Linux 驱动开发之内核模块开发 (一)—— 内核模块机制基础

一、内核模块的概念 1、什么是模块?        内核模块是一些可以让操作系统内核在需要时载入和执行的代码,同时在不需要的时候可以卸载。这是一个好的功能,扩展了操作系统的内核功能,却不需要重新启动系...
  • zqixiao_09
  • zqixiao_09
  • 2016年03月09日 19:23
  • 1513

编写一个简单的内核模块

#include #include #include static int __init lkp_init(void) { printk(KERN_EMERG"Hello,Kernel!...
  • FallingU
  • FallingU
  • 2017年07月26日 23:17
  • 316

Linux内核模块的编写方法和技巧

内核模块可以在不重新编译内核的情况下添加到内核代码中运行,其可以动态加载和卸载,因此可以根据需要将内核某些功能独立出来作为模块,而不是编译到内核中,这样可以减少内核大小,并且可以按照实际需求选择裁剪或...
  • jasonchen_gbd
  • jasonchen_gbd
  • 2015年04月12日 12:44
  • 1696

编写一个简单的内核模块程序Hello World!

一、Linux内核模块基本原理Linux 内核模块(LKM)是一些在启动的操作系统内核需要时可以载入内核执行的代码块,不需要时由操作系统卸载。它们扩展了操作系统内核功能却不需要重新编译内核、启动系统。...
  • sh21_
  • sh21_
  • 2017年03月09日 16:47
  • 3012

linux内核驱动模块编程框架---(hello world模块)

linux内核驱动模块编程框架,模块Makefile文件,模块的常用操作命令(模块的加载卸载命令);重点来说下注册的回调函数,static int __init hello_init(void)和st...
  • YuZhiHui_No1
  • YuZhiHui_No1
  • 2014年10月18日 13:55
  • 2428

linux驱动开发总结(一)

基础性总结1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装3, 驱动开发中设计到的硬件: ...
  • viewsky11
  • viewsky11
  • 2016年11月20日 18:19
  • 293

【Linux开发】编写属于你的第一个Linux内核模块

曾经多少次想要在内核游荡?曾经多少次茫然不知方向?你不要再对着它迷惘,让我们指引你走向前方…… 内核编程常常看起来像是黑魔法,而在亚瑟 C 克拉克的眼中,它八成就是了。Linux内核和它的用户空...
  • LG1259156776
  • LG1259156776
  • 2016年05月15日 20:54
  • 2153

Linux内核模块编程-HelloWorld

HelloWorld内核开始断断续续学习内核,大概半年了,多少开始对内核有点感悟了,但是对于这个庞然大物我显得很渺小,在枯燥的内核源码之中似乎没有一点点成功的喜悦,因此我选择学习内核模块编程,通过编写...
  • zhangyifei216
  • zhangyifei216
  • 2015年11月07日 17:00
  • 2330

linux内核模块签名

linux内核模块签名 内核在模块模块加载时使用加密签名验证,校验签名是否与已编译的内核公钥匹配。目前只支持RSA X.509验证。 签名验证在通过CONFIG_MODULE_SIG使能。打开签名...
  • liumangxiong
  • liumangxiong
  • 2014年01月24日 11:00
  • 7454
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux驱动部分-(一)内核模块的编写
举报原因:
原因补充:

(最多只允许输入30个字)