|
本帖最后由 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; |
|