环境和工具:
编译环境: Ubuntu 15.04
工具:Buildroot-2015.08.1 (http://buildroot.uclibc.org/)
Qemu
源码:
引导程序:grub-0.97-i386-pc.tar.gz
文件系统: busybox-1.23.2
虚拟机:virtual box
一、使用buildroot制作编译工具链
buildroot 会自动通过网络下载相关的源码,因此整个编译过程需要保持网络畅通。它可以编译出自己的 gcc 和 C 库 ,Buildroot 会在它源码的根目录下默认建立一个名为 dl 的文件夹放置所需要的源码。
1、解压buildroot压缩包
tar –jxvf buildroot-2015.08.1.tar.bz2
2)进入解压后的buildroot根目录
make menuconfig出现如下图:
这里根据自己需要的内核版本、uclibc 和 gdb 的版本进行配置。
3)make进行编译,这个过程需要时间比较多大约1个小时左右。
4)在 buildroot 的目录中buildroot-2015.08.1/output/host/usr下放着就是我们编译出来自己用的 gcc ,把整个 usr 下的东西都拷贝到 /opt/i586-linux-gcc 这个下面
cp –r buildroot-2015.08.1/output/host/usr/* /opt/i586-linux-gcc
添加/opt/i586-linux-gcc/bin 到环境变量
export PATH=/opt/i586-linux-gcc/bin:$PATH
echo $PATH查看是否添加成功
二、编译内核:
把 buildroot 的 dl 下的 Linux 内核源码拷贝到创建的目录mylinux
1)解压
xz –d linux-4.1.4.tar.xz
生成一个linux-4.1.4.tar的压缩文件再进行解压
tar –zvf linux-4.1.4.tar
2)make i386_defconfig
3)接入输入 make menuconfig,修改文件系统配置
4)修改 Linux 源码最顶层 Makefile
三、编译 Busybox
1)解压
tar –jvf busybox-1.23.2.tar.bz2
2)make defconfig
3)修改 Busybox 源码根目录下的 Makefile 文件
4)在 Busybox 源码根目录下输入 make menuconfig选择静态编译
Build Options ——>Build BusyBox as a static binary (no shared libs)
5)接着输入 make && make install基于linux内核制作linux系统
四、制作启动软盘
制作启动软盘
1)新建一个软盘镜像initrd4M.img
dd if=/dev/zero of=initrd4M.img bs=512 count=2880
2)将 grub 写入软盘的引导扇区中去
解压 grub-0.97-i386-pc.tar.gz
losetup /dev/loop0 initrd4M.img
dd if=/grub/grub-0.97-i386-pc/boot/grub/stage1 of=/dev/loop0 bs=512 count=1
dd if=/grub/grub-0.97-i386-pc/boot/grub/stage2 of=/dev/loop0 bs=512 seek=1
losetup -d /dev/loop0
3)下载安装qemu进行测试
apt-get install qemu
安装 qemu 成功后,输入:
qemu -fda initrd4M.img 出现下图代表成功
接着建立磁盘映像:
第一步:创建一个磁盘镜像文件
dd if=/dev/zero of=mylinux.img bs=4096 count=8192
第二步:给磁盘映像分区
fdisk -C 16065 -H 255 -S 63 mylinux.img
hda_32M.img的磁头数为255、磁道数为16065、扇区数为63,同时给磁盘分区。
第三步:格式化分区
losetup -o 1048576 /dev/loop0 mylinux.img
mkfs.ext3 -m 0 /dev/loop0
建立临时挂载目录 rootfs,挂载硬盘镜像文件
mkdir rootfs
sudo mount /dev/loop0 rootfs/
制作文件系统
进入rootfs
root@cheer:/mylinux/rootfs# mkdir boot
root@cheer:/mylinux/rootfs# cd boot/
root@cheer:/mylinux/rootfs/boot# cp /mylinux/linux-4.1.4/arch/i386/boot/bzImage /mylinux/rootfs/boot/
root@cheer:/mylinux/rootfs/boot# ls
bzImage
root@cheer:/mylinux/rootfs/boot# mkdir grub
root@cheer:/mylinux/rootfs/boot# ls
bzImage grub
root@cheer:/mylinux/rootfs/boot# cp -r /grub/grub-0.97-i386-pc/boot/grub/* ./grub/ -af
root@cheer:/mylinux/rootfs/boot# ls
bzImage grub
root@cheer:/mylinux/rootfs/boot# cd grub/
root@cheer:/mylinux/rootfs/boot/grub# ls
e2fs_stage1_5 iso9660_stage1_5 reiserfs_stage1_5 ufs2_stage1_5
fat_stage1_5 jfs_stage1_5 stage1 vstafs_stage1_5
ffs_stage1_5 minix_stage1_5 stage2 xfs_stage1_5
root@cheer:/mylinux/rootfs/boot/grub# cd ..
root@cheer:/mylinux/rootfs/boot# cd ..
root@cheer:/mylinux/rootfs# ls
boot lost+found
root@cheer:/mylinux/rootfs# mkdir dev
root@cheer:/mylinux/rootfs/dev# mknod console c 5 1
root@cheer:/mylinux/rootfs/dev# mknod null c 1 3
root@cheer:/mylinux/rootfs/dev# mkdir proc
root@cheer:/mylinux/rootfs/dev# mkdir etc
root@cheer:/mylinux/rootfs/dev# ls
console etc null proc
root@cheer:/mylinux/rootfs/dev# rm -rf etc proc
root@cheer:/mylinux/rootfs/dev# ls
console null
root@cheer:/mylinux/rootfs/dev# cd ..
root@cheer:/mylinux/rootfs# mkdir etc
root@cheer:/mylinux/rootfs# mkdir proc
root@cheer:/mylinux/rootfs# ls
boot dev etc lost+found proc
root@cheer:/mylinux/rootfs# mkdir var
root@cheer:/mylinux/rootfs# mkdir home
root@cheer:/mylinux/rootfs# mkdir sys
root@cheer:/mylinux/rootfs# mkdir lib
root@cheer:/mylinux/rootfs# ls
boot dev etc home lib lost+found proc sys var
root@cheer:/mylinux/rootfs# cp -r /opt/i586-linux-gcc/i586-buildroot-linux-uclibc/sysroot/lib /mylinux/rootfs/lib/
root@cheer:/mylinux/rootfs/lib# ls
ld-uClibc-1.0.5.so libcrypt-1.0.5.so libm-1.0.5.so libresolv.so.1
ld-uClibc.so.1 libcrypt.so.1 libm.so.1 librt-1.0.5.so
libatomic.a libc.so.1 libnsl-1.0.5.so librt.so.1
libatomic.la libdl-1.0.5.so libnsl.so.1 libuClibc-1.0.5.so
libatomic.so libdl.so.1 libpthread-1.0.5.so libutil-1.0.5.so
libatomic.so.1 libgcc_s.so libpthread.so.1 libutil.so.1
libatomic.so.1.1.0 libgcc_s.so.1 libresolv-1.0.5.so
root@cheer:/mylinux/rootfs# cd etc
root@cheer:/mylinux/rootfs/etc# touch inittab
inittab 文件内容:
#/etc/inittab
::sysinit:/etc/init.d/rcS
tty1::respawn:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a –r
root@cheer:/mylinux/rootfs/etc# touch fstab
fstab 文件内容:
#device mount-point type options dump fsck order
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
ramfs /dev tmpfs defaults 0 0
var /dev tmpfs defaults 0 0
root@cheer:/mylinux/rootfs/etc# mkdir init.d
root@cheer:/mylinux/rootfs/etc/init.d# touch rcS
rcS文件内容
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
#
# Trap CTRL-C &c only in this shell
#
mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
root@cheer:/mylinux/rootfs/etc# touch profile
profile文件内容
#Ash profile
#vim:syntax=sh
#No core files by default
#ulimit -S -c 0> /dev/null 2>&1
USER="`id -un`"
LOGNAME=$USER
PATH=$PATH
export USER LOGNAME PATH
root@cheer:/mylinux/rootfs/boot/grub# touch menu.lst
root@cheer:/mylinux/rootfs/boot/grub# vim menu.lst
menu.lst 文件内容
default 0
timeout 30
title linux on mylinux.img
root (hd0,0)
kernel (hd0,0)/bzImage root=/dev/ram init=/bin/ash
initrd (hd0,0)/initrd4M.img
把 Busybox 目录下_install 目录里面的所有家伙都拷贝到 rootfs 中
去
root@cheer:/busybox/busybox-1.23.2# cp -r _install/ /mylinux/rootfs/
利用grub启动软盘,在硬盘映像上添加grub功能
$qemu -boot a -fda initrd4M.img -hda mylinux.img
进入grub界面后:
$root (hd0,0)
$setup (hd0)
测试从磁盘启动grub引导linux系统:
$qemu -hda mylinux.img
制作linux内核安装包:http://www.linuxdiyf.com/linux/13532.html
OpenStack制作Ubuntu镜像 :http://www.linuxdiyf.com/linux/11877.html
CentOS 7.0全自动安装光盘制作详解:http://www.linuxdiyf.com/linux/9177.html