@@ -200,9 +200,17 @@ def main(args, extra_args=None):
200
200
# TODO why is it mandatory to pass mem= here? Not true for QEMU.
201
201
# Anything smaller than physical blows up as expected, but why can't it auto-detect the right value?
202
202
'--command-line' , 'earlyprintk=pl011,0x1c090000 lpj=19988480 rw loglevel=8 mem={} root=/dev/sda {}' .format (memory , kernel_cli ), common .Newline ,
203
- '--dtb-filename' , os .path .join (common .gem5_system_dir , 'arm' , 'dt' , 'armv{}_gem5_v1_{}{}cpu.dtb' .format (common .armv , dp650_cmd , args .cpus )), common .Newline ,
204
203
'--machine-type' , common .machine , common .Newline ,
205
204
])
205
+ dtb = None
206
+ if args .dtb is not None :
207
+ dtb = args .dtb
208
+ elif args .dp650 :
209
+ dtb = os .path .join (common .gem5_system_dir , 'arm' , 'dt' , 'armv{}_gem5_v1_{}{}cpu.dtb' .format (common .armv , dp650_cmd , args .cpus )), common .Newline ,
210
+ if dtb is None :
211
+ cmd .extend (['--generate-dtb' , common .Newline ])
212
+ else :
213
+ cmd .extend (['--dtb-filename' , dtb , common .Newline ])
206
214
if common .baremetal is None :
207
215
cmd .extend ([
208
216
'--param' , 'system.panic_on_panic = True' , common .Newline
@@ -228,10 +236,11 @@ def main(args, extra_args=None):
228
236
'--big-cpus' , '2' , common .Newline ,
229
237
'--cpu-type' , cpu_type , common .Newline ,
230
238
'--disk' , common .disk_image , common .Newline ,
231
- '--dtb' , os .path .join (common .gem5_system_dir , 'arm' , 'dt' , 'armv8_gem5_v1_big_little_2_2.dtb' ), common .Newline ,
232
239
'--kernel' , common .image , common .Newline ,
233
240
'--little-cpus' , '2' , common .Newline ,
234
241
])
242
+ if args .dtb :
243
+ cmd .extend (['--dtb' , os .path .join (common .gem5_system_dir , 'arm' , 'dt' , 'armv8_gem5_v1_big_little_2_2.dtb' ), common .Newline ,])
235
244
if args .wait_gdb :
236
245
# https://stackoverflow.com/questions/49296092/how-to-make-gem5-wait-for-gdb-to-connect-to-reliably-break-at-start-kernel-of-th
237
246
cmd .extend (['--param' , 'system.cpu[0].wait_for_remote_gdb = True' , common .Newline ])
@@ -312,6 +321,8 @@ def main(args, extra_args=None):
312
321
serial_monitor +
313
322
vnc
314
323
)
324
+ if args .dtb is not None :
325
+ cmd .extend (['-dtb' , args .dtb , common .Newline ])
315
326
if not qemu_executable_prebuilt :
316
327
cmd .extend (qemu_user_and_system_options )
317
328
if args .initrd :
@@ -458,6 +469,13 @@ https://superuser.com/questions/1373226/how-to-redirect-qemu-serial-output-to-bo
458
469
'-D' , '--debug-vm' , default = defaults ['debug_vm' ], nargs = '?' , action = 'store' , const = '' ,
459
470
help = 'Run GDB on the emulator itself.'
460
471
)
472
+ parser .add_argument (
473
+ '--dtb' ,
474
+ help = '''\
475
+ Use the specified DTB file. If not given, let the emulator generate a DTB for us,
476
+ which is what you usually want.
477
+ '''
478
+ )
461
479
parser .add_argument (
462
480
'-E' , '--eval' ,
463
481
help = '''\
0 commit comments