@@ -27,7 +27,6 @@ const BOOTLOADER_SECOND_STAGE_PARTITION_TYPE: u8 = 0x20;
2727const STAGE_3_DST : * mut u8 = 0x0010_0000 as * mut u8 ; // 1MiB (typically 14MiB accessible here)
2828const STAGE_4_DST : * mut u8 = 0x0020_0000 as * mut u8 ; // 2MiB (typically still 13MiB accessible here)
2929const KERNEL_DST : * mut u8 = 0x0100_0000 as * mut u8 ; // 16MiB
30- const RAMDISK_DST : * mut u8 = 0x0400_0000 as * mut u8 ; // 64MiB
3130
3231static mut DISK_BUFFER : AlignedArrayBuffer < 0x4000 > = AlignedArrayBuffer {
3332 buffer : [ 0 ; 0x4000 ] ,
@@ -99,16 +98,18 @@ fn start(disk_number: u16, partition_table_start: *const u8) -> ! {
9998 writeln ! ( screen:: Writer , "loading kernel..." ) . unwrap ( ) ;
10099 let kernel_len = load_file ( "kernel-x86_64" , KERNEL_DST , & mut fs, & mut disk, disk_buffer) ;
101100 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 ) ;
102103 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) {
104105 Some ( s) => s,
105106 None => 0u64 ,
106107 } ;
107108
108109 if ramdisk_len == 0 {
109110 writeln ! ( screen:: Writer , "No ramdisk found, skipping." ) . unwrap ( ) ;
110111 } else {
111- writeln ! ( screen:: Writer , "Loaded ramdisk at {RAMDISK_DST :#p}" ) . unwrap ( ) ;
112+ writeln ! ( screen:: Writer , "Loaded ramdisk at {ramdisk_start :#p}" ) . unwrap ( ) ;
112113 }
113114
114115 let memory_map = unsafe { memory_map:: query_memory_map ( ) } . unwrap ( ) ;
@@ -142,7 +143,7 @@ fn start(disk_number: u16, partition_table_start: *const u8) -> ! {
142143 len : kernel_len,
143144 } ,
144145 ramdisk : Region {
145- start : RAMDISK_DST as u64 ,
146+ start : ramdisk_start as u64 ,
146147 len : ramdisk_len,
147148 } ,
148149 memory_map_addr : memory_map. as_mut_ptr ( ) as u32 ,
0 commit comments