PINE64
PXE Boot example? - Printable Version

+- PINE64 (https://forum.pine64.org)
+-- Forum: ROCK64 (https://forum.pine64.org/forumdisplay.php?fid=85)
+--- Forum: Linux on Rock64 (https://forum.pine64.org/forumdisplay.php?fid=88)
+--- Thread: PXE Boot example? (/showthread.php?tid=5815)



PXE Boot example? - lewis - 03-05-2018

Hi all,

I'm a noob here, so please go gentle!

I have a dnsmasq server (DHCP disabled) set up on my network which currently supplies Centos7 to a handful of i386 machines. This works perfectly!

I would now like to also boot my new Rock64 machine off the same server.

My problem is that I have no idea what files to install into the tftp directory to accomplish this.

I know that I need to configure the 'main' DHCP server (Windowz) to point at the correct file (not pxelinux.0).

I have loaded u-boot into the board's rom and it loos as though it is talking to the DHCP server...

... that's where I'm up to!

1) What files do I need to copy into the TFTP server? I am looking to install  https://github.com/ayufan-rock64/linux-build/releases/download/0.6.25/xenial-containers-rock64-0.6.25-193-arm64.img.xz

2) How can I tell that the machine connecting to the DHCP server is a Rock64?


Kind regards


RE: PXE Boot example? - coldfish - 03-07-2018

(03-05-2018, 02:38 PM)lewis Wrote: Hi all,

I'm a noob here, so please go gentle!

I have a dnsmasq server (DHCP disabled) set up on my network which currently supplies Centos7 to a handful of i386 machines. This works perfectly!

I would now like to also boot my new Rock64 machine off the same server.

My problem is that I have no idea what files to install into the tftp directory to accomplish this.

I know that I need to configure the 'main' DHCP server (Windowz) to point at the correct file (not pxelinux.0).

I have loaded u-boot into the board's rom and it loos as though it is talking to the DHCP server...

... that's where I'm up to!

1) What files do I need to copy into the TFTP server? I am looking to install  https://github.com/ayufan-rock64/linux-build/releases/download/0.6.25/xenial-containers-rock64-0.6.25-193-arm64.img.xz

2) How can I tell that the machine connecting to the DHCP server is a Rock64?


Kind regards

The ayufan's SPI Flash implementation has PXE boot capability. Here the link: http://wiki.pine64.org/index.php/NOOB#Flashing_u-boot_to_SPI_Flash


RE: PXE Boot example? - lewis - 03-07-2018

(03-07-2018, 01:12 AM)coldfish Wrote:
(03-05-2018, 02:38 PM)lewis Wrote: Hi all,

I'm a noob here, so please go gentle!

I have a dnsmasq server (DHCP disabled) set up on my network which currently supplies Centos7 to a handful of i386 machines. This works perfectly!

I would now like to also boot my new Rock64 machine off the same server.

My problem is that I have no idea what files to install into the tftp directory to accomplish this.

I know that I need to configure the 'main' DHCP server (Windowz) to point at the correct file (not pxelinux.0).

I have loaded u-boot into the board's rom and it loos as though it is talking to the DHCP server...

... that's where I'm up to!

1) What files do I need to copy into the TFTP server? I am looking to install  https://github.com/ayufan-rock64/linux-build/releases/download/0.6.25/xenial-containers-rock64-0.6.25-193-arm64.img.xz

2) How can I tell that the machine connecting to the DHCP server is a Rock64?


Kind regards

The ayufan's SPI Flash implementation has PXE boot capability. Here the link: http://wiki.pine64.org/index.php/NOOB#Flashing_u-boot_to_SPI_Flash
Thanks for the info.

I already have the board flashed. I need to know what to put in the tftpboot directory and where to get it from...


Cheers


RE: PXE Boot example? - pfeerick - 04-05-2018

If you're still around and looking for how to do this... I'm in the process of working on that, and am half-way there Wink

I also have a dnsmasq (proxyDHCP) PXE setup, and have gotten my rock64 to start booting from it.

You basically need the following in your pxe boot menu, and the matching files -
Code:
default rock64-kernel-4.4
prompt 0
timeout 3

menu title Boot options

label rock64-kernel-4.4
   kernel /Image
   initrd /initrd.img
   fdt /dtb
   append earlycon=uart8250,mmio32,0xff130000 rw root=/dev/nfs nfsroot=${serverip}:/data/rootfs/rock64-1 rootwait init=/sbin/init mtdparts=spi32766.0:32k(system),4064k(loader),3840k(reserved),256k(vendor),4M(uboot),4M(atf)

As I noticed once the rock64 started it's PXE requests that it was requesting via it's MAC, I created it's own config file with menu containing that, so that once I'm done it will have both a boot menu and auto-boot config.

I then created (I'm still trying to piece how this goes together so I can transfer this over to the clusterboard... so could be way off the mark here...)

boot.scr.uimg - empty - Becase uboot keeps looking for it. I suspect it allows for custom uboot commands, so it merely existing allowed things to continue
Image -> /boot/vmlinuz-4.4.114-rockchip-ayufan-193 (ln -s'd from running system but copying would be more better in the long term due to upgrades)
initrd.img -> /boot/initrd.img-4.4.114-rockchip-ayufan-193 (ln -s'd from running system  - above applies)
dtb -> /boot/dtb

and it essentially works now... rock64 will pull down the kernel via the network and boots. And it also now pulls down its root filesystem over the network via NFS.  After going back and editing the /etc/fstab as distributed and commenting out the /boot mount point which was now completely wrong, it seems to be booting up to a usable system just fine so far.

You can also extract those files from the boot.img contained within any of ayufan's minimal images, etc... just keep unpacking the file Wink

One oddity in my setup so far though... it doesn't get the serverip for the TFTP/PXE server automatically like it should... remains 0.0.0.0, although a laptop and VMs on my desktop boot just fine (so I know dnsmasq IS working)... so I have to set it manually until I manage to lock it into the uboot environment properly or work out why the rock64 is misbehaving - just need to work out how to save it to the SPI since it's also booting from that... that plus the PXE menu doesn't autoselect, but that could be because I have to manually intervene atm... work in progress! Wink


Edit (a little while later...):

After frittering around with the settings and it seems to be behaving itself now with the exception of the need to set the serverip at boot... i.e. doing the following on a boot/reboot: 

Code:
set serverip 192.168.0.210
boot

In pursuing an issue which appeared to be resulting from the network interface being disabled before everything was properly written, and thus poweroff/reboot just grinding to a halt... I 
  • added "ASYNCMOUNTNFS=no" to /etc/default/rcS, and
  • commented out both lines of "eth0" in /etc/network/interfaces.d/eth0
and it now seems to be working perfectly. The first change may not be needed, but I'm almost certain the second is so that systemd doesn't try to manage the networking. If things like a static IP are needed that can be specified as part of the kernel arguments, but I didn't want that anyway so it looks good so far.


RE: PXE Boot example? - lewis - 04-05-2018

(04-05-2018, 05:09 AM)pfeerick Wrote: If you're still around and looking for how to do this... I'm in the process of working on that, and am half-way there Wink

I also have a dnsmasq (proxyDHCP) PXE setup, and have gotten my rock64 to start booting from it.

You basically need the following in your pxe boot menu, and the matching files -
Code:
default rock64-kernel-4.4
prompt 0
timeout 3

menu title Boot options

label rock64-kernel-4.4
   kernel /Image
   initrd /initrd.img
   fdt /dtb
   append earlycon=uart8250,mmio32,0xff130000 rw root=/dev/nfs nfsroot=${serverip}:/data/rootfs/rock64-1 rootwait init=/sbin/init mtdparts=spi32766.0:32k(system),4064k(loader),3840k(reserved),256k(vendor),4M(uboot),4M(atf)

As I noticed once the rock64 started it's PXE requests that it was requesting via it's MAC, I created it's own config file with menu containing that, so that once I'm done it will have both a boot menu and auto-boot config.

I then created (I'm still trying to piece how this goes together so I can transfer this over to the clusterboard... so could be way off the mark here...)

boot.scr.uimg - empty - Becase uboot keeps looking for it. I suspect it allows for custom uboot commands, so it merely existing allowed things to continue
Image -> /boot/vmlinuz-4.4.114-rockchip-ayufan-193 (ln -s'd from running system but copying would be more better in the long term due to upgrades)
initrd.img -> /boot/initrd.img-4.4.114-rockchip-ayufan-193 (ln -s'd from running system  - above applies)
dtb -> /boot/dtb

and it essentially works now... rock64 will pull down the kernel via the network and boots. And it also now pulls down its root filesystem over the network via NFS.  After going back and editing the /etc/fstab as distributed and commenting out the /boot mount point which was now completely wrong, it seems to be booting up to a usable system just fine so far.

You can also extract those files from the boot.img contained within any of ayufan's minimal images, etc... just keep unpacking the file Wink

One oddity in my setup so far though... it doesn't get the serverip for the TFTP/PXE server automatically like it should... remains 0.0.0.0, although a laptop and VMs on my desktop boot just fine (so I know dnsmasq IS working)... so I have to set it manually until I manage to lock it into the uboot environment properly or work out why the rock64 is misbehaving - just need to work out how to save it to the SPI since it's also booting from that... that plus the PXE menu doesn't autoselect, but that could be because I have to manually intervene atm... work in progress! Wink

Yes, I am still looking into this. I have put it on the back burner for the time being as I have paid work to be doing!

I was getting CRC failures reading from the TFTP server so I did not know if my TFTP boot server or the uboot were at fault...

I am aiming at using the Digital Rebar Provisioner in the long run to build my machines. (Well worth looking at!) The problem at the moment is that the main images that it uses (sledgehammer etc) are not compiled for Arm64 currently, so it is a 'no go' at the moment. It works brilliantly for amd/intel though!

Please keep me updated with your progress. Big Grin

EDIT
Decided to try again...

Sometimes I can get it to load files, other times I get a load of 'UDP wrong checksum 00000010 0000ee36' and then a message saying 'TFTP error: 'read udp [::]:37865: i/o timeout' (1)'

Sad


RE: PXE Boot example? - ansic - 04-08-2018

I had the wrong UDP checksum error like yours. It was caused by an old u-boot on SPI(?) The issue was resolved by running /usr/local/sbin/rock64_write_SPI.sh (when booted off sdcard).
I did not have any issues otherwise like the IP address assignment pfeerick mentions. The server is Debian with dnsmasq. pxelinux.0 was put in to TFTP root from the pxelinux debian package.. not sure if its required to be copied there or not.

Is the ton of appended options really required? Where do they come from / where did you find them pfeerick?


RE: PXE Boot example? - pfeerick - 05-03-2018

(04-08-2018, 03:38 PM)ansic Wrote: I had the wrong UDP checksum error like yours.  It was caused by an old u-boot on SPI(?)  The issue was resolved by running /usr/local/sbin/rock64_write_SPI.sh (when booted off sdcard).
I did not have any issues otherwise like the IP address assignment pfeerick mentions.  The server is Debian with dnsmasq.  pxelinux.0 was put in to TFTP root from the pxelinux debian package.. not sure if its required to be copied there or not.

Is the ton of appended options really required?  Where do they come from / where did you find them pfeerick?

The appended options (with the exception the two NFS related ones) are the standard ones for ayufan's images per '/boot/efi/extlinux/extlinux.conf'. The bulk of it is related to correctly addressing the SPI flash partitions.