@@ -27,7 +27,6 @@ const BOOTLOADER_SECOND_STAGE_PARTITION_TYPE: u8 = 0x20;
27
27
const STAGE_3_DST : * mut u8 = 0x0010_0000 as * mut u8 ; // 1MiB (typically 14MiB accessible here)
28
28
const STAGE_4_DST : * mut u8 = 0x0020_0000 as * mut u8 ; // 2MiB (typically still 13MiB accessible here)
29
29
const KERNEL_DST : * mut u8 = 0x0100_0000 as * mut u8 ; // 16MiB
30
- const RAMDISK_DST : * mut u8 = 0x0400_0000 as * mut u8 ; // 64MiB
31
30
32
31
static mut DISK_BUFFER : AlignedArrayBuffer < 0x4000 > = AlignedArrayBuffer {
33
32
buffer : [ 0 ; 0x4000 ] ,
@@ -99,16 +98,18 @@ fn start(disk_number: u16, partition_table_start: *const u8) -> ! {
99
98
writeln ! ( screen:: Writer , "loading kernel..." ) . unwrap ( ) ;
100
99
let kernel_len = load_file ( "kernel-x86_64" , KERNEL_DST , & mut fs, & mut disk, disk_buffer) ;
101
100
writeln ! ( screen:: Writer , "kernel loaded at {KERNEL_DST:#p}" ) . unwrap ( ) ;
101
+ let kernel_page_size = ( ( ( kernel_len - 1 ) / 4096 ) + 1 ) as usize ;
102
+ let ramdisk_start = KERNEL_DST . wrapping_add ( kernel_page_size * 4096 ) ;
102
103
writeln ! ( screen:: Writer , "Loading ramdisk..." ) . unwrap ( ) ;
103
- let ramdisk_len = match try_load_file ( "ramdisk" , RAMDISK_DST , & mut fs, & mut disk, disk_buffer) {
104
+ let ramdisk_len = match try_load_file ( "ramdisk" , KERNEL_DST . wrapping_add ( kernel_page_size * 4096 ) , & mut fs, & mut disk, disk_buffer) {
104
105
Some ( s) => s,
105
106
None => 0u64 ,
106
107
} ;
107
108
108
109
if ramdisk_len == 0 {
109
110
writeln ! ( screen:: Writer , "No ramdisk found, skipping." ) . unwrap ( ) ;
110
111
} else {
111
- writeln ! ( screen:: Writer , "Loaded ramdisk at {RAMDISK_DST :#p}" ) . unwrap ( ) ;
112
+ writeln ! ( screen:: Writer , "Loaded ramdisk at {ramdisk_start :#p}" ) . unwrap ( ) ;
112
113
}
113
114
114
115
let memory_map = unsafe { memory_map:: query_memory_map ( ) } . unwrap ( ) ;
@@ -142,7 +143,7 @@ fn start(disk_number: u16, partition_table_start: *const u8) -> ! {
142
143
len : kernel_len,
143
144
} ,
144
145
ramdisk : Region {
145
- start : RAMDISK_DST as u64 ,
146
+ start : ramdisk_start as u64 ,
146
147
len : ramdisk_len,
147
148
} ,
148
149
memory_map_addr : memory_map. as_mut_ptr ( ) as u32 ,
0 commit comments