x86 make error: attempting to page previously paged virtual address: 0x394c

x86shell make error:
x86 除了用户自定义建的页表, 平台也会自动建些通用页表, 通常情况下,平台建页表时会自动识别并避开用户使用的页表地址,但是平台识别VA是按照一个固定的标准, 如果用户已其他方式创建页表,平台识别不了。

用户创建页表代码:
;reserved_menory (memory: 03000h-03fffh)
; paging_entry 3000h -> 3000h : write user execute present wb 4kbpage

make fail:
x86 make error: attempting to page previously paged virtual address: 0x394c, Usage:shell_date,Pgsz:0x0, Size: 0x2000, adjustedBlkSize:0x1000

分析: x86shell 平台为 shell_date 分配 地址 0x394c, 但是 用户已经把 03000h-03fffh地址抢先占用的,所以产生冲突。
解决方法: 用户使用标准的格式配置页表, x86shell 识别到用户已经使用03000h-03fffh地址段, 为shell_date 分配一个新的地址。
创建页表代码改为:
;random( memory, linear: mydata_base equ 3000, physical: mydata_pbase equ 3000h, 1000 )
; paging_entry mydata_base -> mydata_pbase : write user execute present wb 4kbpage

以上

原文地址:https://www.cnblogs.com/yanli0302/p/15079745.html