前言:最近面试无果,就在宿舍看那本《30天自制操作系统》,里面使用的系统文件格式是img,要在真机上运行,就需要使用U盘进行启动,因为现在都没有软盘。而网上很多都是用软件写入U盘的。反正我查过的都是一次写入,下次要覆盖使用最新编译的还是要用软件写入。所以就想用一个一劳永逸的办法,只要把IMG文件复制到U盘即可启动。并且每次新的编译后IMG只要覆盖进U盘即可。比较方便。

一、准备几个软件

  硬件:准备一个2G以上的U盘

  软件:1.grubinst 用来给U盘写入引导记录

2.grub4dos-0.4.4 用来制作多重引导菜单

3.各种操作系统

二、制作grubinst过程

  1.解压grubinst并运行grubinst_gui.exe选择对应的U盘hd1.

  2.分区列表点击刷新,选择整个磁盘MBR

  3.注意,点击刷新后可能会出现此提示,无需理会,点击确定即可

  4. 若:如下图: 下拉列表中没有MBR字符,则此U盘没有MBR分区,无法做启动盘.

    若:如下图:下拉中有MBR字符,则此U盘可以做启动盘.

  5.点击“安装”,如果成功会出现控制台,上面写着

The MBR/BS has been successfully installed

Press <ENTER> to continue …

意思是说主引导记录写入,按回车继续。这一步只是写入U盘引导记录。

三、把grub4dos-0.4.4解压后找到核心文件grldr和grub.exe和menu.lst,并复制到U盘的根目录中。

四、下载所有需要的操作系统,我这里下载了BT3,CDlinux,Beini还有《30天自制操作系统》里面的haribote.img作为例子。

  1.解压Bt3,CDlinux,Beini到根目录,因为解压后会有一些目录是相同的名字,我们可以进行重命名。具体的重命名可以随意改。而img文件就直接放到根目录就可以了。

  2.处理后的目录如下

  3.现在最关键的是修改menu.lst文件,下面是我的配置文件

 default=0
timeout 20 default /default title 1 BackTrack3
find --set-root /bootbt3/vmlinuz
kernel /bootbt3/vmlinuz root=/dev/ram0 ramdisk_size=6666 autoexec=kdm vga=791
initrd /bootbt3/initrd.gz title 2 cdlinux
find --set-root /CDlinux/bzImage
kernel /CDlinux/bzImage quiet CDL_LANG=zh_CN.UTF-8
initrd /CDlinux/initrd title 3 beini
find --set-root /bootbeini/bzImage
kernel /bootbeini/bzImage quiet max_loop=255 tce=sdb1 waitusb=6
initrd /bootbeini/tinycore.gz title 4 hello
map --mem /hello.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)
map --floppies=1
boot title 5 winpe
find --set-root /ntldr
chainloader /ntldr

上面有些参数和设置我是不懂的,不过那些目录路径还是很容易看懂和修改的。

因各人的硬件设置不尽相同,如果检测时发现 beini不能启动或启动后不正常,请更改“sdb1”参数,即 U盘在 linux系统下的名称。常用的有 sda1,sdb4等,具体可在启动 bt3或 cdlinux系统后,在其中查看具体显示名称,更改即可。

  4.运行结果,在真机上是可以运行的。下面这个图是我在虚拟机中截的。

五、vm虚拟机使用U盘启动

1.一般创建虚拟机的步骤都懂的,这里就不介绍了。

2.在创建完虚拟机后,选择虚拟机设置

3.下一步,选择“Use a physical disk(for advanced users)”然后Next。

注意如果没有出现所需要的U盘选项,那大概是虚拟机没有识别出来,只是重插U盘。或者重新启动虚拟机软件。有时候是因为U盘接口控制没有选上,只要选上就可以了

4.选择PhysicalDrive1,这里的选项将取决于你计算机所有的物理硬盘。然后下一步就会出现下面这个磁盘信息。

嗯,3.7G对了,就是这个了。然后就完成了。

5.虚拟机中设置BIOS(加电自检是按下F2进入),修改Boot启动项。

  我的U盘是SCSI Hard Drive(0:1)的。一开始默认是(0:0)的只是我总是启动不了,就修改成(0:1)了不知道有没有关系,就在这里说明一下。

让Hard Drive为第一启动项,就可以了。

  到这里就可以实现动态增加操作系统的U盘系统了。如果有合适的系统就可以复制到该U盘里,然后修改menu.lst文件就可以了,不用每次都用软件写入iso文件。

六、资料下载

  用到的两个grub软件和我参考的一个pdf文件 http://files.cnblogs.com/wunaozai/grub.zip

  本文连接 http://www.cnblogs.com/wunaozai/p/3854875.html

可以动态增加系统的U盘启动器(基于grub)的更多相关文章

  1. 在Winform界面菜单中实现动态增加【最近使用的文件】菜单项

    在我们一些和文件处理打交道的系统中,我们往往需要记录下最近使用的文件,这样方便用户快速打开之前浏览或者编辑过的文件,这种在很多软件上很常见,本文主要介绍在Winform界面菜单中实现[最近使用的文件] ...

  2. OSGI(面向Java的动态模型系统)

    基本简介编辑 OSGI服务平台提供在多种网络设备上无需重启的动态改变构造的功能.为了最小化耦合度和促使这些耦合度可管理,OSGi技术提供一种面向服务的架构,它能使这些组件动态地发现对方.OSGi联 O ...

  3. Linux生成动态库系统

    Linux生成动态库系统 一个.说明 Linux下动态库文件的扩展名为 ".so"(Shared Object). 依照约定,全部动态库文件名称的形式是libname.so(可能在 ...

  4. OSGi 系列(一)之什么是 OSGi :Java 语言的动态模块系统

    OSGi 系列(一)之什么是 OSGi :Java 语言的动态模块系统 OSGi 的核心:模块化.动态.基于 OSGi 就可以模块化的开发 java 应用,模块化的部署 java 应用,还可以动态管理 ...

  5. OSGI 面向Java的动态模型系统

    OSGI (面向Java的动态模型系统) OSGi(Open Service Gateway Initiative)技术是Java动态化模块化系统的一系列规范.OSGi一方面指维护OSGi规范的OSG ...

  6. mac制作U盘启动器

    Infi-chu: http://www.cnblogs.com/Infi-chu/ 一.所需工具及必要条件: 1. 首先需要一个大于16GB U盘. 2.电脑系统版本应该大于10.11.X(因为之前 ...

  7. 【纯净版windows系统】U盘启动制作图文教程

    无废话,按照步骤来就可以. 1.一个大于4G的U盘(格式化)准备好U盘,请注意制作过程中对U盘有格式化操作,有用的东西请先备份 2.UltraISO(软碟通软件)下载安装百度“软碟通”,或者访问 ht ...

  8. Hyperledger Fabric 动态增加组织到网络中

    本文基于Hyperledger Fabric 1.4版本. 官方文档地址:传送门 动态添加一个组织到Fabric网络中也是一个比较重要的功能.官方文档写的已经很详细了,有能力的尽量还是看官方文档,本文 ...

  9. java 动态增加应用服务器,出现的消息队列的消费者提报错问题

    java 动态增加应用服务器,出现的消息队列的消费者提报错问题 在项目中,有这样的业务场景,在某一个时间段,客户流量瞬间增大,服务器瞬间很大,出现高并发问题.有一种解决方案就是脚本动态增加业务服务器, ...

随机推荐

  1. ZH奶酪:AngularJS判断checkbox/复选框是否选中并实时显示

    最近做了一个选择标签的功能,把一些标签展示给用户,用户选择自己喜欢的标签,就类似我们在购物网站看到的那种过滤标签似的: 简单的效果如图所示: 首先看一下html代码: <!DOCTYPE htm ...

  2. poj 3345 Bribing FIPA (树形背包dp | 输入坑)

    题目链接:  poj-3345  hdu-2415 题意 有n个国家,你要获取m个国家的支持,获取第i个国家的支持就要给cost[i]的价钱    其中有一些国家是老大和小弟的关系,也就是说,如果你获 ...

  3. PHP高级教程-高级过滤器

    PHP 高级过滤器 检测一个数字是否在一个范围内 以下实例使用了 filter_var() 函数来检测一个 INT 型的变量是否在 1 到 200 内: 实例 <?php $int = 122; ...

  4. php之快速入门学习-8(if-else)

    PHP If...Else 语句 条件语句用于根据不同条件执行不同动作. PHP 条件语句 当您编写代码时,您常常需要为不同的判断执行不同的动作.您可以在代码中使用条件语句来完成此任务. 在 PHP ...

  5. Log Sessions to Local Database

    Add Rules to Fiddler to create a new menu item as follows: // Log the currently selected sessions in ...

  6. Java动态加载属性文件.properties

    当我们使用如下语句加载.properties时: ClassLoader classLoader = this.getClass().getClassLoader(); Properties prop ...

  7. 用BeanUtilsDate类型值为空报错的解决方法

    除BeanUtils外还有一个名为PropertyUtils的工具类,它也提供copyProperties()方法,作用与BeanUtils的同名方法十分相似,主要的区别在于后者提供类型转换功能,即发 ...

  8. win10 关闭自动维护计划任务

    重命名 C:\Windows\System32\Tasks\Microsoft\Windows 下的Defrag

  9. winform网络编程之TcpClient类,TcpListener类和UdpClient类

    TcpClient类和TcpListener类 (1)TcpClient的用途: 用于在同步阻止模式下通过网络来链接.发送和接受流数据,在此情况下,必须有侦听此连接的请求,而侦听的任务就交给TcpLi ...

  10. 自己写的一个读取execl的帮助类

    目标:读取execl的第一个sheet,并传入不需要读取的表头的行数,返回该execl里所有数据的list 解析共有2种:1.DOM      2.SAX import java.io.File; i ...