Skip to content

Commit 24fdef2

Browse files
committed
Clean up and organize boot logging.
1 parent 1ca5454 commit 24fdef2

File tree

4 files changed

+62
-42
lines changed

4 files changed

+62
-42
lines changed

data_structures/page_table.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -162,17 +162,17 @@ page_directory_t initialize_page_directory() {
162162
return pd;
163163
}
164164

165-
void print_page_directory(FILE stream, page_directory_t pd) {
165+
uint32_t num_present_pages(page_directory_t pd) {
166+
uint32_t num = 0;
166167
for (int i = 0; i < 1024; i++) {
167168
uint32_t entry = pd[i];
168169
bool present = entry & 0x1;
169170

170171
if (present) {
171-
fprintf(stream, "page directory entry ");
172-
print_uint32(stream, i);
173-
fprintf(stream, " is present.\n");
172+
num += 1;
174173
}
175174
}
175+
return num;
176176
}
177177

178178
uint32_t round_up_to_nearest_page_start(uint32_t address) {

data_structures/page_table.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ typedef uint32_t * page_table_t;
1717

1818
uint32_t initialize_page_allocator(struct kernel_memory_descriptor_t kernel_memory, multiboot_info_t* mbinfo);
1919
page_directory_t initialize_page_directory();
20+
uint32_t num_present_pages(page_directory_t pd);
2021
void page_in(void* virtual_address);
21-
void print_page_directory(FILE stream, page_directory_t pd);
2222

2323
#endif /* INCLUDE_PAGE_TABLE_H */

interrupts.c

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,15 @@
1010
#define INT_KEYBOARD 0x00000009
1111
#define INT_GENERAL_PROTECTION_FAULT 0x0000000D
1212
#define INT_PAGE_FAULT 0x0000000E
13+
#define INT_SOFTWARE 0x00000031
1314

14-
void interrupt_handler(struct cpu_state cpu, uint32_t interrupt_number, uint32_t error_code, uint32_t eip) {
15-
log("\n!!! Interrupt\n");
16-
log("interrupt_number: ");
17-
print_uint32(LOG, interrupt_number);
18-
log("\n");
15+
void log_interrupt_details(char* int_name, uint32_t error_code, uint32_t eip, struct cpu_state* cpu) {
16+
if(cpu->ebp){}
17+
log("--------------------\n");
1918

19+
log("Interrupt : ");
20+
log(int_name);
21+
log("\n");
2022
log("error_code: ");
2123
print_uint32(LOG, error_code);
2224
log("\n");
@@ -27,9 +29,9 @@ void interrupt_handler(struct cpu_state cpu, uint32_t interrupt_number, uint32_t
2729
char * symbol_name = address_to_symbol_name(eip);
2830
fprintf(LOG, symbol_name);
2931
log("\n");
30-
uint32_t ebp = cpu.ebp;
32+
uint32_t ebp = cpu->ebp;
3133
while (ebp & 0xC0100000) {
32-
uint32_t eip = ((uint32_t*) ebp)[1];
34+
eip = ((uint32_t*) ebp)[1];
3335
print_uint32(LOG, eip);
3436
log(" : ");
3537
char * symbol_name = address_to_symbol_name(eip);
@@ -38,8 +40,11 @@ void interrupt_handler(struct cpu_state cpu, uint32_t interrupt_number, uint32_t
3840

3941
ebp = *((uint32_t*)ebp);
4042
}
41-
log("\n");
4243

44+
log("--------------------\n");
45+
}
46+
47+
void interrupt_handler(struct cpu_state cpu, uint32_t interrupt_number, uint32_t error_code, uint32_t eip) {
4348
switch(interrupt_number) {
4449
case(INT_KEYBOARD):
4550
keyboard_interrupt_handler();
@@ -77,6 +82,10 @@ void interrupt_handler(struct cpu_state cpu, uint32_t interrupt_number, uint32_t
7782
}
7883
break;
7984

85+
case(INT_SOFTWARE):
86+
log_interrupt_details("INT_SOFTWARE", error_code, eip, &cpu);
87+
break;
88+
8089
default:
8190
log("ERROR: Unabled to handle interrupt: ");
8291
print_uint32(LOG, interrupt_number);

kmain.c

Lines changed: 40 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,9 @@ static char *welcome_string = ""
3939
" "
4040
"";
4141

42-
void trigger_page_fault() {
43-
uint32_t * unmapped_address = (uint32_t *) 0x400000; // 4 MB
44-
log("Trying to access address ");
45-
print_uint32(LOG, (uint32_t) unmapped_address);
46-
log(":\n");
47-
print_uint8(LOG, *unmapped_address);
48-
log("\n. Successfully accessed.\n");
42+
uint32_t trigger_page_fault() {
43+
uint32_t* unmapped_address = (uint32_t *) 0x400000; // 4 MB
44+
return *unmapped_address;
4945
}
5046

5147
struct test_struct_t {
@@ -63,68 +59,83 @@ void kmain(struct kernel_memory_descriptor_t kernel_memory, uint32_t ebx) {
6359
printf(welcome_string);
6460

6561
serial_init();
66-
log("\n--------------------\ncstackOS is booting!\n--------------------\n\nInitialized serial port.\n");
62+
log("\n--------------------\ncstackOS is booting!\n--------------------\n\n");
6763

64+
#ifdef DEBUG
6865
log("\nMultiboot info passed to kernel from GRUB:\n");
6966
print_multiboot_info(LOG, mbinfo);
7067
log("\n");
68+
#endif
7169

70+
log("- Initializing symbol table...\n");
7271
if (load_symbol_table(get_elf_section(mbinfo, ".symtab"), get_elf_section(mbinfo, ".strtab"))) {
73-
log("Initialized symbol table.\n");
72+
log(" - done\n");
7473
} else {
7574
log("ERROR: Could not initialize symbol table.\n");
75+
while(1){}
7676
}
7777

78+
log("- Initializing global descriptor table...\n");
7879
initialize_gdt();
79-
log("Loaded global descriptor table.\n");
80+
log(" - done\n");
8081

82+
log("- Initializing interrupt descriptor table...\n");
8183
initialize_idt();
82-
log("Loaded interrupt descriptor table.\n");
84+
log(" - done\n");
8385

84-
log("Issuing test interrupt.\n");
86+
log("- Issuing test interrupt...\n");
8587
interrupt(49);
86-
log("Returned from test interrupt()\n");
88+
log(" - done\n");
8789

90+
log("- Initializing programable interrupt controller...\n");
8891
pic_init();
89-
log("Initialized PIC\n");
92+
log(" - done\n");
9093

94+
log("- Initializing page allocator...\n");
9195
uint32_t free_pages = initialize_page_allocator(kernel_memory, mbinfo);
92-
log("Initialized page allocator.\n");
96+
log(" - done\n");
97+
log(" - ");
9398
print_uint32(LOG, free_pages);
9499
log(" free pages (");
95100
print_uint32(LOG, free_pages / 256);
96101
log(" MB)\n");
97102

103+
log("- Initializing page directory...\n");
98104
page_directory_t pd = initialize_page_directory();
99-
log("Initialized page directory.\n");
100-
log("Address of page directory: ");
105+
log(" - done\n");
106+
log(" - Address of page directory: ");
101107
print_uint32(LOG, (uint32_t) pd);
102108
log("\n");
109+
uint32_t num_pages = num_present_pages(pd);
110+
log(" - ");
111+
print_uint32(LOG, num_pages);
112+
log(" present pages\n");
113+
114+
log("- Triggering a page fault...\n");
115+
uint32_t value = trigger_page_fault();
116+
log(" - done\n");
117+
log(" - value at unmapped address was ");
118+
print_uint32(LOG, value);
119+
log("\n");
103120

104-
print_page_directory(LOG, pd);
105-
106-
trigger_page_fault();
107-
121+
log("- Dynamically allocating a struct...\n");
108122
struct test_struct_t* test = (struct test_struct_t*) malloc(sizeof(struct test_struct_t));
109-
110-
log("Dynamically allocated a struct\nAddress is: ");
123+
log(" - done\n");
124+
log(" - address is: ");
111125
print_uint32(LOG, (uint32_t) test);
112126
log("\n");
113-
114-
test->character = 'A';
115-
test->string = "Hello World";
116127

117128
uint32_t local = 0xDEADBEEF;
118129

119-
log("local variable at: ");
130+
log(" - local variable at: ");
120131
print_uint32(LOG, (uint32_t) &local);
121132
log("\n");
122-
log("local variable value: ");
133+
log(" - local variable value: ");
123134
print_uint32(LOG, (uint32_t) local);
124135
log("\n");
125136

126137
void* sp = current_stack_pointer();
127-
log("stack pointer is: ");
138+
log(" - stack pointer is: ");
128139
print_uint32(LOG, (uint32_t) sp);
129140
log("\n");
130141

0 commit comments

Comments
 (0)