内核模块的编译文件

现代武学

现代武学

2016-02-19 13:28

下面,图老师小编带您去了解一下内核模块的编译文件,生活就是不断的发现新事物,get新技能~

  1.1内核模块的编译文件
  
  一个内核模块不是一个可以独立执行的文件,而是需要在运行时刻连接入内核的目标文
  件。所以,它们需要用-c选项进行编译。而且,所有的内核模块都必须包含特定的标志:
  ? __KERNEL__——这个标志告诉头文件此代码将在内核模块中运行,而不是作为用户进
  程。
  ? MODULE——这个标志告诉头文件要给出适当的内核模块的定义。
  ? Linux——从技术上讲,这个标志不是必要的。但是,假如你希望写一个比较正规的
  内核模块,在多个操作系统上编译,这个标志将会使你感到方便。它可以答应你在独立
  于操作系统的部分进行常规的编译。
  还有其它的一些可被选择包含标志,取决于编译模块是的选项。假如你不能明确内核怎
  样被编译,可以在in/usr/include/linux/config.h中查到。
  ? __SMP__——对称多线程。在内核被编译成支持对称多线程(尽管在一台处理机上运行)
  是必须定义。假如是这样,还需要做一些别的事情(参见第12章)。
  ? CONFIG_MODVERSIONS——假如CONFIG_MODVERSIONS被激活,你需要在编译
  是定义它并且包含文件/usr/include/linux/modversions.h。这可以有代码自动完成。
  
  ex Makefile
  
  # Makefile for a basic kernel module
  
  CC=gcc
  MODCFLAGS := -Wall -DMODULE -D__KERNEL__ -DLINUX
  
  hello.o: hello.c /usr/include/linux/version.h
  $(CC) $(MODCFLAGS) -c hello.c
  echo insmod hello.o to turn it on
  echo rmmod hello to turn if off
  echo
  echo X and kernel programming do not mix.
  echo Do the insmod and rmmod from outside
  
  所以,并不是剩下的事情就是root(你没有把它编译成root,而是在边缘(注1.1)。对
  吗?),然后就在你的核心内容里插入或移出hello。当你这样做的时候,要注重到你的新模
  块在/proc/modules里。
  而且,编译文件不推荐从X下插入的原因是内核有一条需要用printk打印的消息,它
  把它送给了控制台。假如你不使用X,它就送到了你使用的虚拟终端(你用Alt-F选择的
  哪个)并且你可以看到。相反的,假如你使用了X,就有两种可能性。假如用xterm –C打
  开了一个控制台,输出将被送到哪里。假如没有,输出将被送到虚拟终端7——被X“覆盖”
  的那个。
  假如你的内核变得不稳定,你可以在没有X的情况下得到调试消息。在X外,printk
  可以直接从内核中输出到控制台。而假如在X里,printk输出到一个用户态的进程(xterm
  –C)。当进程接收到CPU时间,它会将其送到X服务器进程。然后,当X服务器进程接收
  到CPU时间,它将会显示,但是一个不稳定的内核意味着系统将会崩溃或重起,所以你不
  希望显示错误的消息,然后可能被解释给你什么发生了错误,但是超出了正确的时间。
展开更多 50%)
分享

猜你喜欢

内核模块的编译文件

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

多文件内核模块

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

s8lol主宰符文怎么配

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

Linux内核模块和驱动的编写

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

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

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

lol偷钱流符文搭配推荐

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

Delphi,编译文件(第12页)

编程语言 网络编程
Delphi,编译文件(第12页)

Delphi,编译文件(第8页)

编程语言 网络编程
Delphi,编译文件(第8页)

lolAD刺客新符文搭配推荐

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

Excel条件格式公式应用四例

Excel条件格式公式应用四例

卖桃子

卖桃子
下拉加载更多内容 ↓