Message ID | 1476269048-13895-2-git-send-email-thuth@redhat.com |
---|---|
State | Accepted |
Headers | show |
On 12/10/16 21:44, Thomas Huth wrote: > Now that all necessary functions are provided by Paflof, too, > we can finally link the libnet code to this binary. To be able > to call the netboot() function from the Forth code now, we also > add a wrapper that takes the parameter string from the obp-tftp > package and converts it to an argv array that is expected by > the netboot() function. This breaks my netboot setup. Expected: ============================================== Trying to load: from: /pci@800000020000000/ethernet@2 ... Initializing NIC Reading MAC address from device: c0:41:49:4b:00:00 Requesting information via DHCP: done Using IPv4 address: 10.61.191.0 Requesting file "image.aiktest0" via TFTP from 10.61.2.7 Receiving data: 270 KBytes TFTP: Received image.aiktest0 (270 KBytes) Successfully loaded Try to netboot Initializing NIC Reading MAC address from device: c0:41:49:4b:00:00 Requesting information via DHCP: done Using IPv4 address: 10.61.191.0 Requesting file "/etc/01-c0-41-49-4b-00-00" via TFTP from 10.61.2.7 Receiving data: 0 KBytes TFTP: Received /etc/01-c0-41-49-4b-00-00 (0 KBytes) Config file read, 468 bytes Welcome to yaboot Hit <TAB> for boot options. Welcome to yaboot version 1.3.17.141415 Enter "help" to get some basic usage information boot: ============================================== What I get: ============================================== Trying to load: from: /pci@800000020000000/ethernet@2 ... Initializing NIC Reading MAC address from device: c0:41:49:4b:00:00 Requesting information via DHCP: done Using IPv4 address: 10.61.191.0 Requesting file "image.aiktest0" via TFTP from 10.61.2.7 Receiving data: 270 KBytes TFTP: Received image.aiktest0 (270 KBytes) Successfully loaded Try to netboot Initializing NIC Reading MAC address from device: c0:41:49:4b:00:00 Requesting information via DHCP: 010writemethod 'load' failed fffffbbc Error, can't read config file Initializing NIC Reading MAC address from device: c0:41:49:4b:00:00 Requesting information via DHCP: 010writemethod 'load' failed fffffbbc Error, can't read config file ERROR: stack overflow in engine()! Initializing NIC Reading MAC address from device: c0:41:49:4b:00:00 Requesting information via DHCP: 010writemethod 'load' failed fffffbbc Error, can't read config file Initializing NIC Reading MAC address from device: c0:41:49:4b:00:00 Requesting information via DHCP: 010writemethod 'load' failed fffffbbc Error, can't read config file Initializing NIC Reading MAC address from device: c0:41:49:4b:00:00 Requesting information via DHCP: 010writemethod 'load' failed fffffbbc Error, can't read config file Initializing NIC Reading MAC address from device: c0:41:49:4b:00:00 Requesting information via DHCP: 010writemethod 'load' failed fffffbbc Error, can't read config file Initializing NIC Reading MAC address from device: c0:41:49:4b:00:00 Requesting information via DHCP: 010writemethod 'load' failed fffffbbc Error, can't read config file Initializing NIC Reading MAC address from device: c0:41:49:4b:00:00 Requesting information via DHCP: 010writemethod 'load' failed fffffbbc Error, can't read config file Initializing NIC Reading MAC address from device: c0:41:49:4b:00:00 Requesting information via DHCP: 010writemethod 'load' failed fffffbbc Error, can't read config file Initializing NIC Reading MAC address from device: c0:41:49:4b:00:00 Requesting information via DHCP: 010writemethod 'load' failed fffffbbc Error, can't read config file Welcome to yaboot version 1.3.17.141415 Enter "help" to get some basic usage information boot: Please wait, loading kernel... Initializing NIC Reading MAC address from device: c0:41:49:4b:00:00 Requesting information via DHCP: 010writemethod 'load' failed fffffbbc Can't read Elf e_ident/e_type/e_machine info boot: ============================================== My QEMU cmd line: ============================================== /home/aik/p/qemu-kvm/ppc64-softmmu/qemu-system-ppc64 -enable-kvm -m 4G \ -nodefaults \ -chardev stdio,id=STDIO0,signal=off,mux=on \ -device spapr-vty,id=svty0,chardev=STDIO0,reg=0x71000100 \ -mon id=MON0,chardev=STDIO0,mode=readline -nographic -vga none \ -device virtio-serial-pci,id=vserial0 \ -netdev tap,id=TAP0,vhost=on,helper=/home/aik/qemu-bridge-helper \ -device \ "virtio-net-pci,id=vnet0,bootindex=+1,mac=C0:41:49:4b:00:00,netdev=TAP0" \ -trace events=qemu_trace_events \ -machine pseries \ -smp 16,threads=8 \ -L /home/aik/t/qemu-ppc64-bios/ -bios ./slof.bin ============================================== My yaboot config: ============================================== alexey@bran:/srv/tftp$ cat ./etc/01-c0-41-49-4b-00-01 init-message = "\nWelcome to yaboot\nHit <TAB> for boot options.\n\n" timeout=2000 default=3.11.aik #image=zImage.3.11.aik image=aik/vmlinux-3.11.aik label=3.11.aik initrd=aik/initramfs-3.11.aik.img read-only append="console=hvc0 pci=pcie_bus_safe" image=aik/vmlinuz.rhel7 label=aik.rhel7 initrd=aik/initrd.img.rhel7 read-only append="ro inst.sshd inst.repo=http://10.33.4.4/distros/rhel7/ root=live:http://10.33.4.4/distros/rhel7/LiveOS/squashfs.img vnc=1" ============================================== > > Signed-off-by: Thomas Huth <thuth@redhat.com> > --- > board-qemu/slof/Makefile | 8 +++++--- > clients/net-snk/app/main.c | 2 -- > lib/libnet/libnet.code | 19 +++++++++++++++++++ > lib/libnet/libnet.in | 2 ++ > slof/fs/packages/obp-tftp.fs | 7 ++++--- > 5 files changed, 30 insertions(+), 8 deletions(-) > create mode 100644 lib/libnet/libnet.code > create mode 100644 lib/libnet/libnet.in > > diff --git a/board-qemu/slof/Makefile b/board-qemu/slof/Makefile > index 940a15a..efca16e 100644 > --- a/board-qemu/slof/Makefile > +++ b/board-qemu/slof/Makefile > @@ -21,7 +21,7 @@ all: version.o Makefile.dep OF.ffs paflof $(SLOFCMNDIR)/xvect.bin > CPPFLAGS = -I$(LIBCMNDIR)/libbootmsg -I$(LIBCMNDIR)/libhvcall \ > -I$(LIBCMNDIR)/libvirtio -I$(LIBCMNDIR)/libnvram \ > -I$(LIBCMNDIR)/libusb -I$(LIBCMNDIR)/libveth \ > - -I$(LIBCMNDIR)/libe1k > + -I$(LIBCMNDIR)/libe1k -I$(LIBCMNDIR)/libnet > SLOF_LIBS = \ > $(LIBCMNDIR)/libbootmsg.a \ > $(LIBCMNDIR)/libelf.a \ > @@ -30,7 +30,8 @@ SLOF_LIBS = \ > $(LIBCMNDIR)/libusb.a \ > $(LIBCMNDIR)/libnvram.a \ > $(LIBCMNDIR)/libveth.a \ > - $(LIBCMNDIR)/libe1k.a > + $(LIBCMNDIR)/libe1k.a \ > + $(LIBCMNDIR)/libnet.a > BOARD_SLOF_IN = \ > $(LIBCMNDIR)/libhvcall/hvcall.in \ > $(LIBCMNDIR)/libvirtio/virtio.in \ > @@ -40,7 +41,8 @@ BOARD_SLOF_IN = \ > $(LIBCMNDIR)/libnvram/libnvram.in \ > $(LIBCMNDIR)/libbases/libbases.in \ > $(LIBCMNDIR)/libveth/veth.in \ > - $(LIBCMNDIR)/libe1k/e1k.in > + $(LIBCMNDIR)/libe1k/e1k.in \ > + $(LIBCMNDIR)/libnet/libnet.in > BOARD_SLOF_CODE = $(BOARD_SLOF_IN:%.in=%.code) > > include $(SLOFCMNDIR)/Makefile.inc > diff --git a/clients/net-snk/app/main.c b/clients/net-snk/app/main.c > index 22aeba7..3a01ac6 100644 > --- a/clients/net-snk/app/main.c > +++ b/clients/net-snk/app/main.c > @@ -31,8 +31,6 @@ main(int argc, char *argv[]) > int i; > of_set_callback((void *) &_callback_entry); > > - if (strcmp(argv[0], "netboot") == 0 && argc >= 5) > - return netboot(argc, argv); > if (strcmp(argv[0], "ping") == 0) > return ping(argc, argv); > #ifdef SNK_BIOSEMU_APPS > diff --git a/lib/libnet/libnet.code b/lib/libnet/libnet.code > new file mode 100644 > index 0000000..66f955f > --- /dev/null > +++ b/lib/libnet/libnet.code > @@ -0,0 +1,19 @@ > + > +#include <netapps.h> > + > +PRIM(NET_X2d_LOAD) > + int slen = TOS.n; POP; > + char *arg = TOS.a; > + char *argvs[8]; > + int i, p; > + argvs[0] = arg; > + i = 1; > + for (p = 0; p < slen; p++) { > + if (arg[p] == ' ') { > + arg[p] = 0; > + argvs[i] = &arg[p + 1]; > + i++; > + } > + } > + TOS.n = netboot(i, argvs); > +MIRP > diff --git a/lib/libnet/libnet.in b/lib/libnet/libnet.in > new file mode 100644 > index 0000000..365587c > --- /dev/null > +++ b/lib/libnet/libnet.in > @@ -0,0 +1,2 @@ > + > +cod(NET-LOAD) > diff --git a/slof/fs/packages/obp-tftp.fs b/slof/fs/packages/obp-tftp.fs > index 047c9b6..e26025d 100644 > --- a/slof/fs/packages/obp-tftp.fs > +++ b/slof/fs/packages/obp-tftp.fs > @@ -38,15 +38,16 @@ INSTANCE VARIABLE ciregs-buffer > (u.) s" netboot " 2swap $cat s" 60000000 " $cat > > \ Allocate 1720 bytes to store the BOOTP-REPLY packet > - 6B8 alloc-mem dup >r (u.) $cat s" " $cat > + 6B8 alloc-mem dup >r (u.) $cat > huge-tftp-load @ IF s" 1 " ELSE s" 0 " THEN $cat > \ Add desired TFTP-Blocksize as additional argument > s" 1432 " $cat > \ Add OBP-TFTP Bootstring argument, e.g. "10.128.0.1,bootrom.bin,10.128.40.1" > my-args $cat > + \ Zero-terminate string > + s" " $cat 2dup + 1 - 0 swap c! > > - \ Call SNK netboot loadr > - (client-exec) dup 0< IF drop 0 THEN > + net-load dup 0< IF drop 0 THEN > > \ Restore to old client interface register > ciregs-buffer @ ciregs ciregs-size move >
diff --git a/board-qemu/slof/Makefile b/board-qemu/slof/Makefile index 940a15a..efca16e 100644 --- a/board-qemu/slof/Makefile +++ b/board-qemu/slof/Makefile @@ -21,7 +21,7 @@ all: version.o Makefile.dep OF.ffs paflof $(SLOFCMNDIR)/xvect.bin CPPFLAGS = -I$(LIBCMNDIR)/libbootmsg -I$(LIBCMNDIR)/libhvcall \ -I$(LIBCMNDIR)/libvirtio -I$(LIBCMNDIR)/libnvram \ -I$(LIBCMNDIR)/libusb -I$(LIBCMNDIR)/libveth \ - -I$(LIBCMNDIR)/libe1k + -I$(LIBCMNDIR)/libe1k -I$(LIBCMNDIR)/libnet SLOF_LIBS = \ $(LIBCMNDIR)/libbootmsg.a \ $(LIBCMNDIR)/libelf.a \ @@ -30,7 +30,8 @@ SLOF_LIBS = \ $(LIBCMNDIR)/libusb.a \ $(LIBCMNDIR)/libnvram.a \ $(LIBCMNDIR)/libveth.a \ - $(LIBCMNDIR)/libe1k.a + $(LIBCMNDIR)/libe1k.a \ + $(LIBCMNDIR)/libnet.a BOARD_SLOF_IN = \ $(LIBCMNDIR)/libhvcall/hvcall.in \ $(LIBCMNDIR)/libvirtio/virtio.in \ @@ -40,7 +41,8 @@ BOARD_SLOF_IN = \ $(LIBCMNDIR)/libnvram/libnvram.in \ $(LIBCMNDIR)/libbases/libbases.in \ $(LIBCMNDIR)/libveth/veth.in \ - $(LIBCMNDIR)/libe1k/e1k.in + $(LIBCMNDIR)/libe1k/e1k.in \ + $(LIBCMNDIR)/libnet/libnet.in BOARD_SLOF_CODE = $(BOARD_SLOF_IN:%.in=%.code) include $(SLOFCMNDIR)/Makefile.inc diff --git a/clients/net-snk/app/main.c b/clients/net-snk/app/main.c index 22aeba7..3a01ac6 100644 --- a/clients/net-snk/app/main.c +++ b/clients/net-snk/app/main.c @@ -31,8 +31,6 @@ main(int argc, char *argv[]) int i; of_set_callback((void *) &_callback_entry); - if (strcmp(argv[0], "netboot") == 0 && argc >= 5) - return netboot(argc, argv); if (strcmp(argv[0], "ping") == 0) return ping(argc, argv); #ifdef SNK_BIOSEMU_APPS diff --git a/lib/libnet/libnet.code b/lib/libnet/libnet.code new file mode 100644 index 0000000..66f955f --- /dev/null +++ b/lib/libnet/libnet.code @@ -0,0 +1,19 @@ + +#include <netapps.h> + +PRIM(NET_X2d_LOAD) + int slen = TOS.n; POP; + char *arg = TOS.a; + char *argvs[8]; + int i, p; + argvs[0] = arg; + i = 1; + for (p = 0; p < slen; p++) { + if (arg[p] == ' ') { + arg[p] = 0; + argvs[i] = &arg[p + 1]; + i++; + } + } + TOS.n = netboot(i, argvs); +MIRP diff --git a/lib/libnet/libnet.in b/lib/libnet/libnet.in new file mode 100644 index 0000000..365587c --- /dev/null +++ b/lib/libnet/libnet.in @@ -0,0 +1,2 @@ + +cod(NET-LOAD) diff --git a/slof/fs/packages/obp-tftp.fs b/slof/fs/packages/obp-tftp.fs index 047c9b6..e26025d 100644 --- a/slof/fs/packages/obp-tftp.fs +++ b/slof/fs/packages/obp-tftp.fs @@ -38,15 +38,16 @@ INSTANCE VARIABLE ciregs-buffer (u.) s" netboot " 2swap $cat s" 60000000 " $cat \ Allocate 1720 bytes to store the BOOTP-REPLY packet - 6B8 alloc-mem dup >r (u.) $cat s" " $cat + 6B8 alloc-mem dup >r (u.) $cat huge-tftp-load @ IF s" 1 " ELSE s" 0 " THEN $cat \ Add desired TFTP-Blocksize as additional argument s" 1432 " $cat \ Add OBP-TFTP Bootstring argument, e.g. "10.128.0.1,bootrom.bin,10.128.40.1" my-args $cat + \ Zero-terminate string + s" " $cat 2dup + 1 - 0 swap c! - \ Call SNK netboot loadr - (client-exec) dup 0< IF drop 0 THEN + net-load dup 0< IF drop 0 THEN \ Restore to old client interface register ciregs-buffer @ ciregs ciregs-size move
Now that all necessary functions are provided by Paflof, too, we can finally link the libnet code to this binary. To be able to call the netboot() function from the Forth code now, we also add a wrapper that takes the parameter string from the obp-tftp package and converts it to an argv array that is expected by the netboot() function. Signed-off-by: Thomas Huth <thuth@redhat.com> --- board-qemu/slof/Makefile | 8 +++++--- clients/net-snk/app/main.c | 2 -- lib/libnet/libnet.code | 19 +++++++++++++++++++ lib/libnet/libnet.in | 2 ++ slof/fs/packages/obp-tftp.fs | 7 ++++--- 5 files changed, 30 insertions(+), 8 deletions(-) create mode 100644 lib/libnet/libnet.code create mode 100644 lib/libnet/libnet.in