本文主要是介绍Ubuntunbsp;2.6.38-8内核树建立nbsp;加载he…,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
先查看自己OS使用的内核版本
2.6.38-8-generic
如果安装系统时,自动安装了源码。在 /usr/src 目录下有对应的使用的版本目录。例如下(我是
自己下的)
root@ubuntu:/usr/src#
linux-2.6.38.8.tar.bz2
linux-headers-2.6.38-8
linux-headers-2.6.38-8-generic
进到:/usr/src/linux-2.6.38# 下然后
1.1. make oldconfig
1.2. make
1.3. make modules
1.4. make modules_install
执行结束后,可以看到在当前目录下生成了一个新的文件: vmlinux, 其属性为-rwxr-xr-x。
然后 :
root @ubuntu: /usr /src /linux-source-2.6.38.8 #make modules_install
执行结束之后,会在/lib/modules下生成新的目录/lib/modules/2.6.38.8-generic/
。 在随后的编译模块文件时,要用到这个路径下的build目录(PS:build其实是一个符号链接文
件,链接到/usr/src目录下相应的内核头文件目录 jarson 2011.06.13 注)。
至此,内核编译完成。可以重启一下系统。
在自己的文件夹下面 我的是
编写《linux设备驱动程序》中的hello world 模块,vim hello.c
#include <linux/module.h>
#include <linux/init.h>
MODULE_LICENSE("DuAL BSD/GPL");
static int
{
}
static void hello_exit(void)
{
}
module_init(hello_init);
module_exit(hello_exit);
编写完成后
下一步就是编写Makefile文件,
obj-m := hello.o
KERNELDIR := /lib/modules/2.6.38-8-generic/build
PWD := $(shell pwd)
modules:
modules_install:
编写完成
然后下一步就是在
root@ubuntu:/home/tl/module_test# make
make -C /lib/modules/2.6.38-8-generic/build
make[1]: 正在进入目录 `/usr/src/linux-headers-2.6.38-8-generic'
make[1]:正在离开目录 `/usr/src/linux-headers-2.6.38-8-generic'
root@ubuntu:/home/tl/module_test# insmod ./hello.ko
hello module init
root@ubuntu:/home/tl/module_test# rmmod hello
hello module exit
根据系统传递消息的机制不同,运行insmod和rmmod,可能不在屏幕上看到任何输出,实际上,它可能输出到
系统的日志文件里面,比如/var/log/kern.log。
到此一个最简单的内核模块就加载和卸载完成。我一直在root下面操作的,没有切换。
这篇关于Ubuntunbsp;2.6.38-8内核树建立nbsp;加载he…的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!