无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: liuzhaoyzz
打印 上一主题 下一主题

[求助] 请问下有没有命令行工具添加UEFI引导序列?

    [复制链接]
跳转到指定楼层
1#
发表于 2020-2-1 09:00:31 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 liuzhaoyzz 于 2020-4-6 07:15 编辑

请问下有没有命令行工具添加UEFI引导序列?
就是想要实现bootice里面的添加UEFI引导序列的功能。如图所示。bootice添加UEFI引导序列似乎不支持命令行吧?
linux下面似乎有个efibootmgr命令,这个命令有没有人移植到windows下面?
GitHub - rhboot/efibootmgr: efibootmgr development tree https://github.com/rhboot/efibootmgr

2020.4.5日pauly大神编译了一个booticex64_1.4版本已经支持了。
详见27楼http://bbs.wuyou.net/forum.php?mod=redirect&goto=findpost&ptid=418717&pid=4026764&fromuid=298214


uefi引导序列.png (106.66 KB, 下载次数: 254)

uefi引导序列.png
2#
 楼主| 发表于 2020-2-2 07:09:12 来自手机 | 显示全部楼层
fjzjk 发表于 2020-2-2 00:06
win一般就是直接bcdboot了


     可是bcdboot只能写入windows引导到UEFI-ROM中,其他的efi启动项不行啊,比如写入grub2x64.efi就不行,但bootice就可以,只是不支持命令行。   
回复

使用道具 举报

3#
 楼主| 发表于 2020-2-4 17:56:10 来自手机 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-2-5 06:51 编辑
窄口牛 发表于 2020-2-4 17:26
efi shell

win下bcdedit


  我想要的是windows(或PE)平台下添加修改UEFI引导序列的命令行工具,不是efi shell下的,也不是linux下的啊。 bcdboot或者bcdedit只能添加windows的引导,不能添加其他UEFI引导,比如grub2x64.efi。     
回复

使用道具 举报

4#
 楼主| 发表于 2020-2-5 07:51:06 来自手机 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-2-5 07:53 编辑
窄口牛 发表于 2020-2-4 19:31
可以呀,你把grub2的名字改成win的,放到微软的默认路径,这样bios就会自动添加了,命令执行这些很简单吧, ...


  把grub2x64.efi改名成为bootx64.efi放在efi\boot\不是我想要的结果,我想要的是新增一个UEFI引导序列与之并列,不要覆盖系统的,绕路解决的思路不是我想要的。
EasyUEFI命令行介绍太少,我没有深入研究,他太大了,似乎还要破解。
希望有大神能够写个基于windows API的小程序实现,或者有已经实现的小程序推荐下也好。   
回复

使用道具 举报

5#
 楼主| 发表于 2020-2-5 11:44:33 来自手机 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-2-5 11:50 编辑
匿名者 发表于 2020-2-5 08:51
https://github.com/ju-funk/efibootwin

这个应该大概能满足你的要求。会c++的话自己再改一改应该就可以 ...


  谢谢分享,晚点我研究下。(手机回复)      
回复

使用道具 举报

6#
 楼主| 发表于 2020-2-5 16:14:50 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-2-5 16:33 编辑
匿名者 发表于 2020-2-5 08:51
https://github.com/ju-funk/efibootwin

这个应该大概能满足你的要求。会c++的话自己再改一改应该就可以 ...

水平不够啊。参数里面我没看到怎么添加个启动项的readme啊。你能帮忙该写下吗?请帮忙做个静态编译。



回复

使用道具 举报

7#
 楼主| 发表于 2020-3-11 16:50:32 | 显示全部楼层
       再次顶下帖子,希望有大神们能够出手啊!
@匿名
@wintoflash
@pauly
@chenall
@yaya2007777
@......

回复

使用道具 举报

8#
 楼主| 发表于 2020-3-11 19:56:51 来自手机 | 显示全部楼层
wintoflash 发表于 2020-3-11 17:04
艾特我没用。我不会。
求人不如求己。

      我只能用VC写个Hello world。。。  
回复

使用道具 举报

9#
 楼主| 发表于 2020-3-14 13:11:53 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-3-14 13:37 编辑
匿名者 发表于 2020-2-5 08:51
https://github.com/ju-funk/efibootwin

这个应该大概能满足你的要求。会c++的话自己再改一改应该就可以 ...

  他这个工程是VC2015的项目,我电脑现有的只有VC2010绿色便携版,尝试用VC2010打开并编译,提示VisualStudioVersion什么的错误,按照网上的办法改了下VisualStudioVersion也不行。

网上搜索了下VC2015精简版https://pan.baidu.com/s/1eStFQ8M#rwzw 密码:rwzw,999MB,下载之后又提示没有windows SDK,又下载适用于当前系统的windows SDK,我的操作系统是WIN10LTSC.17763,814MB,Windows SDK 存档 - Windows 应用开发 https://developer.microsoft.com/zh-cn/windows/downloads/sdk-archive/
下载这个之后,又按照网上的办法,修改文件编码为Unicode-1200,添加了库文件,
#include <memory>
#pragma comment (lib,"Advapi32.lib")
项目属性→常规→目标平台工具集改成VS2015
预编译头不使用。
改了下变量unsigned int为int,消除warning。
折腾了好久,终于编译通过了他的项目。

但是添加UEFI序列的功能还是没搞懂怎么改。


我把改过的源代码传上来,静态编译后的efibootwin.exe,169KB,也传上来。

E:\efibootwin-master-liuzhaoyzz\Release>E:\efibootwin-master-liuzhaoyzz\Release\efibootwin.exe /?
efibootwin create by J. Funk, Ver 0.8.5


The syntax of efibootwin [command command]:
The commands can be begin with '-' or '/'
The commands are:


   ?            Help
   n            Get the BootNext Value
   N  idx       Set the BootNext Value with idx (hex)
   e  Name      Set the BootNext Value over the Name
   E            Remove the BootNext Value
   c            Get the BootCurrent Value
   o            Get the BootOrder
   O  x,y,zzzz  Set the BootOrder (hex)
   r            Get the BootOrder (Name)
   R            Remove the BootOrder
   v            Get the DriverOrder
   V  x,y,zzzz  Set the DriverOrder (hex)
   a            Get the DriverOrder (Name)
   A            Remove the DriverOrder
   t            Get the Timeout Value
   T  idx       Set the Timeout Value with idx (hex)
   I            Remove the Timeout Value
   b            List the BootXXXX
   B            List all the BootXXXX (have wait...)
   d            List the DriverXXXX
   D            List all the DriverXXXX (have wait...)
   f  idx       Toggle the Active-Flag of Boot idx (hex)
   F  Name      Toggle the Active-Flag with Boot decription
   d  idx  Des  Change the description of Boot idx (hex)
   D  Name Des  Change the description (Des) with Boot decription (Name)


Without commands you get all the available Uefi-variables

请高手研究改进下。

https://www.lanzous.com/b00nekg8h
密码:9qa4

      



efibootwin.rar

75.41 KB, 下载次数: 52, 下载积分: 无忧币 -2

点评

试了一下,这个程序目前能执行以下操作: 1. 设置 BootCurrent 2. 设置 BootNext 3. 设置 BootOrder 4. 设置 Timeout 5. 设置 BootXXXX 的属性 6. 设置 BootXXXX 的名称 你还需要自己实现以下功能: 1. 新建  详情 回复 发表于 2020-3-26 11:05
回复

使用道具 举报

10#
 楼主| 发表于 2020-3-14 20:09:06 来自手机 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-3-17 11:18 编辑

        看你的回帖,懂得c语言啊,触类旁通,差不多吧。
你分享的第三个帖子520行,似乎就是添加UEFI启动序列的,我看不懂,shell下的bcfg命令源码
https://github.com/tianocore/edk2/blob/master/ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib.c
回复

使用道具 举报

11#
 楼主| 发表于 2020-3-26 11:11:44 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-3-26 11:15 编辑
wintoflash 发表于 2020-3-26 11:05
试了一下,这个程序目前能执行以下操作:
1. 设置 BootCurrent
2. 设置 BootNext

       你说的对,目前就是缺少add的功能,增加这部分功能代码我看不懂,也是缺乏耐心。

我联系了pauly,他最近工作很忙,他说抽空在bootice已有的代码上修改个命令行测试版本,发给我,已有的代码,从GUI改成CUI,对于pauly来说,难度应该不大,这些主要的函数他之前写好了的,他是需要时间精力和兴趣。

点评

难度确实不大,理解完整个结构体,读入分区的起扇区和总扇区数,分区GUID,再加点路径字符串和显示字符串和其它一些参数写进去就可以了,从零开始写代码的话,最多两天时间,如果有写过的代码改造的话,最多几个小时就搞定  详情 回复 发表于 2020-12-16 20:58
回复

使用道具 举报

12#
 楼主| 发表于 2020-4-6 07:13:26 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-4-6 21:35 编辑

bootice添加uefi引导序列命令行
BOOTICEx64.exe /uefi /add /inspos=1 /file="I:\EFI\boot\grub2x64.efi" /title="\EFI\boot\grub2x64.efi"
inspos, insert position,插入位置,0-最大项;非法时放最后。
Bootice引导序列里面的顺序可能和实际启动的时候有差别,因为有些引导项目是UEFI固件提供的,这些引导项windows是不能读取的。
/file=参数里面,盘符需要先挂载。
该命令多次运行会多次添加,如果不想重复添加,可以先删除原有的引导序列。

bootice删除uefi引导序列命令行
BOOTICEx64.exe /uefi /delete /file="I:\EFI\boot\grub2x64.efi"
/file=参数里面,盘符需要先挂载。

需要说明的是,BOOTICEx86版本,只要能够正常运行,可以用来在64位和32位windows中添加UEFI序列,BOOTICEx64只能用于64位windows中。
32位的UEFI固件很少,似乎只有早期的WIN8平板电脑才有32位的UEFI固件。

注意由于bootice在2016年的时候丢失了一部分源代码,BOOTICEx64_1.4版本部分功能是不完整的,比如主引导记录、分区管理等,暂时无法完全取代1.3.4版本!等pauly大神有空的时候再完善吧。


bootice增加删除uefi引导序列命令行.rar

773.71 KB, 下载次数: 297, 下载积分: 无忧币 -2

点评

学习了,谢谢  详情 回复 发表于 2022-1-9 17:05
不知道bootice能不能添加“下一次启动该项”的功能。。  详情 回复 发表于 2020-7-3 16:16
回复

使用道具 举报

13#
 楼主| 发表于 2020-7-3 17:20:55 | 显示全部楼层
悠然安然 发表于 2020-6-4 11:16
各位大侠,请教一个问题
我用U盘做了WTG+PE,在PE的菜单上有“title [7] 启动 硬盘上的操作系统”这一项, ...

菜单没问题,但是只是用于BIOS启动,不能适用于UEFI。
回复

使用道具 举报

14#
 楼主| 发表于 2020-7-3 17:21:33 | 显示全部楼层
江南一根葱 发表于 2020-7-3 16:16
不知道bootice能不能添加“下一次启动该项”的功能。。

        当时我找pauly的时候,没有增加这个功能。如果他出手的话,是很简单的。问题是他很忙。

点评

一根葱不是发现bcdedit可以编辑uefi启动项吗。  详情 回复 发表于 2020-7-3 17:46
回复

使用道具 举报

15#
 楼主| 发表于 2021-12-24 20:42:49 | 显示全部楼层
Luojc1 发表于 2021-12-13 12:13
这个程序还有吗

自己下载附件!
回复

使用道具 举报

16#
 楼主| 发表于 2023-3-3 18:19:25 | 显示全部楼层
遨游的风 发表于 2023-2-28 14:59
有直接的命令吗?不依赖
bootice

没见过。
回复

使用道具 举报

17#
 楼主| 发表于 2023-3-3 21:28:12 | 显示全部楼层
遨游的风 发表于 2023-3-3 21:02
bootice现在有添加“下一次启动该项”的功能的命令吗?目前就在bootice和diskginus上见过这个功能,但 ...

我没有用过这个命令参数。
回复

使用道具 举报

18#
 楼主| 发表于 2023-7-12 21:49:59 | 显示全部楼层
回复

使用道具 举报

19#
 楼主| 发表于 2023-7-12 21:50:32 | 显示全部楼层
Boringman 发表于 2023-7-5 14:28
从github上下载的原来不是原作者发布的,不支持这个cmd命令。注册账号评论下。
话说有人知道Pauly大神除 ...

他已经不更新bootice了。兴趣使然吧。
回复

使用道具 举报

20#
 楼主| 发表于 2023-8-18 16:15:04 | 显示全部楼层
pda8888 发表于 2023-8-16 21:35
其实,用bcdedit 增加 UEFI 启动序列,我也折腾了很久,最后翻到一个不知名的墙外网站,最终找到了答案:
...

能用这个添加grub2x64.efi的NVROM引导项吗?怕是不行吧?
你这个可能只能适用于微软的bootmgfw.efi建立NVROM引导项。

点评

当然行,群友前几年就试过了  详情 回复 发表于 2023-8-19 21:05
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-10 05:15

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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