2009年3月14日星期六

编译内核

[gaowei@localhost linux-2.6.28]$ ls
arch crypto fs Kbuild Makefile REPORTING-BUGS sound
block Documentation include kernel mm samples usr
COPYING drivers init lib net scripts virt
CREDITS firmware ipc MAINTAINERS README security
[gaowei@localhost linux-2.6.28]$ make mrproper
#这是删除一些一切留下来的.o文件!
接着设置编译选项。
[gaowei@localhost linux-2.6.28]$ make menuconfig将会弹出一个图形的!
这里便是要设置内核的一些功能了!
内核的设置应尽量采用下面的原则:
1.确定内核需要的功能,直接编译进内核。
2.可能在将来会用到的功能,直接编译进内核。
3.不知道要做什么,看HELP,看不懂则采用默认值或者变为模块
4.可以看到内核可选的项目真的很多,真的要好好看看!
选择好了这些你就应该,保存设置了,在15个选项下面有一个是Save Configuration to an Alternate File选项,然后为其命名一个喜欢的文件名,这个文件内容就是刚刚编译完成的数据,然后选择,再保存一次到系统中,接下来准备编译!
之后我的有警告
scripts/kconfig/mconf arch/x86/Kconfig
#
# using defaults found in /boot/config-2.6.23.1-42.fc8
#
/boot/config-2.6.23.1-42.fc8:1437:warning: symbol value 'm' invalid for FIXED_PHY
/boot/config-2.6.23.1-42.fc8:1665:warning: symbol value 'm' invalid for IWL4965
/boot/config-2.6.23.1-42.fc8:1756:warning: symbol value 'm' invalid for ISDN
*** End of Linux kernel configuration.
*** Execute 'make' to build the kernel or try 'make help'.
[gaowei@localhost linux-2.6.28]$ make clean
1.除掉原来的生成的*.o文件,这样就不会产生新旧版本的误差了。
[gaowei@localhost linux-2.6.28]$ make bzImage
2.制作出内核的文件。
[gaowei@localhost linux-2.6.28]$ make modules
3.制作出模块相关的文件。
4.如果,编译过程中发生问题,通常可能是挑选的项有问题,这样就需要重新挑选设定的内容make munuconfig,之后编译就可以成功了。执行"make bzImage"后,
我的错误是
WARNING: modpost: Found 1 section mismatch(es).
To see full details build your kernel with:
'make CONFIG_DEBUG_SECTION_MISMATCH=y'
GEN .version
CHK include/linux/compile.h
UPD include/linux/compile.h
CC init/version.o
LD init/built-in.o
LD .tmp_vmlinux1
KSYM .tmp_kallsyms1.S
AS .tmp_kallsyms1.o
LD .tmp_vmlinux2
.tmp_vmlinux2: final close failed: No space left on device
make: *** [.tmp_vmlinux2] 错误 1
这样就莫名其妙的好了!
[gaowei@localhost linux-2.6.28]$
Root device is (8, 9)
Setup is 12568 bytes (padded to 12800 bytes).
System is 2109 kB
CRC 47b80fb0
Kernel: arch/x86/boot/bzImage is ready (#1)
[gaowei@localhost linux-2.6.28]$ ll arch/i386/boot/bzImage
lrwxrwxrwx 1 gaowei gaowei 22 03-14 13:01 arch/i386/boot/bzImage -> ../../x86/boot/bzImage内核就已经编译好而且放在上面这个目录下了。
[gaowei@localhost linux-2.6.28]$
5.编译内核的模块部分
[gaowei@localhost linux-2.6.28]$ make modules_install
[gaowei@localhost linux-2.6.28]$ sudo make modules_install
口令:
cp: 无法 stat “/home/gaowei/linux/linux-2.6.28/modules.order”: 没有那个文件或目录
make: *** [_modinst_] 错误 1
[gaowei@localhost linux-2.6.28]$
接下来就是安装内核了!主要分为俩步:
1.将模块安装到/lib/modules/ 'uname -r',现在编译好的镜像还是在你的目录下,所以需要将内核放置在启动内核的默认目录/boot下。
把vmliuz-2.6.23.1复制到/boot/vmlinuz-2.6.23.1 然后把linux/System.map 发到/boot/System.map-2.6.23.1
我的设置如下
sudo cp arch/i386/boot/bzImage /boot/vmliuz-2.6.28
[gaowei@localhost linux-2.6.28]$ sudo cp System.map /boot/System.map-2.6.28
2.进行开机的设定。
修改grub配置文件,/boot/grub/grub.conf文件
添加如下:
title kernel 2.6.28
root (hd0,8)
kernel /boot/vmliuz-2.6.28 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
好了,等待重启而后再看结果!

没有评论:

time