基于U盘的linux启动盘的制作

来源:互联网 发布:win10 windows server 编辑:程序博客网 时间:2024/06/16 08:25

 

本次设计是构建一个基于U盘存储的linux启动盘,详细介绍了具体的构建过程。主要步骤如下:

(1)   在U盘上安装系统引导程序grub。

(2)   制作Linux根文件系统,建立系统必要的目录、命令和设备。

(3)   Linux内核配置、编译。

我的制作环境:

        操作系统:rhel5,已安装内核编译开发工具包。

      内核源码:linux-2.6.18.tar.bz2,可从http://www.kernel.org/

下载相应版本。

     BusyBox: busybox-1.13.3.tar.bz2可从http://www.busybox.net/

下载相应版本

        优盘:可启动U盘,现在的U盘应该都可以,本人的是朗盛E306,8G。

 

第一章    安装grub到U盘

在U盘建立引导程序(grub):

   可以先用fdisk -l 查看一下自己的U盘,我的是在 /dev/sdb1,这里挂载到 /mnt/usb目录下。

    1.1  分区格式化

     fdisk /dev/sdb (b表示第2个存储设备,我的为b ,可以fdisk -l 查看一下)

        Command (m for help):d 删除原有分区
        Command (m for help):n 添加分区
        p linux主分区
        e Linux 扩展分区
        :p
        Command (m for help):w

   # mkfs.ext2 /dev/sdcx1 将U盘上的第一分区格式化为Ext2文件系统

 

      1.2   安装grub到u盘

         #mount /dev/sdb1  /mnt/usb (用fdisk -l命令查看x具体代表什么)
         #cd /mnt/usb
         #mkdir boot  boot/grub
         #cp /boot/grub/stage*   boot/grub/ 
     编辑grub.conf
        #vi boot/grub/grub.conf 
         default=0 
         timeout=10 
         title Mylinux For Linux 
         root(hd0,0)    注:若从usb启动,此处均为(hd0,0)
         kernel /boot/bzImage rw root=/dev/sda1 rootdelay=10

      保存退出

          #grub

         #grub> root   (hd1,0)       //选择启动根目录/所在的磁盘代号,因为我只有一块硬盘,故此处U盘为hd1,第一块硬盘为hd0。

              Filesystemtype is ext2fs, using whole disk

          #grub> setup   (hd1)          //在MBR上安装grub

           Checking if "/boot/grub/stage1"exists... yes

           Checking if "/boot/grub/stage2"exists... yes

          Checking if"/boot/grub/e2fs_stage1_5" exists... no

           Running "install /boot/grub/stage1 (fd0)/boot/grub/stage2 p /boot/grub/grub.conf "... succeeded

           Done.

          #grub>quit                 //退出GRUB

      # umount /mnt/usb   卸载U盘。

 

第二章    根文件系统制作

 

2.1 安装与编译Busybox

BusyBox 是实现标准Linux 工具的一个独立可执行方案。不但包含有简单的工具,如cat 和echo,还集成压缩了Linux更大、更复杂的工具和命令,例如grep、find、mount 以及telnet。利用它,我们可以建立我们需要的系统命令。

 

步骤:

 # cd /tmp

  # tar  -xjvf busybox-1.13.3.tar.bz2

  # cd busybox-1.13.3

 # make menuconfig

进入手工配置菜单,主要修改选项如下:

BusyBox settings——>Build Options

[*] Build Busybox as a static binary (no shared libs)    这个选项把busybox编译成静态链接的可执行文件,运行时可以不需要其他函数的库。

BusyBox settings->Installation Options

[*]Don’t use /usr  这个选项必选,否则make install后Busybox将安装在原系统的/usr目录下,覆盖了原系统所有命令。选中此选项后,make install后将生成一个_install的目录,里面有Busybox和指向它的链接。

进入shell选项,选择ash作为默认的shell程序。如下:

Shell——>Choose your default shell (ash)

[*]ash

[]hush

[]lash

[]msh

 其它选项可以采用默认值。之后选择保存,退出配置环境。

编译Busybox

#make

make完后,会在/tmp/busybox-1.13.3目录下生成可执行文件busybox,用户可以手工使用ln命令建立一些常用命令。用户也可以使用make install命令,让BusyBox自动建立这些命令的链接。

安装Busybox

#make install

make install完成后,会在/tmp/busybox-1.13.3/目录下生成_install目录,里面会建立bin,sbin子目录,其中包含busybox可执行文件和所有BusyBox支持命令对其的链接。通过观察/tmp/busybox-1.13.3/_install/bin/下链接,可以清楚看到BusyBox种究竟支持了哪些命令和工具。如果需要的命令没有出现在这个目录,就要重新配置编译,让其支持。

2.2创建文件系统

2.2.1 为U盘创建文件系统

# cd dev

# mknod tty c 5 0

# mknod console c 5 1

# chmod 666 tty console

# mknod tty0 c4 0

# chmod 666 tty0

# mknod ram0 b 1 0

# chmod 600 ram0

# mknod null c 1 3

# chmod 666 null

 

2.2.2  建立etc目录下启动配置文件

Linux系统在启动过程需要一个配置文件,如:/etc/inittab,/etc/fstab,

/etc/init.d/rsC等等。

(1)    建立 /mnt/usb/etc/inittab

# vi /mnt/usb/etc/inittab

添加如下内容:

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

::askfirst:/bin/sh

(2)   建立/mnt/usb/etc/fstab

# vi /mnt/usb/etc/fstab

添加如下内容:

proc /proc proc defaults 0 0

 

(3)  建立/mnt/usb/etc/init.d/rsC

# vi /mnt/usb/etc/init.d/rsC

添加如下内容:

#! /bin/sh

mount –a

 

(4) 修改inittab,fstab,rsC文件权限

# chmod 644 /mnt/usb/etc/inittab

# chmod 755 /mnt/usb/etc/init.d/rsC

# chmod 644 /mnt/usb/etc/fstab

 

 

第三章Linux内核配置编译

目的:剪裁linux内核,以求简洁实用,适合U盘(或嵌入式)系统。

# cp linux-2.6.18.tar.bz2  /usr/src/

# cd /usr/src

# tar –xjvf linux-2.6.18.tar.bz2

# cd inux-2.6.18        //  运行配置程序

会生成.config文件,这是内核的编译选项。

# make

2.6的内核只需要make一下就可以了。不用 make dep    make bzImage

make完成后会在 /usr/src/linux-2.6.18/arch/i386/boot/目录下生成内核文件bzImage

# cp  arch/i386/boot/bzImage /mnt/usb/boot

# umount /mnt/usb

到此,一个可以在U盘上独立运行的Linux系统就制作完成。

内核编译选项如下:

在menuconfig中配置:
  详细介绍内核配置选项及删改情况
  第一部分:全部删除
  Code maturity level options ---> 代码成熟等级选项
  []Prompt for development and/or incomplete code/drivers 默认情况下是选择的,这将会在设置界面中显示还在开发或者还没有完成的代码与驱动.不选。

  第二部分:除以下选项,其它全部删除
  General setup—〉
  System V IPC (IPC:Inter Process Communication)
  第三部分:除以下选项,其它全部删除
  Loadable module support ---> 可引导模块支持建议作为模块加入内核
  [] Enable loadable module support 
  []Automatic kernel module loading 
  第四部分:全部删除
  Block layer-----〉块设备
  第五部分:除以下选项,其它全部删除
  Processor type and features ---> 处理器类型
  Subarchitecture Type (PC-compatible) ---> 这选项的主要的目的,是使Linux可以支持多种PC标准,一般我们使用的PC机是遵循所谓IBM兼容结构(pc/at)。这个选项可以让你选择一些其它架构。我们一般选择PC-compatible就可以了。
  Processor family(386) : 它会对每种CPU做最佳化,让它跑的好又快,一般来说,你是什么型号的就选什么型号的就好。我选的是386,这样内核会省下不少空间
  第六部分:除以下选项,其它全部删除
  Power management options (ACPI, APM) ---> 电源管理选项
  [ ] Power Management Debug Support 电源管理的调试信息支持,如果不是要调试内核有关电源管理部份,请不要选择这项。
  ACPI Support ---〉高级电源接口配置支持,如果BIOS支持,建议选上这项
  []Button 
  第七部分:除以下选项,其它全部删除
  Bus options (PCI, PCMCIA, EISA, MCA, ISA) ---> 总线选项
  []PCI support
  PCI access mode (Any) ---> PCI外围设备配置,强列建议选Any,系统将优先使用MMConfig,然后使用BIOS,最后使用Direct检测PCI设备。
  第八部分:除以下选项,其它全部删除
  Executable file formats --->
  Kernel support for ELF binaries ELF是开放平台下最常用的二进制文件,它支持不同的硬件平台。一定要选。
  第九部分:除以下选项,其它全部删除
  Networking
  Networking options --->
  []Unix domain sockets
  []TCP/IP networking
  第十部分:除以下选项,其它全部删除
  Device Drivers --->设备驱动
  Block devices-------〉
  []Compaq SMART2 support
  [] Compaq Smart Array 5xxx support
  []Loopback device support 
  [] RAM disk support
  SCSI device support ---> 里面有关于USB支持的,要选择
  []SCSI device support USB要用,必须选择
  []legacy /proc/scsi/ support USB要用,必须选择
  []SCSI disk support USB要用,必须选择
  SCSI Low-level drivers
  []Serial ATA(SATA) support
  []Intel PIIX/ICH SATA support 这个必须选择,否则无法产生引导文件
  []Via SATA support
  Networking device support ---> 这个下面是选网卡驱动,一定要选
  Ethernet(1000mbit)-?我的电脑是千兆网卡所以就选这个
  []broadcom Tigon3support
  Input device support ---> 这个里面要设置你的鼠标键盘什么的
  []Provide legacy /dev/psaux device
  Graphics support --->
  []Support for frame buffer devices 支持Frame buffer的,一定要选择
  USB support --->
  []USB device filesystem 这个好象是用U盘必须的
  []EHCI HCD (USB 2.0) support 有usb2.0就选上把,编译成模块
  []OHCI HCD support 必须选择,编译成模块
  []UHCI HCD (most Intel and VIA) support 必须选择,编译成模块
  []USB Mass Storage support 用U盘必须选择
  USB Human Interface Device (full HID) support 里面选择usb鼠标和usb键盘,如果你有一定选上这个必需选
  HID input layer support 应该选择
  /dev/hiddev raw HID device support如果这里有USB键盘和鼠标选项,一定要选择
第十一部分:除以下选项,其它全部删除
  file systems --->文件系统
  <*>Second extended fs support
  Ext2 extended attributes
  Ext2 POSIX Access Control Lists
  Ext2 Security Labels
  Ext3 journalling file system support

Ext3 extended attributes
  Ext3 POSIX Access Control Lists
  Ext3 Security Labels 以上这些肯定是要选择的,linux的标准文件系统
  Kernel automounter support 内核自动挂载的,当然要选
  Kernel automounter version 4 support (also supports v3) 当然要选
  DOS/FAT/NT Filesystems --->
  DOS FAT fs support
  MSDOS fs support
  VFAT (Windows-95) fs support
  NTFS file system support
  Native language support?语言支持,这里就支持英语和汉语就行了,不多说了
  []NLS ISO 8859-1 必须选择,这个是关于U盘挂载的。
  CD-ROM/DVD Filesystems ---> 这个是关于挂载ISO文件的,用的话就选。
  <*>ISO 9660 CDROM file system support
  余下部分: 全部删除
   File Systems:
   <*> Second extended fs support 
   <*> /proc support # proc文件系统很有用
   <*> ext3
   <*> FAT,FAT32,NTFS 
   <*> NFS support
      Partion types: 选择PC BIOS
第四章 U盘linux目录

最终,软盘linux系统集成后的部署结构如下:

/mnt/usb/

      /boot

           /bzImage

          /grub

                  /grub.conf

                  / stage1

                  /stage2

         /initrd.img.gz  备注:Linux2.6内核不需要此文件,要了反而可能出问题,此处列出只为2.4

        /lost+found

        /etc

        /lib……

第四章 测试

重启机器,设置USB-HDD为第一驱动,启动进入GRUB 引导程序,开始运行软盘linux 系统。

当系统启动后,若无问题应该可以顺利进入显示界面,可以自己测试U盘linux的命令,以及编辑器等功能

参考文献

【1】   嵌入式系统原理与设计 浙江大学出版社 王勇编著 2007年2月第一版

【2】   http://hi.baidu.com/tihu1111/blog/item/a6cd9839e2cb0efe3a87ce93.html

【3】   http://www.turbolinux.com.cn/turbo/wiki/doku.php?id=system:busybox

 

 

原创粉丝点击