Linux 内核模块程序结构
1.内核加载函数
即我们常说的内核入口函数,当内核被加载的时候调用,在内核入口函数中多进行设备的注册和初始化,其中最常用的莫过于module_init()。insmod xxx.ko的时候调用。
通常初始化函数定义为xxx_init,可以使用__init进行修饰
2.内核卸载函数
内核模块的出口,调用rmmod xxx.ko的时候调用,通常在该函数中进行注册模块的注销和硬件的状态的恢复;__exit修改该函数表明该函数为退出函数
加载和卸载示例如下:(均定义于linux/init.h,所以在编程的时候需要加上#include <linux/init.h>)
3.模块许可声明
常见的形式为MODULE_LICENSE("GPL") 或 MODULE_LICENSE("GPL v2"),该声明语句表明了内核的允许权限,支持GPL协议
4.模块参数
这个用到的比较少,格式为module_para(变量名,类型,权限);使用方式为insmod xxx.ko 变量名=xx,具体可看对于module_para介绍的博文,链接如下
http://blog.csdn.net/chdhust/article/details/8228888
5.模块导出符号
内核模块可以将本模块的符号导出,供其他模块进行使用,使用方式有EXPORT_SYMBOL(符号名)和EXPORT_SYMBOL_GPL(符号名),EXPORT_SYMBOL_GPL只适用于包含GPL许可的模块
6.模块的声明与描述
MODULE_AUTHOR(); //模块作者
MODULE_DESCRIPTION(); //模块描述
MODULE_VERSION(); //模块版本
MODULE_DEVICE_TABLE(); //模块设备表
MODULE_ALIAS(); //模块的别名
Linux 内核模块程序结构的更多相关文章
- Linux内核模块编程与内核模块LICENSE -《具体解释(第3版)》预读
Linux内核模块简单介绍 Linux内核的总体结构已经很庞大,而其包括的组件或许多.我们如何把须要的部分都包括在内核中呢?一种方法是把全部须要的功能都编译到Linux内核.这会导致两个问题.一是生成 ...
- Linux内核模块简介
一. 摘要 这篇文章主要介绍了Linux内核模块的相关概念,以及简单的模块开发过程.主要从模块开发中的常用指令.内核模块程序的结构.模块使用计数以及模块的编译等角度对内核模块进行介绍.在Linux系统 ...
- Linux应用程序访问字符设备驱动详细过程【转】
本文转载自:http://blog.csdn.net/coding__madman/article/details/51346532 下面先通过一个编写好的内核驱动模块来体验以下字符设备驱动 可以暂时 ...
- Linux内核模块编写详解
内核编程常常看起来像是黑魔法,而在亚瑟 C 克拉克的眼中,它八成就是了.Linux内核和它的用户空间是大不相同的:抛开漫不经心,你必须小心翼翼,因为你编程中的一个bug就会影响到整个系统,本文给大家介 ...
- 3、Linux内核模块学习
一.内核模块的学习 内核的整体框架是非常的大,包含的组件也是非常多,如何将需要的组件包含在内核中呢?选择一,就是将所有的组件全部编译进内核,虽然需要的组件都可以使用,但是内核过分庞大,势必带来效率 ...
- 【Linux开发】编写属于你的第一个Linux内核模块
曾经多少次想要在内核游荡?曾经多少次茫然不知方向?你不要再对着它迷惘,让我们指引你走向前方-- 内核编程常常看起来像是黑魔法,而在亚瑟 C 克拉克的眼中,它八成就是了.Linux内核和它的用户空间是大 ...
- Linux内核模块学习
注:本文是<Linux设备驱动开发详解:基于最新的Linux 4.0内核 by 宋宝华 >一书学习的笔记,大部分内容为书籍中的内容. 书籍可直接在微信读书中查看:Linux设备驱动开发详解 ...
- Linux 标准目录结构
初学Linux,首先需要弄清Linux 标准目录结构 / root --- 启动Linux时使用的一些核心文件.如操作系统内核.引导程序Grub等. home --- 存储普通用户的个人文件 ftp ...
- 【转】 Linux下目录结构
装完Linux,首先需要弄清Linux 标准目录结构 / root — 启动Linux时使用的一些核心文件.如操作系统内核.引导程序Grub等. home — 存储普通用户的个人文件 ftp — 用户 ...
随机推荐
- 【踩坑】angularJS 1.X版本中 ng-bind 指令多空格展示
做项目的时候遇到的问题 1.问题描述 用户在表单某个值输入多个空格,例如:A B,保存至服务器 在列表查询页面中使用bg-bind的指令单向绑定,结果展示位A B,连续的空格被替换为单个空格 ...
- 零基础到精通Web渗透测试的学习路线
小编相信很多新手都会遇到以下几个问题 1.零基础想学渗透怎么入手? 2.学习web渗透需要从哪里开始? 这让很多同学都处于迷茫状态而迟迟不下手,小编就在此贴给大家说一下web渗透的学习路线,希望对大家 ...
- [WPF] UserControl vs CustomControl
介绍 WPF中有两种控件:UserControl和CustomControl,但是这两者有什么区别呢?这篇博客中将介绍两者之间的区别,这样可以在项目中合理的使用它们. UserControl 将多个W ...
- POI 自用API
poi包下载 API 使用POI生成Excel,大家都是赞个.可是狐狸觉得毕竟不是微软的产品,使用没有C#语言的好用,方法还是存在极限的. 下面总结狐狸自己用过的方法: import org.apac ...
- HK2框架的简单自实现kunJ
kunJ kunJ框架,是基于HK2框架的一个自实现注入框架,功能比较简单,重在探索依赖注入的实现原理. 实现细节 自定义3个注解,Access,Inject,Service 在Service中实现对 ...
- android TranslateAnimation 顶部segment分段移动动画
这里实现的功能是从主页布局的fragment点击跳转到一个acitivity,然后顶部是一个切换的segment顶部是一个listview,点击segment分段让listview加载不同的内容.我这 ...
- git 介绍及其使用总结
版本控制 Git 目录 目录 2 第1章 Shell和vi 4 1.1 什么是shell 4 1.2 shell分类 4 1.3 认识bash这个shell ...
- sleep(强制等待)和implicitly_wait(隐式等待 )区别与理解---基于python
我们在进行selenium页面自动化的测试的时候,由于需要等待目标页面的加载或由于网络或硬件配置导致的页面加载等待,经常会用到sleep,但是由于在不同场景下对于sleep时间的估计无法十分准确,导致 ...
- poj2914无向图的最小割模板
题意:给出无向图的点,边,权值.求最小割. 思路:根据题目规模,最大流算法会超时. 网上参考的模板代码. 代码: /*最小割集◎Stoer-Wagner算法:一个无向连通网络,去掉一个边集可以使其变成 ...
- 所谓编码--泛谈ASCII、Unicode、UTF8、UTF16、UCS-2等编码格式
最近在看nodejs的源码,看到stream的实现里面满地都是encoding,不由想起以前看过的一篇文章--在前面的随笔里面有提到过--阮一峰老师的<字符编码笔记:ASCII,Unicode和 ...