易截截图软件、单文件、免安装、纯绿色、仅160KB

Linux内核模块编程


摘要
Linux内核模块编程的资料有些纷繁复杂,有的过于简单,有的过于庞杂,我试图用笔记的形式想读者展示怎样来进程Linux模块编程,力图做到简明扼要,这篇文章也是作为本人备忘的资料,所以有些地方过于简略是难免的。本来这篇文章的目的就是让用户知其然,至于所以然还是请参考相应的资料,其实最好的资料莫过于Linux Kernel Source。
适用范围:
Linux Kernel >= 2.6.0
Linux模块简介
首先这个module不同于microkernel的module,microkernel的module是一个个的daemon进程,工作于用户空间,Linux的module只是一个内核的目标代码,内核通过执行运行时的连接,来把它整合到kernel中去,所以说Linux的module机制并没有改变Linux内核为monolithic OS本质,其module也是工作于内核模式,享有内核的所有特权。
至于为什么要引入Linux Kernle Module(一下简称LKM),我想至少有一下几点:
模块化编程的需要,降低开发和维护成本。
增强系统的灵活性,使得修改一些内核功能而不必重新编译内核和重启系统。
降低内核编程的复杂性,使入门门槛降低。
相关宏及头文件
LKM需要包含以下头文件:<linux/kernel.h> <linux/module.h>
需要定义以下宏:__KERNEL__, MODULE
一个简单的内核模块示例
/*file: hello.c*/
#ifndef __KERNEL__
#define __KERNEL__
#endif
#ifndef MODULE
#define MODULE
#endif
#include <linux/module.h>
#include <linux/kernel.h>
static int __init hello_init(void)
{
printk(KERN_ALERT "Hello, my LKM.\n");
return 0;
}
static void __exit hello_exit(void)
{
printk(KERN_ALERT "Bye, my LKM.\n");
}
module_init(hello_init);
module_exit(hello_exit);
很简答吧,不是吗?这个LKM的功能其实也很简单,就是当通过insmod加载它的时候,他打印Hello, my LKM.通过rmmod卸载它的时候他打印bye, my LKM.一个最基本的内核模块一般都包含有两个函数,一个是初始化函数(比如说这里的hello_init),一个是卸载函数(hello_exit), 当然也可以没有任何函数,只是提供一些变量。但是初始化函数和卸载函数必须成对出现。并且init函数当操作成功时返回值大于等于零,当操作失败时,返回非零。宏module_init和module_exit用于注册初始化函数和卸载函数。
LKM的编译
一个示例的Makefile如下所示
obj-m := hello.o
KERNE


相关文档:

七款嵌入式Linux操作系统简介

除了智能数字终端领域以外,Linux在移动计算平台、智能工业控制、金融业终端系统,甚至军事领域都有着广泛的应用前景。这些Linux被统称为“嵌入式Linux”。下面就来看看都有哪些嵌入式Linux在以上领域纵横驰骋吧!
  RT-Linux
  这是由美国墨西哥理工学院开发的嵌入式Linux操作系统。到目前为止,RT-Linux已 ......

Redhat5 Linux 下利用yum安装SVN客户端

 
Redhat5下利用yum安装SVN客户端

由于Redhat5自带的SVN的版本是1.4.1的,比较老,不能读取SVN1.5的库,所有要更新:
直接运行:yum update subversion
会抱错:
http://ftp.sjtu.edu.cn/centos/5/updates/i386/repodata/repomd.xml: [Errno 14] HTTP Error 403: Forbidden
将repo地址改称USTC(科大的),
......

Linux机器增添一块新网卡

转自本人个人网站【PHP探路者 http://www.phpwell.com

原文地址 http://www.phpwell.com/?p=43
   公司内的一台测试服务器原本只是放在公司内网上使用,现需要将测试环境置于Internet上,
以便于客户即时了解项目进展情况。为Linux系统增添一块网卡的过程记录如下:
步骤一:将一块新 ......

如何在嵌入式LINUX内核中增加自己的设备驱动程序

 驱动程序的使用可以按照两种方式编译,一种是静态编译进内核,另一种是编译成模块以供动态加载。由于uClinux不支持模块动态加载,而且嵌入式LINUX不能够象桌面LINUX那样灵活的使用insmod/rmmod加载卸载设备驱动程序,因而这里只介绍将设备驱动程序静态编译进uClinux内核的方法。
  下面以UCLINUX为例,介绍在一个 ......

传智播客Linux再次复习概括

 【复习Linux第一步】
注意:有些权限只有超级用户才有!
===安装===
注意在分区的时候的选择,如果没选则有可能不能继续下一步
===安装===
*********
*********
===命令===
[最基本命令]
ls
pwd
cd
ls -al
su 用户
clear
[登陆界面的设置]
这个iso文件有关系,有些linux镜像文件默认是启动图形化界面 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号