现在的位置: 首页 > 综合 > 正文

利用block-extroot,让你的openwrt运行在USB设备上

2014年02月03日 ⁄ 综合 ⁄ 共 3770字 ⁄ 字号 评论关闭

原文链接

http://www.openwrt.org.cn/bbs/forum.php?mod=viewthread&tid=268&page=1

一、我需要这个功能吗?
  如果你对跑openwrt的设备的要求仅仅是可以上上网,那下面的可以不用看了。
  openwrt运行在USB设备上的好处:
  可以安装openwrt官方的N多软件了(但官方暂时没有mysql,郁闷),象P2P类的transmision-daemon、amule、web服务器类的lighttpd/apache、ftp服务器类的vsftpd等等,还可以再安装其他驱动程序包驱动摄像头、USB声卡、显卡等等。这部分功能optware也可以实现,各论坛的教程多数是基于optware的。

二、需要的设备及环境:
1、可以运行openwrt的设备;
2、带USB接口;
3、openwrt要版本比较新,往前哪个版本可以,我不知道,新版本的trunk版(最新的开发版)、Backfire版(最新的稳定版)都可以。

三、步骤:
1、实现USB存储支持,已实现此功能的此步骤可略。需要用到的包:

  1. kmod-usb-ohci、kmod-usb2、kmod-usb-uhci、kmod-usb-storage

复制代码

说明:
kmod-usb-ohci对应usb1.1
kmod-usb2对应USB2.0
kmod-usb-uhci对应部分intel和VIA的usb控制器
 (这3个可能不必全部都安装,像7231-4P等只支持USB1.1的设备应该只安装kmod-usb-ohci即可)
kmod-usb-stroage对应USB硬盘设备,如U盘、USB移动硬盘。
为了方便新手(其实我也是个新手,汗……),将详细命令也写一下:

  1. opkg update
  2. opkg install kmod-usb-storage kmod-usb-ohci kmod-usb2 kmod-usb-uhci

复制代码

2、实现USB存储设备自动挂载并从USB启动,需要用到的包:block-mount、block-hotplug(这两个是自动挂载用的)和block-extroot(这个是USB启动用的)

  1. opkg update
  2. opkg install block-mount block-hotplug block-extroot

复制代码

3、安装linux文件系统支持,ext2、ext3、ext4以及其他文件系统众多,用哪个看个人爱好了,推荐经典传统的ext2/ext3。我用ext4遇到过问题,后来上openwrt果然有人报到这个bug。另,在linux下,尽量少用或者放弃fat32/ntfs

  1. opkg install kmod-fs-ext3

复制代码

说明:不安装文件系统支持的话,分区不能mount。

有人会问,你为何不一下子opkg install了,当然可以,我分开来是为了帮助新手了解一下linux下设备驱动、功能包、文件系统支持的一些简单概念。

完成以上步骤后,openwrt默认设置下,U盘插上还不能识别,openwrt有默认设置模板,但此时还是关闭U盘自动挂载功能的。

4、准备USB硬盘及拷贝根目录所有文件。以下均以插一个U盘的情况为例:
4.1前3个步骤完成后,你最好重启一下设备,插上U盘(USB移动硬盘)。

4.2 准备U盘为linux分区及linux文件系统,需要用到的包:e2fsprogs,如果你在其他系统里准备分区并格式化为ext2/ext3,应该也可以
准备分区这个步骤略过不表了,默认一个分区也可以用,如果有人想多分几个区,请看其他教程。

  1. opkg update
  2. opkg install e2fsprogs

复制代码

ls /dev/sd*,应该有sda sda1 字样(这是只有一个U盘一个分区的情况,如果有多个U盘,会有sdb sdc……)

4.3 格式化U盘为ext2或ext3……,以ext3为例,。
在命令行下执行:

  1. mkfs.ext3 /dev/sda1

复制代码

3.4 拷贝root根目录下的所有文件到U盘,过程:mount设备,复制文件,以一个U盘的为例,在tmp目录下创建一个目录(本例是“root”)、mount U盘到这个目录、拷贝/tmp/root目录里的所有文件到U盘。
“#”后面为注释,粘贴命令的话,不要复制粘贴。

  1. mount /dev/sda1 /mnt #挂载U盘第一个分区到/mnt
  2. mkdir /tmp/root   #在/tmp目录下创建名叫root的一个目录
  3. mount -o bind / /tmp/root    #挂载并同步系统根目录“/”到 /tmp/root
  4. cp /tmp/root/* /mnt -a  #拷贝/tmp/root下所有文件到 “/mnt”,这个其实就是你的U盘了
  5. umount /tmp/root    卸载 /tmp/root#

复制代码

修改/mnt/etc/config/banner,添加一点点标识,方便你以后知道是不是从U盘启动了。(此步非必须)
vi /mnt/etc/config/banner
我添加了一行: Boot from USB ROOT
注意:还有一个是/etc/config/banner,这个是系统默认的,在flash闪存上的。

4.3 修改/etc/config/fstab。以插了一个U盘的为例:
修改前(openwrt默认设置):

config mount
        option target        /home
        option device        /dev/sda1
        option fstype        ext3
        option options        rw,sync
        option enabled        0

config swap
        option device        /dev/sda2
        option enabled        0

修改后的(注意红色部分修改的和新增的一行):

config mount
#        option target        /home 这一行要不要无所谓了,我一般是去掉或者在前面加一个“#”
        option device        /dev/sda1
        option fstype        ext3
        option options        rw,sync
        option enabled        1
   option is_rootfs   1
config swap
        option device        /dev/sda2
        option enabled        0

5、我怎么知道我已经运行在USB下了呢?
  方法一:修改u盘上etc/config/banner文件,添加标识

BusyBox v1.16.1 (2010-04-17 04:55:14 EDT) built-in shell (ash)
Enter 'help' for a list of built-in commands.

  _______                     ________        __
|       |.-----.-----.-----.|  |  |  |.----.|  |_
|   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
|_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
KAMIKAZE (bleeding edge, r20950) ------------------
  * 10 oz Vodka       Shake well with ice and strain
  * 10 oz Triple sec  mixture into 10 shot glasses.
  * 10 oz lime juice  Salute!

       Boot from USB root!
---------------------------------------------------

  方法二:用df -h命令查看挂载点,查看 mini_fo:/overlay是否为 '/" 根目录。

Filesystem                Size      Used Available Use% Mounted on
/dev/root                 6.8M      5.6M      1.2M  82% /rom
tmpfs                    30.3M    216.0K     30.1M   1% /tmp
tmpfs                   512.0K         0    512.0K   0% /dev
/dev/sdb1               118.6M     32.3M     80.2M  29% /overlay
mini_fo:/overlay          6.8M      5.6M      1.2M  82% /
/dev/sda1                36.7G     29.9G      4.9G  86% /mnt

(我这台设备上装了2个USB存储设备)

2010年10月2日补充说明:
如果按教程操作无效,建议直接编译一个自己的openwrt固件,编译时把上述的几个添加进去。

补:openwrt的许多设置都在/etc/config/里,很多设置都是option enable 0/1,改一下0、1就打开关闭某项功能了。

抱歉!评论已关闭.