From: Martin Jerabek Date: Tue, 29 Mar 2016 18:35:06 +0000 (+0200) Subject: petalinux: Boot from network (TFTP), NFS root; support for custom u-boot bootscript X-Git-Url: https://rtime.felk.cvut.cz/gitweb/fpga/zynq/canbench-sw.git/commitdiff_plain/a93c13f8155ceb5a9775ef261bb2cdb466e41375 petalinux: Boot from network (TFTP), NFS root; support for custom u-boot bootscript --- diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..6ccb27c --- /dev/null +++ b/Makefile @@ -0,0 +1,13 @@ +# 1. system +# 2. peta linux +# 3. apps (latester) + +system_project: + cd system/scripts && vivado -mode batch -nolog -nojournal -source recreate.tcl +system/system.hdf: + cd system/scripts && vivado -mode batch -nolog -nojournal -source build.tcl + +petalinux_config: system/system.hdf + $(MAKE) -C petalinux config +petalinux_build: + $(MAKE) -C petalinux build diff --git a/petalinux/.gitignore b/petalinux/.gitignore index 6b91b57..0000bc7 100644 --- a/petalinux/.gitignore +++ b/petalinux/.gitignore @@ -14,3 +14,5 @@ subsystems/linux/configs/device-tree/* subsystems/linux/configs/u-boot/platform-auto.h subsystems/linux/hw-description/* !subsystems/linux/hw-description/metadata +/bootscript +/.configured diff --git a/petalinux/.petalinux/metadata b/petalinux/.petalinux/metadata index b91bef4..7740ca0 100644 --- a/petalinux/.petalinux/metadata +++ b/petalinux/.petalinux/metadata @@ -1 +1,2 @@ PETALINUX_VER=2015.4 +project_id=109f6dda0ac8f0d8dac31f6594c72c33 diff --git a/petalinux/Makefile b/petalinux/Makefile new file mode 100644 index 0000000..7a71d5b --- /dev/null +++ b/petalinux/Makefile @@ -0,0 +1,29 @@ +.PHONY: config build all + +all: build + +config: .configured + +.configured: + petalinux-config --get-hw-description ../system --oldconfig + $(MAKE) subsystems/linux/configs/u-boot/platform-auto.h + touch .configured + +build: .configured + petalinux-build + $(MAKE) bootscript images/linux/BOOT.BIN + +images/linux/BOOT.BIN: FORCE + cd images/linux && petalinux-package --boot --fsbl zynq_fsbl.elf --u-boot u-boot.elf --force + +bootscript: bootscript.txt + mkimage -A arm -O u-boot -T script -C none -a 0 -e 0 -n "t-Boot Script" -d $< $@ + +subsystems/linux/configs/u-boot/platform-auto.h: FORCE | build/linux/u-boot/Makefile + $(MAKE) UBOOT_AUTO_CONFIG=y -C build/linux/u-boot autogen-config + sed -r -i '/PSSERIAL0 \\/r uboot-extra-env.h' $@ + +build/linux/u-boot/Makefile: + petalinux-build -c u-boot + +FORCE: diff --git a/petalinux/bootscript.txt b/petalinux/bootscript.txt new file mode 100644 index 0000000..2f7bce8 --- /dev/null +++ b/petalinux/bootscript.txt @@ -0,0 +1,17 @@ +setenv tftp_dir '' + +setenv bitstream_image top_wrapper.bit +setenv dtb_img system.dtb +setenv kernel_img image.ub + +setenv bitstream_load_address 0x04000000 + +setenv bitstream_tftp 'tftpboot ${bitstream_load_address} ${tftp_dir}${bitstream_image}' +setenv dtb_tftp 'tftpboot ${dtbnetstart} ${tftp_dir}${dtb_img}' +setenv kernel_tftp 'tftpboot ${netstart} ${tftp_dir}${kernel_img}' + +setenv bitstream_load 'fpga loadb 0 ${bitstream_load_address} ${filesize}' + +setenv boot_now 'bootm ${netstart} - ${dtbnetstart}' + +run bitstream_tftp bitstream_load kernel_tftp dtb_tftp boot_now diff --git a/petalinux/mkbootscript b/petalinux/mkbootscript new file mode 100755 index 0000000..103310f --- /dev/null +++ b/petalinux/mkbootscript @@ -0,0 +1 @@ +mkimage -A arm -O u-boot -T script -C none -a 0 -e 0 -n "t-Boot Script" -d bootscript.txt bootscript diff --git a/petalinux/subsystems/linux/config b/petalinux/subsystems/linux/config index c8a97ef..e571949 100644 --- a/petalinux/subsystems/linux/config +++ b/petalinux/subsystems/linux/config @@ -28,9 +28,9 @@ CONFIG_SUBSYSTEM_COMPONENT_ROOTFS_NAME_PETALINUX__ROOTFS=y CONFIG_SUBSYSTEM_AUTOCONFIG_DEVICE__TREE=y # CONFIG_SUBSYSTEM_DEVICE_TREE_MANUAL_INCLUDE is not set CONFIG_SUBSYSTEM_DEVICE_TREE_INCLUDE_DIR="/mnt/data/nobackup/martin/programs/.squashes/.mnt/.final/Xilinx/petalinux-v2015.4-final/components//linux-kernel/xlnx-4.0/include" -# CONFIG_SUBSYSTEM_AUTOCONFIG_KERNEL is not set -# CONFIG_SUBSYSTEM_AUTOCONFIG_ROOTFS is not set -CONFIG_SUBSYSTEM_AUTOCONFIG_U__BOOT=y +CONFIG_SUBSYSTEM_AUTOCONFIG_KERNEL=y +CONFIG_SUBSYSTEM_AUTOCONFIG_ROOTFS=y +# CONFIG_SUBSYSTEM_AUTOCONFIG_U__BOOT is not set CONFIG_SUBSYSTEM_HARDWARE_AUTO=y CONFIG_SUBSYSTEM_PROCESSOR_PS7_CORTEXA9_0_SELECT=y CONFIG_SUBSYSTEM_ARCH_ARM=y @@ -66,9 +66,9 @@ CONFIG_SUBSYSTEM_ETHERNET_PS7_ETHERNET_0_SELECT=y # CONFIG_SUBSYSTEM_ETHERNET_PS7_ETHERNET_0_MAC_AUTO is not set CONFIG_SUBSYSTEM_ETHERNET_PS7_ETHERNET_0_MAC="00:0a:35:00:22:01" # CONFIG_SUBSYSTEM_ETHERNET_PS7_ETHERNET_0_USE_DHCP is not set -CONFIG_SUBSYSTEM_ETHERNET_PS7_ETHERNET_0_IP_ADDRESS="192.168.100.16" +CONFIG_SUBSYSTEM_ETHERNET_PS7_ETHERNET_0_IP_ADDRESS="192.168.1.16" CONFIG_SUBSYSTEM_ETHERNET_PS7_ETHERNET_0_IP_NETMASK="255.255.255.0" -CONFIG_SUBSYSTEM_ETHERNET_PS7_ETHERNET_0_IP_GATEWAY="192.168.100.1" +CONFIG_SUBSYSTEM_ETHERNET_PS7_ETHERNET_0_IP_GATEWAY="192.168.1.75" # # Flash Settings @@ -110,7 +110,49 @@ CONFIG_SUBSYSTEM_SD_PS7_SD_0_SELECT=y # RTC Settings # CONFIG_SUBSYSTEM_RTC_MANUAL_SELECT=y -# CONFIG_SUBSYSTEM_IMAGES_ADVANCED_AUTOCONFIG is not set +CONFIG_SUBSYSTEM_IMAGES_ADVANCED_AUTOCONFIG=y + +# +# boot image settings +# +# CONFIG_SUBSYSTEM_IMAGES_ADVANCED_AUTOCONFIG_BOOT_MEDIA_FLASH_SELECT is not set +CONFIG_SUBSYSTEM_IMAGES_ADVANCED_AUTOCONFIG_BOOT_MEDIA_SD_SELECT=y +# CONFIG_SUBSYSTEM_IMAGES_ADVANCED_AUTOCONFIG_BOOT_MEDIA_MANUAL_SELECT is not set +CONFIG_SUBSYSTEM_IMAGES_ADVANCED_AUTOCONFIG_BOOT_IMAGE_NAME="BOOT.BIN" + +# +# u-boot env partition settings +# +CONFIG_SUBSYSTEM_IMAGES_ADVANCED_AUTOCONFIG_BOOTENV_MEDIA_FLASH_SELECT=y +# CONFIG_SUBSYSTEM_IMAGES_ADVANCED_AUTOCONFIG_BOOTENV_MEDIA_MANUAL_SELECT is not set +CONFIG_SUBSYSTEM_IMAGES_ADVANCED_AUTOCONFIG_BOOTENV_PART_NAME="bootenv" + +# +# kernel image settings +# +# CONFIG_SUBSYSTEM_IMAGES_ADVANCED_AUTOCONFIG_KERNEL_MEDIA_FLASH_SELECT is not set +# CONFIG_SUBSYSTEM_IMAGES_ADVANCED_AUTOCONFIG_KERNEL_MEDIA_SD_SELECT is not set +CONFIG_SUBSYSTEM_IMAGES_ADVANCED_AUTOCONFIG_KERNEL_MEDIA_ETHERNET_SELECT=y +# CONFIG_SUBSYSTEM_IMAGES_ADVANCED_AUTOCONFIG_KERNEL_MEDIA_MANUAL_SELECT is not set +CONFIG_SUBSYSTEM_IMAGES_ADVANCED_AUTOCONFIG_KERNEL_IMAGE_NAME="image.ub" + +# +# jffs2 rootfs image settings +# +CONFIG_SUBSYSTEM_IMAGES_ADVANCED_AUTOCONFIG_JFFS2_MEDIA_FLASH_SELECT=y +# CONFIG_SUBSYSTEM_IMAGES_ADVANCED_AUTOCONFIG_JFFS2_MEDIA_MANUAL_SELECT is not set +CONFIG_SUBSYSTEM_IMAGES_ADVANCED_AUTOCONFIG_JFFS2_PART_NAME="jffs2" +CONFIG_SUBSYSTEM_IMAGES_ADVANCED_AUTOCONFIG_JFFS2_IMAGE_NAME="rootfs.jffs2" + +# +# dtb image settings +# +# CONFIG_SUBSYSTEM_IMAGES_ADVANCED_AUTOCONFIG_DTB_MEDIA_BOOTIMAGE_SELECT is not set +# CONFIG_SUBSYSTEM_IMAGES_ADVANCED_AUTOCONFIG_DTB_MEDIA_FLASH_SELECT is not set +# CONFIG_SUBSYSTEM_IMAGES_ADVANCED_AUTOCONFIG_DTB_MEDIA_SD_SELECT is not set +CONFIG_SUBSYSTEM_IMAGES_ADVANCED_AUTOCONFIG_DTB_MEDIA_ETHERNET_SELECT=y +# CONFIG_SUBSYSTEM_IMAGES_ADVANCED_AUTOCONFIG_DTB_MEDIA_MANUAL_SELECT is not set +CONFIG_SUBSYSTEM_IMAGES_ADVANCED_AUTOCONFIG_DTB_IMAGE_NAME="system.dtb" CONFIG_SUBSYSTEM_ENDIAN_LITTLE=y # @@ -118,15 +160,13 @@ CONFIG_SUBSYSTEM_ENDIAN_LITTLE=y # CONFIG_SUBSYSTEM_BOOTARGS_AUTO=y CONFIG_SUBSYSTEM_BOOTARGS_EARLYPRINTK=y -CONFIG_SUBSYSTEM_BOOTARGS_GENERATED="console=ttyPS0,115200 earlyprintk root=/dev/mmcblk0p2 rw rootwait" +CONFIG_SUBSYSTEM_BOOTARGS_GENERATED="console=ttyPS0,115200 earlyprintk root=/dev/nfs nfsroot=192.168.1.75:/export/canbench,tcp ip=192.168.1.16:192.168.1.75 rw" # # u-boot Configuration # CONFIG_SUBSYSTEM_UBOOT_CONFIG_PETALINUX=y # CONFIG_SUBSYSTEM_UBOOT_CONFIG_OTHER is not set -CONFIG_SUBSYSTEM_NETBOOT_OFFSET=0x1000000 -CONFIG_SUBSYSTEM_U__BOOT_TFTPSERVER_IP="AUTO" # # Image Packaging Configuration @@ -134,10 +174,11 @@ CONFIG_SUBSYSTEM_U__BOOT_TFTPSERVER_IP="AUTO" # CONFIG_SUBSYSTEM_ROOTFS_INITRAMFS is not set # CONFIG_SUBSYSTEM_ROOTFS_INITRD is not set # CONFIG_SUBSYSTEM_ROOTFS_JFFS2 is not set -# CONFIG_SUBSYSTEM_ROOTFS_NFS is not set -CONFIG_SUBSYSTEM_ROOTFS_SD=y +CONFIG_SUBSYSTEM_ROOTFS_NFS=y +# CONFIG_SUBSYSTEM_ROOTFS_SD is not set # CONFIG_SUBSYSTEM_ROOTFS_OTHER is not set -CONFIG_SUBSYSTEM_SDROOT_DEV="/dev/mmcblk0p2" +CONFIG_SUBSYSTEM_NFSROOT_DIR="/export/canbench" +CONFIG_SUBSYSTEM_NFSSERVER_IP="192.168.1.75" CONFIG_SUBSYSTEM_UIMAGE_NAME="image.ub" # CONFIG_SUBSYSTEM_UIMAGE_HASH_NONE is not set CONFIG_SUBSYSTEM_UIMAGE_HASH_CRC32=y diff --git a/petalinux/subsystems/linux/configs/kernel/config b/petalinux/subsystems/linux/configs/kernel/config index 7ea77c8..d8d9a6a 100644 --- a/petalinux/subsystems/linux/configs/kernel/config +++ b/petalinux/subsystems/linux/configs/kernel/config @@ -166,6 +166,7 @@ CONFIG_COMPAT_BRK=y CONFIG_SLAB=y # CONFIG_SLUB is not set # CONFIG_SLOB is not set +# CONFIG_SYSTEM_TRUSTED_KEYRING is not set # CONFIG_PROFILING is not set CONFIG_HAVE_OPROFILE=y # CONFIG_KPROBES is not set @@ -694,6 +695,7 @@ CONFIG_VLAN_8021Q=m # CONFIG_IEEE802154 is not set # CONFIG_NET_SCHED is not set # CONFIG_DCB is not set +CONFIG_DNS_RESOLVER=y # CONFIG_BATMAN_ADV is not set # CONFIG_OPENVSWITCH is not set # CONFIG_VSOCKETS is not set @@ -3392,18 +3394,13 @@ CONFIG_RAS=y # File systems # CONFIG_DCACHE_WORD_ACCESS=y -CONFIG_EXT2_FS=y -# CONFIG_EXT2_FS_XATTR is not set -CONFIG_EXT3_FS=y -# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set -CONFIG_EXT3_FS_XATTR=y -# CONFIG_EXT3_FS_POSIX_ACL is not set -# CONFIG_EXT3_FS_SECURITY is not set +# CONFIG_EXT2_FS is not set +# CONFIG_EXT3_FS is not set CONFIG_EXT4_FS=y +CONFIG_EXT4_USE_FOR_EXT23=y # CONFIG_EXT4_FS_POSIX_ACL is not set # CONFIG_EXT4_FS_SECURITY is not set # CONFIG_EXT4_DEBUG is not set -CONFIG_JBD=y CONFIG_JBD2=y # CONFIG_JBD2_DEBUG is not set CONFIG_FS_MBCACHE=y @@ -3464,6 +3461,7 @@ CONFIG_CONFIGFS_FS=m CONFIG_MISC_FILESYSTEMS=y # CONFIG_ADFS_FS is not set # CONFIG_AFFS_FS is not set +# CONFIG_ECRYPT_FS is not set # CONFIG_HFS_FS is not set # CONFIG_HFSPLUS_FS is not set # CONFIG_BEFS_FS is not set @@ -3499,15 +3497,25 @@ CONFIG_NFS_FS=y CONFIG_NFS_V2=y CONFIG_NFS_V3=y # CONFIG_NFS_V3_ACL is not set -# CONFIG_NFS_V4 is not set +CONFIG_NFS_V4=y # CONFIG_NFS_SWAP is not set +CONFIG_NFS_V4_1=y +CONFIG_NFS_V4_2=y +CONFIG_PNFS_FILE_LAYOUT=y +CONFIG_PNFS_FLEXFILE_LAYOUT=m +CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="kernel.org" +# CONFIG_NFS_V4_1_MIGRATION is not set CONFIG_ROOT_NFS=y +# CONFIG_NFS_USE_LEGACY_DNS is not set +CONFIG_NFS_USE_KERNEL_DNS=y # CONFIG_NFSD is not set CONFIG_GRACE_PERIOD=y CONFIG_LOCKD=y CONFIG_LOCKD_V4=y CONFIG_NFS_COMMON=y CONFIG_SUNRPC=y +CONFIG_SUNRPC_GSS=y +CONFIG_SUNRPC_BACKCHANNEL=y # CONFIG_SUNRPC_DEBUG is not set # CONFIG_CEPH_FS is not set # CONFIG_CIFS is not set @@ -3717,7 +3725,10 @@ CONFIG_EARLY_PRINTK=y # # Security options # -# CONFIG_KEYS is not set +CONFIG_KEYS=y +# CONFIG_PERSISTENT_KEYRINGS is not set +# CONFIG_BIG_KEYS is not set +# CONFIG_ENCRYPTED_KEYS is not set # CONFIG_SECURITY_DMESG_RESTRICT is not set # CONFIG_SECURITY is not set # CONFIG_SECURITYFS is not set @@ -3831,6 +3842,7 @@ CONFIG_CRYPTO_ANSI_CPRNG=m # CONFIG_CRYPTO_USER_API_RNG is not set CONFIG_CRYPTO_HW=y # CONFIG_CRYPTO_DEV_HIFN_795X is not set +# CONFIG_ASYMMETRIC_KEY_TYPE is not set # CONFIG_BINARY_PRINTF is not set # @@ -3873,6 +3885,7 @@ CONFIG_XZ_DEC_SPARC=y CONFIG_XZ_DEC_BCJ=y # CONFIG_XZ_DEC_TEST is not set CONFIG_GENERIC_ALLOCATOR=y +CONFIG_ASSOCIATIVE_ARRAY=y CONFIG_HAS_IOMEM=y CONFIG_HAS_DMA=y CONFIG_CPU_RMAP=y @@ -3883,6 +3896,7 @@ CONFIG_ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE=y # CONFIG_CORDIC is not set # CONFIG_DDR is not set CONFIG_LIBFDT=y +CONFIG_OID_REGISTRY=y CONFIG_FONT_SUPPORT=y CONFIG_FONTS=y CONFIG_FONT_8x8=y diff --git a/petalinux/uEnv.txt b/petalinux/uEnv.txt new file mode 100644 index 0000000..54c9524 --- /dev/null +++ b/petalinux/uEnv.txt @@ -0,0 +1,6 @@ +ipaddr=192.168.1.16 +serverip=192.168.1.75 +bootscript_addr=${clobstart} +bootscript_path=bootscript +tboot=tftpboot ${bootscript_addr} ${serverip}:${bootscript_path} ; source ${bootscript_addr} +default_bootcmd=run tboot diff --git a/petalinux/uboot-extra-env.h b/petalinux/uboot-extra-env.h new file mode 100644 index 0000000..2bbbdf5 --- /dev/null +++ b/petalinux/uboot-extra-env.h @@ -0,0 +1,8 @@ + /* load uEnv.txt before boot (copied from U-Boot default config) */ \ + "loadbootenv_addr=0x2000000\0" \ + "bootenv=uEnv.txt\0" \ + "loadbootenv=load mmc 0 ${loadbootenv_addr} ${bootenv}\0" \ + "importbootenv=echo Importing environment from SD ...; " "env import -t ${loadbootenv_addr} $filesize\0" \ + "sd_uEnvtxt_existence_test=test -e mmc 0 /uEnv.txt\0" \ + "preboot=if env run sd_uEnvtxt_existence_test; " "then if env run loadbootenv; " "then env run importbootenv; " "fi; " "fi; \0" \ + /* end of custom env */ \