Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
triazo
/
kernel
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
3
Merge Requests
0
Wiki
Settings
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
ca531e3d
authored
Dec 18, 2015
by
triazo
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Maps kernel into virtual space
parent
83769971
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
21 additions
and
0 deletions
src/elf.c
src/mem.c
src/mem.h
src/elf.c
View file @
ca531e3d
...
@@ -57,6 +57,9 @@ void load_elf(elf_header* elf_start)
...
@@ -57,6 +57,9 @@ void load_elf(elf_header* elf_start)
}
}
}
}
// Map the kernel 1:1 in memory
page_region
(
pgdir
,
0x0
,
&
_kernel_end
);
// Allocate two more pages for stack
// Allocate two more pages for stack
page_map
(
pgdir
,
highest_vpage
+
0x1000
);
page_map
(
pgdir
,
highest_vpage
+
0x1000
);
page_map
(
pgdir
,
highest_vpage
+
0x2000
);
page_map
(
pgdir
,
highest_vpage
+
0x2000
);
...
...
src/mem.c
View file @
ca531e3d
...
@@ -85,6 +85,23 @@ void page_everything(page_directory_entry* pg_dir)
...
@@ -85,6 +85,23 @@ void page_everything(page_directory_entry* pg_dir)
}
}
}
}
// page_region adds page tables to map to real memory for a region
void
page_region
(
page_directory_entry
pgdir
[],
void
*
begin
,
void
*
end
)
{
for
(
void
*
page
=
begin
;
page
<
end
;
page
+=
0x1000
)
{
if
((
pgdir
[(
uint32_t
)
page
>>
22
]
&
0xfffff000
)
==
0
)
{
pgdir
[(
uint32_t
)
page
>>
22
]
|=
(
page_directory_entry
)
page_new_table
();
}
page_table_entry
*
page_table
=
(
page_table_entry
*
)
((
uint32_t
)
pgdir
[(
uint32_t
)
page
>>
22
]
&
0xfffff000
);
if
((
page_table
[((
uint32_t
)
page
>>
12
)
%
1024
]
&
0xfffff000
)
==
0
)
{
page_table
[((
uint32_t
)
page
>>
12
)
%
1024
]
|=
(
page_table_entry
)
page
;
}
}
}
// This goes through all available memory, and maps 1 to 1 virtual memory to it.
// This goes through all available memory, and maps 1 to 1 virtual memory to it.
page_directory_entry
*
mem_init_kern_tables
(
multiboot_memory_map
*
mmap
,
multiboot_memory_map
*
mmap_end
)
page_directory_entry
*
mem_init_kern_tables
(
multiboot_memory_map
*
mmap
,
multiboot_memory_map
*
mmap_end
)
{
{
...
...
src/mem.h
View file @
ca531e3d
...
@@ -38,6 +38,7 @@ extern char _kernel_end[];
...
@@ -38,6 +38,7 @@ extern char _kernel_end[];
void
*
page_allocate
();
void
*
page_allocate
();
void
page_free
(
void
*
page_start
);
void
page_free
(
void
*
page_start
);
void
*
page_map
(
page_directory_entry
pgdir
[],
void
*
page_start
);
void
*
page_map
(
page_directory_entry
pgdir
[],
void
*
page_start
);
void
page_region
(
page_directory_entry
pgdir
[],
void
*
begin
,
void
*
end
);
// Initilization
// Initilization
void
page_everything
(
page_directory_entry
*
pg_dir
);
void
page_everything
(
page_directory_entry
*
pg_dir
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment