示例#1
0
        private static void MapKernelImage()
        {
            var phys    = Address.KernelElfSectionPhys;
            var diff    = Address.KernelBaseVirt - Address.KernelBasePhys;
            var endPhys = phys + OriginalKernelElf.TotalFileSize;
            var addr    = phys;

            KernelMessage.WriteLine("Mapping Kernel Image from physical {0:X8} to virtual {1:X8}", phys, phys + diff);
            while (addr < endPhys)
            {
                PageTable.KernelTable.MapVirtualAddressToPhysical(addr + diff, addr);
                addr += 0x1000;
            }
            PageTable.KernelTable.Flush();

            var map = new BootInfoMemory
            {
                Start            = phys + diff,
                Size             = OriginalKernelElf.TotalFileSize,
                Type             = BootInfoMemoryType.KernelElfVirt,
                AddressSpaceKind = AddressSpaceKind.Virtual,
            };

            BootInfo_.AddMap(map);
        }
示例#2
0
        private static bool Initial_CheckPageIsUsableAfterMap(BootInfoMemory map)
        {
            if (map.Type == BootInfoMemoryType.SystemUsable)
            {
                return(false);
            }

            Addr checkAddr = map.Start + map.Size;

            var inUsableSystemMap = false;

            for (uint i = 0; i < BootInfo.Header->MemoryMapLength; i++)
            {
                if (BootInfo.Header->MemoryMapArray[i].Type == BootInfoMemoryType.SystemUsable)
                {
                    if (AddressInMap(checkAddr, BootInfo.Header->MemoryMapArray[i]))
                    {
                        inUsableSystemMap = true;
                    }
                }
                else
                {
                    if (AddressInMap(checkAddr, BootInfo.Header->MemoryMapArray[i]))
                    {
                        return(false);
                    }
                }
            }
            return(inUsableSystemMap);
        }
示例#3
0
文件: BootInfo_.cs 项目: djlw78/abanu
        public static void AddMap(BootInfoMemory map)
        {
            Assert.False(BootInfo->MemoryMapLength >= MemoryMapReserve);

            BootInfo->MemoryMapArray[BootInfo->MemoryMapLength] = map;
            BootInfo->MemoryMapLength++;
        }
示例#4
0
        public static BootInfoMemory AllocateMemoryMap(USize size, BootInfoMemoryType type, AddressSpaceKind addressSpaceKind)
        {
            var map = new BootInfoMemory
            {
                Start            = PageStartAddr,
                Size             = size,
                Type             = type,
                AddressSpaceKind = addressSpaceKind,
                PreMap           = true,
            };

            PageStartAddr += size;

            KernelMessage.WriteLine("Allocated MemoryMap of Type {0} at {1:X8} with Size {2:X8}", (uint)type, map.Start, map.Size);

            return(map);
        }
示例#5
0
 private static bool AddressInMap(Addr addr, BootInfoMemory map)
 {
     return(map.Start <= addr && addr < map.Start + map.Size);
 }