@@ -38,6 +38,7 @@ mod memory_descriptor;
38
38
39
39
static SYSTEM_TABLE : RacyCell < Option < SystemTable < Boot > > > = RacyCell :: new ( None ) ;
40
40
const KERNEL_FILENAME : & str = "kernel-x86_64" ;
41
+ const RAMDISK_FILENAME : & str = "ramdisk-x86_64" ;
41
42
42
43
struct RacyCell < T > ( UnsafeCell < T > ) ;
43
44
@@ -76,6 +77,7 @@ fn main_inner(image: Handle, mut st: SystemTable<Boot>) -> Status {
76
77
. unwrap ( ) ;
77
78
78
79
let kernel = load_kernel ( image, & st) ;
80
+ let ramdisk = load_ramdisk ( image, & st) ;
79
81
80
82
let framebuffer = init_logger ( & st, kernel. config ) ;
81
83
@@ -121,8 +123,14 @@ fn main_inner(image: Handle, mut st: SystemTable<Boot>) -> Status {
121
123
. or_else ( || config_entries. find ( |entry| matches ! ( entry. guid, cfg:: ACPI_GUID ) ) ) ;
122
124
rsdp. map ( |entry| PhysAddr :: new ( entry. address as u64 ) )
123
125
} ,
124
- ramdisk_addr : None ,
125
- ramdisk_len : 0 ,
126
+ ramdisk_addr : match ramdisk {
127
+ Some ( rd) => Some ( rd as * const _ as u64 ) ,
128
+ None => None ,
129
+ } ,
130
+ ramdisk_len : match ramdisk {
131
+ Some ( rd) => rd. len ( ) as u64 ,
132
+ None => 0u64 ,
133
+ } ,
126
134
} ;
127
135
128
136
bootloader_x86_64_common:: load_and_switch_to_kernel (
@@ -133,6 +141,10 @@ fn main_inner(image: Handle, mut st: SystemTable<Boot>) -> Status {
133
141
) ;
134
142
}
135
143
144
+ fn load_ramdisk ( image : Handle , st : & SystemTable < Boot > ) -> Option < & ' static [ u8 ] > {
145
+ load_file_from_disk ( RAMDISK_FILENAME , image, st)
146
+ }
147
+
136
148
fn load_kernel ( image : Handle , st : & SystemTable < Boot > ) -> Kernel < ' static > {
137
149
let kernel_slice = load_kernel_file ( image, st) . expect ( "couldn't find kernel" ) ;
138
150
Kernel :: parse ( kernel_slice)
0 commit comments