第一步:制作交叉编译环境
我用的是公司同事做好的开发环境
第二步:编译内核
1. 下载源码
linux-2.6.38.4.tar.bz2
2. 解压进入源码路径
# tar -xvf linux-2.6.38.4.tar.bz2
# cd linux-2.6.38.4/
3. 配置内核
# make CROSS_COMPILE=586- menuconfig
4. 编译内核镜像
# make CROSS_COMPILE=586- bzImage
5. 编译模块
# make CROSS_COMPILE=586- modules
6. 安装模块
# make CROSS_COMPILE=586- INSTALL_MOD_PATH=/westone/image modules_install
第三步:编译busybox
1. 下载源码
busybox-1.18.4.tar.bz2
2. 解压进入源码路径
# tar -xvf busybox-1.18.4.tar.bz2 
# cd busybox-1.18.4/
3. 配置
# make CROSS_COMPILE=586- menuconfig
4. 编译
# make CROSS_COMPILE=586- 
5. 安装
# make CROSS_COMPILE=586-  install
第四步:格式化CF卡,并分区
1. 使用fdisk /dev/sdc将CF卡分两个区,/dev/sdc1  /dev/sdc2
2. 使用mkfs.ext2格式化分区
# mkfs.ext2 /dev/sdc1
# mkfs.ext2 /dev/sdc2
3. 挂载CF卡
mount /dev/sdc1 /mnt
4. # cp /westone/linux-2.6.38.4/arch/x86/boot/bzImage /mnt -rf
第五步:制作根文件分区
1. 自动化脚本内容如下:
#! /bash/sh
echo "Start make rootfs !"
cd /westone/
mkdir –pv rootfs
cd rootfs
mkdir -pv dev etc lib proc tmp usr var
mkdir -pv usr/lib
mkdir -pv var/lib var/lock var/log var/run var/tmp
chmod 777 tmp
chmod 777 var/tmp
cp -dprf /westone/ busybox-1.18.4/_install/* .
cp -rf /dev/console dev/
cp -rf /dev/null dev/
cp -rf /dev/zero dev/
cp -rf /westone/busybox-1.18.4/examples/bootfloppy/etc/* etc/
cp -rf /westone/image/lib/modules lib/
dd if=/dev/zero of=/westone/ramdisk  bs=1M count=16
mkfs.ext2 /westone/ramdisk
mkdir -pv /westone/tmp
mount -o loop /westone/ramdisk /westone/tmp
cp –r rootfs/* /westone/tmp
sync
umount /westone/tmp
gzip -9 /westone/ramdisk
echo "End make rootfs!"
2. # cp /westone/ramdisk.gz /mnt –rf
# sync
第六步:设置bootloader
工具:grub(之前宿主PC安装过grub,所以没有在下源码安装)
步骤:
1. # mkdir –pv /mnt/grub
2. # cd /boot/grub
# cp *stage* /mnt/grub
3. 执行grub配置,# grub进入
grub> root (hd2,0)
Filesystem type is ext2fs, partition type 0x83
grub> setup (hd2)
 Checking if "/boot/grub/stage1" exists... no
 Checking if "/grub/stage1" exists... yes
Checking if "/grub/stage2" exists... yes
 Checking if "/grub/e2fs_stage1_5" exists... yes
 Running "embed /grub/e2fs_stage1_5 (hd2)"...  15 sectors are embedded.
succeeded
 Running "install /grub/stage1 (hd2) (hd2)1+15 p (hd2,0)/grub/stage2 /grub/menu.lst"... succeeded
Done.
grub> quit
注:
(hd2,0)即为/dev/hdc1
最开始的时候输入(hd2一直提示找不到硬盘,不论是用fdisk –l查看还是查看/ect/fstab都发现存在着/dev/sdc1,输入(hd后按TAB键显示如下:
grub> root (hd
 Possible disks are:  hd0 hd1
网上也没有人出现类似的情况,然后胡乱看到/boot/grub/ device.map,内容如下:
development:/boot/grub # cat device.map
(fd0)   /dev/fd0
(hd0)   /dev/sda
(hd1)   /dev/sdb
于是在其末尾添加一行,搞定
(hd2)   /dev/sdc
4. 编写grub.conf
# cat grub/grub.conf
#write
#
#
timeout=5
title *******westone linux 2.6.38.4*******
root (hd0,0)
kernel /bzImage console=ttyS0,115200 root=/dev/ram0
    initrd /ramdisk.gz

5. # cp /mnt/grub/grub.conf /mnt/grub/menu.lst
注:
网上搜下grub.conf是menu.lst的链接,在只有grub.conf的情况下我的CF卡挂在设备上是起不来的,但是通过键盘和显示器,在grub提示符下输入configure /grub/grub.conf系统启动正常。所以做了个拷贝的操作。