无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 3074|回复: 3
打印 上一主题 下一主题

提醒 chenall 有人对最新补丁有评论

[复制链接]
跳转到指定楼层
1#
发表于 2014-8-11 19:44:10 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
4#
发表于 2014-8-13 08:28:30 | 只看该作者
谢谢,明白了.顺便收藏记录一下.
回复

使用道具 举报

3#
 楼主| 发表于 2014-8-12 21:44:55 | 只看该作者
要知道,这段空间是为 config_file 变量保留的。每次使用 configfile 命令加载某个 menu.lst 文件,这个文件的全路径名就保存在这里。因此,这里的数据都会被覆盖掉,即,直到偏移 6F 处的值都将成为 config_file 变量的空间。这段空间只用于启动前被其他软件为了某种目的而使用,比如说,检测 grldr 的文件格式,或者向 grldr 的 asm.S 的启动代码传递某种数据。asm.S 在把控制传递给 C 语言代码之前,会把这里的数据清空。之所以要清空它们,就是想提醒后来的开发者,不要错误地使用了这个空间,因为这个空间会被 configfile 命令使用。

尽量不要增加变量。特殊情况需要增加变量的,可以在 3M 以上的空间中增加变量。为什么要节约低端内存而使用 3M 以上的内存呢?那是因为,低端内存是 BIOS 可访问的内存,很宝贵。如果我们要增加的变量不需要 BIOS 以及其他 16 位的软件去使用它,那么我们最好把它放在扩展内存中,节约常规内存的变量空间。

这里需要说明,grub4dos 的 32 位保护模式代码空间,占用了内存地址 0x308200 以上的一些空间,而 0x308200 之下的空间,则是数据空间。其中一部分空间已经被占用,例如 0x300000 处的中断描述符表就占用了几个 KB 的空间。

在 check_64bit_and_PAE() 函数中,把 CPU 的信息保存在 0x308000 处的 32 个字节中。在 grub4dos 之下运行的用户程序可以检测这里的 CPU 信息,从而判断出 grub4dos 当前是否正运行于虚拟机(vmware)之下。

从 0x308020 到 0x3081FF 这段空间,暂时没有使用。你将来最好把它用于保存大块头的变量,比如占用 16 字节或 32 字节或 64 字节的变量。小的 4 字节或 8 字节变量,最好不要放在这里,而是放在低于 0x308000 的地址空间。

0x307FF8 处的 4 字节被 use_preset_menu 变量占用。
0x307FFC 处的 4 字节被 preset_menu 变量占用。

你新增的变量,可以放在 0x307FF4 处,新增的下一个变量可以放在 0x307FF0 处,……,一直到 0x307000 都可以安排你的新增变量。所以,空间大得很,足够用了。


回复

使用道具 举报

2#
发表于 2014-8-12 15:01:54 | 只看该作者
谢谢提醒,顺便问一下.

看asm.S的代码.EXT_C(main) + 0x70之前还有许多空白的地方,比如如下

        . = EXT_C(main) + 0x34

        .word        0x14C        /* CPU type for i386 and compatibles */
        .word        1        /* there is 1 section */

        . = EXT_C(main) + 0x44

        .word        0x00        /* size of optional header */
        .word        3        /* flags: "no relocation" and "valid executable" */
        .word        0x722E        /* section name for resources */
        .word        0x7273
        .word        0x63

        /* Utilities may use this to locate the bss starting address,
         * where the "bootlace" signature is placed and preset-menu
         * follows.
         */

        . = EXT_C(main) + 0x6C  #; bss starting address

0x38-0x44,0x50-0x6C之前看起来都是没有使用到的,我想在这里增加一个变量好像不行,设置了一个变量启动后看了一下值为0,不知为何?现在要增加内存变量只有0x100之后有一点空间了.
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-12-6 13:15

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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