爱之初体验---编译加载内核模块hello
1. hello.c
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h> MODULE_AUTHOR("TangHuimin");
MODULE_DESCRIPTION("My First Try to Kernel Module");
MODULE_LICENSE("GPL"); static int hello_init(void)
{
printk(KERN_ALERT "Hello World Enter\n");
return ;
} module_init(hello_init); static void hello_exit(void)
{
printk(KERN_ALERT "Hello World Exit\n");
} module_exit(hello_exit);
2. Makefile
obj-m += hello.o CURRENT_PATH:=$(shell pwd)
LINUX_KERNEL:=$(shell uname -r)
LINUX_KERNEL_PATH:=/usr/src/kernels/$(LINUX_KERNEL) all:
make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules
clean:
make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) clean
3. make //编译,生成hello.ko
4. insmod hello.ko //加载hello模块,会打印“Hello World Enter”
lsmod | grep hello //lsmod打印所有的内核模块,有显示"hello",表明hello模块已被加载
rmmod hello.ko //卸载hello模块,会打印"Hello World Exit"
lsmod | grep hello //不显示"hello",表明hello模块已被卸载
注:
对于CentOS系统,/usr/src/kernels/xxx(内核版本)/ 目录为空,导致编译内核模块失败。
参考:http://wiki.centos.org/zh/HowTos/I_need_the_Kernel_Source
2.到http://rpmfind.net/linux/rpm2html/search.php?query=kernel-devel下载与内核版本号对应的kernel-devel,我的是kernel-devel-2.6.32-358.el6.x86_64.rpm;
3.安装kernel-devel,rpm -ivh kernel-devel-2.6.32-358.el6.x86_64.rpm;
爱之初体验---编译加载内核模块hello的更多相关文章
- canvas初体验之加载图片
上一篇的介绍主要是画一些基本的图案,这一篇主要是加载图案. canvas加载图片主要分为两个步骤: 1.获取图片资源. 2.将图片资源画到画布上. 1.1获取图片资源,canvasAPI为我们提供了多 ...
- echart初体验 动态加载数据
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- Linux中mod相关的命令 内核模块化 mod相关命令都是用来动态加载内核模块/驱动程序模块
Linux中mod相关的命令 内核模块化 mod相关命令都是用来动态加载内核模块/驱动程序模块 http://baike.baidu.com/link?url=lxiKxFvYm-UfJIxMjz ...
- CentOS启动时自动加载内核模块
要想在CentOS中自动加载内核模块,需要在/etc/sysconfig/modules/目录中增加一个脚本,在此脚本中加载所需的模块. 下面是我所用的一个名为8021q.modules的脚本,用来在 ...
- ue4 plugin的编译加载
插件Plugin: 本来应该是指一种纯以接口与外界打交道的程序模块,在同一接口背后可以有多种实现,更换实现完全不影响客户端代码(不用重编). 但是在ue4的世界里,插件似乎不是这个意思,仅仅是一种可以 ...
- Ubuntu16.04下的modules模块编译加载
一.首先编写对应的驱动程序的相关内容:(最简单的hello.c程序) #include<linux/init.h> #include<linux/module.h> MODUL ...
- 加载内核模块-Unknown symbol错误分析
Unknown symbol 说明 有些函数不知道(未定义). 在调试过程中,发现一个问题,编译生成一个KO文件,insmod加载后报错: Unknown symbol var_set_intege ...
- Qt 5.2中编译加载MySQL数据库驱动问题的总结
背景: 本科毕业设计涉及图形界面与数据库查询.选择使用Qt实现图形界面编程,使用MySQL构建数据库.之前安装了Qt 5.2,后来又安装了MySQL Server 5.6 (FULL完全安装).接着就 ...
- linux下设备驱动的结构&编译&加载
构造和运行模块 insmod modprobe rmmod 用来装载模块到正运行的内核和移除模块的用户空间工具. #include<linux/init.h> module_init(in ...
随机推荐
- SSH学习笔记目录
1.Spring_2000_Spring_Hibernate_HibernateTemplate
- bootstrap小例子等
一个简单的表单样式: <div class="row"> <form action="#" class="form-horizont ...
- windows service的继承类ServiceBase
https://msdn.microsoft.com/zh-cn/library/system.serviceprocess.servicebase.exitcode(v=vs.80).aspx 在停 ...
- 在windows下使用linux命令
<转:http://www.cnblogs.com/adgnat/archive/2011/07/16/2108098.html> 使用过linxu的伙计估计都会喜欢上linux各种各样强 ...
- 创建指定日期java Date对象
import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import ...
- Linux php 中文乱码解决
在ubuntu下php网页输出乱码,在不涉及数据库编码的情况下: 修改“/etc/php5/apache2/php.ini”将 default_charset = "iso-8859-1&q ...
- types.MethodType
http://stackoverflow.com/questions/972/adding-a-method-to-an-existing-object-instance 532down voteac ...
- [DataTable]控件排序事件中用DataView及DataTable排序
控件排序事件中用DataView及DataTable排序 文章分类:.net编程 在做ASP.NET页面开发时,经常要用到dataset(或者DataTable),绑定到DataGrid或GridVi ...
- 2013年山东省第四届ACM大学生程序设计竞赛-最后一道大水题:Contest Print Server
点击打开链接 2226: Contest Print Server Time Limit: 1 Sec Memory Limit: 128 MB Submit: 53 Solved: 18 [Su ...
- Android中Context详解 ---- 你所不知道的Context
转自:http://blog.csdn.net/qinjuning/article/details/7310620Android中Context详解 ---- 你所不知道的Context 大家好, ...