usb linux 转载

安装优盘Linux的文章有好多,你可以在google上搜一下,安装过程我先简要说一下,在后面重点说一说可能遇到的问题。

一。我的安装环境

    系统:rh9
    内核:2.4.20
    glibc:2.3
    busybox:1.5

    系 统我建议用rh9,因为内核版本低,内核的编译可以更小一点,而且这个Mini-linux也用不到新内核的很多重要功能。busybox就是一个为系统 提供各种命令(ls,cat,mkdir...)而又不用占许多硬盘的小软件,安装方便。我用的是1.5版的,你可以在www.busybox.net下 载。
二。分区、格式化、引导、建立目录
    1。分区:用fdisk在优盘上建立一个ext2分区,然后用fdisk里的a命令设置启动分区
    2。格式化:mke2fs /dev/sda1 (sda1为优盘刚才的分区)
    3。引导:

# mount /dev/sda1 /mnt/ud      ;装载优盘
# mkdir /mnt/ud/boot          ;建立boot目录
# mkdir /mnt/ud/boot/grub
# cp /boot/grub/stage* menu.lst grub.conf /mnt/ud/boot/grub ;将stage1 stage2 menu.lst grub.conf拷贝

          运行grub命令安装引导程序,输入
           >root (hd1,0)
           >setup (hd1)
          第一个命令是确定要操作的分区,这里为第二个硬盘的第一个分区(但假如你有两块硬盘,u盘就是第3块硬盘即hd2).安装完引导之后,我们还需要编辑一下grub.conf文件,这是一个引导设置文件。
grub.conf文件的内容如下: 

default=0                            #默认的启动项
timeout=10                           #等待时间
title My USB Linux                   #标题
         root (hd0,0)                #启动分区,用优盘启动时,优盘就是hd0
         kernel /boot/vmlinuz ro  root=/dev/sda1       #内核位置,及根分区位置,ro为只读

      4。建立目录
        # mkdir /dev /proc /root /etc /var /bin /sbin
        # chmod 755 *
        # chmod 555 proc

三。编译内核。
     在 rh9中自带了内核源码包,如果没有的话可以去kernel.org下载。重新编译内核有两个目的1。瘦身2。将重要的模块直接编译入内核。所以要把一些 没有用的的东西都去掉比如声卡,模块加载也用不到....根据自己需要增减。因为使用优盘,所以usb设备要选,scsi disk设备要选。常见的 USB芯片类型有EHCI、OHCI和UHCI三种,都选上吧。
     由于优盘的加载速度慢,以至于启动时内核已经初始化完毕了,优盘还在初 始化,这个时候内核启动优盘上的init肯定会失败,在一些文章中使用加载ram盘的方法,但这种方法比较麻烦,在内核中还要加入ram的支持,所以不建 议使用。我觉得最好的方法就是修改内核文件init/do_mounts.c修改内容如下:

* Allow the user to distinguish between failed open
* and bad superblock on root device.
*/
-  printk (“VFS: Cannot open root device“%s”or %s”,
+  printk (“VFS: Cannot open root device“%s”or %s”,
   retrying in 1 second.", root_device_name, kdevname (ROOT_DEV));
-  printk (“Please append a correct “root=”boot option”);
-  panic(“VFS: Unable to mount root fs on %s”,
-  kdevname(ROOT_DEV));
+  printk (“You may need to append a correct“root=”boot option”);
+  printk (“or wait for the root device to become ready.”);
+
+  /* wait 1 second and try again,
+  * allowing time for hubs/devices to become ready */
+ set_current_state(TASK_INTERRUPTIBLE);
+ schedule_timeout(HZ);
+ goto retry;
        )
  panic(“VFS: Unable to mount root fs on %s”, kdevname(ROOT_DEV));

('+'增加 '-'去掉)

用这样的方法在加载时如果优盘没有初始化完毕,内核会循环等待,即使遇到比较慢的bios总是循环等待,也可以拔下优盘再插上(哈哈,我发明的暴力方法)。
内核设置完了运行make dep;make bzImage;
编译完成后,新的内核就是arch/i386/boot/目录中的bzImage文件,将其复制到优盘上,命名如下:
    # cp arch/i386/boot/bzImage /mnt/ud/boot/vmlinuz
四。busybox安装
    主角终于上场了,下载压缩包之后首先解压:
# tar xvjf busybox-x-x-x.tar.bz2
# cd busybox-x-x-x
# make defconfig                ;defconfig这是默认的设置,先给他设一下
# make menuconfig               ;进入设置菜单
     defconfig 之后基本上没有什么需要设置的了,要把静态编译选上(Build Busybox as a static binary),否则还得拷贝库文件很麻烦。 在Installation Option中将安装目录设为/mnt/ud(优盘装载目录)
然后make,make install如果编译安装没问题的话,你会在你的优盘的bin sbin usr中找到安装的文件。其实编译过程中可能会出现很多问题,我在后面再说,但基本过程是这样。
五。拷贝建立初始化脚本
     在busybox编译完成之后,在其目录下有一个/examples/bootfloppy/etc目录,这个目录是busybox给的一个实例,你可以直接将这个etc目录拷贝到你的优盘根目录,只要修改一下/etc/init.d/rcS文件如下:

#! /bin/sh

PATH=/sbin:/bin:/usr/bin:/usr/sbin
export PATH

/bin/mount -a
ifconfig lo 127.0.0.1

其它的文件只要保持原位置就可以了。
最后还要将设备文件拷贝到你的优盘/dev,可以直接用cp -a拷贝,例如:cp -a /dev/tty /mnt/ud/dev也可以使用busybox的脚本busybox-x-x-x/examples/bootfloppy/mkdevs.sh运行例子:
#mkdevs.sh /mnt/ud/dev
至此,基本上完成了内容的拷贝安装。总结一下:

/boot       ;里面有一个内核文件
/boot/grub  ;启动文件stage1 stage2 menu.lst grub.conf
/dev        ;设备文件
/bin /sbin /usr ;busybox的命令
/proc       ;必须有
/etc        ;里面有fstab inittab profile都是启动初始化文件,不用修改
/etc/init.d ;只有一个rcS文件用于初始化的脚本
/root
/mnt

你可以重起一下试试了,怎么样?,哈哈,如果你到这步没成功多半是因为内核的编译问题,这个要自己调整,慢慢来不要着急。

六。问题总结。
    1。grub.conf文件你可以直接拷贝系统里的,再修改但要注意,不要用splashimage图片启动,把那项删除
    2。如果你别的都没问题,就是启动不起来,显示mount不到root我想多半是内核的编译问题,要自己调整,不要把系统的内核直接拷贝到优盘上,因为系统的内核有好多功能被编译成了模块,所以只拷贝内核,模块的功能就没有了。
    3。busybox的1.5以前的版本(比如1.4 1.3)如果选择静态编译的话,会显示警告而停止编译:
#warning Static linking against glibc produces buggy executables
#warning (glibc does not cope well with ld --gc-sections).
#warning See sources.redhat.com/bugzilla/show_bug.cgi?id=3400
#warning Note that glibc is unsuitable for static linking anyway.
#warning If you still want to do it, remove -Wl,--gc-sections
#warning from top-level Makefile and remove this warning.
  这个警告的定义在applets/applets.c中,将这段警告注释掉就可以了,这段的意思就是告诉你最好用uclibc编译,而不用glibc因为glibc比较大,busybox在寸土寸金的内嵌系统中运用比较多,所以会有这样的要求。
      4。 如果你在rh9中编译1.3以上的busybox你可能会遇到这样的问题readahead.c或taskset.c编译不过去,这个主要是内核或 glibc版本低,所以有的地方不兼容的原因。编译的时候把它排除就可以了,选项在Miscellaneous Utilities中。
      5。注意如果你的busybox在高版本的内核中编译,他可能不会运行在得版本中的内核。例如,我在AS5种编译(2.6内核)他可能不能在rh9(2.4内核)中运行,所以你在做优盘系统时要注意,你的内核版本和busybox编译时的内核版本。

你可能感兴趣的:(usb linux 转载)