First insmod a module
不得不说网上坑爹的文章比虱子还多,参考这位仁兄调试成功
喜欢C的人却靠着Java产业吃饭,人艰不拆...
对于未知的东西,有个习惯,run success first,then research
environment
[root@vohst etc]# uname -a
Linux vohst 3.10.0-123.el7.x86_64 #1 SMP Mon Jun 30 12:09:22 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
[root@vohst bin]# make
make -C /lib/modules/3.10.0-123.el7.x86_64/build/ M=/home/voh/bin modules
make[1]: Entering directory `/usr/src/kernels/3.10.0-123.el7.x86_64'
CC [M] /home/voh/bin/hello.o
Building modules, stage 2.
MODPOST 1 modules
CC /home/voh/bin/hello.mod.o
LD [M] /home/voh/bin/hello.ko
make[1]: Leaving directory `/usr/src/kernels/3.10.0-123.el7.x86_64'
[root@vohst bin]#
command(root):
make
insmod
lsmod | head
rmmod
[17842.192368] Hello World!
[18340.765263] Good bye, ubuntu
[18413.168837] Hello World!
[18832.134751] Good bye, ubuntu //i like centos and suse,but suse is allways not purl
不会打印到屏幕,不重要,logdir=/var/log/dmesg,不是每次都能找到呢...
c & Makefile
//Begin---hello.c
//my kernel path
//[root@vohst bin]# ls /usr/src/kernels/3.10.0-123.el7.x86_64/include/linux/module.h
#include</usr/src/kernels/3.10.-.el7.x86_64/include/linux/init.h>
#include</usr/src/kernels/3.10.-.el7.x86_64/include/linux/module.h> MODULE_LICENSE("GPL");
//printk(KERN_ALERT "Begin\n");
static int hello_init(void)
{
printk(KERN_ALERT "Hello World!\n");
return ;
} static void hello_exit(void)
{
printk(KERN_ALERT "Good bye, ubuntu\n");
// return 0;
} module_init(hello_init);
module_exit(hello_exit);
//End---hello.c
#Begin---Makefile
KERNELDIR=/lib/modules/3.10.-.el7.x86_64/build/
PWD:=$(shell pwd)
INSTALLDIR=/home/voh/bin
obj-m:= hello.o
modules:
#this line should begins with "#"
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
##########
cp hello.ko $(INSTALLDIR)
clean:
##########
rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
.PHONY: modules modules_install clean
#End---Makefile
---------------------------------------------------------------------------------------------
http://blog.csdn.net/fareast8612/article/details/7470386
【0】笔者的配置环境
XP->VMWare 7.1->Ubuntu 9.04
【1】有必要查询下Linux内核
# uname -r
2.6.28-11-generic
# ls /usr/src/
linux-headers-2.6.28-11 linux-headers-2.6.28-11-generic
由此可见内核版本和内核头文件版本是一致的,都是2.6.28-11。(如果不一致的话在insmod一步必定出错:
Error inserting './hello.ko': -1 Invalid module format
网上有纠正这个错误的方法,但是感觉是在投机——躲避内核的版本检查;笔者在安装Ubuntu 8.04的时候出现过header头文件和内核版本不匹配的问题,后来通过重装Ubuntu为9.04解决之)。
【2】编写hello.c
新建自己的工作目录,如:
# mkdir /home/wk/hello
编写hello.c
# cd /home/wk/hello
# gedit hello.c
加入以下内容:
//Begin---hello.c
#include</usr/src/linux-headers-2.6.28-11/include/linux/init.h>
#include</usr/src/linux-headers-2.6.28-11/include/linux/module.h>
MODULE_LICENSE("GPL");
//printk(KERN_ALERT "Begin\n");
static int hello_init(void)
{
printk(KERN_ALERT "Hello World!\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "Good bye, ubuntu\n");
// return 0;
}
module_init(hello_init);
module_exit(hello_exit);
//End---hello.c
注意第一行
#include</usr/src/linux-headers-2.6.28-11/include/linux/init.h>
位置要正确;或者你只要写成
#include<linux/init.h>
保存退出(Ctrl+Q)。
【3】编写Makefile
# cd /home/wk/hello
# gedit Makefile
注意大小写。
#Begin---Makefile
KERNELDIR=/lib/modules/2.6.28-11-generic/build
PWD:=$(shell pwd)
INSTALLDIR=/home/wk/hello/install
obj-m:= hello.o
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
cp hello.ko $(INSTALLDIR)
clean:
rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
.PHONY: modules modules_install clean
#End---Makefile
First insmod a module的更多相关文章
- linux 命令之 insmod
man insmod: INSMOD(8) insmod INSMOD(8) NAME insmod - Simple program to insert a module into the Linu ...
- linux下insmod lsmod rmmod
insmod(install module) 功能说明:载入模块 install loadable kernel module 语法:insmod [-fkmpsvxX][-o <模块名称> ...
- Linux设备驱动程序加载/卸载方法 insmod和modprobe命令
linux加载/卸载驱动有两种方法. 1.modprobe 注:在使用这个命令加载模块前先使用depmod -a命令生成modules.dep文件,该文件位于/lib/modules/$(uname ...
- [Android ] linux命令英文缩写的含义(方便记忆)
du -sh */ reference to : http://blog.chinaunix.net/uid-27164517-id-3299073.html linux常用命令的英文单词缩写 命令缩 ...
- Linux 常见的单词缩写
命令缩写:ls:list(列出目录内容)cd:Change Directory(改变目录) su:switch user 切换用户 rpm:redhat package manager 红帽子打包管理 ...
- linux常用命令的英文单词缩写
命令缩写: ls:list(列出目录内容) cd:Change Directory(改变目录) su:switch user 切换用户rpm:redhat package manager 红帽子打包管 ...
- [Linux]常用命令与目录全拼
命令缩写: ls:list(列出目录内容)cd:Change Directory(改变目录)su:switch user 切换用户rpm:redhat package manager 红帽子打包管理器 ...
- 鸟哥的linux私房菜——第20章 启动流程、模块管理与loader
20.1 Linux启动流程分析 Linux启动过程: 按下开机电源后计算机硬件主动读取BIOS来加载硬件信息以及硬件系统的自我测试,之后系统会主动读取第一个可启动的设备(由BIOS设置),此时就可以 ...
- jz2440烧写开发板uboot,内核和文件系统等的相关命令
下载文件{ftpget -u 1 -p 1 192.168.2.110 a.out a.outnfs 30000000(destination) 192.168.2.109:/home/fs/work ...
随机推荐
- 深入浅出 - Android系统移植与平台开发(五)- 定制手机模拟器ROM
一. 修改化定制Android4.0系统 Android系统启动时,先加载Linux内核,在Linux的framebuffer驱动里可以定制开 机界面,Linux内核启动成功后,挂载根文件系统,启动A ...
- MVVMLight Messenging
Basically there are two possible ways to send a message, first using an overload of the RaisePropert ...
- Eclipse for Mac 常用快捷键
为了提高开发效率,Eclipse 为我们提供了许多快捷键,它们能够帮助我们快速和方便的完成一些繁琐的操作.在这里只提供 Eclipse for Mac 的常用快捷键. Command + O:显示大纲 ...
- TLV简介
引子: 前段时间在项目中第一次接触TLV,项目中用这种格式来传输图片,语音等. 关于TLV TLV是一种可变的格式,意为:Type类型, Lenght长度,Value值.Type:该字段是关于标签和编 ...
- 给ListView视图添加行号
最后的效果如下: 更新,集成一个独立的模块而不改变源文件的方式更为稳妥. 购买地址:https://item.taobao.com/item.htm?spm=a1z10.3-c.w4002-26531 ...
- static静态结合&符号理解
上代码,方法定义为静态变量 <?php function &test(){ static $c=222; return $c; } $a=&test(); echo $a; ec ...
- JS的Touch事件们,触屏时的js事件
丫的,终于找到了JS在平板电脑上的事件!!! iphone.ipod Touch.ipad触屏时的js事件 1.Touch事件简介 pc上的web页面鼠标会产生onmousedown.on ...
- vue 倒计时
简单粗暴 export default { data () { return { timer: 30, //默认倒数30秒 stop : false, //默认是停止的,但界面加载之后会变成false ...
- alpha发布之小组评论
在alpha发布之后,让我看到了,大家都很努力,在alpha发布前大家都尽量完成自己的项目,虽然大家都很忙,但是,都在抽出时间趟黑起早的完成项目,在你们身上有很多很值得我学习的地方,虽然我认为半夜睡觉 ...
- EDI - Biztalk Setting
1. Applications: