Using TFTP and NFS during software development

PlantUML Graph

To speedup software development process you can configure your liteboard to download firmware directly from your PC workstation via LAN network.

This howto will guide you how to configure liteboard to:

  1. boot U-Boot from uSD card,
  2. bring-up liteboard network interface,
  3. request IPv4 address from DHCP server,
  4. download kernel image and device tree blob file via TFTP protocol,
  5. boot kernel,
  6. mount rootfs via NFS service.

With this configuration all steps required to deploy new firmware on liteboard are limited to the absolute minimum:

  1. build new firmware,
  2. install new kernel image and device tree blob file in TFTP directory,
  3. install new rootfs in NFS directory,
  4. reboot liteboard.

Because Buildroot can be configured to execute 2nd and 3rd steps as post-build action therefore in most cases deploy process will look like:

  1. build new firmware,
  2. reboot liteboard.

PC workstation configuration

This howto was tested on Debian 9 (codename Stretch).

If you are using non Debian based distribution please modify all apt-get … commands accordingly to the package manager used on your system.

To install TFTP server please run following command

sudo apt-get install tftpd-hpa

Show installation process

sudo apt-get install tftpd-hpa
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Suggested packages:
  pxelinux
The following NEW packages will be installed:
  tftpd-hpa
0 upgraded, 1 newly installed, 0 to remove and 12 not upgraded.
Need to get 50.2 kB of archives.
After this operation, 121 kB of additional disk space will be used.
Get:1 http://ftp.pl.debian.org/debian stretch/main amd64 tftpd-hpa amd64 5.2+20150808-1+b1 [50.2 kB]
Fetched 50.2 kB in 0s (236 kB/s)   
Preconfiguring packages ...
Selecting previously unselected package tftpd-hpa.
(Reading database ... 361203 files and directories currently installed.)
Preparing to unpack .../tftpd-hpa_5.2+20150808-1+b1_amd64.deb ...
Unpacking tftpd-hpa (5.2+20150808-1+b1) ...
Setting up tftpd-hpa (5.2+20150808-1+b1) ...
Processing triggers for systemd (232-25) ...
Processing triggers for man-db (2.7.6.1-2) ..

On success on your PC workstation you should see new directory /srv/tftp - this directory is shared via TFTP server.

To install NFS server please run following command

sudo apt-get install nfs-kernel-server

Show installation process

sudo apt-get install nfs-kernel-server
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  nfs-kernel-server
0 upgraded, 1 newly installed, 0 to remove and 12 not upgraded.
Need to get 124 kB of archives.
After this operation, 334 kB of additional disk space will be used.
Get:1 http://ftp.pl.debian.org/debian stretch/main amd64 nfs-kernel-server amd64 1:1.3.4-2.1 [124 kB]
Fetched 124 kB in 0s (283 kB/s)           
Selecting previously unselected package nfs-kernel-server.
(Reading database ... 361218 files and directories currently installed.)
Preparing to unpack .../nfs-kernel-server_1%3a1.3.4-2.1_amd64.deb ...
Unpacking nfs-kernel-server (1:1.3.4-2.1) ...
Setting up nfs-kernel-server (1:1.3.4-2.1) ...
Created symlink /etc/systemd/system/multi-user.target.wants/nfs-server.service → /lib/systemd/system/nfs-server.service.
Job for nfs-server.service failed because the control process exited with error code.
See "systemctl status nfs-server.service" and "journalctl -xe" for details.
nfs-server.service couldn't start.

Creating config file /etc/exports with new version

Creating config file /etc/default/nfs-kernel-server with new version
Processing triggers for systemd (232-25) ...
Processing triggers for man-db (2.7.6.1-2) ...

On success new file /etc/exports will be added. This file contains configuration for all directories exported via NFS.

To share your PC workstation directory via NFS you have to create it first.

sudo mkdir /srv/myproject

To share /nfs/myproject directory via NFS server please edit /etc/exports file and append following line

/srv/myproject 10.42.0.1/255.255.255.0(rw,no_subtree_check,no_root_squash)

See note about IP address/netmask in /etc/exports file

Please adjust IP address (here 10.42.0.1) and netmask (here 255.255.255.0) to your network configuration.

If your liteboard is connected directly to your PC workstation via (for example) eth0 interface you can check current configuration via ifconfig eth0 command, like presented below.

$ sudo ifconfig eth0
eth0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 10.42.0.1  netmask 255.255.255.0  broadcast 10.42.0.255
        inet6 fe80::d715:5cc:9b4d:d289  prefixlen 64  scopeid 0x20<link>
        ether d4:be:d9:1b:19:07  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4  bytes 356 (356.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 20  memory 0xe6700000-e6720000  

If you are using different LAN configuration please contact your network administrator for support.

After changes in /etc/exports file you should trigger NFS server to apply configuration from this file.

sudo exportfs -a
sudo exportfs -rv

Now your /srv/myproject directory is shared via NFS server.

After successful build buildroot/output/images directory contains following files:

  • boot.vfat,
  • imx6ul-liteboard.dtb,
  • rootfs.ext2,
  • rootfs.ext4,
  • rootfs.tar,
  • sdcard.img,
  • SPL,
  • u-boot.bin,
  • u-boot.img,
  • zImage.

This directory contains everything what is needed to configure TFTP and NFS services.

U-Boot

U-Boot is the only one application which must be loaded by liteSOM from uSD card.

The easiest way to install U-Boot on uSD card is to copy complete sdcard.img to it, like presented below.

sudo dd if=output/images/sdcard.img of=/dev/<SD card> bs=4M
sync

By default sdcard.img file contains complete configuration to boot liteboard directly from uSD card, later on we will change U-Boot configuration and the rest of the software (i.e. everything except U-Boot) will be loaded directly from your PC workstation.

Kernel + Device tree

Kernel image and device tree blob file must be accessible by the liteboard via TFTP protocol, therefore both files must be copied to /srv/tftp directory.

sudo cp output/images/zImage /srv/tftp/
sudo cp output/images/imx6ul-liteboard.dtb /srv/tftp/

ROOT filesystem

To allow liteboard to mount rootfs via NFS we have to extract rootfs.tar file to /srv/myproject directory like presented below.

sudo tar -xavf output/images/rootfs.tar -C /srv/myproject/

Buildroot post compilation action

After each build you have to perform following steps to update firmware shared with your liteboard:

sudo cp output/images/zImage /srv/tftp/
sudo cp output/images/imx6ul-liteboard.dtb /srv/tftp/
sudo tar -xavf output/images/rootfs.tar -C /srv/myproject/

All those steps can be performed automatically by the Buildroot via script defined by BR2_ROOTFS_POST_IMAGE_SCRIPT option.

For the liteboard BR2_ROOTFS_POST_IMAGE_SCRIPT points to board/grinn/liteboard/post-image.sh file which is responsible for sdcard.img generation

See content of board/grinn/liteboard/post-image.sh file

#!/usr/bin/env bash

BOARD_DIR="$(dirname $0)"
GENIMAGE_CFG="${BOARD_DIR}/genimage.cfg"
GENIMAGE_TMP="${BUILD_DIR}/genimage.tmp"

rm -rf "${GENIMAGE_TMP}"

genimage \
    --rootpath "${TARGET_DIR}" \
    --tmppath "${GENIMAGE_TMP}" \
    --inputpath "${BINARIES_DIR}" \
    --outputpath "${BINARIES_DIR}" \
    --config "${GENIMAGE_CFG}"

You can append to this file all TFTP/NFS related actions

sudo cp -f ${BINARIES_DIR}/zImage /srv/tftp/zImage
sudo cp -f ${BINARIES_DIR}/imx6ul-liteboard.dtb /srv/tftp/imx6ul-liteboard.dtb
sudo tar -xavf ${BINARIES_DIR}/rootfs.tar -C /srv/myproject

See complete example

#!/usr/bin/env bash

BOARD_DIR="$(dirname $0)"
GENIMAGE_CFG="${BOARD_DIR}/genimage.cfg"
GENIMAGE_TMP="${BUILD_DIR}/genimage.tmp"

TFTP_DIR=/srv/tftp
NFS_DIR=/srv/myproject

rm -rf "${GENIMAGE_TMP}"

genimage \
    --rootpath "${TARGET_DIR}" \
    --tmppath "${GENIMAGE_TMP}" \
    --inputpath "${BINARIES_DIR}" \
    --outputpath "${BINARIES_DIR}" \
    --config "${GENIMAGE_CFG}"

sudo cp -f ${BINARIES_DIR}/zImage ${TFTP_DIR}/zImage
sudo cp -f ${BINARIES_DIR}/imx6ul-liteboard.dtb ${TFTP_DIR}/imx6ul-liteboard.dtb

sudo tar -xavf ${BINARIES_DIR}/rootfs.tar -C ${NFS_DIR}

With this configuration always after make all all files used by the liteboard to boot & run will be updated.

Liteboard configuration

By default liteboard is configured to download and run all software from uSD card. This configuration can be changed via U-Boot environment variables.

Once liteboard is started you should see U-Boot output.

U-Boot SPL 2017.01 (May 04 2017 - 18:54:17)
Trying to boot from MMC1

U-Boot 2017.01 (May 04 2017 - 18:54:17 +0000), Build: jenkins-Buildroot-liteboard-release-9

CPU:   Freescale i.MX6UL rev1.1 528 MHz (running at 396 MHz)
CPU:   Industrial temperature grade (-40C to 105C) at 42C
Reset cause: POR
Board: Grinn liteBoard
DRAM:  256 MiB
MMC:   FSL_SDHC: 0, FSL_SDHC: 1
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
switch to partitions #0, OK
mmc0 is current device
Net:   FEC [PRIME]
Error: FEC address not set.

Hit any key to stop autoboot:  1

As suggested by the last line default autoboot procedure can be halted by any key. Once it is terminated you will see U-Boot prompt with enabled CLI.

Hit any key to stop autoboot:  0 
=> 

Network boot procedure is defined by two variables netargs and netboot:

=> printenv netargs
netargs=setenv bootargs console=${console},${baudrate} root=/dev/nfs ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp
=> printenv netboot
netboot=echo Booting from net ...; run netargs; if test ${ip_dyn} = yes; then setenv get_cmd dhcp; else setenv get_cmd tftp; fi; ${get_cmd} ${image}; if test ${boot_fdt} = yes || test ${boot_fdt} ;

To configure TFTP/NFS services at liteboard side we have to define few parameters:

serverip - your PC workstation IP address,

setenv serverip 10.42.0.1

nfsroot - rootfs directory shared via NFS,

setenv nfsroot /srv/myproject

ethaddr - liteboard MAC address (1A:4D:47:59:F6:24 is an example).

setenv ethaddr 1A:4D:47:59:F6:24

All variables configured like presented above are stored in RAM memory, i.e. after reset they are uninitialized. To save them permanently please use saveenv command.

=> saveenv 
Saving Environment to MMC...
Writing to MMC(0)... done

Booting liteboard via TFTP/NFS

To boot liteboard via TFTP and NFS you can use U-Boot netboot command

=> run netboot
Booting from net ...

This command will:

1. download kernel image via TFTP protocol

BOOTP broadcast 1
DHCP client bound to address 10.42.0.158 (9 ms)
Using FEC device
TFTP from server 10.42.0.1; our IP address is 10.42.0.158
Filename 'zImage'.
Load address: 0x82000000
Loading: #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         ###############################
         2.3 MiB/s
done
Bytes transferred = 6176776 (5e4008 hex)

2. download device tree blob file via TFTP protocol

BOOTP broadcast 1
DHCP client bound to address 10.42.0.158 (13 ms)
Using FEC device
TFTP from server 10.42.0.1; our IP address is 10.42.0.158
Filename 'imx6ul-liteboard.dtb'.
Load address: 0x83000000
Loading: ##
         1.8 MiB/s
done
Bytes transferred = 21230 (52ee hex)

3. boot kernel with rootfs mounted via NFS

## Flattened Device Tree blob at 83000000
   Booting using the fdt blob at 0x83000000
   Using Device Tree in place at 83000000, end 830082ed

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 4.9.2 (jenkins@jenkins) (gcc version 5.4.0 (Buildroot 2017.02.2) ) #1 SMP Thu May 4 18:58:02 UTC 2017
[    0.000000] CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=10c5387d
[    0.000000] CPU: div instructions available: patching division code
[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[    0.000000] OF: fdt:Machine model: Grinn i.MX6UL liteBoard
[    0.000000] cma: Reserved 16 MiB at 0x8f000000
[    0.000000] Memory policy: Data cache writealloc
[    0.000000] percpu: Embedded 14 pages/cpu @cedd2000 s26728 r8192 d22424 u57344
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 65024
[    0.000000] Kernel command line: console=ttymxc0,115200 root=/dev/nfs ip=dhcp nfsroot=10.42.0.1:/srv/myproject,v3,tcp
[    0.000000] PID hash table entries: 1024 (order: 0, 4096 bytes)
[    0.000000] Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)

Show complete log

[    0.000000] Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
[    0.000000] Memory: 221280K/262144K available (9216K kernel code, 460K rwdata, 2976K rodata, 1024K init, 8237K bss, 24480K reserved, 16384K cma-reserved, 0K highmem)
[    0.000000] Virtual kernel memory layout:
[    0.000000]     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
[    0.000000]     fixmap  : 0xffc00000 - 0xfff00000   (3072 kB)
[    0.000000]     vmalloc : 0xd0800000 - 0xff800000   ( 752 MB)
[    0.000000]     lowmem  : 0xc0000000 - 0xd0000000   ( 256 MB)
[    0.000000]     pkmap   : 0xbfe00000 - 0xc0000000   (   2 MB)
[    0.000000]     modules : 0xbf000000 - 0xbfe00000   (  14 MB)
[    0.000000]       .text : 0xc0008000 - 0xc0a00000   (10208 kB)
[    0.000000]       .init : 0xc0d00000 - 0xc0e00000   (1024 kB)
[    0.000000]       .data : 0xc0e00000 - 0xc0e73140   ( 461 kB)
[    0.000000]        .bss : 0xc0e75000 - 0xc1680454   (8238 kB)
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] Running RCU self tests
[    0.000000] Hierarchical RCU implementation.
[    0.000000]  RCU lockdep checking is enabled.
[    0.000000]  Build-time adjustment of leaf fanout to 32.
[    0.000000]  RCU restricting CPUs from NR_CPUS=4 to nr_cpu_ids=1.
[    0.000000] RCU: Adjusting geometry for rcu_fanout_leaf=32, nr_cpu_ids=1
[    0.000000] NR_IRQS:16 nr_irqs:16 16
[    0.000000] Switching to timer-based delay loop, resolution 41ns
[    0.000017] sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 89478484971ns
[    0.000061] clocksource: mxc_timer1: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 79635851949 ns
[    0.002500] Console: colour dummy device 80x30
[    0.002572] Lock dependency validator: Copyright (c) 2006 Red Hat, Inc., Ingo Molnar
[    0.002594] ... MAX_LOCKDEP_SUBCLASSES:  8
[    0.002614] ... MAX_LOCK_DEPTH:          48
[    0.002633] ... MAX_LOCKDEP_KEYS:        8191
[    0.002652] ... CLASSHASH_SIZE:          4096
[    0.002672] ... MAX_LOCKDEP_ENTRIES:     32768
[    0.002691] ... MAX_LOCKDEP_CHAINS:      65536
[    0.002710] ... CHAINHASH_SIZE:          32768
[    0.002730]  memory used by lock dependency info: 5167 kB
[    0.002750]  per task-struct memory footprint: 1536 bytes
[    0.002834] Calibrating delay loop (skipped), value calculated using timer frequency.. 48.00 BogoMIPS (lpj=240000)
[    0.002881] pid_max: default: 32768 minimum: 301
[    0.003623] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
[    0.003659] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
[    0.007977] CPU: Testing write buffer coherency: ok
[    0.009681] /cpus/cpu@0 missing clock-frequency property
[    0.009731] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
[    0.009803] Setting up static identity map for 0x80100000 - 0x80100070
[    0.017521] Brought up 1 CPUs
[    0.017565] SMP: Total of 1 processors activated (48.00 BogoMIPS).
[    0.017588] CPU: All CPU(s) started in SVC mode.
[    0.021998] devtmpfs: initialized
[    0.064018] VFP support v0.3: implementor 41 architecture 2 part 30 variant 7 rev 5
[    0.065934] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[    0.068052] pinctrl core: initialized pinctrl subsystem
[    0.076487] NET: Registered protocol family 16
[    0.083369] DMA: preallocated 256 KiB pool for atomic coherent allocations
[    0.092715] cpuidle: using governor menu
[    0.161124] No ATAGs?
[    0.161225] hw-breakpoint: found 5 (+1 reserved) breakpoint and 4 watchpoint registers.
[    0.161259] hw-breakpoint: maximum watchpoint size is 8 bytes.
[    0.168408] imx6ul-pinctrl 20e0000.iomuxc: initialized IMX pinctrl driver
[    0.322252] mxs-dma 1804000.dma-apbh: initialized
[    0.330028] vgaarb: loaded
[    0.332247] SCSI subsystem initialized
[    0.335516] usbcore: registered new interface driver usbfs
[    0.335979] usbcore: registered new interface driver hub
[    0.336581] usbcore: registered new device driver usb
[    0.339022] Linux video capture interface: v2.00
[    0.339590] pps_core: LinuxPPS API ver. 1 registered
[    0.339621] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[    0.339743] PTP clock support registered
[    0.341836] Advanced Linux Sound Architecture Driver Initialized.
[    0.348220] Bluetooth: Core ver 2.22
[    0.348471] NET: Registered protocol family 31
[    0.348501] Bluetooth: HCI device and connection manager initialized
[    0.348655] Bluetooth: HCI socket layer initialized
[    0.348721] Bluetooth: L2CAP socket layer initialized
[    0.349182] Bluetooth: SCO socket layer initialized
[    0.356632] clocksource: Switched to clocksource mxc_timer1
[    0.358009] VFS: Disk quotas dquot_6.6.0
[    0.358346] VFS: Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
[    0.433874] NET: Registered protocol family 2
[    0.437959] TCP established hash table entries: 2048 (order: 1, 8192 bytes)
[    0.438101] TCP bind hash table entries: 2048 (order: 4, 73728 bytes)
[    0.439905] TCP: Hash tables configured (established 2048 bind 2048)
[    0.440264] UDP hash table entries: 256 (order: 2, 20480 bytes)
[    0.440769] UDP-Lite hash table entries: 256 (order: 2, 20480 bytes)
[    0.442949] NET: Registered protocol family 1
[    0.445709] RPC: Registered named UNIX socket transport module.
[    0.445759] RPC: Registered udp transport module.
[    0.445785] RPC: Registered tcp transport module.
[    0.445811] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    0.455793] futex hash table entries: 256 (order: 2, 16384 bytes)
[    0.461155] workingset: timestamp_bits=30 max_order=16 bucket_order=0
[    0.523263] NFS: Registering the id_resolver key type
[    0.523709] Key type id_resolver registered
[    0.523748] Key type id_legacy registered
[    0.524055] jffs2: version 2.2. (NAND) �© 2001-2006 Red Hat, Inc.
[    0.529180] fuse init (API version 7.26)
[    0.553604] io scheduler noop registered
[    0.553654] io scheduler deadline registered
[    0.554857] io scheduler cfq registered (default)
[    0.570817] imx-sdma 20ec000.sdma: Direct firmware load for imx/sdma/sdma-imx6q.bin failed with error -2
[    0.570887] imx-sdma 20ec000.sdma: external firmware not found, using ROM firmware
[    0.596163] 2020000.serial: ttymxc0 at MMIO 0x2020000 (irq = 18, base_baud = 5000000) is a IMX
[    1.264609] console [ttymxc0] enabled
[    1.274943] [drm] Initialized
[    1.366894] brd: module loaded
[    1.417610] loop: module loaded
[    1.434067] libphy: Fixed MDIO Bus: probed
[    1.440929] CAN device driver interface
[    1.448820] 2188000.ethernet supply phy not found, using dummy regulator
[    1.460219] pps pps0: new PPS source ptp0
[    1.467120] libphy: fec_enet_mii_bus: probed
[    1.481814] fec 2188000.ethernet eth0: registered PHC device 0
[    1.491238] usbcore: registered new interface driver asix
[    1.497367] usbcore: registered new interface driver ax88179_178a
[    1.503817] usbcore: registered new interface driver cdc_ether
[    1.510338] usbcore: registered new interface driver net1080
[    1.516365] usbcore: registered new interface driver cdc_subset
[    1.522920] usbcore: registered new interface driver zaurus
[    1.529256] usbcore: registered new interface driver cdc_ncm
[    1.534967] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    1.541620] ehci-pci: EHCI PCI platform driver
[    1.546586] ehci-mxc: Freescale On-Chip EHCI Host driver
[    1.553499] usbcore: registered new interface driver usb-storage
[    1.571100] ci_hdrc ci_hdrc.0: EHCI Host Controller
[    1.577064] ci_hdrc ci_hdrc.0: new USB bus registered, assigned bus number 1
[    1.606740] ci_hdrc ci_hdrc.0: USB 2.0 started, EHCI 1.00
[    1.622028] hub 1-0:1.0: USB hub found
[    1.626310] hub 1-0:1.0: 1 port detected
[    1.641034] mousedev: PS/2 mouse device common for all mice
[    1.651650] input: 20cc000.snvs:snvs-powerkey as /devices/soc0/soc/2000000.aips-bus/20cc000.snvs/20cc000.snvs:snvs-powerkey/input/input0
[    1.677079] snvs_rtc 20cc000.snvs:snvs-rtc-lp: rtc core: registered 20cc000.snvs:snvs-r as rtc0
[    1.686243] i2c /dev entries driver
[    1.691694] IR NEC protocol handler initialized
[    1.696304] IR RC5(x/sz) protocol handler initialized
[    1.701534] IR RC6 protocol handler initialized
[    1.706119] IR JVC protocol handler initialized
[    1.710763] IR Sony protocol handler initialized
[    1.715433] IR SANYO protocol handler initialized
[    1.720244] IR Sharp protocol handler initialized
[    1.724998] IR MCE Keyboard/mouse protocol handler initialized
[    1.730931] IR XMP protocol handler initialized
[    1.750760] imx2-wdt 20bc000.wdog: timeout 60 sec (nowayout=0)
[    1.757229] Bluetooth: HCI UART driver ver 2.3
[    1.761729] Bluetooth: HCI UART protocol H4 registered
[    1.766996] Bluetooth: HCI UART protocol LL registered
[    1.773999] sdhci: Secure Digital Host Controller Interface driver
[    1.780323] sdhci: Copyright(c) Pierre Ossman
[    1.784723] sdhci-pltfm: SDHCI platform and OF driver helper
[    1.793234] sdhci-esdhc-imx 2190000.usdhc: Got CD GPIO
[    1.867845] mmc0: SDHCI controller on 2190000.usdhc [2190000.usdhc] using ADMA
[    1.945747] mmc0: host does not support reading read-only switch, assuming write-enable
[    1.959178] mmc1: SDHCI controller on 2194000.usdhc [2194000.usdhc] using ADMA
[    1.967896] mmc0: new high speed SDHC card at address 3907
[    1.982679] usbcore: registered new interface driver usbhid
[    1.988449] usbhid: USB HID core driver
[    1.995423] mmcblk0: mmc0:3907 SE04G 3.64 GiB 
[    2.014255]  mmcblk0: p1 p2
[    2.081055] NET: Registered protocol family 10
[    2.094092] sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver
[    2.101784] random: fast init done
[    2.112221] NET: Registered protocol family 17
[    2.116962] can: controller area network core (rev 20120528 abi 9)
[    2.126155] NET: Registered protocol family 29
[    2.134688] can: raw protocol (rev 20120528)
[    2.141049] mmc1: new DDR MMC card at address 0001
[    2.146921] can: broadcast manager protocol (rev 20161123 t)
[    2.152711] can: netlink gateway (rev 20130117) max_hops=1
[    2.161821] mmcblk1: mmc1:0001 MMC02G 1.79 GiB 
[    2.168604] Key type dns_resolver registered
[    2.178526] mmcblk1boot0: mmc1:0001 MMC02G partition 1 1.00 MiB
[    2.187611] cpu cpu0: dev_pm_opp_get_opp_count: OPP table not found (-19)
[    2.197301] mmcblk1boot1: mmc1:0001 MMC02G partition 2 1.00 MiB
[    2.205083] mmcblk1rpmb: mmc1:0001 MMC02G partition 3 128 KiB
[    2.215620] Registering SWP/SWPB emulation handler
[    2.330804] snvs_rtc 20cc000.snvs:snvs-rtc-lp: setting system clock to 1970-01-01 04:15:27 UTC (15327)
[    2.449858] Generic PHY 2188000.ethernet:00: attached PHY driver [Generic PHY] (mii_bus:phy_addr=2188000.ethernet:00, irq=-1)
[    2.462916] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[    4.573299] fec 2188000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx
[    4.583032] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[    4.609608] Sending DHCP requests ., OK
[    4.650334] IP-Config: Got DHCP answer from 10.42.0.1, my address is 10.42.0.158
[    4.658022] IP-Config: Complete:
[    4.661364]      device=eth0, hwaddr=1a:4d:47:59:f6:24, ipaddr=10.42.0.158, mask=255.255.255.0, gw=10.42.0.1
[    4.671410]      host=10.42.0.158, domain=, nis-domain=(none)
[    4.677341]      bootserver=10.42.0.1, rootserver=10.42.0.1, rootpath=     nameserver0=10.42.0.1
[    4.693408] vdd3p0: disabling
[    4.696715] ALSA device list:
[    4.699735]   No soundcards found.
[    4.804533] VFS: Mounted root (nfs filesystem) readonly on device 0:12.
[    4.818024] devtmpfs: mounted
[    4.825557] Freeing unused kernel memory: 1024K (c0d00000 - c0e00000)
Starting logging: OK
Initializing random number generator... done.
Starting network: ip: RTNETLINK answers: File exists
Skipping eth0, used for NFS from 10.42.0.1
FAIL

Welcome to Buildroot
buildroot login: 

Autostart via TFTP/NFS

Instead of entered manually run netboot command , you can overwrite bootcmd command used by U-Boot after reboot

=> setenv bootcmd run netboot

and then

=> saveenv 
Saving Environment to MMC...
Writing to MMC(0)... done

With this configuration liteboard will always use TFTP/NFS after reboot.

  • litesom/buildroot/software_development_with_netboot.txt
  • Last modified: 2017/06/09 11:36
  • by filug