From owner-freebsd-arm@freebsd.org Sun Sep 27 11:15:57 2015 Return-Path: Delivered-To: freebsd-arm@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D807CA0A41F for ; Sun, 27 Sep 2015 11:15:57 +0000 (UTC) (envelope-from danny@cs.huji.ac.il) Received: from kabab.cs.huji.ac.il (kabab.cs.huji.ac.il [132.65.116.210]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 8690B169; Sun, 27 Sep 2015 11:15:57 +0000 (UTC) (envelope-from danny@cs.huji.ac.il) Received: from chamsa.cs.huji.ac.il ([132.65.80.19]) by kabab.cs.huji.ac.il with esmtp id 1Zg9vh-000Ik3-Nl; Sun, 27 Sep 2015 14:15:41 +0300 Content-Type: multipart/mixed; boundary="Apple-Mail=_9E4B7BEB-8071-4527-8B9D-69069B183E57" Mime-Version: 1.0 (Mac OS X Mail 8.2 \(2104\)) Subject: Re: netboot configuration [was: Re: NFS Root with Raspberry Pi (nfs_diskless: no interface)] From: Daniel Braniss In-Reply-To: <1443276119.1224.382.camel@freebsd.org> Date: Sun, 27 Sep 2015 14:15:41 +0300 Cc: freebsd-arm@freebsd.org Message-Id: <33EFE756-B428-4A72-B3C5-0E764FA8ACC6@cs.huji.ac.il> References: <20150922052522.GA62140@gmail.com> <00C49FEB-E8EF-4469-85E2-0F901215CD11@cs.huji.ac.il> <20150923050414.GB43653@gmail.com> <91AAC64E-4C38-47AA-8910-48F7654A7524@cs.huji.ac.il> <20150923174445.GE43653@gmail.com> <1443105426.1224.272.camel@freebsd.org> <20150924163658.GC32257@gmail.com> <560438C5.3090404@selasky.org> <1443142468.1224.322.camel@freebsd.org> <1443209159.1224.361.camel@freebsd.org> <12C96F79-2D70-408D-AD4C-F06F6B909AD3@cs.huji.ac.il> <1443276119.1224.382.camel@freebsd.org> To: Ian Lepore X-Mailer: Apple Mail (2.2104) X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: "Porting FreeBSD to ARM processors." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 27 Sep 2015 11:15:58 -0000 --Apple-Mail=_9E4B7BEB-8071-4527-8B9D-69069B183E57 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On 26 Sep 2015, at 17:01, Ian Lepore wrote: >=20 > On Sat, 2015-09-26 at 15:38 +0300, Daniel Braniss wrote: >>> On Sep 25, 2015, at 10:25 PM, Ian Lepore wrote: >>>=20 >>> On Fri, 2015-09-25 at 11:37 +0300, Daniel Braniss wrote: >>>>> On 25 Sep 2015, at 03:54, Ian Lepore wrote: >>>>>=20 >>>>> On Thu, 2015-09-24 at 19:54 +0200, Hans Petter Selasky wrote: >>>>>> On 09/24/15 18:36, Randy Westlund wrote: >>>>>>> On Thu, Sep 24, 2015 at 08:37:06AM -0600, Ian Lepore wrote: >>>>>>=20 >>> [...stuff about problems netbooting...] >>>>=20 >>>> hi Ian, >>>> can you help me here? >>>> I need the magics to get ubldr to boot from the net, >>>> i=E2=80=99m using an image built via crochet.=20 >>>>=20 >>>> cheers, >>>> danny >>>=20 >>> I've been struggling with how to set up a new default u-boot = environment >>> in our ports to make netbooting easier. The problem is that there = are >>> as many ways to netboot as there are different people wanting to do = it. >>> What I've been doing for years is loading both ubldr and the kernel = from >>> nfs, by configuring my dhcp server to provide all the info needed = (board >>> ip and netmask, server ip, ubldr file to load, and nfs root path), = all >>> based on the mac address of the board. I've learned that doesn't = work >>> well for most people who don't have easy control over their dhcp = server. >>>=20 >>> To try to keep this relatively simple, I'm going to assume that what >>> most folks want to do is: >>>=20 >>> * Load ubldr from the sdcard that has u-boot on it (not from = nfs). >>> * Make ubldr load the freebsd kernel from nfs. >>> * Use an nfs root filesystem. >>>=20 >>> So I'm assuming you've got an nfs server already serving up the root >>> filesystem (I'm not going to detail configuring that here). That >>> filesystem must contain an /etc/fstab that includes the ip:/rootpath >>> entry for the root filesystem. In other words, even though the = software >>> must already know the ip:/rootpath to find the fstab file, the file >>> still must contain a root path entry. (I find this annoying.) >>>=20 >>> Now on the u-boot side you need to add a few lines to the uEnv.txt = file >>> on the FAT partition (create the file there if it doesn't already >>> exist). You can configure a static IP address or get the IP from = dhcp: >>>=20 >>> For static IP (On RPi only, add one line: UserPreboot=3Dusb start) >>>=20 >>> loaderdev=3Dnet >>> rootpath=3D192.168.0.240:/wand >>> ipaddr=3D192.168.0.233 >>> netmask=3D255.255.255.0 >>>=20 >>>=20 >>> For DHCP (On RPi only, last line is: UserPreboot=3Dusb start && = dhcp) >>>=20 >>> loaderdev=3Dnet >>> rootpath=3D192.168.0.240:/wand >>> autoload=3Dno >>> UserPreboot=3Ddhcp >>>=20 >>> BTW, you may notice a Netboot command in the standard u-boot env. = Do >>> NOT set bootcmd=3Drun Netboot, that would make u-boot try to load = ubldr >>> over the network, which requires running a tftp server. >>>=20 >>> =E2=80=94 Ian >>=20 >> thanks!=20 >> it almost worked :-) >> - UserPreboot didn=E2=80=99t work, probably because I have the wrong = u-boot? >> stoping the boot, then typing >> usb start >> boot >> at the U-Boot> prompt saved the day! >>=20 >> - if instead of boot I type dhcp, it tries to tftp u-boot, but I = can=E2=80=99t figure out >> how to start it :-( >>=20 >> in any case, great! >> now it would be nice if we pull resources and get this diskless stuff = cleaned up >>=20 >> danny >>=20 >>=20 >=20 > I just committed the diskless fix, r288265. It should only be needed > for RPi and other systems with a usb-based NIC that initializes late = in > the boot process. tested, and it works. >=20 > All the u-boot ports have the UserPreboot hook in their env. Are you > using an old copy of crochet? (Hmmm, or has crochet never been = updated > to use the u-boot ports/packages for all the boards?) >=20 I compiled the u-boot-rpi from ports, the good news: it understands UserPreboot the bad news: the nfs boot gets stuck after a while. after much trial and error, this is what I do: hit a key to enter U-Boot then type: setenv loaderdev net boot attaching the console: --Apple-Mail=_9E4B7BEB-8071-4527-8B9D-69069B183E57 Content-Disposition: attachment; filename=boot.msg Content-Type: application/octet-stream; name="boot.msg" Content-Transfer-Encoding: 7bit U-Boot> v U-Boot 2013.01-rc1 (Sep 26 2015 - 09:44:35) arm-none-eabi-gcc (FreeBSD Ports Collection for armnoneeabi) 4.9.2 GNU ld (GNU Binutils) 2.25 U-Boot> printenv Fatboot=env exists loaderdev || env set loaderdev ${fatdev}; env exists UserFatboot && run UserFatboot; echo Booting from: ${fatdev} ${bootfile}; fatload ${fatdev} ${loadaddr} ${bootfile} && bootelf; Netboot=env exists ethact || usb start; env exists loaderdev || env set loaderdev net; env exists UserNetboot && run UserNetboot; dhcp ${loadaddr} ${bootfile} && bootelf; Preboot=fdt addr 0x100; env exists bootfile || bootfile=ubldr; env exists uenv_file || uenv_file=uEnv.txt; env exists SetupFatdev && run SetupFatdev; env exists SetupUenv && run SetupUenv; env exists UserPreboot && run UserPreboot; SetupFatdev=env exists fatdev || fatdev='mmc 0'; SetupUenv=fatload ${fatdev} ${loadaddr} ${uenv_file} && env import -t ${loadaddr} ${filesize}; UserPreboot=usb start arch=arm baudrate=115200 board=rpi_b board_name=rpi_b bootcmd=run Fatboot bootdelay=3 bootscript=fdt addr 0x100;bootelf 0x2000000 cpu=arm1176 ethact=sms0 fdtaddr=100 filesize=0x9c loadaddr=0x02000000 loadbootscript=fatload mmc 0 0x2000000 ubldr preboot=run Preboot soc=bcm2835 stderr=serial,lcd stdin=serial stdout=serial,lcd usbethaddr=b8:27:eb:7e:f3:9c vendor=raspberrypi Environment size: 1201/16380 bytes U-Boot> show HUSH_VERSION=0.01 bootfile=ubldr uenv_file=uEnv.txt fatdev=mmc 0 U-Boot> printenv Fatboot=env exists loaderdev || env set loaderdev ${fatdev}; env exists UserFatboot && run UserFatboot; echo Booting from: ${fatdev} ${bootfile}; fatload ${fatdev} ${loadaddr} ${bootfile} && bootelf; Netboot=env exists ethact || usb start; env exists loaderdev || env set loaderdev net; env exists UserNetboot && run UserNetboot; dhcp ${loadaddr} ${bootfile} && bootelf; Preboot=fdt addr 0x100; env exists bootfile || bootfile=ubldr; env exists uenv_file || uenv_file=uEnv.txt; env exists SetupFatdev && run SetupFatdev; env exists SetupUenv && run SetupUenv; env exists UserPreboot && run UserPreboot; SetupFatdev=env exists fatdev || fatdev='mmc 0'; SetupUenv=fatload ${fatdev} ${loadaddr} ${uenv_file} && env import -t ${loadaddr} ${filesize}; UserPreboot=usb start arch=arm baudrate=115200 board=rpi_b board_name=rpi_b bootcmd=run Fatboot bootdelay=3 bootscript=fdt addr 0x100;bootelf 0x2000000 cpu=arm1176 ethact=sms0 fdtaddr=100 filesize=0x9c loadaddr=0x02000000 loadbootscript=fatload mmc 0 0x2000000 ubldr preboot=run Preboot soc=bcm2835 stderr=serial,lcd stdin=serial stdout=serial,lcd usbethaddr=b8:27:eb:7e:f3:9c vendor=raspberrypi Environment size: 1201/16380 bytes U-Boot> setenv loaderdev net U-Boot> boot Booting from: mmc 0 ubldr reading ubldr 266046 bytes read in 69558 ms (2.9 KiB/s) ## Starting application at 0x01000094 ... Consoles: U-Boot console Compatible U-Boot API signature found @1db682a8 FreeBSD/armv6 U-Boot loader, Revision 1.2 (danny@rnd, Fri Sep 25 12:02:55 IDT 2015) DRAM: 480MB Number of U-Boot devices: 2 U-Boot env: loaderdev='net' Found U-Boot device: disk Found U-Boot device: net Waiting for Ethernet connection... done. /boot/kernel/kernel data=0x6d07e4+0xe781c / --Apple-Mail=_9E4B7BEB-8071-4527-8B9D-69069B183E57 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > Do you want it to load ubldr via tftp instead of from the sdcard? not sure what i want :-), with traditional pxe capable bioses, the = boot/dhcp has 2 stages, first if vendor id is set to PXEClient it sets filename to = pxeboot, then pxeboot sets vendor id to FreeBSD, and a whole bunch of other stuff is provided, like root-path, etc. in the case of rpi, if dhcp does not provide a filename, it goes an = tries to tftp load a nnnnnnn.img! so, for RPI, we don=E2=80=99t need the PXE stuff that deals with the net = driver, but would be nice (and i=E2=80=99m looking into it) to set the vendor id = stuff, but I=E2=80=99m stuck in first base. > That's an option, but ubldr doesn't change very often so just using = the > one on the sdcard should be good enough. >=20 > If you want u-boot to get an IP address via dhcp without trying to = tftp > an image, do "setenv autoload no" before the dhcp command. >=20 > -- Ian >=20 --Apple-Mail=_9E4B7BEB-8071-4527-8B9D-69069B183E57--