|
! This is an example configuration file for GXemul. ! Anything following an exclamation mark (and also the exclamation ! mark itself) is ignored. ! ! Almost all settings are optional. name("my test emul") ! Optional name of this emulation ! This creates an ethernet network: net( ipv4net("10.2.0.0") ! The default is 10.0.0.0/8, but ipv4len(16) ! it can be overridden like this. ! local_port(12345) ! add_remote("localhost:12346") ) ! This creates a machine: machine( name("My test machine") ! serial_nr(123) ! Useful when emulating multiple machines ! on multiple hosts, and they need to have ! unique MAC addresses, etc. type("dec") ! This is actually not optional subtype("5000/200") cpu("R3000") ! Normally set implicitly to a reasonable ! value, depending on type and subtype ! ncpus(4) ! use_random_bootstrap_cpu(yes) memory(128) ! 128 MB memory. This overrides ! the default amount of memory for ! this machine type. ! random_mem_contents(yes) ! prom_emulation(no) ! byte_order(big) ! Normally set implicitly (because ! of type and subtype, or decided ! from the file loaded with load load("netbsd-INSTALL") bootname("netbsd") bootarg("-a") ! n_gfx_cards(2) ! for DECstation dual/tripple-head ! emulated_hz(10000000) ! for fixing the emulated clock speed ! add_x11_display("otherbox:0") ! for dual/tripple-head etc ! add_x11_display("thisbox:0") { Devices can be added like this: device("8250 addr=0x18000800 addr_mult=4") The name comes first, followed by optional parameters. Remember to use 0x for hexadecimal values. } ! force_netboot(yes) ! start_paused(yes) disk("nbsd.img") disk("6c:cdrom.iso") use_x11(yes) x11_scaledown(2) ! slow_serial_interrupts_hack_for_linux(yes) { Long comments spanning multiple lines should be surrounded with tuborg parentheses. { Long comments can be nested. } } ) ! Multiple machine definitions are allowed. machine( name("another machine") type("hpcmips") subtype("be300") ... ) |
Starting the emulator with a configuration file is as simple as
$ gxemul @myconfigif myconfig is the name of the configuration file.
machine( subtype("3max") load("netbsd-pmax-INSTALL-2.0") ) |
For most machine types, type is needed. If only subtype is specified, and the name is unique (i.e. there is only one major type which has such a subtype), then the type can be omitted. Also, adding a net is quite useful, especially for netbooting kernels.
It is possible to add multiple machine entries into one configuration file. This will cause the emulator to try to run all those machines simultaneously. An alternative (and better) solution for doing this, which gives higher reliability (stability) and performance, is to have one configuration file per emulated machine.
! Configuration file for a ! "client" machine, netbooting ! of another machine. net( local_port(15000) add_remote("localhost:15001") ) machine( name("client machine") serial_nr(1) ! 10.0.0.1 type("sgi") subtype("o2") load("netbsd-GENERIC32_IP3x.gz") ) | ! Configuration file for the ! "server" machine. net( local_port(15001) add_remote("localhost:15000") ) machine( name("nfs server") serial_nr(2) ! 10.0.0.2 type("dec") subtype("3max") disk("nbsd_pmax.img") ) |
This example creates a network using the default settings (10.0.0.0/8), but it also allows the network to be connected to other emulator instances. local_port(15000) means that anything coming in to UDP port 15000 on the host is added to the network. All ethernet packets on the network are also sent out to all other connected machines (those added with add_remote()).
As you can see in the example, this is a configuration file for netbooting a NetBSD/sgimips diskless machine, with a NetBSD/pmax machine acting as the nfs server. Note that the nfs server has ports 15000 and 15001 reversed!
"localhost" can be changed to the Internet hostname of a remote machine, to run the simulation across a physical network.
NOTE: There is no error checking or security checking of any kind. All UDP packets arriving at the input port are added to the emulated ethernet. This is not very good of course; use this feature at your own risk.