一. 最小系统要求
1. 接受键盘输入,能显示字符信息
2. 能处理普通linux发行版中的大部分基本命令,如:ls, mv...
3. 具有网络功能
4. 不使用ramdisk, 所需驱动全部编译进内核
二. 主机环境
1. VMware 7.0 / windows 7
2. 主机系统Ubuntu 10.04 x86 (kernel version 2.6.32)
3. 最小系统内核版本 linux-2.6.38
三. 详细构建过程
1. 下载linux-2.6.38内核
2.编译内核
这一步主要就是内核的配置,如果配置错了可能导致系统无法启动,因此需要非常仔细。
首先利用lspci查看硬件信息:
00:00.0 Host bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 01)
00:01.0 PCI bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (rev 01)
00:07.0 ISA bridge: Intel Corporation 82371AB/EB/MB PIIX4 ISA (rev 08)
00:07.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01)
00:07.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 08)
00:07.7 System peripheral: VMware Virtual Machine Communication Interface (rev 10)
00:0f.0 VGA compatible controller: VMware SVGA II Adapter
00:10.0 SCSI storage controller: LSI Logic / Symbios Logic 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI (rev 01)
00:11.0 PCI bridge: VMware PCI bridge (rev 02)
00:15.0 PCI bridge: VMware PCI Express Root Port (rev 01)
................... ......................... .......................
00:18.6 PCI bridge: VMware PCI Express Root Port (rev 01)
00:18.7 PCI bridge: VMware PCI Express Root Port (rev 01)
02:00.0 USB Controller: Intel Corporation 82371AB/EB/MB PIIX4 USB
02:01.0 Ethernet controller: Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE] (rev 10)
02:02.0 Multimedia audio controller: Ensoniq ES1371 [AudioPCI-97] (rev 02)
02:03.0 USB Controller: VMware USB2 EHCI Controller
根据查到的硬件型号配置.config文件
以下详细介绍内核的配置(除以下选项外其它都可以不选)
General setup --->
[*] System V IPC
[*] Enable loadable module support --->
Processor type and features --->
Processor family (Pentium Pro) --->
[*] Generuc x86 support
Bus options (PCI etc.) --->
[*] PCI support
PCI access mode (Any) --->
Executable file formats / Emulations --->
[*] Kernel support for ELF binaries
[*] Write ELF core dumps with partial segments
[*] Networking support --->
Networking options --->
<*> Packet socket
<*> Unix domain sockets (NEW)
[*] TCP/IP networking
<*> IP: IPsec transport mode (NEW)
<*> IP: IPsec tunnel mode (NEW)
<*> IP: IPsec BEET mode (NEW)
<*> Large Receive Offload (ipv4/tcp) (NEW)
<*> INET: socket monitoring interface (NEW)
Device Drivers --->
[*] Block devices --->
<*> Loopback device support
SCSI device support --->
<*> SCSI device support
[*] legacy /proc/scsi/ support (NEW)
<*> SCSI disk support
[*] SCSI low-level drivers (NEW) --->
<*> BusLogic SCSI support
[*] Fusion MPT device support --->
<*> Fusion MPT ScsiHost drivers for SPI
<*> Fusion MPT ScsiHost drivers for FC
<*> Fusion MPT ScsiHost drivers for SAS
<*> Fusion MPT misc device (ioctl) driver
[*] Network device support --->
[*] Ethernet (10 or 100Mbit) --->
[*] EISA, VLB, PCI and on board controllers
<*> AMD PCnet32 PCI support
Graphics support --->
<*> Support for frame buffer devices --->
File systems --->
<*> Second extended fs support
[*] Ext2 extended attributes
[*] Ext2 POSIX Access Control Lists
[*] Ext2 Security Labels
[*] Ext2 execute in place support
<*> Ext3 journalling file system support
[*] Default to 'data=ordered' in ext3 (NEW)
[*] Ext3 extended attributes (NEW)
[*] Ext3 POSIX Access Control Lists
[*] Ext3 Security Labels
CD-ROM/DVD Filesystems --->
<*> ISO 9660 CDROM file system support
<*> Native language support --->
<*> Codepage 437 (United States, Canada)
<*> Simplified Chinese charset (CP936, GB2312)
配置完成后就可以开始编译了:
注意:在make menuconfig的时候一定要选对磁盘驱动,否则会出现
kernel panic -- VFS error: unable to mount …
这里我用的是SCSI的磁盘,IDE的要做相应修改。
3. 制作根文件系统
为简单起见,我们利用busybox制用根文件系统。
下面是需要编译进busybox的功能选项。
General Configuration应该选的选项
Don't use /usr
这个选项一定要选,否则make install 后busybox将安装在原系统的/usr下,这将覆盖掉系统原有的命令。
Build Options
Build BusyBox as a static binary (no shared libs)
这个选项也是一定要选择的,这样才能把busybox编译成静态链接的可执行文件,运行时才独立于其他函数库.否则必需要其他库文件才能运行,在单一个linux内核不能使它正常工作。
其它选项都是一些linux基本命令选项,自己需要哪些命令就编译进去,一般用默认的就可以了,配置好后退出并保存。
编译并安装busybox
make install后会在busybox目录下生成一个叫_install的目录,里面有busybox和指向它的链接。
接下来给虚拟机添加一块SCSI磁盘并分区,假设根分区为sdb1
4. 更新grub
这步既可以在ubuntu的grub中引导也可以在sdb上装上grub,从sdb1进行引导。
为简单起见我们就用ubuntu中的grub来引导。
修改/boot/grub/grub.cfg
新添加
menuentry "My Linux-2.6.38" {
insmod ext2
set root='(hd1,1)'
linux /bzImage ro root=/dev/sdb1
}
5. 最后重启一下(启动时按住shift,否则不进入grub2引导菜单)
选择My Linux-2.6.38
如果一切顺利,就会出现下图的信息, ----- 启动成功。
联系客服