无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 26081|回复: 51

UEFI中直接访问NTFS和iso文件系统的驱动

    [复制链接]
发表于 2013-2-8 23:19:24 | 显示全部楼层 |阅读模式
玩过uefi启动的应该知道,uefi和dos一样,只能直接访问FAT文件系统(FAT12/16/32),而不能直接从其他文件系统中读取文件。
近日从rEFInd和clover EFI bootloader中发现两个文件系统驱动,能让efi shell下读取NTFS分区和光盘iso文件系统(类似于dos的ntfs驱动和光盘驱动),并且直接可以从NTFS和光盘上直接启动UEFI支持的操作系统了。
附件中的ntfs.efi和iso9660_x64.efi分别是这两个驱动(x64平台的,x86平台的也有但没什么意义)。在EFI shell中cd到相关文件的目录(这两个文件本身还需要存储在FAT分区中,也可以放在一个FAT分区的u盘上),然后执行命令
  1. load ntfs.efi
  2. map -r
复制代码
第一条命令是加载驱动,第二条命令是重新分配盘符(fs0: fs1等等)。然后就能访问NTFS分区了(这个ntfs分区是只读的)。
iso驱动也类似用load加载然后map -r重新分配盘符,就能读取光盘上的文件了(不支持UDF光盘

以上命令可以放在startup.nsh脚本中自动执行,其作用类似于autoexec.bat

测试了几个用途:
一、直接从没有任何启动信息的普通数据光盘启动win7 win8的pe。直接制作了一张简单的数据光盘,包含了uefi版winpe,根目录下放了bootmgfw.efi文件。此光盘没有任何启动信息,直接加载iso驱动插入光盘map -r,就能读取光盘内容了,然后执行光盘上的bootmgfw.efi就能启动光盘上的winpe。
二、单ntfs分区的硬盘上启动win7 win8。一个硬盘只有ntfs分区,没有FAT分区,更没有什么efi系统分区保留分区等,启动菜单也在ntfs分区上。我从u盘加载ntfs驱动后,然后就能执行ntfs分区中的bootmgfw.efi启动win7/win8了
三、uefi shell访问ntfs格式u盘和移动硬盘。加载ntfs驱动,然后map -r后uefi shell就给ntfs的usb分区分配盘符了。使用感觉和dos类似。

[ 本帖最后由 fujianabc 于 2013-2-8 23:26 编辑 ]

efi.rar

52.6 KB, 下载次数: 614, 下载积分: 无忧币 -2

评分

参与人数 2无忧币 +15 收起 理由
zhczf + 5 赞一个!
jneny + 10

查看全部评分

发表于 2014-8-6 11:59:17 | 显示全部楼层
jneny 发表于 2013-2-16 23:37
在efi上使用MBR那就成使用EFI 的CSM 兼容模式了吧 ,感觉像是64位系统使用32位的程序。所以选择了 uefi onl ...

挖个坟,偶然看见就回一下吧

CSM和loader没半毛钱关系,EFI的loader同样可以用回原来那套MBR+PBR的启动流程。
CSM存在的意义是为了提供传统BIOS的API,即所谓的内部中断。
win7 无论是32bit还是64bit都只能在有CSM的机器上启动,否则蓝屏,因为启动的时候用到了int 10h中断。
只有win8才能在无CSM的机器上启动

评分

参与人数 1无忧币 +3 收起 理由
jneny + 3

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2013-2-8 23:24:03 | 显示全部楼层
rEFInd和clover EFI bootloader还有ext2 ext3 reiserfs hfs等分区格式的uefi驱动,用得着的人可能不多,加载方法完全一样,就贴在这里了。
可惜找不到UDF驱动(不过制作光盘时配合参数可以做iso/udf双格式盘)
http://bbs.znpc.net/forum.php?mod=viewthread&tid=6742

[ 本帖最后由 fujianabc 于 2013-2-8 23:51 编辑 ]

efidriver.rar

30.6 KB, 下载次数: 303, 下载积分: 无忧币 -2

回复

使用道具 举报

发表于 2013-2-8 23:41:31 | 显示全部楼层
这篇文章很有指导意义啊,很多搞启动的老大又有得忙了。
回复

使用道具 举报

发表于 2013-2-9 00:42:01 | 显示全部楼层
确实能在EFI Shell中查看NTFS分区了。
Windows 8 x64 (2)-2013-02-09-00-39-15.png
回复

使用道具 举报

 楼主| 发表于 2013-2-9 01:28:31 | 显示全部楼层
原帖由 拿铁不加糖 于 2013-2-9 00:42 发表
确实能在EFI Shell中查看NTFS分区了。

还能直接从ntfs分区启动win7/win8的uefi版。
先用win8的bcdboot(win7也要用win8的bcdboot)在c:盘生成uefi启动文件夹
  1. bcdboot c:\windows /s c: /f uefi /l zh-cn
复制代码
然后在efi shell下cd到fs2:的EFI\Microsoft\Boot目录下执行bootmgfw.efi即可启动。感觉和dos下执行win启动win3.x/win98差不多了

[ 本帖最后由 fujianabc 于 2013-2-9 01:30 编辑 ]
回复

使用道具 举报

发表于 2013-2-9 01:34:54 | 显示全部楼层

回复 #5 fujianabc 的帖子

这个我已经实践过了。不过象征意义大于实际意义。每次启动计算机都得手动选择启动文件。
回复

使用道具 举报

 楼主| 发表于 2013-2-9 01:58:01 | 显示全部楼层
原帖由 拿铁不加糖 于 2013-2-9 01:34 发表
这个我已经实践过了。不过象征意义大于实际意义。每次启动计算机都得手动选择启动文件。

提供一个思路和途径而已。

微软原版光盘EFI启动里面的那个eisys.bin实际就是一个1.44M的软盘镜像,可以用winimage修改的,里面只有bootx64.efi一个自动执行文件(就是bootmgfw.efi的某个版本)。
实际以后想玩efi多启动光盘可以在这个软盘镜像里做文章,把efi shell换掉bootx64.efi,然后软盘镜像里编写一个startup.nsh菜单,再配上几个驱动,基本可以实现类似于dos下多重启动菜单的功能了。
也可以再startup.nsh里面加载驱动后自动执行一个图形界面的uefi启动程序,比如rEFInd就很漂亮。

评分

参与人数 3无忧币 +11 收起 理由
jimodexue + 5 这回可有的玩了
yjd + 5 很给力!
拿铁不加糖 + 1 精品文章

查看全部评分

回复

使用道具 举报

发表于 2013-2-9 09:32:55 | 显示全部楼层
一、直接从没有任何启动信息的普通数据光盘启动win7 win8的pe。直接制作了一张简单的数据光盘,包含了uefi版winpe,根目录下放了bootmgfw.efi文件。此光盘没有任何启动信息,直接加载iso驱动插入光盘map -r,就能读取光盘内容了,然后执行光盘上的bootmgfw.efi就能启动光盘上的winpe。


不知道这样对光盘格式是否有要求,非UDF格式,是否OK?

[ 本帖最后由 红毛樱木 于 2013-2-9 14:59 编辑 ]
回复

使用道具 举报

发表于 2013-2-9 10:39:48 | 显示全部楼层

回复 #8 红毛樱木 的帖子

老大这个不用问吧,本身就是支持读取光盘ISO。

[ 本帖最后由 D@peng 于 2013-2-9 11:05 编辑 ]
回复

使用道具 举报

发表于 2013-2-9 12:27:40 | 显示全部楼层
强烈支持新技术PE啊。大家好好研究,我用现成的。
回复

使用道具 举报

发表于 2013-2-9 12:40:25 | 显示全部楼层
期待老大们纷纷无私奉献新技术PE   偶是伸手党..... 哈哈
回复

使用道具 举报

发表于 2013-2-9 15:00:02 | 显示全部楼层

回复 #9 D@peng 的帖子

不好意思,我可能没说清楚。我意思是UDF之类的光盘格式类型
回复

使用道具 举报

 楼主| 发表于 2013-2-12 15:19:57 | 显示全部楼层
原帖由 红毛樱木 于 2013-2-9 09:32 发表
一、直接从没有任何启动信息的普通数据光盘启动win7 win8的pe。直接制作了一张简单的数据光盘,包含了uefi版winpe,根目录下放了bootmgfw.efi文件。此光盘没有任何启动信息,直接加载iso驱动插入光盘map -r,就 ...

看二楼的说明,udf驱动现在没有,只有iso格式的才行。
但是二楼的链接里面给了怎么制作udf/iso双格式光盘的方法,可以正常用于nt 6.x系统盘
回复

使用道具 举报

发表于 2013-2-12 22:41:13 | 显示全部楼层
想问问4楼efi是什么版本了?记得efi 只有ls命令没dir命令的
回复

使用道具 举报

 楼主| 发表于 2013-2-13 01:16:22 | 显示全部楼层
原帖由 you_xi 于 2013-2-12 22:41 发表
想问问4楼efi是什么版本了?记得efi 只有ls命令没dir命令的

EFI shell中dir和ls通用的,不管什么版本。

并且efi shell比起linux更像dos:有盘符,用反斜杠表示路径
回复

使用道具 举报

发表于 2013-2-13 10:43:27 | 显示全部楼层

回复 #15 fujianabc 的帖子

F大每次总能带来好东西,哈哈
ISO根目录下的那个bootmgr.efi难道是摆设?
回复

使用道具 举报

发表于 2013-2-13 11:06:33 | 显示全部楼层
值得好好研究一下。。。。。。。。。
回复

使用道具 举报

 楼主| 发表于 2013-2-14 16:11:00 | 显示全部楼层
原帖由 一只猴子 于 2013-2-13 10:43 发表
F大每次总能带来好东西,哈哈
ISO根目录下的那个bootmgr.efi难道是摆设?

我也不清楚bootmgr.efi到底是干什么用的,启动都用bootmgfw.efi,删了bootmgr.efi完全没影响。
回复

使用道具 举报

发表于 2013-2-16 15:22:44 | 显示全部楼层

回复 #7 fujianabc 的帖子

有没有关于startup.nsh的语法说明文档?能来段一个菜单选择的示例最好了。

顺便 分享下:
最近迷信uefi比bios启动速度更快的说法,所以做了以下操作。
用diskgen 3.8的破解版可以无损切换mbr到gpt分区,然后再划分一个efi分区。再使用带原版win7光盘(带efi启动的)到安装界面按shit+f10 打开窗口使用bcdboot /c:\windows,使efi分区产生引导文件。这样就能启动磁盘上的win7 x64系统了。
回复

使用道具 举报

 楼主| 发表于 2013-2-16 16:20:16 | 显示全部楼层
原帖由 jneny 于 2013-2-16 15:22 发表
有没有关于startup.nsh的语法说明文档?能来段一个菜单选择的示例最好了。

顺便 分享下:
最近迷信uefi比bios启动速度更快的说法,所以做了以下操作。
用diskgen 3.8的破解版可以无损切换mbr到gpt分区,然 ...

在最新的ivy bridge平台上的确efi比bios启动快,但是老一点的平台上,efi并没有启动速度优势。
另外efi启动并没必要转成gpt,用bcdboot生成启动菜单,mbr硬盘一样能用efi启动
回复

使用道具 举报

发表于 2013-2-16 19:31:42 | 显示全部楼层
大家好好研究,我用现成的,呵呵。
回复

使用道具 举报

发表于 2013-2-16 23:37:10 | 显示全部楼层

回复 #20 fujianabc 的帖子

在efi上使用MBR那就成使用EFI 的CSM 兼容模式了吧 ,感觉像是64位系统使用32位的程序。所以选择了 uefi only选项。

vmware 中的 efi shell 能提取出来吗? 那个版本好像比intel的更新

我还是想多了解下startup.nsh的写法,外文的论坛看不懂。。

点评

挖个坟,偶然看见就回一下吧 CSM和loader没半毛钱关系,EFI的loader同样可以用回原来那套MBR+PBR的启动流程。 CSM存在的意义是为了提供传统BIOS的API,即所谓的内部中断。 win7 无论是32bit还是64bit都只能在有  详情 回复 发表于 2014-8-6 11:59
回复

使用道具 举报

 楼主| 发表于 2013-2-17 02:20:57 | 显示全部楼层
原帖由 jneny 于 2013-2-16 23:37 发表
在efi上使用MBR那就成使用EFI 的CSM 兼容模式了吧 ,感觉像是64位系统使用32位的程序。所以选择了 uefi only选项。

vmware 中的 efi shell 能提取出来吗? 那个版本好像比intel的更新

我还是想多了解下st ...

和CSM无关,只是广大厂家的宣传有些误导了,让广大群众认为EFI只能从gpt硬盘启动。EFI启动完全可以用MBR分区启动而不用GPT的,硬盘、u盘乃至软盘都不用GPT。win7/win8 在mbr硬盘上用uefi启动很容易,见下贴第四点
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=206863

uefi shell一直在更新,具体项目网页
http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=UEFI_Shell

至于startup.nsh,我也没用过,只是看到intel网站上有些文档,和autoexec.bat差不多。
感觉startup.nsh可以单独开贴研究了,放dos脚本哪个版块比较合适。。。

点评

科普学习中,很好的技术讨论帖。  详情 回复 发表于 2013-10-2 14:08
回复

使用道具 举报

发表于 2013-2-19 12:33:04 | 显示全部楼层
fujianabc老大,有几个问题请教:
1,既然uefi只支持fat12/16/32分区,那windows光盘上的efi怎么能识别?
2,是不是u盘上存在efi文件夹,将efi文件放到这个目录或者根目录就可以在启动时扫描到?
3,既然引导项目存储在主板上,怎么删除或者编辑启动项目?
希望老大能开导一下小菜!!!

[ 本帖最后由 my9823 于 2013-2-19 12:38 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2013-2-19 15:22:08 | 显示全部楼层
原帖由 my9823 于 2013-2-19 12:33 发表
fujianabc老大,有几个问题请教:
1,既然uefi只支持fat12/16/32分区,那windows光盘上的efi怎么能识别?
2,是不是u盘上存在efi文件夹,将efi文件放到这个目录或者根目录就可以在启动时扫描到?
3,既然引导 ...

1、支持EFI启动的光盘,是用传统的软盘模拟方式启动的。EFI相关文件存放在那个FAT12的虚拟软盘中
2、 默认是只扫描\efi\boot\bootx64.efi文件,但有些主板还会扫描根目录的efi文件
3、存在主板的nvram上的,主板都提供编辑、添加、删除启动项的功能的
回复

使用道具 举报

发表于 2013-2-19 17:59:02 | 显示全部楼层
谢谢老大!archlinux的wiki上有一篇关于uefi的文章,可惜鸟语不好,所以找老大问下!
回复

使用道具 举报

发表于 2013-2-19 18:37:55 | 显示全部楼层
For GPT partitioned disks
Two choices:
Using GNU Parted/GParted: Create a FAT32 partition. Set "boot" flag on for that partition.
Using GPT fdisk (aka gdisk): Create a partition with gdisk type code "EF00". Then format that partition as FAT32 using mkfs.vfat -F32 /dev/<THAT_PARTITION>
Note: Setting "boot" flag in parted in a MBR partition marks that partition as active, while the same "boot" flag in a GPT partition marks that partition as "UEFI System Partition".
Warning: Do not use util-linux fdisk, cfdisk or sfdisk to change the type codes in a GPT disk. Similarly do not use gptfdisk gdisk, cgdisk or sgdisk on a MBR disk, it will be automatically converted to GPT (no data loss will occur, but the system will fail to boot).
For MBR partitioned disks
Two choices:
Using GNU Parted/GParted: Create FAT32 partition. Change the type code of that partition to 0xEF using fdisk, cfdisk or sfdisk.
Using fdisk: Create a partition with partition type 0xEF and format it as FAT32 using mkfs.vfat -F32 /dev/<THAT_PARTITION>
Note: It is recommended to use always GPT for UEFI boot as some UEFI firmwares do not allow UEFI-MBR boot.
老大,这段什么意思,这个fat32分区不是普通的fat分区吗,还有分区类型区别吗?下边的图片式在bootice中确实看到这个类型的efi分区,upan不用这么格式化吧?

[ 本帖最后由 my9823 于 2013-2-19 19:00 编辑 ]
无标题.jpg
回复

使用道具 举报

发表于 2013-2-19 18:41:34 | 显示全部楼层
试试,好像意义不大。
回复

使用道具 举报

发表于 2013-2-19 18:43:24 | 显示全部楼层
怎么没有意义,话说硬件厂商说了算,我们想用就得低头,毕竟在人家屋檐下!

[ 本帖最后由 my9823 于 2013-2-19 19:16 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2013-2-20 06:48:14 | 显示全部楼层
原帖由 my9823 于 2013-2-19 18:37 发表
For GPT partitioned disks
Two choices:
Using GNU Parted/GParted: Create a FAT32 partition. Set "boot" flag on for that partition.
Using GPT fdisk (aka gdisk): Create a partition with gdisk typ ...

你那个估计是给MBR-GPT混合分区表用的,强烈不推荐用混合分区表,大部分程序包括windows本身都太兼容混合分区表。
用普通的mbr+FAT32格式化u盘足够用于EFI启动了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-3-28 21:11

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表