无忧启动论坛

 找回密码
 注册
搜索
WEPE笔记本电脑手机维修小包 IT发烧友的必备工具最纯净的「微PE装机优盘」UEPON大师作品卡瑞飞系统和装机二合一超级U盘
杏雨梨云专业量产版USB-CD启动U盘,装机专用系统gho:最纯净好用系统下载站广告联系 QQ:184822951 微信:wuyouceo
楼主: 2011yaya2007777

[发布] 增强 GRUB4DOS 菜单编辑功能,支持动画,支持精简字库,支持图形菜单

    [复制链接]
发表于 2015-8-17 21:00:56 | 显示全部楼层
本帖最后由 yifeimfd 于 2015-8-17 21:06 编辑


# This is a sample menu.lst file. You should make some changes to it.
# The old install method of booting via the stage-files has been removed.
# Please install GRLDR boot strap code to MBR with the bootlace.com
# utility under DOS/Win9x or Linux.

find --set-root /grub/grubflag
graphicsmode -1 600:800
#font /grub/font/GB2312.gz
#黑体
font /grub/font/ht.gz
#仿宋
#font /grub/font/fs.gz

splashimage /grub/background/think.bmp

#foreground ffff00
#color black/cyan yellow/cyan

timeout 10
parttype 0x07

title 启动windows
        parttype 0x12
        find --set-root /Windows/win.ini
        chainloader +1

title 启动联想一键恢复
        parttype 0x12
        chainloader +1

title 新二合一PE(ISO)
        map --mem /grub/FIRADISK.IMG (fd0)
        map --mem /grub/boot/PE5.1/WinPE_5.1_32&64_4.26.iso (0xff)
        map --hook
        chainloader (0xff)

title 启动绝对PE(ISO)
        map --mem /grub/boot/AbsolutePE.iso (0xff)
        map --hook
        chainloader (0xff)
       
title 二合一PE(ISO)
        map --mem /grub/FIRADISK.IMG (fd0)
        map --mem /grub/boot/WIN7PE.ISO (0xff)
        map --hook
        chainloader (0xff)

title 启动memtest86+(ISO)
        map --mem /grub/memtest86+-5.01.iso (0xff)
        map --hook
        chainloader (0xff)

title 重启
        savedefault --wait=2
        reboot

title 关机
        savedefault --wait=2
        halt


同样这个配置文件,下载8月7日版的工作正常,换一楼附件8月14日版的就不正常,屏幕卡在“GRUB4DOS 0.4.6a 2015-08-14, root is (0x80,0)          processing the preset-menu ...”,U盘启动。

谢谢您抽空回复~


刚刚换为硬盘启动有一样问题,
回复

使用道具 举报

发表于 2015-8-17 21:18:19 | 显示全部楼层
另外,刚刚还测试了使用三楼提供的菜单,只是改了图片和字体文件配置项(这两个应该没问题,因为8月7日版可以正常使用),启动的时候故障依旧。
回复

使用道具 举报

 楼主| 发表于 2015-8-18 07:18:19 | 显示全部楼层
ht.gz 是什么字库?16*16?请上传。
回复

使用道具 举报

发表于 2015-8-18 09:34:03 | 显示全部楼层
本帖最后由 yifeimfd 于 2015-8-18 09:53 编辑
2011yaya2007777 发表于 2015-8-18 07:18
ht.gz 是什么字库?16*16?请上传。


论坛这个帖子中下的黑体字库:
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=256198

黑体.part01.rar~黑体.part04.rar

************************************
刚刚将字体文件换成https://code.google.com/p/grub4d ... name=unifont.hex.gz下载的,故障依旧~

黑体.part01.rar

200 KB, 下载次数: 16, 下载积分: 无忧币 -2

黑体.part02.rar

200 KB, 下载次数: 13, 下载积分: 无忧币 -2

黑体.part03.rar

200 KB, 下载次数: 13, 下载积分: 无忧币 -2

黑体.part04.rar

69.42 KB, 下载次数: 13, 下载积分: 无忧币 -2

回复

使用道具 举报

发表于 2015-8-18 10:28:03 | 显示全部楼层
本帖最后由 yifeimfd 于 2015-8-18 16:21 编辑

甚至测试了将配置中的背景都去掉也是一样。二楼那个菜单在8月7号版本的grldr下完全正常,一旦改为8月14日的就有问题。
E:\os\bootloader\src\grldr_2015_08_14>fciv -sha1 grldr
//
// File Checksum Integrity Verifier version 2.05.
//
459793b658101c9a45d1f2739d579795827e8aa9 grldr

不知道是不是文件有问题,现附上我本地文件的sha1以供核对。

******************************************

一楼8月17日grldr肯定有问题:(以下测试都是在virtualbox中进行的。)
menu.lst只有下面简单3行都遇到同样的问题
title windows
        find --set-root /Windows/win.ini
        chainloader +1

文件确认是utf-8编码。用winhex删除BOM也一样问题。

为了测试方便,我菜单加载时在命令行下进行的,输入命令后grub命令行即冻结,用CTRL+ALT+DEL可以重启虚拟机。
回复

使用道具 举报

发表于 2015-8-18 18:32:28 | 显示全部楼层
本帖最后由 不点 于 2015-8-18 18:44 编辑

又考虑了一下,觉得不要急于把整个 grub4dos 都隐藏在扩展内存顶部。可以分步骤、逐步实现。

先把 int13 代码隐藏于扩展内存顶端。主体的 grub4dos 内核仍旧在低端运行。待到以后时机成熟时,再把主体内核移动到扩展内存顶端。

目前来说,内存管理是关键。其次是进程管理。

内存管理并不难,但它是个细致活。昨天看了 grub2 的内存管理代码的注释说明,了解到 grub2 的内存管理类似于 DOS 的内存管理,是用链接表来实现内存链的。而 grub4dos 目前是用数组来管理。

我仔细考虑了两天,觉得还是数组管理更合适一些。链接表的头部占用 16 字节(或 32 字节),这不利于分配那些(例如按照扇区对齐的)内存。而数组就不存在头部,所分配到的内存是干净的,因此更有利于分配按照扇区或页面对齐的内存。那些头部的 16 字节(或 32 字节)其实是个浪费,而且更糟糕的是,它影响了所分配的内存的 “对齐性”。因此,得到的结论是,内存分配适合于用数组,不适合于用链接表。

举例来说,假如要分配 4K 内存,并且按照 4K 对齐。假定空闲空间的初始状态就是 4K 对齐的。如果用链接表,那么内存块的头部占用 16 字节,因此需要 8K 的空间才能满足 4K 对齐的要求。头部的 16 字节严重干扰了实际分配到的内存块的对齐性。

关于进程管理,觉得照样应该以简单为主要参考点。用户进程使用用户内存。内核和内核模块使用内核内存。

目前的用户进程管理模式可以继续沿用。内核的保留空间应该加大。折中一下,觉得保留 128M 给内核以及内核模块,差不多也就够用了。

内核模块的逻辑结构是由 chenall 设计的。chenall 负责有关的事宜(保证它能正常运转)。

所以,唯一需要解决的问题,便是编写 kmalloc 和 kfree 函数了。

我初步设计,0~32M 保持目前的使用状况不变。32 ~ 64M 的 32M 空间用于字体字模。64~128M 的 64M 空间用于内核的 kmalloc 分配内存。kmalloc 分配内存时,应该从顶端向下分配(就好像是堆栈那样)。因此这 64M 中的高端部分是 kmalloc 内存,而低端部分也可以被 insmod 或别的内核代码(或内核数据)占据,只要保证高端和低端不发生重叠便可。




另外想补充说明的是,既然 yaya 已经开始整理菜单界面,那么,继续支持 gfxmenu 已经没有意义了。所以新版本可以撤销对 gfxmenu 的支持。要知道,gfxmenu 占据了很大的内存开销,4M 和 6M 处各有 1M 都被保留给 gfxmenu。如果去除 gfxmenu 支持,则可以腾出宝贵的 2M 空间,供别的内核数据结构使用。

点评

在“内存块”的动态管理中, 链表开销 和 被管理的内存是分开的。 假定是4K块。申请的 4K 就是满满的4K。 链表开销的(如16)字节,另外管理(可以单独的简单管理模块,也可以归到零碎内存申请)。  详情 回复 发表于 2016-3-16 16:43
回复

使用道具 举报

 楼主| 发表于 2015-8-18 21:24:45 | 显示全部楼层
本帖最后由 2011yaya2007777 于 2015-8-19 07:10 编辑

赞成不点的意见,数组管理内存更合适一些。是不是将来使用内存,无论存续期长段,都要申请内存占用空间?
我觉得 unifont.hex 支持到 48*48,也就是占用 18Mb,应该够了。若支持到 64*64,则需要占用 32Mb。
下次发布时,注释掉 gfxmenu 。

一楼附件引导时停在加载内置菜单处就不动了

1#已经更新。
回复

使用道具 举报

发表于 2015-8-18 22:17:58 | 显示全部楼层
2011yaya2007777 发表于 2015-8-18 21:24
赞成不点的意见,数组管理内存更合适一些。是不是将来使用内存,无论存续期长段,都要申请内存占用空间?
...

8月18日更新已经正常了,谢谢!
回复

使用道具 举报

发表于 2015-8-19 07:13:27 | 显示全部楼层
是不是将来使用内存,无论存续期长短,都要申请内存占用空间?


正相反,我不建议频繁使用 kmalloc 和 kfree。如果一个程序段只需要临时用用一片内存,用完之后马上又 free 掉,那么,我觉得这种情况就不应该使用 kmalloc 和 kfree,而应该使用所谓的“公共临时变量区”。

比如说,我们事先开辟一个固定的 8M 空间,这个空间,任何程序都可以写入。使用这个空间,无需申请。既然无需申请,也就无需释放。我估计很多使用 kmalloc 和 kfree 的情况,都可以改成使用“公共临时变量区”。

对 kmalloc 和 kfree 的使用次数,肯定是越少越好。能避免就应该尽量避免使用它们。如果使用了 kmalloc 而忘了使用 kfree,还可导致内存占用过多的问题,糟糕的是,这可能是个隐蔽的问题,不容易及时发现。

我觉得 unifont.hex 支持到 48*48,也就是占用 12Mb,足够了。


你觉得 32M 的内核空间,够不够用?是否需要加大内核保留内存量?我觉得如果考虑到将来的扩展,比如(有可能用 insmod 等方式)添加 usb 支持模块、网络支持模块、文件系统支持模块、键盘鼠标支持模块、显卡、声卡、硬盘的支持,等等,还是需要加大内核保留空间的。

所以我想,这一次就直接将内核保留空间加大到 128M,这就有足够的空间可以同时开辟“公共临时变量区”和 kmalloc 内存分配区,方便程序员的使用。程序员爱用哪种内存使用方式,就用哪种;很自由,很解放。

回复

使用道具 举报

发表于 2015-8-19 10:31:12 | 显示全部楼层
chenall 发表于 2015-7-9 21:43
太赞了,支持一下先...

为什么还没有更新到官网?
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2019-6-27 04:35

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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