当前位置:文档之家› 模块编译入门例子hello_module

模块编译入门例子hello_module


Linux 2.6内核的编译步骤及模块动态加载-操作系统中国网络
然后查看该目录下有哪些文件生成:
debian:/home/david # ls -l 总计 28 drwxr-xr-x 2 david david 4096 2007-02-07 17:49 Desktop -rw-r--r-- 1 david david 462 2007-07-20 13:42 hello.c -rw-r--r-- 1 root root 2432 2007-07-20 13:55 hello.ko -rw-r--r-- 1 root root 607 2007-07-20 13:55 hello.mod.c -rw-r--r-- 1 root root 1968 2007-07-20 13:55 hello.mod.o -rw-r--r-- 1 root root 1140 2007-07-20 13:55 hello.o -rw-r--r-- 1 david david 267 2007-07-20 13:48 Makefile -rw-r--r-- 1 root root 0 2007-07-05 14:11 Module.symvers
/linux/1601.html(第 3/8 页)200及模块动态加载-操作系统中国网络
//hello.c #include <linux/init.h> #include <linux/module.h> MODULE_LICENSE("Dual BSD/GPL"); static int hello_init(void) { printk(KERN_ALERT "Hello, world\n"); return 0; } static void hello_exit(void) { printk(KERN_ALERT"Goodbye, cruel world\n"); } module_init(hello_init); module_exit(hello_exit);

.
专题 虚拟技术 Linux 防火墙 VPN 备份恢复 Vista
资源 新闻中心 认证培训 在线实验 软件下载 好书推荐

.
产品 服务器 网络设备 报价

.
ITPro俱乐部 论坛 《ITPro Magazine》杂志 博客

.
电子书
IBM Ctrix HP EMC TestInside |Firefox最安全的浏览器 | 订阅技术杂志 | ITPro俱乐部技术活动 |虚拟化技术专区 | 大量电子书技术手册 | 加入ITPro俱乐部
本文是基于2.6的内核,也建议各位可以先看一下《Linux内核设计与实现(第二版)》作为一个基础知识的 铺垫。当然,从实践角度来看,只要按着以下的步骤去做也应该可以实现成功编译内核及加载模块。 个人用的Linux版本为:Debian GNU/Linux,内核版本为:2.6.20-1-686. 第一步,下载Linux内核的源代码,即构建LDD3(Linux Device Drivers 3rd)上面所说的内核树。 如过安装的Linux系统中已经自带了源代码的话,应该在/usr/src目录下。如果该目录为空的话,则需要 自己手动下载源代码。下载代码的方法和链接很多,也可以在CU上通过/search/? key=&q=kernel&frmid=53去下载。不过,下载的内核版本最好和所运行的Linux系统的内核版本一致。当然,也 可以比Linux系统内核的版本低,但高的话应该不行(个人尚未实践)。
Linux 2.6内核的编译步骤及模块动态加载-操作系统中国网络
Ctrix,HP,EMC,CIW,Oracle,Comptia,IBM,


热点: Certification Exams Questions;Bootcamp
Braindumps-TestInside
·RedHat Linux下防火墙配置入门必
最新专题:
HACMP for AIX 4.3.3 技术专题 命令大全
FreeBSD使用大全
Apache应用专题
Linux
专题 | 分类 | 投稿 | 搜索
操作系统首页 | 新闻动态 | Linux | freebsd | unix | Solaris | IBM AIX 操作系统首页 >> Linux >> Linux安全 >>


·Linux系统常用的三款网络安全工具 ·Linux操作系统中RPM命令参数的使

用详解

·介绍Linux操作系统下关于声卡配置的
方法

·Linux十大高级安全管理技巧

»导航列表
Debian下可以很方便的通过Debian源下载: 首先查找一下可下载的内核源代码: # apt-cache search linux-source 其中显示的有:linux-source-2.6.20,没有和我的内核版本完全匹配,不过也没关系,直接下载就可以 了: # apt-get install linux-source-2.6.20 下载完成后,安装在/usr/src下,文件名为:linux-source-2.6.20.tar.bz2,是一个压缩包,解压缩既可 以得到整个内核的源代码: # tar jxvf linux-source-2.6.20.tar.bz2 解压后生成一个新的目录/usr/src/linux——source-2.6.20,所有的源代码都在该目录下。 注:该目录会因内核版本的不同而不同,各位动手实践的朋友只需知道自己的源代码所在的具体位置即 可。 第二步:配置及编译内核。 进入/usr/src/linux——source-2.6.20目录下,可以看到Makefile文件,它包含了整个内核树编译信 息。该文件最上面四行是关于内核版本的信息。对于整个Makefile可以不用做修改,采用默认的就可以了。
Makefile文件的内容为:
obj-m := hello.o KERNELDIR := /lib/modules/2.6.20/build PWD := $(shell pwd) modules: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules modules_install: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install clean: rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
/linux/1601.html(第 2/8 页)2008-4-2 12:21:55

网管技术:网络知识 | 网络管理 | 网络 协议 | 传输介质 | 备份恢复 | 协议分析 | 安全:安全公告 | 病毒木马 | 安全知识 | 安全技术 | 防火墙 | VPN
精彩文章

活动资讯
今日头条
Linux 2.6内核的编译步骤及模块动态加载

·Ubuntu Server版系统的用户安全优
2007-07-24 20:24:02 作者: 来源:收集 浏览次数:183 文字大小:【大】【中】【小】 简介:本文是基于2.6的内核,也建议各位可以先看一下《Linux内核设计与实现(第二版)》作为一个基础 知识的铺垫。当然,从实践角度来看,只要按着以下的步骤去做也应该可以实现成功编译内核及加载模块。 个人用的 ... 关键字: Linux 内核 Linux 2.6内核 内核编译
化方法

·Apache Web服务的安全配置 ·linux下用iptable实现防火墙 ·Linux后门系列--由浅入深sk13完全


分析

·Linux下双网卡绑定技术实现负载均
/linux/1601.html(第 1/8 页)2008-4-2 12:21:55
其中,hello.c和Makefile文件应该位于同一个目录下,可以放在/home下,我的两个文件都位于/home/ david/. 第四步:编译和装载模块 在文件所处的目录下,执行: debian:/home/david # make
/linux/1601.html(第 4/8 页)2008-4-2 12:21:55
/linux/1601.html(第 5/8 页)2008-4-2 12:21:55
Linux 2.6内核的编译步骤及模块动态加载-操作系统中国网络
这里有两个问题,其一就是printk()输出的问题.LDD3上也说,在加载和卸载模块的时候都会有信息输出在 屏幕上,如果在Windows下通过终端仿真器(我们常用的虚拟机算是一种),则在屏幕上看不到任何输出.我同时 在虚拟机和和物理机都运行了该模块,均未看到有"Hello, world"(加载模块时printk的输出)或"Goodby, cruel world"(卸载模块时printk的输出). 这个不知道是我操作系统发行版的原因还是系统配置的问题,请了解 这个问题的朋友指点一下. 其二,书上讲到如果屏幕上看不到信息,可能输出在某个日志文件里面了,并说可能在/var/log/messages 文件中.并且看到网上很多网友也说是输出到这个文件里面.我不知道有没有发现输出在其他日志文件里的,不过 我的这个信息输出在/var/log/syslog里面.在加载和卸载完该模块后, 执行命令: debian:/home/david # cat /var/log/syslog | grep world 可以看到有两行内容.当然,也可以不用grep world, 应该会出现在最后两行. Jul 20 14:15:29 localhost kernel: Hello, world Jul 20 14:15:34 localhost kernel: Goodbye, cruel world 这就是printk应该输出的信息. 这里有另外一个方法,可以实现printk的信息输出在屏幕上,即更改printk输出的优先级.例子中的优先级 为:KERN_ALERT,优先级为<1>,如果将优先级改为KERN_EMERG即<0>,则可以看到屏幕的输出信息. 修改的方法只是修改一下hello.c中两句printk()的内容,修改后的hello.c如下:
相关主题