Jump to content

[NanoPi M3] Cheap 8 core (35$)


Recommended Posts

"but Friendy ARM OS images are pretty nice" Nano M2 image ubuntu 15.04 after update to 15.10 does not work, Kali linux no sound, Debian 8 suppoert 720p resolution. To change resolution 1080p please compile kernel - doesnot work. Android - works . Nano M3 the same as Nano M2 but without Kali and Ubuntu which doesnot exist


I have Xenial 16.04 Desktop running on M3 and M2 if you would like to try it i can provide an image this weekend. Lean and Mean image, 720P.

About the 1080P i would like to hear what did not work for you, and can prepare an image too, can you tell if you have a good PSU and what monitor you use?

Link to comment
Share on other sites

Oops, sorry i thought you were talking about NanoPi M3, BPI-M3 is on the way and if does not stop on customs...

Not armbian yet, just old 3.4.39 kernel from FA. Waiting for Igor and the big guys to do the hard work.  :)

Link to comment
Share on other sites

+1 on the Armbian on M3 beggars list  :D


And here are my reasons:

1. I'm using FA's images on mine only because I couldn't use Armbian, however it took me a whole night of banging my head agains the walls and not understanding why several brand new Kingston 8GB cards were booting with I/O errors only to try the next day with some crappy Hama card and see it come to life. I have lots of SBC's around but none throws these errors with a specific card, they all work no matter what I throw at them. My second WiFi adapter pops an USB error message in the console after a couple of hours of operation. So I take your word for it that FA has decent support for its board but with my limited experience with them, it seems only decent comparing to other vendors. 

2. Even if you obliterated it at first, you grew to be pretty fond if it, simply because what seemed to be a huge problem (eg. the USB power connector) turned out to be "workaround"-able. And come on, if someone wants minimal fuss, they can all rush in and buy and RPi-3  :P, however tweaking the hardware like adding a second or a bigger fan is half the fun.

3. You have to admit that the board does have a huge potential considering its price tag for the features it puts on the table. To the best of my knowledge the only board gets closest to this price is the pcDuino8 but that one is more of an Arduino clone on steroids, the M3 is way sexier  :P. And while sometimes even the flimsy RPi Zero may be an overkill for a home automation project, there may be cases where some serious CPU grinding is required with the M3 giving the biggest bang for the buck IMHO.

4. I bet there are quite a few who are considering buying it if not already and not having Armbian on this board feels like a dent in their Armbian ecosystem. Because let's face it, after using Raspbian for years and finding out about Armbian only after getting and OrangePi Lite two months ago, i feel like comparing a walkie-talkie with a smartphone  :D. Your work is really awesome guys !

Link to comment
Share on other sites

I have learnt the hard way after a lot of troubleshooting, i use only the cheap SanDisk Ultra 16GB (48 MB/s) on all my SBC and don't regret it. (seems to be harder to find a counterfeit for this brand/model, i have 20 or i may be lucky).

The nice thing is that i am able to build the kernel on NanoPi M3 while Armbian is cooking and without FAN the temps are around 85C. I am using the BIG FA heat-sink without the FAN attached but with some mod for better convection, i don't have a picture right now  to share but i will, seems working fine if not inside the case.


I am using @tkaiser's script to monitor Temp.

The build time is shorter than on Pine64+ (but the kernel is perhaps slimmer) and you can enjoy browsing while watching the build process!


I have managed to build u-boot and kernel with gcc 5.4.






Link to comment
Share on other sites

Countrefeit cars are definitely not the issue here. I purchased them for one of the largest local electronics retailer. Moreover, every other board that I have, 3 types of RPi's, OrangePi Lite, OrangePi PC and NanoPi NEO is perfectly happy with them. I am still not sure if this is a hardware or software issue. However since using a different card manufacturer (Hama instead of Kingston) solved it, I'm inclining to say that this is hardware related. 

Link to comment
Share on other sites

Just occurred to me a crazy theory, they provide a 4GB image that changes the layout of the sd card, there may be some sd cards prone to have problems with the layout, or it is just the PSU causing all sort of problems.

Here is my ingenious heat-sink:  :D
Link to comment
Share on other sites

without FAN the temps are around 85C.



The problem is that these 85°C are the fixed throttling treshold in M3's kernel right now and that the throttling strategy is rather inefficient. Please compare with http://forum.armbian.com/index.php/topic/1285-nanopi-m3-cheap-8-core-35/?p=14697


The CPU cores run at 1.4GHz until 85°C are reached and then not a slight decrease happens but cpufreq starts to oscillate between rather low clockspeeds and 1.4 GHz (I observed clockspeeds below 800 MHz). So when I did my tests with synthetic benchmarks limiting max cpufreq to 1.3 GHz showed better results compared to 1.4 GHz (when throttling jumped in) which is a clear indiciation that throttling settings needs some love/attention (and this is something that has to happen once we would support NanoPi M3 with Armbian -- but to be honest at least I've no time to dig deep into M3's kernel sources to do so).


BTW: good idea of 'enhancing' FA's heatsink by adding two additional adhesive heatsinks (they look like 'my' former standard H3 heatsinks). I made the experience that then adding a large (and silent) fan blowing air from thelateral side shows even better results than with the small annoying fan on top :)

Link to comment
Share on other sites


iddle temperature is 46C (Ambient temp 17C) = 400 Mhz ** This is obviously wrong information, the Temp. were taken within 5 min. from a power on, please, take the correct Temp. as 55º C running idle for 3  hours.



Yes, the adhesive heatsink is that one.

And yes, it happened exactly as you described, the build started with 8 cores 100% CPU and 1400 Mhz and in the final stage the 8 cores were running 100% CPU and 400 Mhz.

I have noticed the things are much more cool when using LCD instead of HDMI.

I will have a look in the kernel and maybe with some guidance i can understand how the throttling settings works and try to improve something.

I will do it this weekend if i can, i am about to receive BPI stuff and cameras to play.

I will post my findings and ask the basic questions here or PM you.

Edited by @lex
Link to comment
Share on other sites


Now Linpack/OpenBlas with NEON optimizations:

With a freshly built Linpack with NEON optimizations I thought I start with 800 MHz cpufreq: 7.476 GFLOPS, then using 900 MHz I got 8.227 GFLOPS and at 1000 MHz the M3 simply deadlocked -- most probably a sign that my PSU is too weak since at 900 MHz SoC temperature only reached 70°C so it was not a thermal issue (this Linpack version is known to power off SBCs with insufficient power supply 100 percent reliable). 
That means in case one uses a better PSU than mine, a more efficient heatsink+fan exceeding 12 GFLOPS should be possible but at the cost of insanely high consumption and huge efforts for cooling and power supply :)
As a comparison: with quad-core H3 (Orange Pi PC) at 1296 MHz we get 1.73 GFLOPS and with quad-core A64 (Pine64+ overclocked/overvolted to 1296 MHz) we get 3.4 GFLOPS while a RPi 3 running at just 1.2 GHz achieves 3.6 GFLOPS.


I can partially confirm your claim that 12 Gflops is possible with a more efficient heatsink+fan.  In particular, I'm currently testing the M3's bigger brother the FriendlyArm NanoPi T3 which has the same 8-core SOC but a different heatsink.  Following the same build_instructions, I obtained 12.49 Gflops with version 2.2 of the linpack benchmark linked against version 0.2.19 of the OpenBLAS library.  My cooling arrangement looks like this.




With the cover on the heat is trapped and the system throttles; however, upon removing the cover and due to the giraffe the system runs at full speed.  The Raspberry Pi 3 does about 6.2 Gflops with a similar cooling system.

Link to comment
Share on other sites

While I was playing with NanoPi -M3 and following the tkaiser's advice to test Gbps I thought I could have some improvement by building the image with gcc 5.4 and I found that I could have the gcc 6.2 compilation tools in parallel without breaking anything . This is not new to kernel developers but it was to me because i keep using ubuntu 12.04 to compile for other platforms (have to use older gcc versions) and now using lubuntu 16.04.
I compiled iperf3 with gcc 6.2 to see the results:
~/iperf3/src$ ./iperf3 -c
Connecting to host, port 5201
[  4] local port 58987 connected to port 5201
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-1.00   sec   108 MBytes   901 Mbits/sec    0    819 KBytes       
[  4]   1.00-2.00   sec   113 MBytes   949 Mbits/sec    0   1.72 MBytes       
[  4]   2.00-3.00   sec   111 MBytes   937 Mbits/sec    0   1.72 MBytes       
[  4]   3.00-4.00   sec   112 MBytes   940 Mbits/sec    0   1.72 MBytes       
[  4]   4.00-5.00   sec   110 MBytes   927 Mbits/sec    0   1.72 MBytes       
[  4]   5.00-6.00   sec   111 MBytes   929 Mbits/sec    0   1.72 MBytes       
[  4]   6.00-7.00   sec   106 MBytes   895 Mbits/sec    0   1.72 MBytes       
[  4]   7.00-8.01   sec   106 MBytes   887 Mbits/sec    0   1.72 MBytes       
[  4]   8.01-9.00   sec   110 MBytes   924 Mbits/sec    0   1.72 MBytes       
[  4]   9.00-10.01  sec   112 MBytes   942 Mbits/sec    0   1.72 MBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-10.01  sec  1.08 GBytes   923 Mbits/sec    0             sender
[  4]   0.00-10.01  sec  1.07 GBytes   921 Mbits/sec                  receiver

iperf Done.

The tips to use latest gcc-6 on Lubuntu Xenial 16.04 (armhf)


I can have gcc linked to gcc-5 and arm-linux-gnueabihf-gcc linked to arm-linux-gnueabihf-gcc-6 just as this:

gcc --version

gcc (Ubuntu/Linaro 5.4.1-2ubuntu1~16.04) 5.4.1 20160904
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO

and arm-linux-gnueabihf-gcc --version

arm-linux-gnueabihf-gcc (Ubuntu 6.2.0-3ubuntu11~16.04) 6.2.0 20160901
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO

We need to tell Ubuntu a higher precedence to gcc-6 if i want to use it. In my case i used 100 that is higher than gcc-5 as an example.


Install gcc-6 on Xenial 16:04 in (armhf) but this possibly will work in arm64 and x86:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get install gcc-6 g++-6

In my case, i want to use gcc-6 in all build using arm-linux-gnueabihf- and let gcc be linked to gcc-5:

sudo update-alternatives --install /usr/bin/arm-linux-gnueabihf-cpp arm-linux-gnueabihf-cpp /usr/bin/arm-linux-gnueabihf-cpp-6 100
sudo update-alternatives --install /usr/bin/arm-linux-gnueabihf-gcc arm-linux-gnueabihf-gcc /usr/bin/arm-linux-gnueabihf-gcc-6 100
sudo update-alternatives --install /usr/bin/arm-linux-gnueabihf-g++ arm-linux-gnueabihf-g++ /usr/bin/arm-linux-gnueabihf-g++-6 100
sudo update-alternatives --install /usr/bin/arm-linux-gnueabihf-gcov arm-linux-gnueabihf-gcov /usr/bin/arm-linux-gnueabihf-gcov-6 100
sudo update-alternatives --install /usr/bin/arm-linux-gnueabihf-gcc-ar arm-linux-gnueabihf-gcc-ar /usr/bin/arm-linux-gnueabihf-gcc-ar-6 100
sudo update-alternatives --install /usr/bin/arm-linux-gnueabihf-gcc-nm arm-linux-gnueabihf-gcc-nm /usr/bin/arm-linux-gnueabihf-gcc-nm-6 100
sudo update-alternatives --install /usr/bin/arm-linux-gnueabihf-gcov-tool arm-linux-gnueabihf-gcov-tool /usr/bin/arm-linux-gnueabihf-gcov-tool-6 100
sudo update-alternatives --install /usr/bin/arm-linux-gnueabihf-ranlib arm-linux-gnueabihf-ranlib /usr/bin/arm-linux-gnueabihf-ranlib-6 100
sudo update-alternatives --install /usr/bin/arm-linux-gnueabihf-gcc-ranlib arm-linux-gnueabihf-gcc-ranlib /usr/bin/arm-linux-gnueabihf-gcc-ranlib-6 100

This worked nicely and i could build the new image with arm-linux-gnueabihf- version 6.2 (test)


Link to comment
Share on other sites





A problem from FriendlyArm Forum: The question:
"Hi Devs,

Please test the M3 with the latest matrix from git.

I am getting failures on initialising PMW & GPIO



And the answer (FATechsupport)


"Unfortunately the Matrix code may not work with M2 for now and we haven't tested the code yet. We only tested the code for M1/NEO and Pi2/Fire/M2/T2"



Is not it great answer?  :lol:  :rolleyes:



Do you have some sample code to test (or to follow)? I don't have any Matrix device to test but i have some i2c lcd i could try. I see no reason not to work on M3, same kernel, same GPIO mapping of a M2...

The kernel side of Matrix is built normally, maybe some KERNEL CONFIG?


-- edited --

Oops: i have the GPS, but it is UART. I will try to compile the Matrix samples and check if GPIO can be at least initialized.

Link to comment
Share on other sites

I can't say for sure it works, but i have built the matrix samples and the GPIO are initialized:


ubuntu@apps:ll /sys/class/gpio/export
--w------- 1 root root 4096 Feb 11  2016 /sys/class/gpio/export
ubuntu@apps:~/matrix/install/usr/bin$ sudo ./matrix-led 
LED blinking times 0
LED blinking times 1
LED blinking times 2
LED blinking times 3
LED blinking times 4
LED blinking times 5
LED blinking times 6
LED blinking times 7
LED blinking times 8
LED blinking times 9
Link to comment
Share on other sites

If anyone interested I wired CR2032 on NanoPi M3 so i can have RTC backup and don't need to be connected to internet. The date and Time is saved in the rtc chip and restored with the correct time when you turn on.


here is how to do:


a) Use a cheap coincell battery  holder like this:



B) Wire like this:



c) Careful not to invert the polarity, the silkscreen has a square rect on the  (+) - red wire on the image above.

refer to this: http://wiki.friendlyarm.com/wiki/index.php/File:NanoPi-M2-1602-if.png


d) Atfter you update your current time / localization on your distro, you just type: sudo hwclock -w to save it.


If you want to set the time/date in RTC chip manually: sudo hwclock --set --date "dd mmm yyyy HH:MM"

or check the current date/time with: sudo hwclock






Link to comment
Share on other sites

Samsung's ARTIK 7 series seems to use the same SoC as NanoPi M3 at its core: https://www.artik.io/modules/artik-710/


They provide a Fedora image based on kernel 4.1 LTS so this is simply a call for testers to examine how/whether Samsung's new stuff can run on M3 too (won't look into that myself due to lack of time). They're talking about display and GPU stuff too this might be really interesting for M3.

Link to comment
Share on other sites

Samsung's ARTIK 7 series seems to use the same SoC as NanoPi M3 at its core: https://www.artik.io/modules/artik-710/


They provide a Fedora image based on kernel 4.1 LTS so this is simply a call for testers to examine how/whether Samsung's new stuff can run on M3 too (won't look into that myself due to lack of time). They're talking about display and GPU stuff too this might be really interesting for M3.


I got my M3 about a week ago and have spent some time trying to get a smooth working system going, I ran into a wall building Mali into the kernel and gave up but this seems more promising due to the newer kernel version. I couldn't find the Fedora image you where referring, do you have a link?


Update: I found the link and looking over it.

Link to comment
Share on other sites

Update: I found the link and looking over it.


I could not find it yet but found some interesting info:


Next we will download the BSP source files from GitHub https://github.com/SamsungARTIKand extract them using:
$ mkdir artik710
$ cd artik710
$ tar xf /opt/u-boot-artik7-0710GC0F-41F-01Q5.tar.gz
$ tar xf /opt/linux-artik7-0710GC0F-41F-01Q5.tar.gz
$ tar xf /opt/build-artik-0710GC0F-41F-01Q5.tar.gz
$ tar xf /opt/boot-firmwares-artik710-0710GC0F-41F-01Q5.tar.gz

cd linux-artik7
$ make ARCH=arm64 artik710_raptor_defconfig
$ make ARCH=arm64 menuconfig
< - Edit your configurations - >
$ make ARCH=arm64 savedefconfig
$ mv defconfig arch/arm64/configs/artik710_raptor_defconfig

So, there is arm64 linux somewhere.....

Link to comment
Share on other sites

I downloaded it and flashed it for kicks (figuring it wouldn't boot but hey FOR SCIENCE!) And yeah no boot just solid blue led. Side note, anyone get Kodi to load?


Looks like it is trying to load kernel from eMMC. If you want to get your hands dirty you could look into how to change the env settings to boot from SD. Sorry, don't much about Kodi.

Link to comment
Share on other sites

Interesting thought, I'm not too sure what i'm doing with this layout tho. This is what I get.
$ sudo ./fw_printenv /dev/sdd
Warning: Bad CRC, using default environment
bootcmd=$bloader 0x48000000 $kernel;$bloader 0x49000000 root.img.gz;bootm 0x48000000
bloader=ext4load mmc 2:1



I changed the bloader to match that of my ubuntu image (bloader=ext4load mmc 0:1) with no success. Then added bootargs for kicks but also got nowhere.


The bootargs I added here.

bootargs=console=ttySAC0,115200n8 root=/dev/mmcblk0p3 rootfstype=ext4 rootwait init=/sbin/init systemd.show_status=false g_ether.host_addr=82:cf:ce:fa:68:18 initrd=0x49000000,0x400000 console=tty1


I don't have a way to connect to this board via serial so I think i'm done. The warning seems to suggest we need to run saveenv but I can't see anything :(

Link to comment
Share on other sites

Hmm not really sure what to do with that. I'm no developer in this sense. More of a test dummy. You tell me what you want and i'll run it. I have 2 M3's sitting here doing nothing right now lol. From that it looks like I need to rebuild using sdboot.img i'm guessing. 

Link to comment
Share on other sites

Give one last shot, try to write manually the blobs (SINGLE IMAGE and MULTIPLE IMAGE) and see if you get something:


* Edited: PARAM_NAMES i am really not sure if would be raptor-sd-32.txt or the new environment,to make sure which one you would need to follow the scripts and check. It is all that comes to my mind.


** and also you will find two OFFSET for the Environment, maybe one if for the  ARTIK710 and the other is for the other boards.


export NSIH_EMMC=$PREBUILT_DIR/$TARGET_BOARD/raptor-emmc-32.txt
export NSIH_SD=$PREBUILT_DIR/$TARGET_BOARD/raptor-sd-32.txt
export BL2_LOAD_ADDR=0x7fc00000
export BL2_JUMP_ADDR=0x7fe00000

export UBOOT_DEFCONFIG=artik710_raptor_config

export BOOT_PART_TYPE=ext4

export BL1_OFFSET=1
export BL2_OFFSET=129
export ENV_OFFSET=6273
if [ "$BOOTLOADER_SINGLEIMAGE" == "1" ]; then

	dd conv=notrunc if=$TARGET_DIR/bl1-sdboot.bin of=$IMG_NAME bs=512 seek=$BL1_OFFSET
	dd conv=notrunc if=$TARGET_DIR/singleimage-sdboot.bin of=$IMG_NAME bs=512 seek=$BL2_OFFSET
	dd conv=notrunc if=$TARGET_DIR/$PARAMS_NAME of=$IMG_NAME bs=512 seek=$ENV_OFFSET
	if [ "$USE_BL2_BUILD" == "1" ]; then

	dd conv=notrunc if=$TARGET_DIR/bl1.bin of=$IMG_NAME bs=512 seek=$BL1_OFFSET
	dd conv=notrunc if=$TARGET_DIR/bl2.bin of=$IMG_NAME bs=512 seek=$BL2_OFFSET
	dd conv=notrunc if=$TARGET_DIR/u-boot.bin of=$IMG_NAME bs=512 seek=$UBOOT_OFFSET
	dd conv=notrunc if=$TARGET_DIR/tzsw.bin of=$IMG_NAME bs=512 seek=$TZSW_OFFSET
	dd conv=notrunc if=$TARGET_DIR/$PARAMS_NAME of=$IMG_NAME bs=512 seek=$ENV_OFFSET
Link to comment
Share on other sites

This topic is now closed to further replies.
  • Create New...

Important Information

Terms of Use - Privacy Policy - Guidelines