专题5-内核模块开发2内核模块设计与编写

1、范例

touch helloworld.c

chmod 777 -R helloworld.c

#include<linux/init.h>

#include<linux/module.h>

static int hello_init(void)

{

  printk(KERN_WARNING"hello,world!\n");

  return 0;

}

static void hello_exit(void)

{

  printk(KERN_INFO"Goodbye,world!\n");

}

module_init(hello_init);//insmod+文件名.ko(入口)

module_exit(hello_exit);//rmmod+文件名(出口)

内核模块包括:

1、头文件

#include<linux/init.h>

#include<linux/module.h>

2、加载函数:

module_init

3、卸载函数:

module_exit

编写makefile文件:touch Makefile

chmod 777 -R Makefile

1)格式相对固定,先使用obj-m(用来指明内核模块最终产生的名字)

a、当只有一个源文件时:obj-m:helloworld.o

b、当有多个.c源文件时:obj-m:hello.o

hello-objs:file1.o file2.o file3.o .....

这里的hello.o是随意取的名字,但是要和hello-objs相对应

2)KDIR变量保存的是开发板运行的内核代码路径,KDIR名字自己取,如:

/opt/FriendlyARM/mini6410/linux/linux-2.6.38

3)目标

all:

        make -C $(KDIR)  M=$(PWD) modules CROSS_COMPILE=arm-linux- ARCH=arm

clean:

      rm -f *.o *.ko *.order *.symvers

-C:指进入到某目录。

M=$(PWD):M为内核模块代码的路径,PWD为当前路径

下面将helloworld.ko放入NFS目录下去,启动开发板,安装insmod helloworld.ko,卸载rmmod helloworld,会出错,没有目录2.6.30.4-Embedsky,当我们去卸载模块时,必须在lib/modules下面有和我们内核版本相同的目录,建一个mkdir -p  /lib/modules/$(uname -r)。

时间: 2024-10-13 06:10:18

专题5-内核模块开发2内核模块设计与编写的相关文章

Linux内核模块编程与内核模块LICENSE -《详解(第3版)》预读

Linux内核模块简介 Linux内核的整体结构已经非常庞大,而其包含的组件也非常多.我们怎样把需要的部分都包含在内核中呢?一种方法是把所有需要的功能都编译到Linux内核.这会导致两个问题,一是生成的内核会很大,二是如果我们要在现有的内核中新增或删除功能,将不得不重新编译内核. 有没有一种机制使得编译出的内核本身并不需要包含所有功能,而在这些功能需要被使用的时候,其对应的代码被动态地加载到内核中呢?Linux提供了这样的一种机制,这种机制被称为模块(Module).模块具有这样的特点. 模块本

Linux内核模块编程与内核模块LICENSE -《具体解释(第3版)》预读

Linux内核模块简单介绍 Linux内核的总体结构已经很庞大,而其包括的组件或许多.我们如何把须要的部分都包括在内核中呢?一种方法是把全部须要的功能都编译到Linux内核.这会导致两个问题.一是生成的内核会很大,二是假设我们要在现有的内核中新增或删除功能,将不得不又一次编译内核. 有没有一种机制使得编译出的内核本身并不须要包括全部功能,而在这些功能须要被使用的时候,其相应的代码被动态地载入到内核中呢?Linux提供了这样的一种机制,这样的机制被称为模块(Module).模块具有这样的特点. 模

Linux内核分析(二)----内核模块简介|简单内核模块实现

Linux内核分析(二) 昨天我们开始了内核的分析,网上有很多人是用用源码直接分析,这样造成的问题是,大家觉得很枯燥很难理解,从某种意义上来说linux系统本身就是由一个个模块构成的,所以我会结合内核模块的设计,去分析内核,从而达到对linux内核的理解. 今天我们会分析到以下内容: 1.      Linux内核模块简介 2.      简单内核模块实现 l  Linux内核模块简介 1.       何为内核模块 在上一篇博文中我们先通过内核配置,在配置的过程中我们对内核的组件进行了选择(当

[.NET领域驱动设计实战系列]专题十一:.NET 领域驱动设计实战系列总结

一.引用 其实在去年本人已经看过很多关于领域驱动设计的书籍了,包括Microsoft .NET企业级应用框架设计.领域驱动设计C# 2008实现.领域驱动设计:软件核心复杂性应对之道.实现领域驱动设计和Asp.net 设计模式等书,但是去年的学习仅仅限制于看书,当时看下来感觉,领域驱动设计并没有那么难,并且感觉有些领域驱动设计的内容并没有好的,反而觉得有点华而不实的感觉,所以去年也就放弃了领域驱动设计系列的分享了,但是到今年,在博客园看到还是有很多人写领域驱动的文章,以及介绍了领域驱动设计相关的

Kinect 开发 &mdash;&mdash; 用户交互设计的若干思考

Metro 风格 windows 8 Kinect Hub 手势原型设计 悬停选择     翻页控制 关节点重叠的处理方法 将箭靶设置在画面的边缘,这样玩家持弓的角度与屏幕保持一个大约45度的锐角,这样Kinect可以很精确的检测到拉弓射箭的动作 手势天生具有一定随意性,而且具有一定的文化背景差异性   手与设备的非接触性 虚拟触摸的界面 Kinect 使交互"柔软化"   确认操作保持简单一致 悬停选择 -- 将手停在想要选择的项目方块或按钮上,等待进度圆圈的填充,这个过程会在T时间

web前端开发与页面设计的协作、区别与发展

web前端开发与页面设计的协作.区别与发展,布布扣,bubuko.com

以DDD为开发模式的设计开发步骤可以是

以DDD为开发模式的设计开发步骤可以是:1)分析需求:2)画出用例图,系统中各个角色如何使用系统,也包括外部系统如何使用系统,也包括系统中到某个时间点自动启动的某些功能(此时角色就是时间):3)针对各个用例图,就知道了系统使用的各种业务场景,同时也明确了系统的边界,从而就明确了领域模型的边界:4)在领域模型的边界内划分聚合,找出每个聚合的边界,找出边界内的聚合根,实体,值对象:这步是难点.这里一定不能混淆的一个概念是,领域建模不是以用户为中心的建模,而是以用户的需求为中心的建模.所以要努力寻找各

用thinkphp进行微信开发的整体设计思考

用thinkphp进行微信开发的整体设计思考 http://www.2cto.com/weixin/201504/388423.html 2015-04-09      0个评论       作者:明之暗夜 收藏    我要投稿 因为项目中很多地方都涉及到微信接口的调用 比如很多前台模块需要用到 后台模块也有少许调用 其他模块也可能会需要调用  为了让他们都能很方便的直接调用 我把他们独立成为一个模块 这个模块包含了基础的微信接口和微信jssdk 具体的设计请参考下面  当然如果有更好的建议可以

项目开发中db设计

项目开发中db设计 0.根据原型分析出数据的由来和数据间的关系(实体关系); 1.提取字段,通过powerDesigner设计表; 2.先不加约束,先只建立数据上的单向关联,有需要时在建立双向关联或中间表;3.也可以先建立外键关系,最后删除外键关系;(方便查看表的关系);4.对实体对象通常会补充的字段:     id         主键    entity        关联实体/自己    isDelete varchar(1)  Null    #是否删除    CreateEmpId v

控件的开发接口的设计原理

for (var i = 0; i < _uiList.length; i++) { groot.vms[_uiList[i]].uivalue = value; groot.vms[_uiList[i]].uivalueRender(); } 当改变父vm的属性值的时候的值的时候 程序是通过 控件的uivalue 来更新控件的值的 所有每个控件必须有uivalue属性 控件的开发接口的设计原理