diff mbox

[v2] board: add support for LinkSprite pcDuino

Message ID 1465587642-14400-1-git-send-email-geomatsi@gmail.com
State Superseded
Headers show

Commit Message

Sergey Matyukevich June 10, 2016, 7:40 p.m. UTC
Add basic support for LinkSprite pcDuino board series
including pcDuino, pcDuino-Lite, pcDuino-Lite-WiFi.
Tested on pcDuino-Lite-WiFi.

Signed-off-by: Sergey Matyukevich <geomatsi@gmail.com>
---

Changes v1 -> v2
  - use kernel config fragment instead of custom kernel config
  - fix u-boot environment: add mmc partition
  - use latest u-boot

 board/linksprite/pcduino/boot.cmd            |  8 ++++
 board/linksprite/pcduino/genimage.cfg        | 44 +++++++++++++++++++
 board/linksprite/pcduino/linux-extras.config | 16 +++++++
 board/linksprite/pcduino/post-build.sh       | 11 +++++
 board/linksprite/pcduino/post-image.sh       | 17 ++++++++
 board/linksprite/pcduino/readme.txt          | 34 +++++++++++++++
 board/linksprite/pcduino/uboot-env.txt       | 38 ++++++++++++++++
 configs/pcduino_defconfig                    | 65 ++++++++++++++++++++++++++++
 8 files changed, 233 insertions(+)
 create mode 100644 board/linksprite/pcduino/boot.cmd
 create mode 100644 board/linksprite/pcduino/genimage.cfg
 create mode 100644 board/linksprite/pcduino/linux-extras.config
 create mode 100755 board/linksprite/pcduino/post-build.sh
 create mode 100755 board/linksprite/pcduino/post-image.sh
 create mode 100644 board/linksprite/pcduino/readme.txt
 create mode 100644 board/linksprite/pcduino/uboot-env.txt
 create mode 100644 configs/pcduino_defconfig

Comments

Thomas Petazzoni June 11, 2016, 1:19 p.m. UTC | #1
Hello,

On Fri, 10 Jun 2016 22:40:42 +0300, Sergey Matyukevich wrote:
> Add basic support for LinkSprite pcDuino board series
> including pcDuino, pcDuino-Lite, pcDuino-Lite-WiFi.
> Tested on pcDuino-Lite-WiFi.
> 
> Signed-off-by: Sergey Matyukevich <geomatsi@gmail.com>

Thanks for this new version! It looks pretty good overall, but I have a
few comments here and there.

First of all, you should use pcduino-v1 everywhere, since there are
multiple versions of the pcduino, and not all of them use the same SoC,
nor use the same Device Tree or U-Boot configuration.

>  board/linksprite/pcduino/boot.cmd            |  8 ++++
>  board/linksprite/pcduino/genimage.cfg        | 44 +++++++++++++++++++
>  board/linksprite/pcduino/linux-extras.config | 16 +++++++
>  board/linksprite/pcduino/post-build.sh       | 11 +++++
>  board/linksprite/pcduino/post-image.sh       | 17 ++++++++
>  board/linksprite/pcduino/readme.txt          | 34 +++++++++++++++
>  board/linksprite/pcduino/uboot-env.txt       | 38 ++++++++++++++++

The directory should be named board/linksprite/pcduino-v1/

>  configs/pcduino_defconfig                    | 65 ++++++++++++++++++++++++++++

I think the defconfig should be named linksprite_pcduinov1_defconfig

> +fatload mmc 0 $kernel_addr_r zImage
> +fatload mmc 0 $fdt_addr_r sun4i-a10-pcduino.dtb

So the dtb name does not carry the "v1" thing ?

> +image boot.vfat {
> +	vfat {
> +		files = {
> +			"zImage",
> +			"sun4i-a10-pcduino.dtb",
> +			"boot.scr"
> +		}
> +	}
> +	size = 10M

16M looks more "normal" :)


> +rm -rf "${GENIMAGE_TMP}"
> +mv ${BINARIES_DIR}/sun4i-a10-pcduino.dtb ${BINARIES_DIR}/sun4i-a10-pcduino.dtb

Not sure what this line is doing.

> diff --git a/board/linksprite/pcduino/readme.txt b/board/linksprite/pcduino/readme.txt
> new file mode 100644
> index 0000000..3227e75
> --- /dev/null
> +++ b/board/linksprite/pcduino/readme.txt
> @@ -0,0 +1,34 @@
> +pcDuino v1 (http://www.linksprite.com/linksprite-pcduino)
> +
> +Intro
> +=====
> +
> +This default configuration will allow you to start experimenting with the
> +buildroot environment for the LinkSprite pcDuino v1 board including its flavors
> +pcDuino-Lite and pcDuino-Lite-WiFi. With the current configuration it will bring-up the
> +board and allow access through the serial console as well as ethernet and wireless network interfaces.

Please wrap lines at 72 characters. Your favorite text editor should be
capable of doing this for you.

> +
> +How to build it
> +===============
> +
> +Configure Buildroot:
> +
> +    $ make pcduino_defconfig
> +
> +Modify Buildroot configuration if needed, e.g. add more packages to target:
> +
> +    $ make menuconfig
> +
> +Compile everything and build the SD card image:
> +
> +    $ make
> +
> +How to write the SD card
> +========================
> +
> +Once the build process is finished you will have an image called "sdcard.img"
> +in the output/images/ directory.
> +
> +Copy the bootable "sdcard.img" onto an SD card with "dd":
> +
> +  $ sudo dd if=output/images/sdcard.img of=/dev/sdX

Please indicate how to boot the SD card image on the board (if there is
a need to push a button or something).

> diff --git a/board/linksprite/pcduino/uboot-env.txt b/board/linksprite/pcduino/uboot-env.txt
> new file mode 100644
> index 0000000..cf504c6
> --- /dev/null
> +++ b/board/linksprite/pcduino/uboot-env.txt
> @@ -0,0 +1,38 @@
> +baudrate=115200
> +boot_a_script=load ${devtype} ${devnum}:${distro_bootpart} ${scriptaddr} ${prefix}${script}; source ${scriptaddr}
> +boot_extlinux=sysboot ${devtype} ${devnum}:${distro_bootpart} any ${scriptaddr} ${prefix}extlinux/extlinux.conf
> +boot_net_usb_start=usb start
> +boot_prefixes=/ /boot/
> +boot_script_dhcp=boot.scr.uimg
> +boot_scripts=boot.scr.uimg boot.scr
> +boot_targets=fel mmc0 usb0 pxe dhcp
> +bootcmd=run distro_bootcmd
> +bootcmd_dhcp=run boot_net_usb_start; if dhcp ${scriptaddr} ${boot_script_dhcp}; then source ${scriptaddr}; fi
> +bootcmd_fel=if test -n ${fel_booted} && test -n ${fel_scriptaddr}; then echo '(FEL boot)'; source ${fel_scriptaddr}; fi
> +bootcmd_mmc0=setenv devnum 0; run mmc_boot
> +bootcmd_pxe=run boot_net_usb_start; dhcp; if pxe get; then pxe boot; fi
> +bootcmd_usb0=setenv devnum 0; run usb_boot
> +bootdelay=2
> +bootm_size=0xa000000
> +console=ttyS0,115200
> +dfu_alt_info_ram=kernel ram 0x42000000 0x1000000;fdt ram 0x43000000 0x100000;ramdisk ram 0x43300000 0x4000000
> +distro_bootcmd=for target in ${boot_targets}; do run bootcmd_${target}; done
> +ethaddr=02:08:09:80:bb:50
> +fdt_addr_r=0x43000000
> +fdtcontroladdr=4af3c5e0
> +fdtfile=sun4i-a10-pcduino.dtb
> +kernel_addr_r=0x42000000
> +mmc_boot=if mmc dev ${devnum}; then setenv devtype mmc; run scan_dev_for_boot_part; fi
> +preboot=usb start
> +pxefile_addr_r=0x43200000
> +ramdisk_addr_r=0x43300000
> +scan_dev_for_boot=echo Scanning ${devtype} ${devnum}:${distro_bootpart}...; for prefix in ${boot_prefixes}; do run scan_dev_for_extlinux; run scan_dev_for_scripts; done
> +scan_dev_for_boot_part=part list ${devtype} ${devnum} -bootable devplist; env exists devplist || setenv devplist 1; for distro_bootpart in ${devplist}; do if fstype ${devtype} ${devnum}:${distro_bootpart} bootfstype; then run scan_dev_for_boot; fi; done
> +scan_dev_for_extlinux=if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}extlinux/extlinux.conf; then echo Found ${prefix}extlinux/extlinux.conf; run boot_extlinux; echo SCRIPT FAILED: continuing...; fi
> +scan_dev_for_scripts=for script in ${boot_scripts}; do if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${script}; then echo Found U-Boot script ${prefix}${script}; run boot_a_script; echo SCRIPT FAILED: continuing...; fi; done
> +scriptaddr=0x43100000
> +serial#=162367080980bb50
> +stderr=serial,vga
> +stdin=serial,usbkbd
> +stdout=serial,vga
> +usb_boot=usb start; if usb dev ${devnum}; then setenv devtype usb; run scan_dev_for_boot_part; fi

Why do you need such a big U-Boot environment? U-Boot doesn't come with
a sane default environment?

> diff --git a/configs/pcduino_defconfig b/configs/pcduino_defconfig
> new file mode 100644
> index 0000000..f0700b1
> --- /dev/null
> +++ b/configs/pcduino_defconfig
> @@ -0,0 +1,65 @@
> +# Architecture
> +BR2_arm=y
> +BR2_cortex_a8=y
> +
> +# System settings
> +BR2_TARGET_GENERIC_HOSTNAME="pcduino"
> +BR2_TARGET_GENERIC_ISSUE="pcDuino buildroot is ready"
> +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0"

Leave the default getty port.

> +
> +# SD image scripts
> +BR2_ROOTFS_POST_BUILD_SCRIPT="board/linksprite/pcduino/post-build.sh"
> +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/linksprite/pcduino/post-image.sh"
> +
> +# For kernel modules autoloading
> +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV=y
> +
> +# Linux headers same as kernel, a 4.4 series
> +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_4=y
> +
> +# Kernel
> +BR2_LINUX_KERNEL=y
> +BR2_LINUX_KERNEL_CUSTOM_VERSION=y
> +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.4.6"

Any reason to use 4.4 and not 4.6 ?

> +BR2_LINUX_KERNEL_DEFCONFIG="sunxi"
> +BR2_LINUX_KERNEL_DTS_SUPPORT=y
> +BR2_LINUX_KERNEL_INTREE_DTS_NAME="sun4i-a10-pcduino"
> +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/linksprite/pcduino/linux-extras.config"
> +
> +# Filesystem
> +BR2_TARGET_ROOTFS_EXT2=y
> +BR2_TARGET_ROOTFS_EXT2_4=y
> +
> +# U-Boot
> +BR2_TARGET_UBOOT=y
> +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y
> +BR2_TARGET_UBOOT_LATEST_VERSION=y

Please use a specific version, not "the latest version" option.

> +BR2_TARGET_UBOOT_USE_DEFCONFIG=y
> +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="Linksprite_pcDuino"
> +BR2_TARGET_UBOOT_NEEDS_DTC=y
> +BR2_TARGET_UBOOT_FORMAT_BIN=y
> +BR2_TARGET_UBOOT_SPL=y
> +BR2_TARGET_UBOOT_SPL_NAME="u-boot-sunxi-with-spl.bin"
> +BR2_TARGET_UBOOT_ENVIMAGE=y
> +BR2_TARGET_UBOOT_ENVIMAGE_SOURCE="board/linksprite/pcduino/uboot-env.txt"
> +BR2_TARGET_UBOOT_ENVIMAGE_SIZE="0x20000"
> +
> +# Host packages
> +BR2_PACKAGE_HOST_DOSFSTOOLS=y
> +BR2_PACKAGE_HOST_GENIMAGE=y
> +BR2_PACKAGE_HOST_MTOOLS=y
> +BR2_PACKAGE_HOST_UBOOT_TOOLS=y
> +
> +# Target packages: board access
> +BR2_PACKAGE_LRZSZ=y
> +BR2_PACKAGE_DROPBEAR=y

Those two packages are not needed.

> +
> +# Target packages: wireless support for pcduino-lite-wifi
> +BR2_PACKAGE_IW=y
> +BR2_PACKAGE_WIRELESS_TOOLS=y
> +BR2_PACKAGE_WIRELESS_TOOLS_LIB=y
> +BR2_PACKAGE_WPA_SUPPLICANT=y
> +BR2_PACKAGE_WPA_SUPPLICANT_NL80211=y
> +BR2_PACKAGE_WPA_SUPPLICANT_CLI=y
> +BR2_PACKAGE_LINUX_FIRMWARE=y
> +BR2_PACKAGE_LINUX_FIRMWARE_RTL_81XX=y

Could you rework those minor details, and send an updated version?

Thanks!

Thomas
Sergey Matyukevich June 11, 2016, 3:48 p.m. UTC | #2
Hello,

2016-06-11 16:19 GMT+03:00 Thomas Petazzoni <
thomas.petazzoni@free-electrons.com>:

> Hello,
>
> On Fri, 10 Jun 2016 22:40:42 +0300, Sergey Matyukevich wrote:
> > Add basic support for LinkSprite pcDuino board series
> > including pcDuino, pcDuino-Lite, pcDuino-Lite-WiFi.
> > Tested on pcDuino-Lite-WiFi.
> >
> > Signed-off-by: Sergey Matyukevich <geomatsi@gmail.com>
>
> Thanks for this new version! It looks pretty good overall, but I have a
> few comments here and there


Thanks for review. See my answers and questions below.


> First of all, you should use pcduino-v1 everywhere, since there are
> multiple versions of the pcduino, and not all of them use the same SoC,
> nor use the same Device Tree or U-Boot configuration.
>
> >  board/linksprite/pcduino/boot.cmd            |  8 ++++
> >  board/linksprite/pcduino/genimage.cfg        | 44 +++++++++++++++++++
> >  board/linksprite/pcduino/linux-extras.config | 16 +++++++
> >  board/linksprite/pcduino/post-build.sh       | 11 +++++
> >  board/linksprite/pcduino/post-image.sh       | 17 ++++++++
> >  board/linksprite/pcduino/readme.txt          | 34 +++++++++++++++
> >  board/linksprite/pcduino/uboot-env.txt       | 38 ++++++++++++++++
>
> The directory should be named board/linksprite/pcduino-v1/
>
> >  configs/pcduino_defconfig                    | 65
> ++++++++++++++++++++++++++++
>
> I think the defconfig should be named linksprite_pcduinov1_defconfig
>
> > +fatload mmc 0 $kernel_addr_r zImage
> > +fatload mmc 0 $fdt_addr_r sun4i-a10-pcduino.dtb
>
> So the dtb name does not carry the "v1" thing ?


That is correct. Neither kernel nor U-Boot have this 'v1' thing for the
first pcduino board series.


> then run scan_dev_for_boot; fi; done
> > +scan_dev_for_extlinux=if test -e ${devtype}
> ${devnum}:${distro_bootpart} ${prefix}extlinux/extlinux.conf; then echo
> Found ${prefix}extlinux/extlinux.conf; run boot_extlinux; echo SCRIPT
> FAILED: continuing...; fi
> > +scan_dev_for_scripts=for script in ${boot_scripts}; do if test -e
> ${devtype} ${devnum}:${distro_bootpart} ${prefix}${script}; then echo Found
> U-Boot script ${prefix}${script}; run boot_a_script; echo SCRIPT FAILED:
> continuing...; fi; done
> > +scriptaddr=0x43100000
> > +serial#=162367080980bb50
> > +stderr=serial,vga
> > +stdin=serial,usbkbd
> > +stdout=serial,vga
> > +usb_boot=usb start; if usb dev ${devnum}; then setenv devtype usb; run
> scan_dev_for_boot_part; fi
>
> Why do you need such a big U-Boot environment? U-Boot doesn't come with
> a sane default environment?
>

U-Boot indeed comes with a sane default environment. And this is exactly
the copy of default environment for pcduino. I assume that I have to put
something reasonable to u-boot-env mmc partition from the start.


> > +# Target packages: board access
> > +BR2_PACKAGE_LRZSZ=y
> > +BR2_PACKAGE_DROPBEAR=y
>
> Those two packages are not needed.
>

What is wrong with lrzsz package ? It is very handy for the board with WiFi
networking only: one can upload/download files via serial port until proper
networking setup is worked out.


> Could you rework those minor details, and send an updated version?
>
> Thanks!
>

Sure, I will introduce the changes according to your comments and re-submit
the patch.

Regards,
Sergey
Thomas Petazzoni June 11, 2016, 5:09 p.m. UTC | #3
Hello,

On Sat, 11 Jun 2016 18:48:11 +0300, Sergey Matyukevich wrote:

> > So the dtb name does not carry the "v1" thing ?  
> 
> That is correct. Neither kernel nor U-Boot have this 'v1' thing for the
> first pcduino board series.

Ah, okay. Then maybe you can keep the pcduino name for the defconfig
and the board directory, assuming that it refers to the v1.

> U-Boot indeed comes with a sane default environment. And this is exactly
> the copy of default environment for pcduino. I assume that I have to put
> something reasonable to u-boot-env mmc partition from the start.

Leave the environment partition unitialized. U-Boot will detect that
there is no valid environment, and will automatically fall back to its
built-in default environment.

> What is wrong with lrzsz package ? It is very handy for the board with WiFi
> networking only: one can upload/download files via serial port until proper
> networking setup is worked out.

By "principle", we don't add additional userspace packages to
defconfig. In addition:

 1/ Your defconfig enables WiFi support, so transferring files over
    serial port doesn't seem very useful.

 2/ Busybox has a "rx" applet that replaces the corresponding program
    from lrzsz.

Thanks!

Thomas
diff mbox

Patch

diff --git a/board/linksprite/pcduino/boot.cmd b/board/linksprite/pcduino/boot.cmd
new file mode 100644
index 0000000..0db8363
--- /dev/null
+++ b/board/linksprite/pcduino/boot.cmd
@@ -0,0 +1,8 @@ 
+setenv fdt_high ffffffff
+
+setenv bootargs console=ttyS0,115200 console=tty1 earlyprintk root=/dev/mmcblk0p2 rootwait panic=10 ${extra}
+
+fatload mmc 0 $kernel_addr_r zImage
+fatload mmc 0 $fdt_addr_r sun4i-a10-pcduino.dtb
+
+bootz $kernel_addr_r - $fdt_addr_r
diff --git a/board/linksprite/pcduino/genimage.cfg b/board/linksprite/pcduino/genimage.cfg
new file mode 100644
index 0000000..eb2b187
--- /dev/null
+++ b/board/linksprite/pcduino/genimage.cfg
@@ -0,0 +1,44 @@ 
+#
+# Minimal SD card image for the pcDuino
+#
+
+image boot.vfat {
+	vfat {
+		files = {
+			"zImage",
+			"sun4i-a10-pcduino.dtb",
+			"boot.scr"
+		}
+	}
+	size = 10M
+}
+
+image sdcard.img {
+	hdimage {
+	}
+
+	partition u-boot {
+		in-partition-table = "no"
+		image = "u-boot-sunxi-with-spl.bin"
+		offset = 8192
+	}
+
+	partition u-boot-env {
+		in-partition-table = "no"
+		image = "uboot-env.bin"
+		offset = 557056
+		size = 131072
+	}
+
+	partition boot {
+		partition-type = 0xC
+		bootable = "true"
+		image = "boot.vfat"
+	}
+
+	partition rootfs {
+		partition-type = 0x83
+		image = "rootfs.ext4"
+		size = 512M
+	}
+}
diff --git a/board/linksprite/pcduino/linux-extras.config b/board/linksprite/pcduino/linux-extras.config
new file mode 100644
index 0000000..670f83f
--- /dev/null
+++ b/board/linksprite/pcduino/linux-extras.config
@@ -0,0 +1,16 @@ 
+# spidev
+CONFIG_SPI_SPIDEV=y
+
+# wireless core
+CONFIG_CFG80211=m
+CONFIG_CFG80211_WEXT=y
+CONFIG_MAC80211=m
+
+# wireless drivers
+CONFIG_WLAN=y
+CONFIG_RTL_CARDS=m
+CONFIG_RTL8192CU=m
+CONFIG_RTLWIFI=m
+CONFIG_RTLWIFI_USB=m
+CONFIG_RTLWIFI_DEBUG=y
+CONFIG_RTL8192C_COMMON=m
diff --git a/board/linksprite/pcduino/post-build.sh b/board/linksprite/pcduino/post-build.sh
new file mode 100755
index 0000000..268c107
--- /dev/null
+++ b/board/linksprite/pcduino/post-build.sh
@@ -0,0 +1,11 @@ 
+#!/bin/sh
+# post-build.sh for pcDuino taken from OrangePi post-build.sh
+# 2013, Carlo Caione <carlo.caione@gmail.com>
+
+BOARD_DIR="$(dirname $0)"
+MKIMAGE=$HOST_DIR/usr/bin/mkimage
+BOOT_CMD=$BOARD_DIR/boot.cmd
+BOOT_CMD_H=$BINARIES_DIR/boot.scr
+
+# U-Boot script
+$MKIMAGE -C none -A arm -T script -d $BOOT_CMD $BOOT_CMD_H
diff --git a/board/linksprite/pcduino/post-image.sh b/board/linksprite/pcduino/post-image.sh
new file mode 100755
index 0000000..82b3c8a
--- /dev/null
+++ b/board/linksprite/pcduino/post-image.sh
@@ -0,0 +1,17 @@ 
+#!/bin/sh
+
+BOARD_DIR="$(dirname $0)"
+GENIMAGE_CFG="${BOARD_DIR}/genimage.cfg"
+GENIMAGE_TMP="${BUILD_DIR}/genimage.tmp"
+
+rm -rf "${GENIMAGE_TMP}"
+mv ${BINARIES_DIR}/sun4i-a10-pcduino.dtb ${BINARIES_DIR}/sun4i-a10-pcduino.dtb
+
+genimage                               \
+	--rootpath "${TARGET_DIR}"     \
+	--tmppath "${GENIMAGE_TMP}"    \
+	--inputpath "${BINARIES_DIR}"  \
+	--outputpath "${BINARIES_DIR}" \
+	--config "${GENIMAGE_CFG}"
+
+exit $?
diff --git a/board/linksprite/pcduino/readme.txt b/board/linksprite/pcduino/readme.txt
new file mode 100644
index 0000000..3227e75
--- /dev/null
+++ b/board/linksprite/pcduino/readme.txt
@@ -0,0 +1,34 @@ 
+pcDuino v1 (http://www.linksprite.com/linksprite-pcduino)
+
+Intro
+=====
+
+This default configuration will allow you to start experimenting with the
+buildroot environment for the LinkSprite pcDuino v1 board including its flavors
+pcDuino-Lite and pcDuino-Lite-WiFi. With the current configuration it will bring-up the
+board and allow access through the serial console as well as ethernet and wireless network interfaces.
+
+How to build it
+===============
+
+Configure Buildroot:
+
+    $ make pcduino_defconfig
+
+Modify Buildroot configuration if needed, e.g. add more packages to target:
+
+    $ make menuconfig
+
+Compile everything and build the SD card image:
+
+    $ make
+
+How to write the SD card
+========================
+
+Once the build process is finished you will have an image called "sdcard.img"
+in the output/images/ directory.
+
+Copy the bootable "sdcard.img" onto an SD card with "dd":
+
+  $ sudo dd if=output/images/sdcard.img of=/dev/sdX
diff --git a/board/linksprite/pcduino/uboot-env.txt b/board/linksprite/pcduino/uboot-env.txt
new file mode 100644
index 0000000..cf504c6
--- /dev/null
+++ b/board/linksprite/pcduino/uboot-env.txt
@@ -0,0 +1,38 @@ 
+baudrate=115200
+boot_a_script=load ${devtype} ${devnum}:${distro_bootpart} ${scriptaddr} ${prefix}${script}; source ${scriptaddr}
+boot_extlinux=sysboot ${devtype} ${devnum}:${distro_bootpart} any ${scriptaddr} ${prefix}extlinux/extlinux.conf
+boot_net_usb_start=usb start
+boot_prefixes=/ /boot/
+boot_script_dhcp=boot.scr.uimg
+boot_scripts=boot.scr.uimg boot.scr
+boot_targets=fel mmc0 usb0 pxe dhcp
+bootcmd=run distro_bootcmd
+bootcmd_dhcp=run boot_net_usb_start; if dhcp ${scriptaddr} ${boot_script_dhcp}; then source ${scriptaddr}; fi
+bootcmd_fel=if test -n ${fel_booted} && test -n ${fel_scriptaddr}; then echo '(FEL boot)'; source ${fel_scriptaddr}; fi
+bootcmd_mmc0=setenv devnum 0; run mmc_boot
+bootcmd_pxe=run boot_net_usb_start; dhcp; if pxe get; then pxe boot; fi
+bootcmd_usb0=setenv devnum 0; run usb_boot
+bootdelay=2
+bootm_size=0xa000000
+console=ttyS0,115200
+dfu_alt_info_ram=kernel ram 0x42000000 0x1000000;fdt ram 0x43000000 0x100000;ramdisk ram 0x43300000 0x4000000
+distro_bootcmd=for target in ${boot_targets}; do run bootcmd_${target}; done
+ethaddr=02:08:09:80:bb:50
+fdt_addr_r=0x43000000
+fdtcontroladdr=4af3c5e0
+fdtfile=sun4i-a10-pcduino.dtb
+kernel_addr_r=0x42000000
+mmc_boot=if mmc dev ${devnum}; then setenv devtype mmc; run scan_dev_for_boot_part; fi
+preboot=usb start
+pxefile_addr_r=0x43200000
+ramdisk_addr_r=0x43300000
+scan_dev_for_boot=echo Scanning ${devtype} ${devnum}:${distro_bootpart}...; for prefix in ${boot_prefixes}; do run scan_dev_for_extlinux; run scan_dev_for_scripts; done
+scan_dev_for_boot_part=part list ${devtype} ${devnum} -bootable devplist; env exists devplist || setenv devplist 1; for distro_bootpart in ${devplist}; do if fstype ${devtype} ${devnum}:${distro_bootpart} bootfstype; then run scan_dev_for_boot; fi; done
+scan_dev_for_extlinux=if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}extlinux/extlinux.conf; then echo Found ${prefix}extlinux/extlinux.conf; run boot_extlinux; echo SCRIPT FAILED: continuing...; fi
+scan_dev_for_scripts=for script in ${boot_scripts}; do if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${script}; then echo Found U-Boot script ${prefix}${script}; run boot_a_script; echo SCRIPT FAILED: continuing...; fi; done
+scriptaddr=0x43100000
+serial#=162367080980bb50
+stderr=serial,vga
+stdin=serial,usbkbd
+stdout=serial,vga
+usb_boot=usb start; if usb dev ${devnum}; then setenv devtype usb; run scan_dev_for_boot_part; fi
diff --git a/configs/pcduino_defconfig b/configs/pcduino_defconfig
new file mode 100644
index 0000000..f0700b1
--- /dev/null
+++ b/configs/pcduino_defconfig
@@ -0,0 +1,65 @@ 
+# Architecture
+BR2_arm=y
+BR2_cortex_a8=y
+
+# System settings
+BR2_TARGET_GENERIC_HOSTNAME="pcduino"
+BR2_TARGET_GENERIC_ISSUE="pcDuino buildroot is ready"
+BR2_TARGET_GENERIC_GETTY_PORT="ttyS0"
+
+# SD image scripts
+BR2_ROOTFS_POST_BUILD_SCRIPT="board/linksprite/pcduino/post-build.sh"
+BR2_ROOTFS_POST_IMAGE_SCRIPT="board/linksprite/pcduino/post-image.sh"
+
+# For kernel modules autoloading
+BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV=y
+
+# Linux headers same as kernel, a 4.4 series
+BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_4=y
+
+# Kernel
+BR2_LINUX_KERNEL=y
+BR2_LINUX_KERNEL_CUSTOM_VERSION=y
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.4.6"
+BR2_LINUX_KERNEL_DEFCONFIG="sunxi"
+BR2_LINUX_KERNEL_DTS_SUPPORT=y
+BR2_LINUX_KERNEL_INTREE_DTS_NAME="sun4i-a10-pcduino"
+BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/linksprite/pcduino/linux-extras.config"
+
+# Filesystem
+BR2_TARGET_ROOTFS_EXT2=y
+BR2_TARGET_ROOTFS_EXT2_4=y
+
+# U-Boot
+BR2_TARGET_UBOOT=y
+BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y
+BR2_TARGET_UBOOT_LATEST_VERSION=y
+BR2_TARGET_UBOOT_USE_DEFCONFIG=y
+BR2_TARGET_UBOOT_BOARD_DEFCONFIG="Linksprite_pcDuino"
+BR2_TARGET_UBOOT_NEEDS_DTC=y
+BR2_TARGET_UBOOT_FORMAT_BIN=y
+BR2_TARGET_UBOOT_SPL=y
+BR2_TARGET_UBOOT_SPL_NAME="u-boot-sunxi-with-spl.bin"
+BR2_TARGET_UBOOT_ENVIMAGE=y
+BR2_TARGET_UBOOT_ENVIMAGE_SOURCE="board/linksprite/pcduino/uboot-env.txt"
+BR2_TARGET_UBOOT_ENVIMAGE_SIZE="0x20000"
+
+# Host packages
+BR2_PACKAGE_HOST_DOSFSTOOLS=y
+BR2_PACKAGE_HOST_GENIMAGE=y
+BR2_PACKAGE_HOST_MTOOLS=y
+BR2_PACKAGE_HOST_UBOOT_TOOLS=y
+
+# Target packages: board access
+BR2_PACKAGE_LRZSZ=y
+BR2_PACKAGE_DROPBEAR=y
+
+# Target packages: wireless support for pcduino-lite-wifi
+BR2_PACKAGE_IW=y
+BR2_PACKAGE_WIRELESS_TOOLS=y
+BR2_PACKAGE_WIRELESS_TOOLS_LIB=y
+BR2_PACKAGE_WPA_SUPPLICANT=y
+BR2_PACKAGE_WPA_SUPPLICANT_NL80211=y
+BR2_PACKAGE_WPA_SUPPLICANT_CLI=y
+BR2_PACKAGE_LINUX_FIRMWARE=y
+BR2_PACKAGE_LINUX_FIRMWARE_RTL_81XX=y