BPI-M3 new image:Ubuntu Mate 15.10 for BPI-M3 (20151203)

Is there a suitable guidance how to build our own image and integrate the latest changes from git? Or can you please provide us a short tutorial how you did this?

I won’t give it a try again since it’s useless. I’ve already set up a working environment to further test with (the A83T is somewhat interesting since some stuff can be read out not available on other SoCs)

Don’t do it since Raspbian consists of slow ARMv6 code. It’s not even worth a try. But basically it’s just that: Choose any ARMv7 OS image you find that contains 2 partitions, build SinoVoip’s BSP (as usual the most important information is missing: this has to be done on a x86_64 machine) and you end up with two directories of importance:

  • output/BPI_M3_1080P
  • linux-sunxi/output/lib

The contents of these 2 dirs built this morning and including the 2 most recent fixes you’ll find here: http://kaiser-edv.de/tmp/TgVgxb/

And after unpacking BPI_M3_1080P.tar.7z, it’s just

dd if=BPI_M3_1080P/pack/boot0_sdcard.fex of=/dev/mmcblk0 bs=1k seek=8
dd if=BPI_M3_1080P/pack/u-boot.fex of=/dev/mmcblk0 bs=1k seek=19096
dd if=BPI_M3_1080P/pack/boot-resource.fex of=/dev/mmcblk0 bs=1k seek=36864
dd if=BPI_M3_1080P/pack/env.fex of=/dev/mmcblk0 bs=1k seek=69632
dd if=BPI_M3_1080P/kernel/boot.img of=/dev/mmcblk0 bs=1k seek=86016
cd / && tar xzf "`${OLDPWD}`/lib.tgz" && shutdown -r now

to get most recent kernel, bootloader and hardware initialisation. I automated this through a script that rebuilds the BSP in a virtual x64 machine running Ubuntu, fetches the archives and then replaces the stuff on the BPi-M3 followed by a reboot. That’s the only way to get the most recent fixes unless SinoVoip does it right: Providing an apt repository at least for their Debian based images, package the above stuff as .debs and do the overwriting of the first sectors as a package postinstall routine. As an example how Armbian does it: https://github.com/igorpecovnik/lib/blob/second/common.sh#L52-L71

If SinoVoip would care they would provide something like that since otherwise you’re forced to reflash the whole image if you want the latest fixes when they release a new image in a few weeks (or do the stuff outlined above manually). It’s even necessary to do this if you just want to change the display resolution. It’s unbelievable that they don’t care because we’ve told them already so many times that they should care about user experience. But they seem to not care at all except of selling hardware.

EDIT: SinoVoip now provides now /usr/bin/bpi-bootsel to be able to choose between a few bootloader/initialisation combinations. So you can switch display resolutions but are still cut-off from updates. This stuff has to work online. It’s nearly 2016 and not 1999 any more…

It’s basically what I just described (and this is what I did and what worked for me). If you have a working rootfs it should also be possible to include that into the BSP and let it build a whole image.

But I prefer to replace the sectors of my image since the image’s contents are work in progress. I’m doing some research on dfvs/cpufreq settings as already mentioned: https://groups.google.com/d/msg/linux-sunxi/CXx2MzMuujU/Y75MZpbpCwAJ

If you do the whole stuff not from within the running image then you’ve to replace /dev/mmcblk0p1 with either mountpoint of the SD-card or the path to the image. On OS X I used prior to ‘full automatisation’ this manual approach:

bash-3.2# cat update-sd-card.sh 
#!/bin/bash

MyDisk=$1

if [ "$(id -u)" != "0" ]; then
        echo "This script must be executed as root. Exiting" >&2
        exit 1
fi

case ${MyDisk} in
	disk*)
		:
		;;
	*)
		exit 1
		;;
esac

ssh $buildhost "/var/git/M3/BPI-M3-bsp/build-stuff.sh"
rm -rf BPI_M3_1080P
rsync -a $buildhost:/var/git/M3/BPI-M3-bsp/output/BPI_M3_1080P .
diskutil unmountDisk ${MyDisk} || exit 1
if [ ! -f BPI_M3_1080P/pack/boot0_sdcard.fex ]; then
	echo "Can't find the archive's contents. Giving up." >&2
	exit 1
fi

dd if=BPI_M3_1080P/pack/boot0_sdcard.fex of=/dev/r${MyDisk} bs=1k seek=8
dd if=BPI_M3_1080P/pack/u-boot.fex of=/dev/r${MyDisk} bs=1k seek=19096
dd if=BPI_M3_1080P/pack/boot-resource.fex of=/dev/r${MyDisk} bs=1k seek=36864
dd if=BPI_M3_1080P/pack/env.fex of=/dev/r${MyDisk} bs=1k seek=69632
dd if=BPI_M3_1080P/kernel/boot.img of=/dev/r${MyDisk} bs=1k seek=86016

sleep 0.2
diskutil eject ${MyDisk}

But since I also had to replace /lib/modules I chose to fully automate it from within the running image. It’s fire and forget

How to put this image on emmc? is there any flasher tool that i can try?

our RD at allwinner and coworker with allwinner RD , we will try let Linux image same as android image ,and use PhoenixSuit tooling .to burn.

now ,only support dd to do this work.

You mean from SD to EMMC using dd to transfer the linux image?

Yeah, I don’t think I know enough Linux to follow that.

1 Like

In case you’re using this image could anyone of you please provide the output of

type $(which bpi-bootsel)

And in case it’s a shell script dump the contents to an online pasteboard service to get a clue what this tool does?

curl -F 'sprunge=<-' http://sprunge.us <$(which bpi-bootsel)

You get then an URL containing your paste and can share this here.

Ok, I thought one more time: Let’s give it a try. Booting into my image and transferring your image we’re talking here about to eMMC:

ssh tk@macbookpro-tk "dd if=/Users/tk/Downloads/ubuntu-mate-15.10-desktop-armhf-raspberry-pi-2-bpi-m3-sd-emmc-20151203.img bs=4m | gzip -c" | gunzip -c | dd of=/dev/mmcblk1

Is this the right sequence? @sinovoip, is it really that hard to write clear instructions?

At least I’ve had the chance to look at bpi-bootsel myself: It seems you picked up the idea to overwrite the 1st sectors to choose different display resolutions. At least a first step in the right direction. But the archives you provide are missing your latest fixes already:

root@BPiM3:/mnt/emmc/usr/lib/u-boot/bananapi/bpi-m3# ls -la
total 56056
drwxr-xr-x 2 root root    4096 Dec  3 02:43 .
drwxr-xr-x 4 root root    4096 Oct 22 10:04 ..
-rw-r--r-- 1 root root 9622875 Dec  2 02:30 BPI_M3_1080P.img.gz
-rw-r--r-- 1 root root 9532171 Dec  2 02:30 BPI_M3_720P.img.gz
-rw-r--r-- 1 root root 9532229 Dec  2 02:30 BPI_M3_LCD7.img.gz
-rw-r--r-- 1 root root 9622879 Dec  2 02:30 BPI_M3_USB_1080P.img.gz
-rw-r--r-- 1 root root 9532174 Dec  2 02:30 BPI_M3_USB_720P.img.gz
-rw-r--r-- 1 root root 9532237 Dec  2 02:30 BPI_M3_USB_LCD7.img.gz

This is useless given the state of your fixes: https://github.com/BPI-SINOVOIP/BPI-M3-bsp/commits/master (the last 5 are already NOT included). Fortunately my update method outlined above also works with your image running now from eMMC.

Is it right that you are now running from emmc? What does the ‘| gzip -c" | gunzip -c |’ do? In my opinion it compresses and directly uncompresses the image… I will get my BPI M3 this evening and i will try your update method mentioned above.

Yes, I flashed SinoVoip’s 15.10 image this way. I downloaded it on OS X and transferred it through the network using a gzip pipe to compress the data. It failed the first 3 times until I realized that’s something going wrong. I had to lower the maximum cpu clockspeed to be able to realibly write to eMMC (!!!). Just opened another Github issue: https://github.com/BPI-SINOVOIP/BPI-M3-bsp/issues/5 (I assume they will close it without taking notice as usual).

At the moment I set

echo interactive >/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo 1008000 >/sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq

in /etc/rc.local. Will later have a look whether I can provoce eMMC corruption when clocking higher again.

The first part compresses the image on OS X and the 2nd uncompressed it on Linux.

First impressions: This bug is still unresolved even with SinoVoip’s own image: https://github.com/BPI-SINOVOIP/BPI-M3-bsp/issues/3 (already closed since ‘hey, why fixing a bug if you can simply ignore the bug report?!’). Compare with

root@bananapi:/usr/lib# cat /proc/loadavg 
1.00 1.45 1.69 1/350 27033

And I had already many throttling situations – you can try

dmesg | grep -i Budget

in a terminal to get a clue. With my image this stopped after applying a heatsink and some finetuning. More to come…

LOL, I found another silly (and very very very well known) bug the image contains. But I won’t tell now. It’s too funny.

Everyone here running this image should report back in 2 days how sluggish the system behaves when it was running all the time. They installed the most useless and crappy piece of software by default :joy:

I tried this on an Ubuntu 14.04 x86 VM with latest updates. I installed gcc and make and cloned the git repository. But when ich execute the build script it exits with the following message: “make: *** [kernel] Error 2” Do i need further packages? Or is the latest git clone broken?

I am successfully installed Debian Jessie into emmc flash using dd command. But still under observation on stability of OS distribution

The one from september? If so you miss all the very important fixes here: https://github.com/BPI-SINOVOIP/BPI-M3-bsp/commits/master

The distribution used is completely irrelevant, everything important happens in kernel, u-boot and hardware initialisation (and does not live in the rootfs but in the first sectors of SD card or eMMC)

Please have a look at

ps -e -orss=,args= | sort -b -k1,1n | pr -TW$COLUMNS | grep irqbalance

from time to time :joy:

Maybe. You should keep in mind that the quality of this ‘BSP’ normally is for internal use only. I would never release such a crappy bunch of scripts. But that’s all what you get from Allwinner and unless you spend a huge amount of time to fix this you should better expect that it’s not working.

I use it on the same machine where my Armbian build system is up and running. It’s “Ubuntu 14.04.3 LTS” and Armbian does it right and installs the stuff that’s missing on its own: https://github.com/igorpecovnik/lib/blob/second/main.sh

I installed the packages mentioned in the script: aptly device-tree-compiler pv bc lzop zip binfmt-support bison build-essential ccache debootstrap flex gawk gcc-arm-linux-gnueabihf lvm2 qemu-user-static u-boot-tools uuid-dev zlib1g-dev unzip libusb-1.0-0-dev parted pkg-config expect gcc-arm-linux-gnueabi libncurses5-dev whiptail debian-keyring debian-archive-keyring ntpdate

But still the same error. I discovered an other more specific error:

LD security/built-in.o CC arch/arm/mach-sunxi/pm/standby/…/mem_tmstmp.o CC block/elevator.o CC fs/fifo.o CC arch/arm/mach-sunxi/pm/standby/…/mem_hwspinlock.o CC mm/truncate.o CC arch/arm/mach-sunxi/pm/standby/…/mem_clk.o CC fs/dcache.o CC fs/inode.o CC arch/arm/kernel/topology.o CC crypto/algboss.o arch/arm/mach-sunxi/pm/standby/gen_check_code: 1: arch/arm/mach-sunxi/pm/standby/gen_check_code: Syntax error: end of file unexpected (expecting “)”) make[4]: *** [arch/arm/mach-sunxi/pm/standby/resume1.code] Error 2 make[3]: *** [arch/arm/mach-sunxi/pm/standby/standby.code] Error 2 make[2]: *** [arch/arm/mach-sunxi/pm] Error 2 make[1]: *** [arch/arm/mach-sunxi] Error 2 make[1]: *** Waiting for unfinished jobs… CC block/blk-core.o CC arch/arm/kernel/io.o CC mm/vmscan.o CC kernel/user.o CC block/blk-tag.o AS arch/arm/kernel/debug.o CC arch/arm/kernel/early_printk.o CC crypto/testmgr.o CC kernel/signal.o

Any suggestions?

your build environment is 32-bit or 64-bit?

Switch to a x86_64 installation. A quick google search suggested this as the solution. Here I use “Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.13.0-53-generic x86_64)” and everything work’s flawlessly unless you try to switch to a more recent Linaro toolchain.

It’s Ubuntu 14.04 32 bit VM.

Could you please provide a list of packages or a tutorial how to set up the build environment?

The packages should be installed if necessary by build.sh – compare with

for example.

And such a ‘tutorial’ has to be part of Readme.md. It’s just a bad joke not providing these essential informations and let the user run into missing package problems or choosing the wrong architecture to build the stuff.