Linux内核模块编程

原创 2016年05月31日 21:10:30

目标:熟悉Linux模块相关函数等

1. module_init()和module_exit()

模块加载,例:

<span style="font-size:18px;">static int __init initialization_function(void)
{
    /*  初始化代码  */
}

module_init(initialization_function);</span>

这里__init:

#define __init  __attribute__((__section__(".init.text")))

此外,在.initcall.text还保存一份函数指针,初始化完成后,init所有区段都被释放

此外,还有 __initdata可以用来初始化数据

如:

static int hello_data __initdata = 1;

模块卸载,例:

static void __exit cleanup_function(void)
{
    /*  清除代码  */
}

module_exit(cleanup_function);
这里__exit告诉内核若模块被编译进内核(非m),则cleanup_function函数被忽略

同时也有__exitdata可以修饰数据

2. module_param()

例:
static char *book_name = "dissecting Linux Device Driver";
module_param(book_name, charp, S_IRUGO);

static int book_num = 4000;
module_param(book_num, int, S_IRUGO);
形参表为:参数名, 参数类型, 读/写权限

3. EXPORT_SYMBOL()和EXPORT_SYMBOL_GPL()

用于导出符号,这样这些符号就可以被其他模块调用了

4. MODULE_AUTHOR(), MODULE_DESCRIPTION(), MODULE_VERSION(), MODULE_DEVICE_TABLE(), MODULE_ALIAS()

分别为模块的:作者、描述、版本、设备表、别名


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

Linux内核模块编程-HelloWorld

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

Linux实验二:Linux 内核模块测试

一、实验目的 对Linux内核模块进行了解。 二、实验内容 创建一个内核模块,在加载和卸载模块时在内核中打印相关信息。 三、背景知识: 一、什么是内核模块?        内核模块是L...
  • longteng1116
  • longteng1116
  • 2013年04月10日 16:31
  • 2856

Linux内核模块编程-proc文件系统进阶

proc作为输入关于proc的一些基本概念和基本使用以及一些核心数据结构可以参考我的上一篇文章 在上一篇文章中提到了利用proc作为内核空间传递数据给用户空间的一种方式,那么proc能否作为用户空间...
  • zhangyifei216
  • zhangyifei216
  • 2015年11月14日 11:04
  • 1134

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

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

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

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

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

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

Linux内核模块的概念和基本的编程方法

Linux内核模块的概念和基本的编程方法 标签: Linux内核模块 2013-06-14 18:29 1864人阅读 评论(0) 收藏 举报 分类: ...
  • yu132563
  • yu132563
  • 2016年04月23日 19:38
  • 806

【Linux】【Kernel】一个简单的内核模块例子

kernel 内核模块 交叉编译
  • vickytong1018
  • vickytong1018
  • 2017年05月16日 19:38
  • 801

黑客内核:编写属于你的第一个Linux内核模块

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

关于linux内核模块编程时,多个源代码文件Makefile书写的问题

在学习内核模块编程的时候遇到了一些由于Makefile书写不正确导致的问题。一个.c源文件的Makefile按照网上的大部分资料介绍那样是没有问题的,多个源文件的内核模块编程时,就出现问题了,自己纠结...
  • u010560290
  • u010560290
  • 2015年03月26日 11:32
  • 1191
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux内核模块编程
举报原因:
原因补充:

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