X-Git-Url: http://rtime.felk.cvut.cz/gitweb/novaboot.git/blobdiff_plain/4af22159756e71747ed25baacd451af6b1a87548..e156afd58ba9a5fd169965fa8c49503fe103ddc8:/novaboot diff --git a/novaboot b/novaboot index f2984d8..f4fcdc9 100755 --- a/novaboot +++ b/novaboot @@ -52,6 +52,7 @@ $CFG::hypervisor_params = "serial"; $CFG::genisoimage = "genisoimage"; $CFG::qemu = 'qemu-system-i386 -cpu coreduo -smp 2'; $CFG::default_target = ''; +$CFG::netif = 'eth0'; %CFG::targets = ( 'qemu' => '--qemu', "tud" => '--server=erwin.inf.tu-dresden.de:~sojka/boot/novaboot --rsync-flags="--chmod=Dg+s,ug+w,o-w,+rX --rsync-path=\"umask 002 && rsync\"" --grub --grub-prefix=(nd)/tftpboot/sojka/novaboot --grub-preamble="timeout 0" --concat --iprelay=141.76.48.80:2324 --scriptmod=s/\\\\bhostserial\\\\b/hostserialpci/g', @@ -141,11 +142,11 @@ my ($target_reset, $target_power_on, $target_power_off); ); $rsync_flags = ''; $rom_prefix = 'rom://'; -$stty = 'raw -crtscts -onlcr 115200'; +$stty = 'raw -crtscts -onlcr -echo 115200'; $reset = 1; # Reset target by default $interaction = 1; # Perform target interaction by default $final_eol = 1; -$netif = 'eth0'; +$netif = $CFG::netif; $remote_expect_timeout = -1; my @expect_seen = (); @@ -176,6 +177,9 @@ my %opt_spec_safe = ( "prefix|grub-prefix=s" => \$grub_prefix, "pulsar-root=s" => \$pulsar_root, "pulsar|p:s" => \$pulsar, + "remote-expect=s"=> \$remote_expect, + "remote-expect-silent=s"=> sub { $remote_expect=$_[1]; $remote_expect_silent=1; }, + "remote-expect-timeout=i"=> \$remote_expect_timeout, "uboot-addr=s" => \%uboot_addr, "uboot-cmd=s" => \$uboot_cmd, "uboot-stop-key=s" => \$uboot_stop_key, @@ -219,9 +223,6 @@ my %opt_spec = ( "qemu-append=s" => \$qemu_append, "qemu-flags|q=s" => \$qemu_flags_cmd, "remote-cmd=s" => sub { @remote_cmd = ($_[1]); }, - "remote-expect=s"=> \$remote_expect, - "remote-expect-silent=s"=> sub { $remote_expect=$_[1]; $remote_expect_silent=1; }, - "remote-expect-timeout=i"=> \$remote_expect_timeout, "reset!" => \$reset, "reset-cmd=s" => sub { @reset_cmd = ($_[1]); }, "reset-send=s" => \$reset_send, @@ -995,7 +996,7 @@ foreach my $script (@scripts) { $hostname = ""; } my $files = join(" ", map({ ($file) = m/([^ ]*)/; $file; } ( @$modules, @bootloader_configs, @$copy))); - map({ my $file = (split)[0]; die "$file: $!" if ! -f $file; } @$modules); + map({ my $file = (split)[0]; die "Not a file: $file: $!" if ! -e $file || -d $file; } @$modules); my $istty = -t STDOUT && ($ENV{'TERM'} || 'dumb') ne 'dumb'; my $progress = $istty ? "--progress" : ""; if ($files) { @@ -1171,7 +1172,7 @@ if (defined $ider) { ### Reset target (IP relay, AMT, ...) if (defined $target_reset && $reset) { - print STDERR "novaboot: Reseting the test box... "; + print STDERR "novaboot: Resetting the test box... "; &$target_reset(); print STDERR "done\n"; if (defined $exp) { @@ -1246,7 +1247,7 @@ if (defined $uboot) { @$modules = map { if (/\.dtb$/) { $dtb=$_; (); } else { $_ } } @$modules; my $initrd = shift @$modules; - if (defined $kbin) { + if (defined $kbin && $kbin ne '/dev/null') { die "No '--uboot-addr kernel' given" unless $uboot_addr{kernel}; $exp->send("tftpboot $uboot_addr{kernel} $prefix$kbin\n"); $exp->expect(15, @@ -1379,6 +1380,40 @@ having per-system, per-user or per-project configurations. Configuration file syntax is described in section L. +Novaboot newcomers may be confused by a large number of configuration +options. Understanding all these options is not always needed, +depending on the used setup. The L
+shows different setups that vary in how much effort is needed +configure novaboot for them. The setups are: + +=over 3 + +=item A: Laptop and target device only + +This requires to configure everything on the laptop side, including a +serial line connection (L, L, ...), power +on/off/reset commands (L, ...), TFTP server +(L, L...), device IP addresses, etc. + +=item B: Laptop, target device and external TFTP server + +Like the previous setup, but the TFTP (and maybe DHCP) configuration +is handled by a server. Novaboot users need to understand where to +copy their files to the TFTP server (L) and which IP +addresses their target will get, but do not need to configure the +servers themselves. + +=item C: Novaboot server running novaboot-shell + +With this setup, the configuration is done on the server. Users only +need to know the SSH account (L) used to communicate between +novaboot and novaboot server. The server is implemented as a +restricted shell (L) on the server. No need to give +full shell access to novaboot users on the server. + +=back + =head2 Simple examples of using C: To boot Linux (files F and F in current @@ -1782,10 +1817,23 @@ example C. =item --remote-expect=I -Wait for reception of I after establishing the remote -connection. This option is needed when novaboot should wait for -confirmation before deploying files to the target, e.g. to not -overwrite other user's files when they are using the target. +Wait for reception of I after establishing the remote serial +line connection. Novaboot assumes that after establishing the serial +line connection, the user running novaboot has exclusive access to the +target. If establishing of the serial line connection happens +asynchronously (e.g. running a command remotely via SSH), we need this +option to wait until the exclusive access is confirmed by the remote +side. + +Depending on target configuration, this option can solve two practical +problems: 1) Overwriting of files deployed by another user currently +using the target. 2) Resetting the target board before serial line +connection is established and thus missing bootloader interaction. + +Example of usage with the L: + + --remote-cmd='ssh -tt example.com sterm -v /dev/ttyUSB0' --remote-expect='sterm: Connected' =item --remote-expect-silent=I @@ -1842,10 +1890,11 @@ Port to run the TFTP server on. Implies B<--tftp>. =item --netif=I -Network interface used to deploy files to the target. The default value is -I. This option influences the configuration of the DHCP server started -by B<--dhcp-tftp> and the value that B<$NB_MYIP> get replaced with during -U-Boot conversation. +Network interface used to deploy files to the target. This option +influences the configuration of the DHCP server started by +B<--dhcp-tftp> and the value that B<$NB_MYIP> get replaced with during +U-Boot conversation. The default value is C<$netif> variable from +configuration files, which defaults to I. =item --iso[=filename] @@ -2010,7 +2059,7 @@ The same as --exiton -re --exiton I. =item --exiton-timeout=I By default B<--exiton> waits for the string match forever. When this -option is specified, "exiton" timeouts after the specifies the number of +option is specified, "exiton" timeouts after the specified number of seconds and novaboot returns non-zero exit code. =item -i, --interactive @@ -2305,6 +2354,11 @@ Default target (see below) to use when no target is explicitly specified with the B<--target> command line option or B environment variable. +=item $netif + +Default value for the B<--netif> option. If not specified, it defaults +to I. + =item %targets Hash of target definitions to be used with the B<--target> option. The