| 
 | 
 本帖最后由 2011yaya2007777 于 2015-7-10 13:02 编辑  
 
这个问题不是太懂。我看到有 grub_malloc,grub_free 函数。这个函数是供内核使用的,还是供用户使用的? 
只是登记一下使用内存的位置及尺寸,以便供后续使用者查询?还是直接分配合适的内存? 
 
这还有个是否遵守协定的问题。不使用函数,直接分配和使用内存,也没有办法。 
 
我觉得对于32M内核使用内存,开发者应当在 shared.h 予以登记,至少在 .h 文件登记。 
不要在代码中使用 (unsigned char *)0x1000000 这样直接赋值。没有多少人有时间在浩瀚的代码中寻找内存使用位置。 
 
我查询到的内存分布,肯定还有遗漏。 
 
 
名称                                                                        中文                                                                        位置                                长度                                定义 
 
BOOT_PART_TABLE                                                引导分区表                                                                0x07be                        0x200                        shared.h 
 
MB_CMDLINE_BUF                                                多重引导命令行缓冲区地址                                        0x7000                        0x1000                        shared.h 
BOOTSEC_LOCATION                                                BOOTSEC位置                                                        0x7C00                                                         shared.h 
mbr                                                                        主文件分配表                                                        0x8000                        0x200                        disk_io.c 
terminfo                                                                                                                                        0x8000                        0x200                        builtins.c 
LINUX_HEAP_END_OFFSET                                        LINUX堆结束偏移                                                0x9000 - 0x200                                                 shared.h 
LINUX_ZIMAGE_ADDR                                                LINUX Z映像地址                                                0x10000                                                         shared.h 
 
 
SCRATCHADDR                                                          SCRATCH地址                                                        0x1F000                        0x200                        shared.h 
SCRATCHADDR                                                                                                                                0x1F000                                                        builtins.c 
GEOMTUNE_SEG                                                                                                                         0x20000                        0x10000                        ams.s  geometry_tune 
                                                                        读缓存                                                                0x2F000                        0x200                        bios.c 
                                                                        读缓存                                                                0x2F000                        0x800                        builtins.c 
GEOMTUNE_BUFFERSEG                                                                                                                0x30000                        0x8000                        ams.s  geometry_tune 
BUFFERADDR                                                          缓冲区地址                                                                0x30000                        0x10000                        shared.h 
PXE_BUF                                                                PXE缓存地址                                                          0x30000                        0xFE00                        fsys_pxe.c 
ADDR_RET_STR                                                 地址返回字符串                                                        0x4CA00                                                         shared.h 
CMD_RUN_ON_EXIT                                                 命令运行在退出                                                        0x4CB08                                                         shared.h 
LINUX_OLD_REAL_MODE_ADDR                                LINUX旧实模式地址                                                0x90000                                                         shared.h 
VIDEOMEM                                                         图形视频内存                                                        0xA0000 
HERCULES_VIDEO_ADDR        RAW_ADDR                 hercules视频地址                                                0xB0000                                                        hercules,h 
 
LINUX_BZIMAGE_ADDR                                        LINUX BZ映像地址                                                  0x100000                                                         shared.h 
buf_addr                                                                存放UNIFONT字符                                                0x100000                        0x10000                        builtins.c 
FB_MENU_ADDR                                                        FB菜单地址                                                        0x150000                        0x10000                        fsys_fb.c 
                                                                        读缓存                                                                0x200000                                                        builtins.c 
                                                                        读缓存                                                                0x2A0000                                                        builtins.c 
HMA_ADDR                                                                                                                                0x2B0000                                                        builtins.c 
HMA_ADDR                                                        高端内存区地址                                                        0x2B0000                                                         shared.h 
 
                                                                        第二块固定变量区                                                0x307000~0x308200        0x1200 
use_preset_menu                                                 使用预值菜单地址                                                0x307FF8                                                         shared.h 
preset_menu                                                         预设菜单                                                                0x307FFC                                                        stage2 
                                                                        cpu 的信息                                                                0x308000                                                        0x20 
 
 
JPG_FILE                                                                jpg文件缓存                                                        0x3A0000                        0x8000                        graphics.h 
MENU_TITLE                                                        菜单总标题缓存                                                        0x3A8000                        0x800                        shared,h 
 
#define VSHADOW VSHADOW1 
/* 8x16 点阵字符,总字符 = 80*30. 平面尺寸 = 80*30*16 = 38400字节 */ 
/* 8x16 点阵字符,总字符 = 100*37. 平面尺寸= 800*600/8 = 60000字节 */ 
VSHADOW1                                                                                                                                0x3A0000                        0xea60                        graphics.c 
VSHADOW2                                                                                                                                0x3AEA60                        0xea60                        graphics.c 
VSHADOW4                                                                                                                                0x3BD4C0                        0xea60                        graphics.c 
VSHADOW8                                                                                                                                0x3CBF20                        0xea60                        graphics.c                //end at 0x3DA980 
text                                                                                                                                                0x3FC000                        100*37*4 = 0x39D0        graphics.c 
 
 
FSYS_BUF RAW_ADDR                                         文件系统缓存地址                                                0x3E0000                        0x8000                        shared.h 
PART_TABLE_BUF                                                分区表缓存地址                                                        0x3E8000                        0x1000                         shared.h 
PART_TABLE_TMPBUF                                                分区表临时缓存地址                                                0x3E9000                        0x200                         shared.h 
CMDLINE_BUF                                                        命令行缓存地址                                                  0x3E9200                        0x640                         shared.h 
COMPLETION_BUF                                                完成缓冲区地址                                                  0x3E9840                        0x640                         shared.h 
UNIQUE_BUF                                                        UNI字符串缓冲区地址                                          0x3E9E80                        0x640                         shared.h 
HISTORY_BUF                                                        命令行历史缓冲区地址                                          0x3EA4C0                        0x320                         shared.h 
font8x16                                                                                                                                        0x580000                        0x1000                        builtins.c 
mem_alloc_array_start                                                                                                                0x800000                                                        ams.s 
mem_alloc_array_end                                                                                                                        0xA00000                                                        ams.s 
page_map_start                                                                                                                                0xA00000                                                        ams.s 
page_map_end                                                                                                                                0xE00000                                                        ams.s 
PAGING_TABLES_BUF                                                分页表缓冲区                                                        0xEFC000                        0x4000                        shared.h 
PAGING_TABLES_BUF                                                分页表缓存                                                                0xEFC000                        0x4000                        shared.h 
 
IMAGE_BUFFER                                                        vbe图像缓存                                                        0x1000000                        0xa8c000                        graphics.h                (1920*1440*4)                                                                                 
UNIFONT_START                                                UNI字体开始                                                        0x1800000 
SYSTEM_RESERVED_MEMORY                                系统保留的内存                                                        0x2000000 
 
GRUB_MOD_ADDR                                                                                                                        0x2000000-100000                                        builtins.c 
cmd_buffer                                                        命令缓存                                                                0x2000000-0x10000                                        cmdline.c 
PRINTF_BUFFER                                                 打印缓存                                                                0x2000000+0x20000                                        cmdline.c 
 
 
LINUX_INITRD_MAX_ADDRESSLINUX                        初始化RAM磁盘最大地址                                        0x38000000                                                 shared.h 
 
 
 
graphics.c 使用 0x3A0000 - 0x3DA980 和 0x3FC000 - 0x3FF9D0 切换到实模式扩展chainloader代码地址 
 
 
VM_RFC1048                                                        0x63825363L                                                                                                                        pxe.h 
linalloc_topaddr                                                        窗口的大小                                                                ((saved_mem_upper << 10) + 0x100000) 0x8000UL                gunzip.c 
 
fsys_pxe.c 
#define PXE_MIN_BLKSIZE        128 
#define PXE_MAX_BLKSIZE        16384 
#define DOT_SIZE        1048576 
 
 
#define CMP_BUF_SIZE 0x8000ULL 
  addr1 = (char *) RAW_ADDR (0x100000); 
  addr2 = addr1 + CMP_BUF_SIZE; |   
 
 
 
 |