@@ -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
@@ -122,8 +124,14 @@ fn main_inner(image: Handle, mut st: SystemTable<Boot>) -> Status {
122
124
. or_else ( || config_entries. find ( |entry| matches ! ( entry. guid, cfg:: ACPI_GUID ) ) ) ;
123
125
rsdp. map ( |entry| PhysAddr :: new ( entry. address as u64 ) )
124
126
} ,
125
- ramdisk_addr : None ,
126
- ramdisk_len : 0 ,
127
+ ramdisk_addr : match ramdisk {
128
+ Some ( rd) => Some ( rd as * const _ as u64 ) ,
129
+ None => None ,
130
+ } ,
131
+ ramdisk_len : match ramdisk {
132
+ Some ( rd) => rd. len ( ) as u64 ,
133
+ None => 0u64 ,
134
+ } ,
127
135
} ;
128
136
129
137
bootloader_x86_64_common:: load_and_switch_to_kernel (
@@ -134,15 +142,15 @@ fn main_inner(image: Handle, mut st: SystemTable<Boot>) -> Status {
134
142
) ;
135
143
}
136
144
137
- fn load_kernel ( image : Handle , st : & SystemTable < Boot > ) -> Kernel < ' static > {
138
- let kernel_slice = load_kernel_file ( image, st) . expect ( "couldn't find kernel" ) ;
139
- Kernel :: parse ( kernel_slice)
145
+ fn load_ramdisk ( image : Handle , st : & SystemTable < Boot > ) -> Option < & ' static [ u8 ] > {
146
+ load_file_from_disk ( RAMDISK_FILENAME , image, st)
140
147
}
141
148
142
- /// Try to load a kernel file from the boot device.
143
- fn load_kernel_file ( image : Handle , st : & SystemTable < Boot > ) -> Option < & ' static mut [ u8 ] > {
144
- load_kernel_file_from_disk ( image, st)
145
- . or_else ( || load_kernel_file_from_tftp_boot_server ( image, st) )
149
+ fn load_kernel ( image : Handle , st : & SystemTable < Boot > ) -> Kernel < ' static > {
150
+ let kernel_slice = load_file_from_disk ( KERNEL_FILENAME , image, st)
151
+ . or_else ( || load_kernel_file_from_tftp_boot_server ( KERNEL_FILENAME , image, st) )
152
+ . expect ( "couldn't find kernel" ) ;
153
+ Kernel :: parse ( kernel_slice)
146
154
}
147
155
148
156
fn load_file_from_disk (
@@ -253,12 +261,9 @@ fn load_file_from_disk(
253
261
Some ( file_slice)
254
262
}
255
263
256
- fn load_kernel_file_from_disk ( image : Handle , st : & SystemTable < Boot > ) -> Option < & ' static mut [ u8 ] > {
257
- load_file_from_disk ( KERNEL_FILENAME , image, st)
258
- }
259
-
260
264
/// Try to load a kernel from a TFTP boot server.
261
265
fn load_kernel_file_from_tftp_boot_server (
266
+ name : & str ,
262
267
image : Handle ,
263
268
st : & SystemTable < Boot > ,
264
269
) -> Option < & ' static mut [ u8 ] > {
0 commit comments