下面补充一些内容,只说几个这篇文章中没有提到的。
Bus options (PCI, PCMCIA, EISA, MCA,ISA)
PCI support
PCI Expresssupport
ISA support
MCA support
NatSemi SCx200support
PCI Hotplug Support
Support for PCI Hotplug(EXPERIMENTAL)
这里的选项都要全部编译进内核,而不是以模块形式存在。
Device Drivers
Block devices
Packet writing on CD/DVD media
Enable write caching(EXPERIMENTAL)
ATA/ATAPI/MFM/RLL support
Include IDE/ATA-2 DISKsupport
SCSI devicesupport
SCSI disksupport
Character devices
I2C support
Graphicssupport
File systems
CD-ROM/DVD Filesystems
ISO 9660 CDROM file systemsupport
DOS/FAT/NT Filesystems
VFAT (Windows-95) fssupport
NTFS file systemsupport
NTFS writesupport
Native Language Support
Simplified Chinese charset (CP936,GB2312)
必须将启动盘的文件系统编译进内核,默认是编译成模块,这样无法启动系统。最好是把硬盘上所有用到的分区文件系统全部编译进内核。
然后再谈几个常见的问题解决方法:
1、编译内核失败,不能进入系统,提示如下:
audit(1129243020.326:0):initialized
kernel panic
或是:
VFS:Cannot open rootdevice
Please append acorrect
kernel panic-not syncing: VFS:Unable to mount rootfs on unknow-block(0,0)
解决方法:把
08.05.11、<*> RAM disk support
09.27.07、<*> Compressed ROM file system support(cramfs)
2、不能挂载ISO文件。
解决方法:把
08.05.06、<*> Loopback devicesupport
08.05.07、<*> CryptoloopSupport
3、用SATA硬盘,原来内核中硬盘的设备号是/dev/sda,编译新内核后的硬盘设备号由/dev/sda变成/dev/hde,硬盘声音很吵。
解决方法:把
08.07、SCSI devicesupport
08.07.01、<*> SCSI device support
# 08.07.02、
08.07.03、<*> SCSI disksupport
4、用上新版本内核后,无法安装显示卡的NVIDIA-Linux-x86-1.0-7676-pkg1.run驱动,系统提示如下:
Unable to load the kernel modules “nvidia.ko ”, thewrong kernel source files. Please make sure you haveinstalled forexample, be sure you have the kernel source “rpm”installed. Ifyou know the correct kernel source files are installed, youmay specify the kernel source path with the“–kernel-source-path” commandline option. |
解决方法:
重新配置内核,将内核中
08.21、Graphicssupport
设置完,保存即可。
构建内核
接下来,就开始构建内核了。首先清理一下东西:
$ sudo make-kpkg clean
然后
$sudo make-kpkg-initrd
lk_517是可以自己换得,表示镜像的名字,必须要以数字结尾。最后是生成镜像包和头文件包。你也可以用binary代替,它融合了image.headers.doc.source,是最完整的包。
make-kpkg是一个可以自动替换”make dep;make clean;make bzImage;makemodules”命令序列的脚本。而最其最常用的两个参数就是–append-to-version与–revision。
–
内核模块位于/lib/modules子目录下。每一个内核有他自己的子目录。每次当我们以一个新的名字来安装一个新的内核时,这个包安装程序就会在/lib/modules目录下创建一个新的子目录来保存他自己的模块。这就意味着每一次我们使用–
注意:如果我们使用相同的名字来安装一个内核时,安装程序就会覆盖掉已安装的内核及其模块。–revision只会影响Debian软件包本身的名字而不是内核的名字。与–append-to-version相似,我们只可以使用数,”+
在内核构建成功之后,你能在/usr/src目录下看见三个.deb文件。其中包括linux-image-2.6.20-custom_2.6.20-custom-10.00.Custom_i386.deb(包含真实内核) andlinux-headers-2.6.20-custom_2.6.20-custom-10.00.Custom_i386.deb(包含那些编译附加内核模块所需要的文件)。
kernel-image文件的名字格式如下:
kernel-image-(kernel-version)(–append-to-version)_(–revision)_(architecture).deb
我用这种办法安装:
sudo dpkg -i xxx.deb
你甚至可以将这两个deb包转移到其他的ubuntu系统中,并用相同的办法安装它们。这意味着,你不再需要再一次编译它们了。
完成
好了,现在,你可以检查一下你的menu.lst文件,多了两个与新内核有关的部分。现在,重新启动计算机,shutdown-r。如果一切顺利的话,重新启动之后,你使用的就是新的内核了。你可以通过 ”
这下就算彻底完成了。重新启动计算机,在GRUB中选择新内核启动。如果启动失败,当你看见屏幕上出现 “Press ESC to enter themenu…1″这行字的时候,按下ESC,此时会进入grub的启动菜单,好,选择你的旧版内核,启动系统。现在,你不得不重新编译一次内核,使其能够正常使用。编译之前别忘了,从menu.lst中去除之前的两个不能正常工作的内核区域。
下面首先谈谈理论上编译配置内核需要用哪些步骤:
mkinitrd/boot/initrd.img 2.6.26
mkintramfs2.6.26 -o /boot/initrd.img
下面列出自己编译和配置内核的步骤:
[cpp]
[root@localhost
[cpp]
[root@localhost
linux-2.6.29.tar.gz
[root@localhost
[cpp]
[root@localhost
[root@localhost
[cpp]
[root@localhost
[root@localhost
[cpp]
[root@localhost
[cpp]
[root@localhost
[cpp]
[root@localhost
[cpp]
[root@localhost
[cpp]
[root@localhost
[root@localhost
[cpp]
[root@localhost
[cpp]
menuentry"Anosi Linux(2.6.34.14)" {
145
146
147
148
149
150
151
152
153
154}
linux内核编译出错
(1)
# makebzImage(编译内核,生成使用gzip压缩的内核,生成的文件位于/usr/src/linux/arch/i386/boot/目录下)
# makemodules(编译可加载模块)
# makemodules_install(安装可加载模块,安装成功后,系统会在/lib/modules目录下生成一个.8子目录,里面存放着新内核的所有可加载模块。)
# makeinstall(安装新内核)
注:make install的时候可能会出现如下错误信息:
No moduleBusLogic found for kernel mkinitrd failed
此问题一般只出现在SCSI硬盘+VMWARE+REDHAT架构中,因为BusLogic被编译进了内核而不是一个module的形式(2.4内核的Buslogic模块即使静态编译进内核也不行)。
解决方式是直接将BusLogic.o文件复制过去:
# cp/usr/src/linux-/drivers/scsi/BusLogic.o/lib/modules/2.6.10/kernel/drivers/scsi
复制过后再执行一下make install。
(2)
①错误1
OBJCOPYarch/i386/boot/compressed/vmlinux.bin
BFD: Warning: Writing section `.bss' to huge (ie negative) fileoffset 0xc0277000.
objcopy: arch/i386/boot/compressed/vmlinux.bin: Filetruncated
make[2]: *** [arch/i386/boot/compressed/vmlinux.bin] Error 1
make[1]: *** [arch/i386/boot/compressed/vmlinux] Error 2
make: *** [bzImage] Error 2
解决方法:
在arch/i386/Makefile里面做一些修改:
将OBJCOPYFLAGS改成如下的:
OBJCOPYFLAGS :=-O binary --change-section-lma.bss-0xc0000000 –R .note -R .comment –S
然后重新make bzImage.
编译成功提示如下:
OBJCOPYarch/i386/boot/compressed/vmlinux.bin
GZIP
LD
LD
OBJCOPYarch/i386/boot/vmlinux.bin
HOSTCCarch/i386/boot/tools/build
BUILD
Rootdevice is (8, 1)
Bootsector 512 bytes.
Setup is7498 bytes.
System is1191 kB
Kernel:arch/i386/boot/bzImage is ready (#3)
②错误2
ERROR:"crypto_free_tfm" [net/rxrpc/af-rxrpc.ko] undefined!
ERROR: "crypto_alloc_base" [net/rxrpc/af-rxrpc.ko] undefined!
make[1]: *** [__modpost] Error 1
make: *** [modules] Error 2
解决方法:
选中Cryptographic options --->
makeinstall时总报错:No module BusLogic found for kernel2.4.22
后来google了一下,
从/etc/modules.conf中删除BusLogic的加载项
#alias scsi_hostadapter BusLogic
然后编译就成功了。
内教你修改linux内核启动logo
成都达内教你修改linux内核启动logo
系统环境:ubuntu 10.04 +x86
$ sudoapt-get install netpbm
$ pngtopnmloongson.png > loongson.pnm
说明:用来转换的图片必须为
pngtopnm:input file not a PNG file
$ pnmquant224 loongson.pnm > loongson224.pnm
pnmcolormap: making histogram…
pnmcolormap: 5854 colors found
pnmcolormap: choosing 224 colors…
pnmremap:222 colors found in colormap
注意:此处
eg:$pnmquant 224 loongson.pnm > loongson.pnm
pnmcolormap: EOF / read error reading magicnumber
pnmcolormap failed, rc=256
$pnmtoplainpnm loongson224.pnm > loongson224.ppm
然后用转换好的
/drivers/video/logo/logo_linux_clut224.ppm(最好先做好备份)
,然后删除同一目
录下的
$ cd/home/work/kenrel/linux26_3210/drivers/video/logo
$ mvlogo_linux_clut224.ppm{,-bk}
$ cp/home/loongson/Dowload/loongson224.ppm ./
$ mvloongson224.ppm logo_linux_clut224.ppm
$ rmlogo_linux_clut224.c
$ cd///
$ makemenuconfig //在内核里面选上logo
DeviceDrivers --->
[*]Graphics support --->
[*] Bootuplogo --->
[*]Standard black and white Linux logo
[*]Standard 16-color Linux logo
[*]Standard 224-color Linux logo
$make
$ sudoapt-get install netpbm
$ pngtopnm loongson.png > loongson.pnm
说明:用来转换的图片必须为
pngtopnm: input file not a PNG file
$ pnmquant 224 loongson.pnm > loongson224.pnm
pnmcolormap: making histogram...
pnmcolormap: 5854 colors found
pnmcolormap: choosing 224 colors...
pnmremap: 222 colors found in colormap
注意:此处
eg:$ pnmquant 224 loongson.pnm > loongson.pnm
pnmcolormap: EOF / read error reading magic number
pnmcolormap failed, rc=256
$ pnmtoplainpnm loongson224.pnm >loongson224.ppm
然后用转换好的
/drivers/video/logo/logo_linux_clut224.ppm(最好先做好备份)
,然后删除同一目
录下的
$ cd /home/work/kenrel/linux26_3210/drivers/video/logo
$ mv logo_linux_clut224.ppm{,-bk}
$ cp /home/loongson/Dowload/loongson224.ppm ./
$ mv loongson224.ppm logo_linux_clut224.ppm
$ rm logo_linux_clut224.c
$ cd ../../../
$ make menuconfig
$ makeinitrd主要用来把系统的启动划分为两个阶段:初始启动的内核只需保留最精简的驱动程序最小集,此后,在启动必须加载附加的模块时,从initrd中加载。
initrd进行的操作
使用initrd的时候,典型的系统启动的流程变为:
1)
2)
3)
4)
5)
6)
7)
8)
注意,这是一个典型流程。其实initrd机制可以通过两种方式使用:要么就是作为一个普通的root文件系统使用,这样的话第5、第6两个步骤可以被略过,直接执行/sbin/init(我们的试验系统就是利用这种方法);要么作为一个过渡环境使用,通过它内核可以继续装载“实际”的root文件系统。