I just got word of this today and will be looking into it over the next week or so. May steal the kernel... may rebuild the image... may do nothing....
but, I wanted to share.
@rhkean
Legend :+1: . Hopefully this will improve the 300mbit~ ethernet we have now ?
How do you test ethernet? I'll check on my. I'm running a 4.2 kernel at the moment.
@rhkean
apt-get install iperf
https://www.veritas.com/support/en_US/article.HOWTO64302
You'll need 2 machines. 1 acts as receiver, other acts as the sender of data.
what's the performance on a RPi-2?
or, I guess I can hard-wire my laptop.... something faster, so I know that I'm testing the SBC
@rhkean
what's the performance on a RPi-2?
All RPi's are 100mbit, so 10-12mb/s max (yep, i know, years behind every other SBC)
C2 can sustain 880mbit, 110mb/s
Pine A64+ is gigabit, i get around 550mbit: http://forum.pine64.org/showthread.php?tid=1068&pid=14466#pid14466
XU4 is gigabit capable, but i've only been able to achieve 280mbit 35mb/s
Pine A64+ is gigabit, i get around 550mbit: http://forum.pine64.org/showthread.php?tid=1068&pid=14466#pid14466
show off... I have to keep mine on a 100mbit switch to prevent it from hanging. come to think of it... I'll have to do some perf tests with the 2nd one and see if its isolated to my first board.
XU4 is gigabit capable, but i've only been able to achieve 280mbit 35mb/s
I've never tested the network on my XU4, because it streams high-def to 4 clients simultaneously without a stutter. So, I just assumed it was fast enough... :)
show off... I have to keep mine on a 100mbit switch to prevent it from hanging. come to think of it... I'll have to do some perf tests with the 2nd one and see if its isolated to my first board.
Hehe, yep, no problems with the ones I've got.
it would be interesting if it is a hardware issue. Could explain why er0l is having throughput issues
well.... this will take me a few days... :cry:
I was replacing the heatsink on my XU4 last night and knocked 2 capacitors off of the bottom of the board. :sob: :sob:
luckily, they're just part of the USB3_0 subsystem, which is the external USB3 ports. I had to move my hard drives over to the USB2 bus until I can re-attach them. :crying_cat_face:
I was replacing the heatsink on my XU4 last night and knocked 2 capacitors off of the bottom of the board.
@rhkean
Gutted :( easily done, especially with those tiny heatsink clips right next to components. I think I scratched a few on mine with the pliers lol.
Did you have any issues getting the heatsink unstuck? I had to get it upto 80'c before the sticky would detach without taking the ARM chip with it lol.
Gutted :( easily done, especially with those tiny heatsink clips right next to components. I think I scratched a few on mine with the pliers lol.
fortunately, I have a good soldering iron. :smile: Took all my willpower not to try to fix it last night. It was about midnight when it happened.... I would have destroyed the board for sure if I had tried to take a soldering iron to it that late at night. :laughing:
Did you have any issues getting the heatsink unstuck? I had to get it upto 80'c before the sticky would detach without taking the ARM chip with it lol.
that was tricky, but I was expecting it. So, just a little constant, prying pressure under the corner and it gave way. I just kept adding pressure until I heard the sticky start to make that crinkling sound... then held it there until it let go.
What I need is a REALLY good Hi-res pic of the area to make sure that I put that tiny capacitor back where it belongs.
@rhkean
lmao.
My XU4 is doing backups tonight, but if you seriously want the image, let me know and i'll take it tomorrow.
I'll let you know after I take a look at it tonight under better lighting. It might be a simple fix.
Also, as of today, I've got 4.6.0 and 4.7.0-rc6 kernel builds that boot and initialize the HDMI output!
gonna take me a bit longer on the USB3 testing... :sob:
I knocked 2 capacitors and a ferrous blob (inductor) off the board... and loss the inductor.
fortunately, it is only affecting the USB3 ports. I moved the USB3 hub over to the USB2 port.... sigh...
gotta order a new board.
sigh...
gotta order a new board.
Gutted. Not the cheapest SBC on the market to replace lol :(
So true...
@Fourdee
Legend 馃憤 . Hopefully this will improve the 300mbit~ ethernet we have now ?
ran a couple tests tonight between 2 XU4 boards
| client kernel | server kernel | result |
| --- | --- | --- |
| 3.10.96 | 4.6.3 | 525 mbps |
| 4.6.3 | 3.10.96 | 280 mbps |
| 4.6.3 | 4.6.3 | 340 mbps |
| 4.6.3 | 4.6.3 | 280 mbps |
| 4.6.3 | 4.6.3 | 420 mbps |
| 4.6.3 | 4.6.3 | 485 mbps |
I'll try both boards against another system tomorrow
Just my luck...
My work laptop has a firewall installed and I don't have the rights to open the port for testing
And my wife's laptop's wired NIC is only 100mbit
Oddly, using my wife's wifi as the server and the new xu4 as client, it tested at only 330mbps and the old xu4 tested at 540mbps
final testing with iperf3
XU4 server, Ubuntu x86_64 client: 985mbps
XU4 client, Ubuntu x86_64 server: starts out around 950mbps, but settles down around 340mbps
@rhkean
Thanks Rob,
I'll run the test on my XU4 + 1Gbit network today to compare. Any chance you can send the kernel/compile notes over?
will this do?
assumes running as root, builds in /usr/src
directory (also patches in AUFS as a module)
save as: buildkernel.sh
for a kernel with version 4.6.3-odroidxu4-1
from tobetter's repository:
buildkernel.sh -f -r tobetter -b "odroidxu4-v4.6" -v 4.6.3 -x 1
or
buildkernel.sh -h
#!/bin/bash
bUseConfigGz=0
bFinalize=0
#REPOSITORY="tobetter"
#BRANCH="odroidxu4-v4.6"
#VERSION="4.6.3"
#REPOSITORY="ioft"
#BRANCH="new_master"
#VERSION="4.7.0-rc6"
CloneAufsAndPatch() {
if [ ! -d "/usr/src/${LINUX}/fs/aufs" ]; then
cd /usr/src
echo "Purging old build tree for ${AUFS_BRANCH}"
rm -rf "${AUFS_BRANCH}"
echo "Cloning aufs.standalone from https://github.com/sfjro/aufs4-standalone -b ${AUFS_BRANCH}"
if ! git clone --depth 1 https://github.com/sfjro/aufs4-standalone.git -b ${AUFS_BRANCH} ${AUFS_BRANCH}; then
echo "git clone aufs4-standalone FAILED"
exit 1
fi
cd "/usr/src/${LINUX}"
echo "Applying aufs patches"
echo " applying aufs4-kbuild.patch"
if ! patch -p1 < ../${AUFS_BRANCH}/aufs4-kbuild.patch; then
echo "patch aufs4-kbuild.patch FAILED"
exit 1
fi
echo " applying aufs4-base.patch"
if ! patch -p1 < ../${AUFS_BRANCH}/aufs4-base.patch; then
echo "patch aufs4-base.patch FAILED"
exit 1
fi
echo " applying aufs4-mmap${RC}.patch"
if ! patch -p1 < ../${AUFS_BRANCH}/aufs4-mmap.patch; then
echo "patch aufs4-mmap.patch FAILED"
exit 1
fi
echo " copying aufs code to linux build tree"
if ! cp -vR ../${AUFS_BRANCH}/{Documentation,fs} .; then
echo "copy ../${AUFS_BRANCH}{Documentation,fs} FAILED"
exit 1
fi
if ! cp -v ../${AUFS_BRANCH}/include/uapi/linux/aufs_type.h include/uapi/linux/ ; then
echo "copy aufs_type.h FAILED"
exit 1
fi
fi
}
PurgeAndCloneLinuxTree() {
echo "Purging old build tree for ${LINUX}"
if [ -d "${LINUX}" ]; then
rm -rf "${LINUX}"
fi
echo "Cloning linux from https://github.com/${REPOSITORY}/linux -b ${BRANCH}"
if ! git clone --depth 1 https://github.com/${REPOSITORY}/linux -b ${BRANCH} "${LINUX}"; then
echo "git clone hardkernel repo FAILED"
exit 1
fi
}
SetKERNELRELEASE() {
cd "/usr/src/${LINUX}"
KERNELRELEASE=`make kernelrelease`
echo "KERNELRELEASE: ${KERNELRELEASE}"
}
ConfigureBuild() {
cd "/usr/src/${LINUX}"
echo "Running \"make distclean\""
if ! make distclean; then
echo "make distclean failed"
exit 1
fi
if [ "4.7" = "${VERSION:0:3}" ] && (( ! bUseConfigGz )); then
echo "copying config from /boot"
cp /boot/config-4.7 ./.config
cp /boot/config-4.7 ./.config.old
elif [ "4.6" == "${VERSION:0:3}" ] && (( ! bUseConfigGz )); then
echo "making odroidxu4_defconfig"
make odroidxu4_defconfig
else
if [ -f /proc/config.gz ]; then
echo "Pulling config from kernel"
zcat /proc/config.gz > .config
elif [ -f "/boot/config-`uname -r`" ]; then
echo "Pulling config from /boot/config-`uname -r`"
cp -v "/boot/config-`uname -r`" ./.config
else
echo "no old config found."
make odroidxu4_defconfig
fi
fi
if (( ${bFinalize} )); then
echo "Changing CONFIG_LOCALVERSION to \"odroidxu4${EXTRAVERSION}\" in .config"
LOCALVERSION="odroidxu4${EXTRAVERSION}"
else
echo "Changing CONFIG_LOCALVERSION to \"-${REPOSITORY}${EXTRAVERSION}\" in .config"
LOCALVERSION="${REPOSITORY}${EXTRAVERSION}"
fi
sed -i "/CONFIG_LOCALVERSION=/ c\CONFIG_LOCALVERSION=\"-${LOCALVERSION}\"" .config
if (( $? != 0 )); then
echo "sed .config FAILED"
exit 1
fi
if [ -d "fs/aufs" ]; then
cat << _EOF_ >> .config
CONFIG_AUFS_FS=m
CONFIG_AUFS_BRANCH_MAX_127=y
# CONFIG_AUFS_BRANCH_MAX_511 is not set
# CONFIG_AUFS_BRANCH_MAX_1023 is not set
# CONFIG_AUFS_BRANCH_MAX_32767 is not set
CONFIG_AUFS_SBILIST=y
CONFIG_AUFS_HNOTIFY=y
CONFIG_AUFS_HFSNOTIFY=y
CONFIG_AUFS_EXPORT=y
CONFIG_AUFS_XATTR=y
CONFIG_AUFS_FHSM=y
CONFIG_AUFS_RDU=y
CONFIG_AUFS_SHWH=y
CONFIG_AUFS_BR_RAMFS=y
CONFIG_AUFS_BR_FUSE=y
CONFIG_AUFS_POLL=y
CONFIG_AUFS_BDEV_LOOP=y
# CONFIG_AUFS_DEBUG is not set
_EOF_
fi
echo "Running \"make silentoldconfig\""
if ! make silentoldconfig; then
echo "make silentoldconfig FAILED"
echo "running make oldconfig"
if ! make oldconfig; then
echo "make oldconfig FAILED"
exit 1
fi
fi
SetKERNELRELEASE
}
BuildLinuxKernel() {
cd "/usr/src/${LINUX}"
pwd
SetKERNELRELEASE
echo "Making kernel: ${KERNELRELEASE}"
make -j4
if (( $? != 0 )); then
echo "make -j4 FAILED"
exit 1
fi
}
InstallKernel() {
cd "/usr/src/${LINUX}"
pwd
SetKERNELRELEASE
echo "Installing modules"
if [ -d "/lib/modules/${KERNELRELEASE}" ]; then
echo " purging old modules from /lib/modules/${KERNELRELEASE}"
rm -rf "/lib/modules/${KERNELRELEASE}"
fi
echo " running \"make modules_install\""
echo " skipping \"make modules_install\""
if ! make modules_install; then
echo "make modules_install FAILED"
exit 1
fi
echo "Copying zImage to /boot/zImage-${KERNELRELEASE}"
if ! cp -fv arch/arm/boot/zImage /boot/zImage-${KERNELRELEASE}; then
echo "copy zImage to /boot FAILED"
exit 1
fi
echo "Copying device tree to /boot/odroidxu4-${KERNELRELEASE}.dtb"
if ! cp -fv arch/arm/boot/dts/exynos5422-odroidxu4.dtb /boot/odroidxu4-${KERNELRELEASE}.dtb; then
echo "copy device tree to /boot FAILED"
exit 1
fi
echo "Copying .config to /boot/config-${KERNELRELEASE}"
if ! cp -fv .config /boot/config-${KERNELRELEASE}; then
echo "copy .config to /boot FAILED"
exit 1
fi
echo "Generating /boot/initrd.img-${KERNELRELEASE}"
if [ -f "/boot/initrd.img-${KERNELRELEASE}" ]; then
echo " removing existing /boot/initrd.img-${KERNELRELEASE}"
rm -f "/boot/initrd.img-${KERNELRELEASE}"
fi
if ! update-initramfs -c -k ${KERNELRELEASE}; then
echo "create /boot/initrd.img FAILED"
exit 1
fi
echo "Creating /boot/uInitrd-${KERNELRELEASE}"
if ! mkimage -A arm -O linux -T ramdisk -C none -a 0 -e 0 -n uInitrd -d /boot/initrd.img-${KERNELRELEASE} /boot/uInitrd-${KERNELRELEASE}; then
echo "Create uInitrd FAILED"
exit 1
fi
# echo "Updating boot.ini to boot new kernel"
# if ! sed -i "/setenv version/ c\setenv version \"${KERNELRELEASE}\"" /DietPi/boot.ini; then
# echo "boot.ini update FAILED"
# exit 1
# fi
ls -Fla /boot/*${KERNELRELEASE}*
}
WriteUsage() {
echo "USAGE:"
echo -e "\tbuildkernel.sh [-A] [-f] -r REPOSITORY -b BRANCH -v VERSION [-x EXTRAVERSION]"
echo -e "\tbuildkernel.sh -h"
echo ""
echo -e "\t Downloads and builds kernel from \${REPOSITORY} \${BRANCH} and "
echo -e "\t sets kernelrelease to: \${VERSION}-\${REPOSITORY}[-\${EXTRAVERSION}]"
echo ""
echo -e "\t-f:\tfinalize: sets kernelrelease: \${VERSION}-odroidxu4[-\${EXTRAVERSION]"
exit 1
}
ProcessOpts() {
local useDefaults
useDefaults=0
if (( $# > 0 )); then
while getopts ":Acftr:b:v:x:" opt; do
case $opt in
A)
useDefaults=1
;;
c)
echo "use /proc/config.gz"
bUseConfigGz=1
;;
f)
echo "dropping repository from kernelrelease"
bFinalize=1
;;
r)
echo "REPOSITORY: ${OPTARG}"
REPOSITORY="${OPTARG}"
;;
b)
echo "BRANCH: ${OPTARG}"
BRANCH="${OPTARG}"
;;
v)
echo "VERSION: ${OPTARG}"
VERSION="${OPTARG}"
;;
x)
echo "EXTRAVERSION: ${OPTARG}"
EXTRAVERSION="-${OPTARG}"
;;
\?)
echo "*** INVALID OPTION: -${OPTARG}"
WriteUsage
;;
:)
echo "*** Option -${OPTARG} requires an argument."
WriteUsage
;;
esac
done
shift $((OPTIND-1))
fi
if [ -z "${REPOSITORY}" ]; then
if (( $useDefaults )); then
REPOSITORY="rhkean"
else
echo "REPOSITORY not set."
WriteUsage
fi
fi
if [ -z "${BRANCH}" ]; then
if (( $useDefaults )); then
BRANCH="odroidxu4-v4.6"
else
echo "BRANCH not set."
WriteUsage
fi
fi
if [ -z "${VERSION}" ]; then
if (( $useDefaults )); then
VERSION="4.6.3"
else
echo "VERSION not set."
WriteUsage
fi
fi
AUFS_BRANCH="aufs${VERSION:0:3}"
if [ "${AUFS_BRANCH}" = "aufs4.7" ]; then
AUFS_BRANCH="aufs4.x-rcN"
fi
BUILD_VERSION="${VERSION}-${REPOSITORY}${EXTRAVERSION}"
if (( ${bFinalize} )); then
BUILD_VERSION="${VERSION}-odroidxu4${EXTRAVERSION}"
fi
echo "Setting BUILD_VERSION: ${BUILD_VERSION}"
LINUX="linux-${BUILD_VERSION}"
}
################## MAIN #####################
cd "/usr/src"
ProcessOpts "$@"
PurgeAndCloneLinuxTree
CloneAufsAndPatch
ConfigureBuild
BuildLinuxKernel
InstallKernel
you'll need to edit the boot.ini
file. I suggest this, so you only have to change the version in the future:
setenv version "4.6.3-odroidxu4-1+"
setenv zimage "zImage-${version}"
setenv uinitrd "uInitrd-${version}"
setenv devicetree "odroidxu4-${version}.dtb"
# boot commands
setenv bootcmd "fatload mmc 0:1 0x40008000 ${zimage}; fatload mmc 0:1 0x42000000 ${uinitrd}; fatload mmc 0:1 0x44000000 ${devicetree}; bootz 0x40008000 0x42000000 0x44000000"
also:
echo "11" > /etc/.dietpi_hw_model_identifier
@rhkean
Thanks Rob :+1:
Managed to get v123 out the door, but i'am out of time today. Will take a look start of next week :)
Edit: milestone so I dont forget :)
notes:
XU4 (3.10.96+) <> C2
[ 5] 0.0-30.0 sec 2.37 GBytes 679 Mbits/sec
[ 4] 0.0-30.0 sec 535 MBytes 150 Mbits/sec
root@DietPi-XU4:~# uname -a
Linux DietPi-XU4 3.10.96+ #1 SMP PREEMPT Fri May 13 14:06:12 CEST 2016 armv7l GNU/Linux
Had to clock her down a bit, she was a little "toasty" lol:
make -j $(nproc --all)
= 8
I would definitely appreciate it
Had to clock her down a bit, she was a little "toasty" lol:
make -j $(nproc --all) = 8
yup... at full speed (2GHz), I couldn't do more than -j=4
not sure which would be faster... -j8 at 1GHz or -j4 at 2GHz
I've compiled and hosted the tobetter XU4 4.7.0 Kernel
Notes:
To install on DietPi:
#install
# - p7zip (allows for 40MB.7z, compared to 90MB.zip
apt-get install -y p7zip-full
# - Remove existing kernel packages
# NB: When asked to abort removal, say <No>
apt-get purge -y --force-yes linux-image-armhf-odroid-xu3 linux-image-3.*
apt-get autoremove --purge -y
# - Download/install new kernel
wget http://dietpi.com/downloads/binaries/xu4/DietPi-XU4-4.7.0-28_10_2016.7z -O package.7z
7z x -aoa package.7z -o/
rm package.7z
# - Hardcode HW_MODEL
echo 11 > /etc/.dietpi_hw_model_identifier
reboot
Just tried it remotely, but it did not reboot. Maybe I need a hard reset?
A doubt is: when I run "apt-get autoremove --purge -y" it removes the uboot. Is that supposed to happen? Or just by extracting the package I'm already replacing it?
I'm afraid I've killed it. Later today I'll unplug and plug it again to check it it's heart beats, and how to possibly bring it alive again.
Just tried it remotely, but it did not reboot. Maybe I need a hard reset?
@joaofl
It should reboot fine.
A doubt is: when I run "apt-get autoremove --purge -y" it removes the uboot. Is that supposed to happen? Or just by extracting the package I'm already replacing it?
Its a tools package, so it shouldn't be required:
https://packages.debian.org/jessie/u-boot-tools
The extracted zip will replace the files and kernel image packages we removed earlier.
I'll look into it and see if i can replicate the failed reboot.
@joaofl
I'll look into it and see if i can replicate the failed reboot.
Seems to work fine for me.
From 3.x kernel installation, I ran same commands https://github.com/Fourdee/DietPi/issues/414#issuecomment-243736813. Boots to 4.7 straight after reboot.
If its not working after a hard power cycle, try removing the USB drive, then power on again.
Failing that, plug SD card into PC and send a screenshot of /boot
folder contents please, showing size/modified dates etc.
@Fourdee
Follows the screenshot. It did not boot with or without the hd.
At a certain point it was replying pings, but not accepting ssh. Without the hd, none of both worked.
Does that mean that kernel did not get replaced properly?
@joaofl
Does that mean that kernel did not get replaced properly?
Possibly, was that screenshot taken on a Linux machine?
At a certain point it was replying pings, but not accepting ssh.
Any output/errors on HDMI?
Screenshot from a Linux Mint 18
Here is the output from the hdmi. It fails with the dev-mmcbl1...
Maybe I had the file permissions messed up.
@joaofl
dev-mmcbl1...
Maybe I had the file permissions messed up.
Partition 1 (/boot
) is fat16/32, so no permissions are possible on that filesystem. Basically a "anyone is welcome" filesystem lol
Return the XU4 to the screenshot state.
Type in your password (eg: dietpi), then run command below and take another shot:
journalctl -xb
In the mean time, i'll zip up a 3.x* kernel you can unzip to SD card and hopefully return this to working order.
Notes to self: EMMC/SD
@joaofl
Revert back to 3.x:
boot
folder to the SD cards 1st partition (fat).lib
folder to the SD cards 2nd partition (ext4).If you are unsure, do NOT do any of the above, let me know and i'll try and explain it better :)
@Fourdee
Is it an attempt to save my previous machine, or you want to test something?
Because if it is for restoring my stuff, no worries, I can start a new one with no harm (good chance to clean the junk).
If you want to test something, let me know and I follow the steps.
@joaofl
Is it an attempt to save my previous machine, or you want to test something?
Bit of both.
Be nice to find out if reverting back to 3.x resolves the issue. Could indicate an issue with SDcard support on 4.7.
Either way, fresh install never fails :+1:
If you do get a chance and want to test further:
Do a fresh install, run through the DietPi initial setup and install nothing extra, then try 4.7 again: https://github.com/Fourdee/DietPi/issues/414#issuecomment-243736813. But if not, no worries :+1:
Update, Odroid are officially developing 4.9 kernel for XU4, still in testing:
http://dietpi.com/phpbb/viewtopic.php?f=12&t=1393&p=5891&hilit=xu4+4.9#p5861
http://forum.odroid.com/viewtopic.php?f=146&t=26007
Most helpful comment
I've compiled and hosted the tobetter XU4 4.7.0 Kernel
Notes:
To install on DietPi: