多文件内核模块

2016-02-19 13:11 0 1 收藏

生活已是百般艰难,为何不努力一点。下面图老师就给大家分享多文件内核模块,希望可以让热爱学习的朋友们体会到设计的小小的乐趣。

【 tulaoshi.com - 编程语言 】


  1.2 多文件内核模块
  
  有些时候在几个源文件之间分出一个内核模块是很有意义的。在这种情况下,你需要
  做下面的事情:
  1. 在除了一个以外的所有源文件中,增加一行#define __NO_VERSION__。这是很重
  要的,因为module.h一般包括kernel_version的定义,这是一个全局变量,包含模
  块编译的内核版本。假如你需要version.h,你需要把自己把它包含进去,因为假如
  有__NO_VERSION__的话module.h不会自动包含。
  2. 象通常一样编译源文件。
  3. 把所有目标文件联编成一个。在X86下,用ld –m elf_i386 –r –o .o
  1st source file
  这里给出一个这样的内核模块的例子。
  ex start.c
  
  /* start.c
  * Copyright (C) 1999 by Ori Pomerantz
  *
  * "Hello, world" - the kernel module version.
  * This file includes just the start routine
  */
  
  /* The necessary header files */
  
  /* Standard in kernel modules */
  #include /* We're doing kernel work */
  #include /* Specifically, a module */
  
  
  
  /* Deal with CONFIG_MODVERSIONS */
  #if CONFIG_MODVERSIONS==1
  #define MODVERSIONS
  #include
  #endif
  
  
  
  /* Initialize the module */
  int init_module()
  {
  printk("Hello, world - this is the kernel speaking");
  
  /* If we return a non zero value, it means that
  * init_module failed and the kernel module
  * can't be loaded */
  return 0;
  }
  ex stop.c
  
  /* stop.c
  * Copyright (C) 1999 by Ori Pomerantz
  *
  * "Hello, world" - the kernel module version. This
  * file includes just the stop routine.
  */
  
  /* The necessary header files */
  
  /* Standard in kernel modules */
  #include /* We're doing kernel work */
  
  #define __NO_VERSION__ /* This isn't "the" file
  * of the kernel module */
  #include /* Specifically, a module */
  
  #include /* Not included by
  * module.h because
  * of the __NO_VERSION__ */
  
  
  
  /* Deal with CONFIG_MODVERSIONS */
  #if CONFIG_MODVERSIONS==1
  #define MODVERSIONS
  #include
  #endif
  
  
  
  
  /* Cleanup - undid whatever init_module did */
  void cleanup_module()
  {
  printk("Short is the life of a kernel module");
  }
  ex Makefile
  
  # Makefile for a multifile kernel module
  
  CC=gcc
  MODCFLAGS := -Wall -DMODULE -D__KERNEL__ -DLinux
  
  hello.o: start.o stop.o
  ld -m elf_i386 -r -o hello.o start.o stop.o
  
  start.o: start.c /usr/include/linux/version.h
  $(CC) $(MODCFLAGS) -c start.c
  
  stop.o: stop.c /usr/include/linux/version.h
  
   $(CC) $(MODCFLAGS) -c stop.c

来源:https://www.tulaoshi.com/n/20160219/1603251.html

延伸阅读
人物转为机器人需要较强的操作技巧,不仅要会灵活运用工具工具勾画轮廓,还需要对肤色进行特殊处理,做出带有金属质感的效果。由于模块较多,处理的时候一定要细致。 原图 最终效果 1、首先打开原图素材,用魔术棒把人物抠出来。 2、将主体抠出,加载到黑色与深灰色渐变的背景图中。 3、将素材边缘的白边用橡皮工...
标签: 服务器
linux内核驱动-内核初涉   一、为什么要学习内核? 有些人要学习内核,而有些人则可以不学习它。你如果以后要从事系统研发或驱动开发的话,就要学习内核。 刚刚接触内核,主要学习内核的接口函数。不要深入的去读内核,因为你读也读不懂,内核代码庞大如野兽一般不可驾驭。 学习内核主要掌握层次学习法,即从头开始学习...
这是一篇关于内核编译的文章,作者是双眼皮的猪,觉得好,所以收藏了 菜鸟浅谈Linux内核编译过程...菜鸟编译Linux内核 双眼皮的猪 菜鸟俺,最近研究了一下Linux内核的编译,有些许心得,望同大家分享一下,故有此文…我们这里要谈的不涉及到源码,只是一些内核编译的步骤及相关知识…因为本人是菜鸟。所以,也就希望和菜鸟们分享一下… 首先,...
标签: Web开发
多文件上传的例子//upload_html.php--------------------------------------------------------------------------------------------- HTML HEAD TITLE上传文件/TITLE /HEAD script function beforesubmit(forma) {    var indexnamea=forma.indexname.value;    var upfilea=forma.upfile.value;   &nb...
标签: Java JAVA基础
JavaBean是一种基于Java的软件组件。JSP对于在Web 应用中集成JavaBean组件提供了完善的支持。这种支持不仅能缩短开发时间(可以直接利用经测试和可信任的已有组件,避免了重复开发),也为JSP应用带来了更多的可伸缩性。 文件的上传功能在基于B/S的开发模式中非常普遍。同其他开发工具相比较,JSP对文件的上传支持并不是...

经验教程

970

收藏

25
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部