多文件内核模块

刘利军225588

刘利军225588

2016-02-19 13:11

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

  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
展开更多 50%)
分享

猜你喜欢

多文件内核模块

编程语言 网络编程
多文件内核模块

内核模块的编译文件

编程语言 网络编程
内核模块的编译文件

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Linux内核模块和驱动的编写

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
Linux内核模块和驱动的编写

OpenBSD 可加载内核模块编程完全指南

编程语言 网络编程
OpenBSD 可加载内核模块编程完全指南

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

linux内核模块和驱动程序的编写(2)

编程语言 网络编程
linux内核模块和驱动程序的编写(2)

深入浅出Linux设备驱动编程之内核模块

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
深入浅出Linux设备驱动编程之内核模块

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Struts 和 Tiles 辅助基于组件的开发(1)

Struts 和 Tiles 辅助基于组件的开发(1)

应用技巧:CSS特殊选择符伪类

应用技巧:CSS特殊选择符伪类
下拉加载更多内容 ↓