@@ -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,15 +141,15 @@ fn main_inner(image: Handle, mut st: SystemTable<Boot>) -> Status {
133
141
) ;
134
142
}
135
143
136
- fn load_kernel ( image : Handle , st : & SystemTable < Boot > ) -> Kernel < ' static > {
137
- let kernel_slice = load_kernel_file ( image, st) . expect ( "couldn't find kernel" ) ;
138
- Kernel :: parse ( kernel_slice)
144
+ fn load_ramdisk ( image : Handle , st : & SystemTable < Boot > ) -> Option < & ' static [ u8 ] > {
145
+ load_file_from_disk ( RAMDISK_FILENAME , image, st)
139
146
}
140
147
141
- /// Try to load a kernel file from the boot device.
142
- fn load_kernel_file ( image : Handle , st : & SystemTable < Boot > ) -> Option < & ' static mut [ u8 ] > {
143
- load_kernel_file_from_disk ( image, st)
144
- . or_else ( || load_kernel_file_from_tftp_boot_server ( image, st) )
148
+ fn load_kernel ( image : Handle , st : & SystemTable < Boot > ) -> Kernel < ' static > {
149
+ let kernel_slice = load_file_from_disk ( KERNEL_FILENAME , image, st)
150
+ . or_else ( || load_kernel_file_from_tftp_boot_server ( KERNEL_FILENAME , image, st) )
151
+ . expect ( "couldn't find kernel" ) ;
152
+ Kernel :: parse ( kernel_slice)
145
153
}
146
154
147
155
fn load_file_from_disk (
@@ -252,12 +260,9 @@ fn load_file_from_disk(
252
260
Some ( file_slice)
253
261
}
254
262
255
- fn load_kernel_file_from_disk ( image : Handle , st : & SystemTable < Boot > ) -> Option < & ' static mut [ u8 ] > {
256
- load_file_from_disk ( KERNEL_FILENAME , image, st)
257
- }
258
-
259
263
/// Try to load a kernel from a TFTP boot server.
260
264
fn load_kernel_file_from_tftp_boot_server (
265
+ name : & str ,
261
266
image : Handle ,
262
267
st : & SystemTable < Boot > ,
263
268
) -> Option < & ' static mut [ u8 ] > {
0 commit comments