@@ -289,24 +289,41 @@ pub fn update_fdt(fdt_src: NonNull<u8>, dtb_size: usize, vm: VMRef) {
289289
290290 previous_node_level = node. level ;
291291
292- for prop in node. propertys ( ) {
293- if prop. name . starts_with ( "linux,initrd-" ) {
294- if node . name ( ) == "chosen" {
292+ if node. name ( ) == "chosen" {
293+ for prop in node . propertys ( ) {
294+ if prop . name . starts_with ( "linux,initrd-" ) {
295295 info ! (
296296 "Skipping property: {}, belonging to node: {}" ,
297297 prop. name,
298298 node. name( )
299299 ) ;
300- continue ;
300+ } else if prop. name == "bootargs" {
301+ let bootargs_str = prop. str ( ) ;
302+ let modified_bootargs = bootargs_str. replace ( " ro " , " rw " ) ;
303+
304+ if modified_bootargs != bootargs_str {
305+ info ! (
306+ "Modifying bootargs: {} -> {}" ,
307+ bootargs_str, modified_bootargs
308+ ) ;
309+ }
310+
311+ new_fdt
312+ . property_string ( prop. name , & modified_bootargs)
313+ . unwrap ( ) ;
301314 } else {
302- warn ! (
315+ debug ! (
303316 "Find property: {}, belonging to node: {}" ,
304317 prop. name,
305318 node. name( )
306319 ) ;
320+ new_fdt. property ( prop. name , prop. raw_value ( ) ) . unwrap ( ) ;
307321 }
308322 }
309- new_fdt. property ( prop. name , prop. raw_value ( ) ) . unwrap ( ) ;
323+ } else {
324+ for prop in node. propertys ( ) {
325+ new_fdt. property ( prop. name , prop. raw_value ( ) ) . unwrap ( ) ;
326+ }
310327 }
311328 }
312329
0 commit comments