| 
 | 
 
 本帖最后由 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, 下载次数: 427)
 
欢迎喜欢拆腾的人加入 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 
 
 
 
 |   
 
评分
- 
查看全部评分
 
 
 
 
 
 |