运行于u盘的精简linux系统制作

原创 2015年11月18日 16:34:10

运行于u盘的精简linux系统制作

1、裁剪linux内核

        如何裁剪linux系统,主要是设置menuconfig,里面有很多设置,按照“金钟国”大神的教程,一步一步来就可了。这里不在赘述。

        强调一下生成的文件格式,

        vmlinuz的建立有两种方式。

        一是编译内核时通过“make zImage”创建,手动拷贝到/boot目录下面。zImage适用于小内核的情况,它的存在是为了向后的兼容性。
       二是内核编译时通过命令make bzImage创建,然后手动拷贝至/boot目录下。bzImage是压缩的内核映像,需要注意,bzImage不是用bzip2压缩的, bzImage中的bz容易引起误解,bz表示“big zImage”。 bzImage中的b是“big”意思。 zImage(vmlinuz)和bzImage(vmlinuz)都是用gzip压缩的。它们不仅是一个压缩文件,而且在这两个文件的开头部分内嵌有 gzip解压缩代码。所以你不能用gunzip 或 gzip –dc解包vmlinuz。
     内核文件中包含一个微型的gzip用于解压缩内核并引导它。两者的不同之处在于,老的zImage解压缩内核到低端内存(第一个 640K),bzImage解压缩内核到高端内存(1M以上)。如果内核比较小,那么可以采用zImage或bzImage之一,两种方式引导的系统运行时是相同的。大的内核采用bzImage,不能采用zImage。vmlinux是未压缩的内核,vmlinuz是vmlinux的压缩文件。

2、制作initrd

       initrd.img主要有两种格式,一种是虚拟磁盘,使用dd命令创建一个文件,然后mkfs.ext2,mount -o loop,make busybox。另一种是cpio形式的,直接创建。

       磁盘格式:

  1 #!/bin/bash
  2 dd if=/dev/zero of=./initrd.img bs=1024 count=32768
  3 mkfs.ext2 ./initrd.img
  4 mount -o loop ./initrd.img /mnt/initdisk
  5 rm -rf /mnt/initdisk/*
  6 cp -a ../busybox/_install/* /mnt/initdisk
  7 umount /mnt/initdisk
  8 gzip -9 ./initrd.img

      cpio格式:

  1 find . | cpio -o -H newc | gzip -9 > $target


      下面讲一下busybox。

      BusyBox 是一个集成了一百多个最常用linux命令和工具的软件。BusyBox 包含了一些简单的工具,例如ls、cat和echo等等,还包含了一些更大、更复杂的工具,例grep、find、mount以及telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。简单的说BusyBox就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令,也包含了 Android系统的自带的shell。

      使用make menuconfig配置选项 -> make编译 -> make install 主要目的是生成静态库busybox,然后拷贝到我们的rootfs目录下,至此busybox使用完成,但是我们的rootfs目录作为系统虚拟文件系统还有一些文件需要创建,例如/etc /lib /sbin /dev。。。

      /etc目录下应该有inittab文件,

      inittab为linux初始化文件系统时init初始化程序用到的配置文件。这个文件负责设置init初始化程序初始化脚本在哪里;每个运行级初始化时运行的命令; 开机、关机、重启对应的命令;各运行级登陆时所运行的命令。

# Begin /etc/inittab
id:3:initdefault:
si::sysinit:/etc/rc.d/init.d/rc sysinit
l0:0:wait:/etc/rc.d/init.d/rc 0
l1:S1:wait:/etc/rc.d/init.d/rc 1
l2:2:wait:/etc/rc.d/init.d/rc 2
l3:3:wait:/etc/rc.d/init.d/rc 3
l4:4:wait:/etc/rc.d/init.d/rc 4
l5:5:wait:/etc/rc.d/init.d/rc 5
l6:6:wait:/etc/rc.d/init.d/rc 6
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
su:S016:once:/sbin/sulogin
1:2345:respawn:/sbin/agetty tty1 9600
2:2345:respawn:/sbin/agetty tty2 9600
3:2345:respawn:/sbin/agetty tty3 9600
4:2345:respawn:/sbin/agetty tty4 9600
5:2345:respawn:/sbin/agetty tty5 9600
6:2345:respawn:/sbin/agetty tty6 9600
# End /etc/inittab
      /etc/fstab文件是系统启动后自动挂在磁盘的记录文件,eg:
UUID=0db4ccd4-6685-46a7-ae8d-8169dc690853 none            swap    sw              0           0

      /lib目录为系统库目录,应该至少存放最进本的库,eg:libc、libm、ld-linux。可使用cp -rf /lib/libc.* ./     and     cp -rf /ilbc-* ./     拷贝一个libc库,其他的库用同样的方法,为什么一个哭队两个文件?因为其中一个是软链接,至于why自行百度

      /dev目录至少有两个文节点,一个mknod console c 5 1 , 另一个mknod dev/null c 1 3 等


  

3、制作u盘的启动项

理论基础:     

      使用grub程序制作u盘启动项,下面需要需要讲一下linux系统启动流程和硬盘的mbr

      设备上电 -> 执行0xffff0中的BIOS代码,检测设备第一启动项 -> 探测到硬盘,读取硬盘前512字节的mbr到内存07c00 -> mbr自举到内存0x90000执行 -> mbr读取硬盘后2k数据到内存0x90200执行 -> 内核代码被读取到内存0x10000执行

      硬盘的前512字节左右系统的引导程序,有必要分析一下他的内部结构:

      512 = 446(mbr) + 4*16(dpt) + 0x55aa(end) 此512位于硬盘的0磁道,0柱面,1扇区(一个扇区512byte)

      16(dpt) = 1(08激活,00未激活) +3(分区开始磁头,扇区,柱面) + 1(分区类型83 ext2) + 3(分区结束磁头,扇区,柱面) + 4(首扇区相对扇区号) + 4(总扇区数)

      可以使用磁头柱面和扇区计算出磁盘的物理地址,方法有两种CHS和LBA,具体转换公式自行baidu。

真正的grub操作:

      1、准备u盘,fdisk 命令进行分区格式化,将u盘分为两个分区,一个作为主分区,一个作为交换分区,主分区为活动分区,使用fdisk的a参数转换,交换分区使用fdisk的t参数转换为82 。然后格式化主分区mkfs.ext2

      2、制作grub,首先挂在u盘到/mnt/uDisk,使用命令grub-install --root-directory=/mnt/uDisk /dev/uDev

      3、拷贝/boot/grub/grub.cfg并修改

      4、将裁剪后的initrd.img和vmlinx拷贝到你的rootfs下的boot目录

4、设置grub启动

     在重启系统后会进入grub的选项,c进入编辑模式,主要执行以下几个步骤:

     1、root (hd0, 1)

     2、linux /boot/vmlinx root=/dev/sda1

     3、initrd /boot/initrd

     4、boot     (重启)

配置可以写入到grub.cfg就不用每次都编辑了,至此裁剪后的系统启动完成,可能还需要设置系统后启动的一些脚本,这些就看个人发挥了,我也刚完成到这步,有新进展在更新吧。。。。。。。。


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

通过mdev实现Linux下U盘自动挂载(笔记)

系统环境:Loongson-1B开发板(mips32指令集)、busybox1.19.2、Linux2.6.21、文件系统配置参照本博客文章《移植Busybox与构建根文件系统》编译环境:ubuntu...

Linux系统初体验,U盘启动盘制作失败。

作为一个理科的研究生,居然在学期间接触了很多的硬件平台,包括凌阳单片机,三星的ARM9芯片,TI的DSP6713,一路上用过的开发环境也有Sunplus,EVC,CCS等。 到如今,略懂C,写过一些...

制作U盘启动来安装Linux系统的具体方法(图文)

一、安装所用到的工具盒软件   1、U盘一个(我建议用容量为8GB大的U盘,因为安装时得需要镜像文件。如果没那么 大的,1个GB的也可以,但这样你得再找个硬盘来存放镜像以便安装时用)。   2...

利用U盘制作启动盘安装Linux系统

想装个Linux系统,但是手头只有ISO文件,没有光盘没法启动系统怎么办,在网上搜了一下可以用U盘制作 安装Linux的启动盘。 首先需要将启动信息写入到U盘当中: 我用的是一个刻录软件...

向U盘中安装Linux系统的经验(不是制作安装盘)

安装系统到U盘,请选择虚拟机

linux系统下制作fat32格式windows10 U盘启动盘

本文介绍RHEL系列(Centos/Fedora)下制作Fat32格式的windows10启动盘。          本囧是刚刚如坑几个月的linux小白,第一次写文章,请诸位多多指教:)    ...

制作u盘启动linux系统

制作u盘启动linux系统本文记录我制作u盘驱动的过程,按照这篇教程,你可以得到一个装有linux3.10.10操作系统的u盘,可以启动x86架构的主板,文件系统使用busybox制作。制作u盘启动l...

linux系统下,使用dd命令制作U盘安装系统教程

要使用U盘安装linux系统,在windows下可以使用UtrlISO来制作U盘启动,但是偶尔会不好用,不知道为什么。今天同学告诉我可以在linux下使用dd命令来制作U盘启动,方便快捷,试了一下,确...
  • itstx
  • itstx
  • 2013年10月11日 22:11
  • 1337

使用U盘安装Linux系统经验总结

Linux机器硬件及软件说明: Inter i386CPU,1.5GHz,512M内存   IDE硬盘(非常重要,如果是SATA硬盘,硬盘名称会有区别) 使用的U盘容量大于3.7GB   一、...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:运行于u盘的精简linux系统制作
举报原因:
原因补充:

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