无忧启动论坛

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

[原创] GRUB2增强型模块发布 GRUB2.02~beta3-for-windows(完美一键定制)

    [复制链接]
跳转到指定楼层
1#
发表于 2016-4-17 22:24:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 linglongx 于 2016-9-9 18:06 编辑

2016-9-9  
GRUB2.02~beta3制成BIOS  UEFI_X32 UEFI_X64三启光盘镱像一键生成,下载好附件解压后按照里面的说明文本生成即可.

https://pan.baidu.com/s/1bpwRaGJ#path=%252F%25E5%2588%2586%25E4%25BA%25AB%25E6%2596%2587%25E4%25BB%25B6%25E5%25A4%25B9%252FGRUB2



2016-4-25  
grub2制成 DELL slic  V2.3 引导.
希望大家测试并反馈一下。
用法:


把系统根目录下的 bootmgr 文件改名为 boormgr7 下载的文件解压后更名为 bootmgr 放到 系统盘根目录

如果不想直接引导进系统则将系统原来的 boormgr更改为其它名称 再自己用 GRUB2.02~beta3-for-windows 生成光盘版引导文件
把生成的 boot文件夹复制到系统盘覆盖系统盘的boot文件夹,注意看看系统盘中的Boot文件夹,如果第一个字母是大写B则改为小写的boot
之后编辑boot\grub\grub-bios.cfg 加入引导原boormgr改名后的启动项(也即启动系统)

g2ldr_slic.7z (105.13 KB, 下载次数: 405)
欢迎喜欢拆腾的人加入 GRUB2编译与定制QQ群 512143502



2016-4-19  
   这几天研究grub2,发现grub2中有个date命令很好用,可以在grub2控制台或配置文件用来修改系统日期与时间,在控制台中还能输出系统当前时间。

date命令的语法是: date 不带参数     在控制台输出系统当前日期与时间
                              date yyyy-mm-dd hh:mm:ss 修改系统当前日期与时间
                              date yyyy-mm-dd                修改系统当前日期
                              date hh:mm:ss                    修改系统当前时间




但是如果我要根据日期或时间来判断什么时间或日期开启什么功能或菜单项该怎么办呢,官方的date模块命令只能在控制台中输出系统当前日期与时间,

无法放到变量中用来作判断条件。默认grub2所有命令的返回值只有0与1,即成功与否。

如是下载了一份grub原码重新改写了一下date模块原码,加入了 h 参数 ,用来返回系统当前日期。在ubuntukylin-15.10-desktop编译通过;

编译出的date模块在grub-2.02-for-windows中使用通过



使用方法如下

1.用本模块替换grub2模块目录中的date模块。或是替换grub-2.02-for-windows中 i386-pc 中的date模块,再自行生成启动映像。
(不会的可以看 本论坛


極限驅動  的帖子
http://bbs.wuyou.net/forum.php?m ... 9411&extra=page%3D1

2012angelkyo   的帖子
http://bbs.wuyou.net/forum.php?m ... 5871&extra=page%3D1


2.控制台中测试

进入控制台普通模式(在启动菜单介面按 C 或是 Ctrl + C 进入控制台命令模式)

grub>date h
grub>vv=$?
grub>echo $vv
grub>20160417
grub>



(注:  vv 为声明的个人环境变量,用来保存 date h 命令返回的日期,名称可以自定义,不过不能与grub2的原字符与保留字相同;
         $ 为变量引用运算符,后面紧跟变量名即获得变量值; 而 $? 即为获得上一命令的返回值,那么 vv=$? 当然就是把 date h 的
          返回值保存到变量 VV 中;  echo $vv即是输出变量的值;这儿还要注意一点的就是  vv=$? 这儿的赋值表达式,grub2同很多
         编程语言的宽松赋值格式不同, vv=$? 中的 = 号两边一定不能有空格。)


2.菜单中应用

   在菜单中可以这样写


date h
hh=$?

if [ "${hh}" -gt "20160101" ]; then
   #判断系统时期是否大于 20160101
  echo "system is 20s stdudown"
#显示提示信息,注:这儿不能使用中文,使用中文乱码
   
   sleep -v 20
  #设置20秒延时并显示倒计时

   halt  
  #关闭计算机
fi

#这儿的 fi 不能漏了

#严格注意语法,不然会出错.
#  if [ "${hh}" -gt "20160101" ]; then 这一句是这么个格式的   if空格[空格"${hh}"空格-gt空格"20160101"空格];空格then  
#
#

还可以这样写

date h
hh=$?

if [ "${hh}" -gt "20160101" ]; then
   #判断系统时期是否大于 20160101
  echo "system is 20s stdudown"
#显示提示信息,注:这儿不能使用中文,使用中文乱码
   
   sleep -v 20
  #设置20秒延时并显示倒计时

   halt  
  #关闭计算机


else

menuentry "启动 MaxDos7强化版(各种DOS下的磁盘、BIOS及网克工具)" --class osx --class frugalware {
        insmod part_msdos
        insmod fat
        linux16 /boot/grub/memdisk img raw
        initrd16 /boot/grub/imgs/MAXDOS.IMG
}


fi


如果使用 if....else....fi   语句,记得 else 与 fi 之间一定要有命令内容,不然也会出错。



最后要注意的是不能在内嵌菜单中使用.加载内嵌菜单时很多模块没有加载使用,所以很多命令不能用,
这儿的内嵌菜单是指使用  grub-mkimage.exe -d i386-pc -C auto -c out\grub-bootstrap-bios-hd.cfg -p /boot/grub -o .\out\core.img -O i386-pc -v biosdisk part_msdos fat ntfs search_fs_file

命令生成启动映像时的 grub-bootstrap-bios-hd.cfg这儿的菜单




本增强模块暂时只加入了返回日期的功能,有时间再加上返回时间的功能

date.mod.7z (1.6 KB, 下载次数: 48)

附上 GRUB2 中脚本的条件判断运算符

其实同 Bosh 脚本语言差不多,不过因为 < 与 > 在grub2中属于保留字符,所以下面这些条目中带 < 或 > 的条目不能直接用
< 可以用  -lt        ,   <=    >    >= 可以按下面的相关运算符代替。

在菜单中还可以用转义符  /  来代替 ,如  <  可以使用  /< 代替
不过在控制台就无法使用转义符.





string1 == string2 [string1 与 string2 完全相同]

string1 != string2 [string1 与 string2 不完全相同]


string1 < string2 [string1 在字母顺序上小于 string2]
string1 <= string2 [string1 在字母顺序上小于 string2 或与 string2 完全相同]
string1 > string2 [string1 在字母顺序上大于 string2]
string1 >= string2 [string1 在字母顺序上大于 string2 或与 string2 完全相同]


integer1 -eq integer2 [integer1 等于 integer2]

integer1 -ge integer2 [integer1 大于或等于 integer2]

integer1 -gt integer2 [integer1 大于 integer2]

integer1 -le integer2 [integer1 小于或等于 integer2]

integer1 -lt integer2 [integer1 小于 integer2]

integer1 -ne integer2 [integer1 不等于 integer2]

prefixinteger1 -pgt prefixinteger2 [剔除非数字字符首部之后,integer1 大于
integer2]

prefixinteger1 -plt prefixinteger2 [剔除非数字字符首部之后,integer1 小于
integer2]

file1 -nt file2 [file1 的修改时间比 file2 新]

file1 -ot file2 [file1 的修改时间比 file2 旧]

-d file [file 存在并且是一个目录]

-e file [file 存在]

-f file [file 存在并且不是一个目录]

-s file [file 存在并且文件尺寸大于零]

-n string [string 的长度大于零]

string [string 的长度大于零]

-z string [string 的长度等于零]

( expression )  将 expression 视为一个整体(分组)

! expression  非(NOT)

expression1 -a expression2  与(AND)

expression1 -o expression2  或(OR)




编译自用的 GRUB2.02~beta3-for-windows  i386-pc   i386-efi  x86_64-efi 三个平台的模块都已加入本增强型date.mod模块。


要的朋友在这儿下:

http://pan.baidu.com/s/1bpwRaGJ



评分

参与人数 3无忧币 +15 收起 理由
boy6585948 + 5 很给力!
rgy + 5 很给力!
有阴也有阳 + 5

查看全部评分

推荐
发表于 2016-4-18 07:24:09 | 只看该作者
谢谢!学习一下了……
回复

使用道具 举报

3#
发表于 2016-4-18 10:21:45 | 只看该作者
帮顶一下!
回复

使用道具 举报

4#
发表于 2016-4-18 13:02:16 | 只看该作者
楼主能为grub2添加一个SLIC模块吗?
下面是grub4dos的SLIC补丁源码
https://github.com/liudongmiao/grub4dos-patch

点评

SLIC用途不大了吧?  详情 回复 发表于 2016-4-23 15:36
GRUB2 添加SLIC的工作快完成了  详情 回复 发表于 2016-4-23 01:12
这个难度有点大,等有时间弄好了再回你  发表于 2016-4-20 00:52
回复

使用道具 举报

5#
发表于 2016-4-19 17:28:01 | 只看该作者
本帖最后由 青青草 于 2016-4-19 17:29 编辑

if test -f ($device)/bootmgr -a -f ($device)/boot/bcd; then
好像不起作用!

点评

改成这样试试 if { test [ -f ($device)/bootmgr ] -a [ -f ($device)/boot/bcd ] }; then  发表于 2016-4-19 23:33
还有你的整个表达式 -a 左右两边最好用中括号括括起来,不起作用时可以化整为零在控制台中调试。比如先测试 device 变量中的内容,再测试 test -f ($device)/bootmgr 的返回是否正常.  发表于 2016-4-19 23:23
你的设备名好像不怎么对, 如果变量device是你通过其它方法得到的设置名变量,那么不应该放在()中,你可以在控制台用调试一下用 echo $device 输出device看看.  发表于 2016-4-19 23:20
回复

使用道具 举报

6#
发表于 2016-4-20 00:05:26 | 只看该作者
本帖最后由 青青草 于 2016-4-20 00:08 编辑

不是设备名的问题!
用极限驱动定制的或者用2012angelkyo定制的,则
if test -f ($device)/bootmgr -a -f ($device)/boot/bcd; then
都不起作用!
但用神雕定制的,却能起作用!
不知何故?

点评

可能是那两个定制版加载的模块不全吧。你有没有试试神雕定制的环境下 如果第二个文件不存在是否会起作用,我测试 test [ -f ($device)/bootmgr ] -a [ -f ($device)/boot/bcd ] ,只会判断 -f ($device)/bootmgr  详情 回复 发表于 2016-4-20 00:30
回复

使用道具 举报

7#
 楼主| 发表于 2016-4-20 00:19:38 | 只看该作者
刚才在控制台中测试了一下,test [ -f ($device)/bootmgr ] -a [ -f ($device)/boot/bcd ]  也不行 ,只会判断  -f ($device)/bootmgr 是否成立,如果这个条件成立,后面的条件就无效。

不过我使用  test [ 6 -gt 5 -a 6 -gt 2 ] 是能成功返回的。只要把5或2改成大于或等于6的数返回就是1 .   test [ -f ($device)/bootmgr ] 也是成立的,只要文件存在就返回0不存在就返回1 。 可能是grub2不支持太长的条件式吧。

你可以变通一下.

test [ -f ($device)/bootmgr ]
#测试bootmgr文件是否存在
a=$?
#把测试返回值保存到变量a中
test [ -f ($device)/boot/bcd ]
#测试bcdr文件是否存在
b=$?
#把测试返回值保存到变量b中
if [ $a -eq 0  -eq $b -eq 0  ] ; then
回复

使用道具 举报

8#
 楼主| 发表于 2016-4-20 00:30:39 | 只看该作者
青青草 发表于 2016-4-20 00:05
不是设备名的问题!
用极限驱动定制的或者用2012angelkyo定制的,则
if test -f ($device)/bootmgr -a - ...

可能是那两个定制版加载的模块不全吧。你有没有试试神雕定制的环境下 如果第二个文件不存在是否会起作用,我测试 test [ -f ($device)/bootmgr ] -a [ -f ($device)/boot/bcd ]  ,只会判断  -f ($device)/bootmgr 是否成立,如果这个条件成立,后面的条件就无效

点评

试了,神雕定制的环境下 如果第二个文件不存在能起作用。  详情 回复 发表于 2016-4-20 00:37
回复

使用道具 举报

9#
发表于 2016-4-20 00:37:07 | 只看该作者
linglongx 发表于 2016-4-20 00:30
可能是那两个定制版加载的模块不全吧。你有没有试试神雕定制的环境下 如果第二个文件不存在是否会起作用 ...

试了,神雕定制的环境下 如果第二个文件不存在能起作用。

点评

刚下了grub-2.02~beta3的源码重新编译测试 test -f ($device)/bootmgr -a -f ($device)/boot/bcd 通过,只要其中一个文件不存在就返回1 把编译出来的模替换 极限驱动与2012angelkyo发过的 GRUB2 for windows 中  详情 回复 发表于 2016-4-20 01:29
在我这儿的GRUB2环境中 test [ -f ($device)/bootmgr ] -a [ -f ($device)/boot/bcd ] 只要bootmgr存在就返回0不存在就返回1 , bcd文件存不存在都不影响返回值.如果如你所说那可能神雕编译出来的GRUB2修复了官方的  详情 回复 发表于 2016-4-20 00:44
回复

使用道具 举报

10#
 楼主| 发表于 2016-4-20 00:44:37 | 只看该作者
青青草 发表于 2016-4-20 00:37
试了,神雕定制的环境下 如果第二个文件不存在能起作用。

在我这儿的GRUB2环境中 test [ -f ($device)/bootmgr ] -a [ -f ($device)/boot/bcd ] 只要bootmgr存在就返回0不存在就返回1  , bcd文件存不存在都不影响返回值.如果如你所说那可能神雕编译出来的GRUB2修复了官方的BUG,我这儿环意是我用GRUB2官方源码定制的
回复

使用道具 举报

11#
 楼主| 发表于 2016-4-20 01:29:34 | 只看该作者
青青草 发表于 2016-4-20 00:37
试了,神雕定制的环境下 如果第二个文件不存在能起作用。

刚下了grub-2.02~beta3的源码重新编译测试 test -f ($device)/bootmgr -a -f ($device)/boot/bcd 通过,只要其中一个文件不存在就返回1

把编译出来的模替换 极限驱动与2012angelkyo发过的 GRUB2 for windows  中 I386-PC 全部模块 定制出来的GRUB2启动镱像也能通过测试

点评

或者直接把你重新编译的I386-PC 、i386-efi、x86_64-efi全部模块发上来,可以在吗?先谢谢了!  详情 回复 发表于 2016-4-20 09:19
可否提供一下grub-2.02~beta3的下载地址?  详情 回复 发表于 2016-4-20 07:22
回复

使用道具 举报

12#
发表于 2016-4-20 07:22:01 | 只看该作者
linglongx 发表于 2016-4-20 01:29
刚下了grub-2.02~beta3的源码重新编译测试 test -f ($device)/bootmgr -a -f ($device)/boot/bcd 通过, ...

可否提供一下grub-2.02~beta3的下载地址?

点评

grub2最新的发布版本的源代码可从ftp://alpha.gnu.org/gnu/grub/获得  详情 回复 发表于 2016-4-20 20:36
回复

使用道具 举报

13#
发表于 2016-4-20 07:50:13 来自手机 | 只看该作者
下载容易,不会用。
回复

使用道具 举报

14#
发表于 2016-4-20 09:19:06 | 只看该作者
linglongx 发表于 2016-4-20 01:29
刚下了grub-2.02~beta3的源码重新编译测试 test -f ($device)/bootmgr -a -f ($device)/boot/bcd 通过, ...


或者直接把你重新编译的I386-PC 、i386-efi、x86_64-efi全部模块发上来,可以吗?先谢谢了!

点评

这个可以有。下载地址晚上回去发,我那停电,出门了  详情 回复 发表于 2016-4-20 12:32
回复

使用道具 举报

15#
发表于 2016-4-20 10:01:21 | 只看该作者
模拟SLIC的软件,无论是针对BIOS还是UEFI,网上都有下载,不过还没有发现有基于grub2的,其实那个GRUB4DOS补丁能否移到grub2,我也不懂,楼主如果感兴趣有时间,不妨研究一下,没时间就算了
回复

使用道具 举报

16#
发表于 2016-4-20 12:32:54 来自手机 | 只看该作者
青青草 发表于 2016-4-20 09:19
或者直接把你重新编译的I386-PC 、i386-efi、x86_64-efi全部模块发上来,可以吗?先谢谢了!

这个可以有。下载地址晚上回去发,我那停电,出门了
回复

使用道具 举报

17#
 楼主| 发表于 2016-4-20 20:36:04 | 只看该作者
青青草 发表于 2016-4-20 07:22
可否提供一下grub-2.02~beta3的下载地址?

grub2最新的发布版本的源代码可从ftp://alpha.gnu.org/gnu/grub/获得

点评

不是WINDOWS的,我没有编译环境。能否把你重新编译的I386-PC 、i386-efi、x86_64-efi全部模块共享一下? 谢谢了!  详情 回复 发表于 2016-4-20 20:51
回复

使用道具 举报

18#
发表于 2016-4-20 20:51:23 | 只看该作者
linglongx 发表于 2016-4-20 20:36
grub2最新的发布版本的源代码可从ftp://alpha.gnu.org/gnu/grub/获得

不是WINDOWS的,我没有编译环境。能否把你重新编译的I386-PC 、i386-efi、x86_64-efi全部模块共享一下?
谢谢了!

点评

正在编译中。  详情 回复 发表于 2016-4-20 22:57
回复

使用道具 举报

19#
发表于 2016-4-20 21:17:16 | 只看该作者
期待楼主共享mod包。

点评

正在编译中。  发表于 2016-4-20 22:58
回复

使用道具 举报

20#
 楼主| 发表于 2016-4-20 22:57:39 | 只看该作者
本帖最后由 linglongx 于 2016-4-21 18:22 编辑
青青草 发表于 2016-4-20 20:51
不是WINDOWS的,我没有编译环境。能否把你重新编译的I386-PC 、i386-efi、x86_64-efi全部模块共享一下?
...


正在编译中。


欢迎喜欢拆腾的人加入 GRUB2编译与定制QQ群 512143502

点评

能否说明一下如何把grub2.02 beta3编译成windows的方法吗?  详情 回复 发表于 2016-12-25 23:08
回复

使用道具 举报

21#
发表于 2016-4-21 02:21:06 | 只看该作者
谢谢分享!
你编译的 GRUB2.02~beta3-for-windows  i386-pc   i386-efi  x86_64-efi 三个平台的模块,解决了:
(1)if test -f ($device)/bootmgr -a -f ($device)/boot/bcd; then 失效问题;
(2)在BIOS环境下,关闭计算机命令halt 失效问题。
再次谢谢了!
回复

使用道具 举报

22#
发表于 2016-4-21 07:25:34 来自手机 | 只看该作者
感谢楼主的共享。
回复

使用道具 举报

23#
发表于 2016-4-21 07:25:40 来自手机 | 只看该作者
感谢楼主的共享。
回复

使用道具 举报

24#
发表于 2016-4-21 08:43:52 | 只看该作者
是不是设置号码不找到

无标题.jpg (17.98 KB, 下载次数: 297)

无标题.jpg
回复

使用道具 举报

25#
发表于 2016-4-21 09:03:29 | 只看该作者
你这个群号对吗?楼主
回复

使用道具 举报

26#
 楼主| 发表于 2016-4-21 18:24:28 | 只看该作者
那个群是以前做其它用的,很久不用了,不知道为什么现在用不了,刚弄了个新群 512143502
回复

使用道具 举报

27#
发表于 2016-4-22 08:29:00 来自手机 | 只看该作者
为什么没有Linuxefi.mod?这个命令是有验证签名功用。
回复

使用道具 举报

28#
发表于 2016-4-22 08:29:03 来自手机 | 只看该作者
为什么没有Linuxefi.mod?这个命令是有验证签名功用。
回复

使用道具 举报

29#
发表于 2016-4-22 08:31:47 来自手机 | 只看该作者
官网上有这个命令的介绍,为什么包里都没有?

点评

好像现在看到的GRUB2编译版都不带这个模块,源码包中也没有相关的模块代码。官网哪儿有介绍这个模块?发个网址我去看看。  详情 回复 发表于 2016-4-22 13:46
回复

使用道具 举报

30#
 楼主| 发表于 2016-4-22 13:46:37 | 只看该作者
窄口牛 发表于 2016-4-22 08:31
官网上有这个命令的介绍,为什么包里都没有?

好像现在看到的GRUB2编译版都不带这个模块,源码包中也没有相关的模块代码。官网哪儿有介绍这个模块?发个网址我去看看。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-20 11:20

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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