菜鸟上路CCLinux 2013-05-18
实验中所有工具的下载地址 http://pan.baidu.com/share/link?shareid=569752&uk=487907638
首先编译红帽Linux2.6.38.5内核
tar xf linux-2.6.38.5.tar.bz2 —C /usr/src/
创建一个链接
ln -sv linux-2.6.38.5/ linux
配置内核提供./config文件(这里提供了一个样本,名称是kernel-2.6.38.1-i686.cfg)
cd linux
在直接将此样本重命名为./config
mv kernel-2.6.38.1-i686.cfg ./config
make menuconfig(根据自己的需要对驱动,文件系统及网络做选择性的配置,其中我在配置的时候直接把ext3做成了内核模块)
开始编译
make SUBDIR=arch/
当编译完成后,提供微型系统新内核 (编译需要一段时间,这里的顺序只是为了方便阅读,自己操作时,可先做下面的步骤,等到编译完成后再进行复制内核)
提供内核
cp /usr/src/linux/arch/x86/boot/bzImage /mnt/boot/vmlinz
准备grub
安装grub:
grub-install --root-directory=/mnt/ /dev/hda
配置grub.conf
vim /mnt/boot/grub/grub.conf
default=0
timeout=5
title My Linux (2.6.18)
root(hd0,0)
kernel /vmlinuz ro root=/dev/hda2
initrd /initrd.gz
提供initrd即编译使用Busybox
编译前准备操作
tar xf busybox-1.20.2.tar.bz2 -C /root/
mkdir busybox-1.20.2/include/mtd
cp /usr/src/linux/include/mtd/ubi-user.h busybox-1.20.2/include/mtd(复制2.6.38内核的头文件)
编译busybox
cd busybox-1.20.2
make menuconfig (这其中不需要更改太多,把编译选项改一下即可,编译成一个二进制文件方便 移植)
make install
cd _install/ (编译完成后进入这个目录)
rm -rf linuxrc (删除自动为我们创建的链接文件)
mkdir /tmp/initrd (自行创建一个目录,把_install文件复制到这里,一切配置在这里更改)
cp busybox-1.20.2/_install/* /tmp/initrd
cd /tmp/initrd
mkdir proc sys mnt/sysroot dev tmp lib/modules etc -pv (创建基本目录)
mknod dev/console c 5 1 (创建设备文件)
mknod dev/null c 1 3
创建init脚本
完成的任务:
1、挂载proc文件系统,proc文件系统是用来输出内核映像的
2、挂载sys文件系统(输出硬件信息)
3、导入内核模块,导入ext3内核模块,否则无法访问真正的文件系统(这里的/dev/hda2格式化为了ext3,如果是格式化成ext2就不要安装这个模块)
脚本内容如下:
#!/bin/sh
#
echo "mounting proc and sys....."
mount -t proc proc /proc
mount -t sysfs sysfs /sys
echo "Detect and export hardware infomation...." 动态创建设备文件的方式
mdev -s
echo "Mount real rootfs to /mnt/sysroot....."
mount -t ext3 /dev/hda2 /mnt/sysroot 挂载真正的文件系统
echo "Switch to real rootfs....."
exec switch_root /mnt/sysroot /sbin/init 切换到/mnt/sysroot这个根上,然后执行/mnt/sysroot这个目录下的/sbin/init命令
chmod +x init
归档压缩生成initrd文件
find . | cpio -H newc --quiet -o | gzip -9 > /mnt/boot/initrd.gz
记得要sync哦!