Linux内核模块开发基础【转】
本文转载自:http://blog.csdn.net/coding__madman/article/details/51298180
1. 什么是内核模块
内核模块具有以下两个特点:1. 模块本身并不被编译进内核文件(zImage或bzImage),可以根据需求,在内核运行期间动态的安装或卸载。
2. 为什么需要内核模块
原因:Linux内核的整体结构非常庞大,其包含的组件也非常多,如何使用这些组件呢,方法1:把所有的组件都编译键内核,即:zImage或bzImage,但这样会导致一个问题:占用内存过多。然后内核模块就诞生了,可以不用被编译进内核但是可以动态的添加到正在运行的内核中!
3. 如何使用内核模块
1> 安装模块 insmod filename.ko
2> 卸载模块 rmmod filename
3> 查看模块 lsmod
这里举一个简单的例子:
还是亘古不变的方式helloworld程序(不过这里没有main函数的)
- #include <linux/init.h>
 - #include <linux/module.h>
 - static int hello_init()
 - {
 - printk(KERN_WARNING"Hello world!\n");//前面的宏表示打印的级别
 - return 0;
 - }
 - static void hello_exit()
 - {
 - printk(KERN_WARNING"hello exit!\n");
 - }
 - module_init(hello_init);//用宏来指定入口 加载模块时里面的加载函数会被调用
 - module_exit(hello_exit);
 
三要素: 加载模块 、卸载模块、 头文件
Makefile文件
- obj-m := helloworld.o
 - KDIR := /home/kernel/linux-ok6410 //开发板运行的内核的源码的路径,因为模块最后是要在开发板上运行,所以这个模块的编译是要依赖板子上运行的内核源码的,(这里我开发板用的内核源码是这个路径)
 - all:
 - make -C $(KDIR) M=$(PWD) modules CROSS_COMPILE=arm-linux- ARCH=arm
 - clean:
 - rm -f *.o *.ko *.order *.symvers
 
这里KDIR是我们内核源码的路径:
然后make 编译模块文件,这可可以看到生成了helloworld.ko文件
结合前面的课程这里可以通过串口终端同步看到(一下可以看到相关命令执行的效果)
内核模块的可选项:
1. 模块申明
2. 模块参数
3. 符号输出
Linux内核模块开发基础【转】的更多相关文章
- linux 内核模块开发相关的文章搜集和模块开发过程中的小技巧
		
最近需要开发一些内核模块,进行探究linux内核的一些特征,现在把一些遇到的比较好的文章和知识点,进行简要记录和备忘: 内核模块开发相关链接: https://www.thegeekstuff.com ...
 - Linux内核开发基础
		
1.Linux内核简介 1.1.Linux系统如何构成 内核空间(Kernel Space)+用户空间(User Space) 用户空间 = 用户程序 + C语言库(例如:GNC C Library) ...
 - Linux驱动开发基础知识
		
常用命令 lsmod: list module,将模块列表显示),功能是打印出当前内核中已经安装的模块列表 insmod: install module,安装模块,功能是向当前内核中去安装一个模块,用 ...
 - linux 内核开发基础
		
开发特点 不需要第三方库支持 使用GNU C 没有内存保护机制 杜绝浮点数 栈区固定 必须关注并发及同步 注意可移植性
 - 快速学习C语言三: 开发环境, VIM配置, TCP基础,Linux开发基础,Socket开发基础
		
上次学了一些C开发相关的工具,这次再配置一下VIM,让开发过程更爽一些. 另外再学一些linux下网络开发的基础,好多人学C也是为了做网络开发. 开发环境 首先得有个Linux环境,有时候家里机器是W ...
 - 5.linux内核模块基础,内核模块学习
		
linux内核模块基础 一.定义 Linux 内核的整体结构非常庞大,其包含的组件也非常多,如何使用这些组件呢: 方法 1:把所有的组件都编译进内核文件,即:zImage 或 bzImage,但这样会 ...
 - 【Linux开发】编写属于你的第一个Linux内核模块
		
曾经多少次想要在内核游荡?曾经多少次茫然不知方向?你不要再对着它迷惘,让我们指引你走向前方-- 内核编程常常看起来像是黑魔法,而在亚瑟 C 克拉克的眼中,它八成就是了.Linux内核和它的用户空间是大 ...
 - Linux 网络协议栈开发基础篇—— 网桥br0
		
一.桥接的概念 简单来说,桥接就是把一台机器上的若干个网络接口"连接"起来.其结果是,其中一个网口收到的报文会被复制给其他网口并发送出去.以使得网口之间的报文能够互相转发. 交换机 ...
 - 与一线Linux嵌入式开发project师的对话
		
转:与一线Linux嵌入式开发project师的对话 陈project师一直做Linux的嵌入式开发.作为在开发一线的project师.他对非常多问题的看法可能更切合实际需求,于是,通过邮件.就嵌入式 ...
 
随机推荐
- java代码实现队列的优化
			
package com.voole.queun; /** * @Decription 队列 * @author TMAC-J * */ public class Queun { /** * 初始化队列 ...
 - Tomcat下使用c3p0配置jndi数据源
			
下载c3p0包: 下载地址:https://sourceforge.net/projects/c3p0/files/?source=navbar 解压后得到包:c3p0-0.9.2.jar,mchan ...
 - 推荐15款最佳的 jQuery 分步引导插件
			
当用户浏览到一个网站,它可能从不知道如何浏览,如何操作网站或 Web 应用程序的内容和流程.在这篇文章中,我们编制了一些最好的 jQuery 引导插件列表.你会发现这些插件对于提高你的网站的整体用户体 ...
 - 高性能javascript学习笔记系列(5) -快速响应的用户界面和编程实践
			
参考高性能javascript 理解浏览器UI线程 用于执行javascript和更新用户界面的进程通常被称为浏览器UI线程 UI线程的工作机制可以理解为一个简单的队列系统,队列中的任务按顺序执行 ...
 - iOS-钥匙串中证书全部失效(证书的签发者无效)的解决办法
			
今天用Xcode打包IPA文件给同事,结果提示import时,提示证书missing,找了半天没发现问题,后来打开钥匙串,发现证书全失效了!!!根证书失效了!吓死宝宝了 解决方法 首选此方法: 1.打 ...
 - Mac安装mysql遇到的坑
			
使用XMPP前安装了mysql,小白遇到好多坑,不要见怪 mysql官网下载,选择Community中扩展名为dmg的文件 安装完成后要记住密码,重要的事情只说一遍,对了,安装时也没有偏好设置和自启动 ...
 - 关于UIScollView 中的contentOffset 的理解
			
大家对UIScollView 中的contentOffset 一直有疑问, 虽然看是一个简单的问题, 实际上并不简单. 当时我也有好多疑问, 后来在网上找了一下资料, 发现没有找到合理的解释, 因此自 ...
 - yii2 左侧菜单子级无法高亮的问题
			
作者:白狼 出处:http://www.manks.top/question/20160508000001.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出 ...
 - ORA-01950: no privileges on tablespace xxxx
			
案例场景: 新建了一个表空间后TBS_MARKET_DAT,希望将归档的数据放置在这个表空间. SQL> CREATE TABLESPACE TBS_MARKET_DAT 2 DATAFI ...
 - SQL Server 监控统计阻塞脚本信息
			
数据库产生阻塞(Blocking)的本质原因 :SQL语句连续持有锁的时间过长 ,数目过多, 粒度过大.阻塞是事务隔离带来的副作用,它是不可避免的,而且是一个数据库系统常见的现象. 但是阻塞的 ...