下面这段代码主要用在虚拟地址映射比较固定的情况。该代码的作用主要是便于调试“内存被别的代码踩”,把被怀疑的内存设置为只读后,如果有别的程序写到该区域就会打印出Stack,很容易找出是谁踩了你的内存了,呵呵。。。 RT_STATUS mmap_SetAddrRDONLY (unsigned long virt_addr, unsigned long size /* KB */) { int i; pte_t *p_pte; uint32 level; int ret = RT_OK; ASSERT(size < MEM_SIZE_256M); for (i = 0; i < (size/4); i++) { p_pte = lookup_address(virt_addr, &level); if(level != PG_LEVEL_4K){ ret = RT_FAIL; ASSERT(FALSE); break; } if (pte_present(*p_pte)){ set_pte(p_pte, pte_wrprotect(*p_pte)); virt_addr += MEM_SIZE_4K; } else { ASSERT(FALSE); ret = RT_FAIL; break; } } return ret; }