正定县商业银行利率表.:编译内核,构造内核树

来源:百度文库 编辑:中财网 时间:2024/05/06 06:46:54
来源: ChinaUnix博客  日期: 2007.12.31 18:17 (共有条评论)我要评论
首先要声明一下,本人其实也是凭借一腔热血刚刚学习linux及其内核,在这里只是我把我刚学东西与大家分享,希望对跟我一样的初学者有所帮助。
大家都知道,在进入linux内核编程之前,需要构造具有源代码的内核树。但是往往大家一想到编译内核,就总是很恐惧,不敢去尝试,两天之前我也是这样,对此望而生畏。但是当你真的想编写驱动时,这是你必须面对的事情。在网上一搜,资料太大,说的太复杂,于是就自己下了源代码,开始读README,总结了一下,原来可以很简单,居然让我一次就成功了。我使用的内核是2.6.20.1,我的目标很简单就是想让我的内核有源码,可以编写内核程序,所以我下载了2.6.20.7,也算是“升级”阿!下面看看我的步骤有多简单阿!
1.下载源码,(网址我想,不用我说了吧www.kernel.org)你可以选择某一版本的两种格式之一下载,例如        linux-2.6.xx.tar.gz,linux-2.6.xx.tar.bz2
2.解压
对应着两种源码格式,也有两种解压方法,
gzip -cd  linux-2.6.xx.tar.gz | tar xvf -
bzip2 -dc linux-2.6.xx.tar.bz2 | tar xvf -
3.配置内核
make oldconfig (由于这里以前已经装有2.6的内核,很多配制已经选好,所以你完全可以这么做,只需要配制一些新的特性)
4.编译内核
a.make
b.make modules_install
c.make install
5.finished
你可以看看你的/boot/grub/grub.conf里面是不是已经有了你新编译的内核,如果是的话,恭喜你,你已经成功的编译了一个属于你的,可以加载modules的内核了.
看到这里可能很多人会质疑我的步骤是不是漏掉了什么,其实我没有漏掉什么东西,因为2.6的内核已经很人性化了,Makefile已经帮我做了很多工作了.我们不需要这里讨论太多的东西,关于patch,lilo,grub的用法,基本上用不上(相对于我们的初衷),所以不说了,只会你觉得更加麻烦.
最后需要说明的是,我们只是想有一个源码的内核,然后可以编驱动之类的内核模块,所以本文很简单,假如你是没有一点基本知识,按上边的步骤,其实你一样可以成功.另外我的linux是fedoral 7,经过上述步骤,成功安装,如果你遇见什么问题安不上,请不要骂我,你可以看看README和Changes,我也只是把它们的东西通过中文很简单的告诉你.
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/58409/showart_453988.html
新建内核树及编译内核模块
Fedora 8安装过后的内核版本是2.6.23.1-42.fc8-i686,想构建一个内核树,其实原因有几点,听说发行版本的内核很多都经过特别配置,所以某些方面不太适合Linux模块的编写等,而且能多动手也是不错的。
选择的内核版本和发行版本的一样,2.6.23.1,有些建议编译个新一点的,但就怕那些工具不适合,所以编译和发行版本相近的估计错误较少。
1.下载linux-2.6.23.1.tar.bz2,保存在/usr/src/kernel/中
2.tar -xjvf linux-2.6.23.1.tar.bz2,解压缩内核文件,并进入该目录
3.执行make mrproper
4.开始配置内核,我选择默认的配置,make defconfig
5.编译内核 make  这一步需要相当多的时间
6.编译模块 make modules
7.安装模块 make modules_install
8.执行安装 make install,
文章出处:飞诺网(www.diybl.com):http://www.diybl.com/course/6_system/linux/Linuxjs/200896/139482.html
//hello.c
#include
#include
MODULE_LICENSE("DUAL BSD/GPL");
static int hello_init(void)
{
printk(KERN_ALERT "hello world\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "goodbye,boy\n");
}
module_init(hello_init);
module_exit(hello_exit);
//makefile
obj-m := hello.o
PWD := $(shell pwd)
KVER := $(shell uname -r)
KDIR := /lib/modules/$(KVER)/build
all:
$(MAKE) -C $(KDIR) M=$(PWD) modules
clean:
rm -f *.o *.ko *.mod.c .hello*
之后,就可以在终端执行make命令,来完成模块编译了
如果没有内核树,使用上面的Makefile文件进行编译,是不会成功的,而fedora6默认是没有内核树的,需要重新建立
内核模块编译makefile写法
ifneq ($(KERNELRELEASE),)#between the 'ifneq' and '(' has a gap(space)
obj-m := hello.o
else
PWD := $(shell pwd)
KVER := $(shell uname -r)
KDIR ?= /lib/modules/$(KVER)/build#after KDIR is a '?',it is corrects
all:
$(MAKE) -C $(KDIR) M=$(PWD) modules
#the -C option is '$(KDIR)' ,it tell kernel makefile direct position, M= means modules will be create it current direct
endif
clean:
rm -f *.o *.ko *.mod.c .hello*