自制一小型的linux系统mylinux

转载 2012年03月25日 20:19:45
通过grub引导程序引导编译后的内核文件bzImage,把制作的文件系统变成ramdisk镜像文件,通过内存加载镜像文件完成文件系统的注入;其中的命令通过编译busybox生成bin,sbin文件;注意:

内核文件+文件系统镜像文件+grub引导程序<=1440K

详细步骤:

1. 软盘上安装引导器(grub)

具体操作如下:

# mke2fs /dev/fd0

创建了 ext2 文件

# mount /dev/fd0 /mnt/floppy

现在,创建一些目录,并将一些关键文件复制到软盘:

# mkdir /mnt/floppy/boot

# mkdir /mnt/floppy/boot/grub

# cp /boot/grub/stage1 /mnt/floppy/boot/grub

# cp /boot/grub/stage2 /mnt/floppy/boot/grub


运行grub命令

在 grub> 提示符处,输入:

grub> root (fd0)

grub> setup (fd0)

grub> quit

引导盘完成。


2 配置busybox

新建一个目录存放资料:

#mkdir /floppylinux

用make menuconfig配置busybox

#cp busybox-1.00.tar.gz /floppylinux

#cd /floppylinux

#tar xvfz busybox-1.00.tar.gz

#cd busybox-1.00

#make menuconfig

下面是需要编译进busybox的功能选项,


General Configuration应该选的选项

Show verbose applet usage messages

Runtime SUID/SGID configuration via /etc/busybox.conf

Build Options

Build BusyBox as a static binary (no shared libs)

Installation Options

Don't use /usr

其他选项都是一些linux基本命令选项默认

配置好后退出并保存.


编译并安装busybox


#make

#make install

编译好后在busybox目录下生成子目录_install,里面的内容:

drwxr-xr-x 2 root root 4096 11月 24 15:28 bin

lrwxrwxrwx 1 root root 11 11月 24 15:28 linuxrc -> bin/busybox

drwxr-xr-x 2 root root 4096 11月 24 15:28 sbin

其中可执行文件busybox在bin目录下,其他的都是指向他的符号链接.


3 制作根文件系统

建立临时目录,该目录为软盘的文件系统

#mkdir //tmp/floppy-linux

将busybox下的_install目录下的文件复制过来:

#cp ./_install /tmp/floppy-linux –r


#cd /tmp/floppy-linux

# mkdir dev etc etc/init.d proc mnt tmp var

# chmod 755 dev etc etc/init.d bin mnt tmp var

# chmod 555 proc

# cd dev

# mknod tty c 5 0

# mknod console c 5 1

# chmod 666 tty console

# mknod tty0 c 4 0

# chmod 666 tty0

# mknod ram0 b 1 0

# chmod 600 ram0

# mknod fd0 b 2 0

# chmod 600 fd0

# mknod null c 1 3

# chmod 666 null


建启动配置文件:

/etc/inittab,

/etc/init.d/rcS,

/etc/fstab

/boot/grub.conf

/boot/menu.lst

其中

#ln –s grub.conf menu.lst

initab:

::sysinit:/etc/init.d/rcS

::askfirst:/bin/sh


rcS:

#!/bin/sh

mount –a

# chmod 755 rc.sysinit


fstab:

proc /proc proc defaults 0 0


grub.conf:

timeout 10

default 0

title FloppyLinux   root (fd0)  kernel /boot/bzImage  initrd /initrd.img.gz


4 制作Ramdisk的镜像文件:

# dd if=/dev/zero of=/dev/ram1

dd: 正在写入 ‘/dev/ram1’: 设备上没有空间

读入了 8193+0 个块

输出了 8192+0 个块

#mke2fs -m0 /dev/ram1

#mkdir /mnt/ram

#mount /dev/ram1 /mnt/ram

将先前做好的floppylinux根文件系统拷贝到ram1上.

#cp -R /tmp/floppy-linux /* /mnt/ram

#umount /dev/ram1

# dd if=/dev/ram1 of=/tmp/floppy-linux /initrd.img

# file initrd.img

initrd.img: Linux rev 1.0 ext2 filesystem data

用loop设备来把他重新挂装到文件系统里:

# mount -o loop initrd.img /mnt/ram/

查看/mnt/ram下的内容,和/tmp/floppy-linux /下的一模一样

# ls /mnt/ram

bin dev etc lost+found mnt proc sbin tmp var

#umount /mnt/ram

压缩initrd.img印象文件

# gzip -v9 initrd.img

initrd.img: 90.1% -- replaced with initrd.img.gz

查看压缩后的大小:

# ls -lh initrd.img.gz

只有406K


5编译linux系统内核

#cp linux-2.4.20.bz2 /usr/src/

#cd /usr/src

#tar xfvj linux-2.4.20.bz2

#ln -s linux-2.4.20 linux

进入linux源代码目录:

#cd linux

清理源代码树:

#make mrproper

运行配置程序:

#make menuconfig


code maturity level options

先选择N,当我们配置好常规的东西,要加入framebuffer支持时再将这一项选择Y,如果不在code maturity level options选择为Y,将不能配置framebuffer.

Loadable module support

选择N,为了简化系统的制作,我在这个项目中不选择可加载内核模块的支持.

processor type and features

processor family 中选择386CPU

其他选项都选择N.

General setup

networking support 选择Y

PCI support 选择Y

System V ipc 选择Y

systrl support选择Y

kernel support for ELF 选择Y

其余内容都可以选择N,

chnology devices (MTD)

Parallel port support

Plug and Play configuration

以上三个大项中的所有内容选择N

block devices

Normal floppy disk support

Loopback device support

RAM disk support

initial RAM disk (initrd) support

Per partition statics in /proc/partitions

以上几项选择Y,其余全部选择N.

Multi-device support (RAID and LVM)

Cryptography support (CryptoAPI)

这两个大项全部选择N

Networking options

这一大项中,只需要把下列项目编译进内核:

Packet socket :mmapped IO

TCP/IP networking

Telephony Support 选择N

ATA/IDE/MFM/RLL support

选择Y,然后下面的'IDE,ATA and ATAPI Block Devices'按钮就被激活

下面几项选择Y,其余都可以是N.

Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support

Include IDE/ATA-2 DISK support

Auto-Geometry Resizing support

Include IDE/ATA CDROM support


SCSI support

Fusion MPT device support

IEEE 1394(FireWire) support

I2O device support

全部选择N

Network device support

选择Y

然后点Ethernet(10 or 100 Mbit)按钮选择网卡驱动(Reltek8139)

Amateur Radio support

IrDA (infrared) support

ISDN subsystem

Old CD-ROM drivers (not SCSI,not IDE)

Input core support

全部选择N

Charcter devices

除了Virtual terminal和Support for console on terminal两项,其他全选N

Multimedia devices

Crypto Hardware support

全部选择N.

File sytems

选择其中有三个:

/proc file system support.

Second extended fs support BabyLinux的基本文件系统.

ISO 9660 CDROM filesytem support用光盘.

Console drivers

.前面三个全部选择Y,

Frame-buffer support按钮是灰色的不能选,别急,回到第一个大选项:

Code maturity level options 选择Y,就可以激活这个按钮了.

下面几个选项需要选择Y:

Support for framebuffer devices

VESA VGA graphics console

Support only 8 pixels wide fonts

剩下的几个大项全部选N

保存后退出,配置程序会自动生成一个隐藏的配置文件.config


#make dep

#make bzImage

bzImage为654K


6 整合启动盘

#cp bzImage /mnt/floppy/boot

#cp /tmp/floppy-linux/initrd.img.gz /mnt/floppy

全部文件(文件夹)如下:


/lost+found/

/boot/

/boot/grub/

/boot/grub/stage1

/boot/grub/stage2

/boot/grub/menu.lst

/boot/grub/grub.conf

/boot/bzImage

/initrd.img.gz


五实验遇到问题与总结

1,在制作启动盘的时候,运行grub命令后,进入grub界面后,运行:

grub>setup (fd0)

结果有时可能会出错,可能是软盘出问题,换张软盘

2,软盘制作完成后,重启机器,在grub开始进行引导时可能出现错误:

Error 16: Inconsistent filesystem strutwre

这个也是软盘的问题

3,在编译的内核时,有时可能不通过,在Redhet9.0(kernel-2.4.20)下用gcc-3.3.3就能编译通过2.4.20版本的内核,而在Fedora Core 2下用gcc-3.4.2就不行,可能是gcc的版本问题。

VMware自制最小Linux系统

  • 2013年08月09日 09:19
  • 388KB
  • 下载

手把手带你自制Linux系统之一 准备工作

手把手带你自制Linux系统之一 准备工作    本系列教程参考马哥Linux视频(Linux内核编译及系统裁章节),所有操作都在VMware Workstation虚拟机中进行,理论上同样适合物理硬...
  • Toormi
  • Toormi
  • 2015年08月13日 16:48
  • 1770

自制linux系统(LFS)资源

何为LFS?  LFS──Linux from Scratch,就是一种从网上直接下载源码(当然,在LFS-6.*  livecd所有所需要源码在/lfs-sources目录下),从头编译LINUX的...

CentOS 6.5结合busybox完成自制Linux系统及远程登录和nginx安装测试

前言    系统定制在前面的博文中我们就有谈到过了,不过那个裁减制作有简单了点,只是能让系统跑起来而,没有太多的功能,也没的用户登录入口,而这里我们将详细和深入的来谈谈Linux系统的详细定制过程和实...

手把手带你自制Linux系统之四 添加网络功能

手把手带你自制Linux系统之四 添加网络功能 1. 添加系统函数库 /etc/rc.d/init.d/functions脚本文件中定义了许多功能函数,用于控制服务脚本的信息显示等。/et...
  • Toormi
  • Toormi
  • 2015年12月16日 14:08
  • 1368

手把手带你自制Linux系统之五 一些小细节的完善

手把手带你自制Linux系统之五 一些小细节的完善 1. 设置主机名 "hostname+主机名" 命令可以用来设置主机名。这样设置的hostname立即生效,但重启后还需要再次设置。 想...
  • Toormi
  • Toormi
  • 2016年01月05日 21:49
  • 823

手把手带你自制Linux系统之二 简易Linux的制作

手把手带你自制Linux系统之二 简易Linux的制作本文利用CentOS5.5自带内核制作一个可以正常启动的Mini Linux。打开准备工作中创建的CentOS虚拟机,为另一台虚拟机MiniLin...
  • Toormi
  • Toormi
  • 2015年08月13日 16:48
  • 4135

手把手带你自制Linux系统之六 编译内核及busybox完成系统定制

手把手带你自制Linux系统之六 编译内核及busybox完成系统定制 重新看了一下前面的几章,发现其实前面的5章一直围绕一个话题讲解 — 如何利用CentOS现有资源组装一个Linux。这种...
  • Toormi
  • Toormi
  • 2016年01月08日 10:23
  • 4758

计算机系统结构 (第二版) 第五章一小题

假设对指令Cache的访问占全部访问的75%;而对数据Cache的访问占全部访问的25%。Cache的命中时间为1个时间周期,失效开销为50个时间周期,在混合Cache中一次load或store操作访...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自制一小型的linux系统mylinux
举报原因:
原因补充:

(最多只允许输入30个字)