Odroid: Difference between revisions

From 太極
Jump to navigation Jump to search
No edit summary
 
(191 intermediate revisions by the same user not shown)
Line 1: Line 1:
[http://magazine.odroid.com/ Odroid Magazine]
= Manual =
= Monitor your Linux with NMON =
http://magazine.odroid.com/odroid-xu4/
 
= XU4 + Ubuntu 16.04 =
http://odroid.com/dokuwiki/doku.php?id=en:xu3_release_linux_ubuntu
 
First impression (I did apt-get update & apt-get upgrade first)
* Gigabit Ethernet works OK (speedtest shows 30MB/s download & 19MB/s upload when I use an ethernet connection)
* CPU is hot (temperature > 60C) with the default settings. It goes down to 45 (about same as Udoo) after I change the governor from performance to conservative.
* luakit and keepass2 installed fine
 
== Ethernet ==
ifconfig shows the device name ''enx001e063203ac''
 
== Youtube ==
=== Video ===
Watch youtube video using Kodi -> temperature is 60C vs using web browser -> 66C vs closed Kodi -> 56C.
 
Kodi youtube add-on has a bug when you use the search function 'daily limit exceeded'. To fix the error, go to add-on -> Get more -> youtube. Click configure. In the 'Advanced' tab, move the cache size to the maximum. In the API Key tab, click 'Enable Personal API Keys'. Click 'OK' and open Youtube to search videos.
 
Note that not bothering to sign in.
 
When Kodi exits, it crashed (hanged). A workaround : Open a virtual terminal (ctrl-alt-F2) and kill it.
<syntaxhighlight lang='bash'>
killall -9 kodi.bin
</syntaxhighlight>
 
=== Audio ===
To listen Youtube audio only, use [[Linux#mpsyt:_mps-youtube|mps-youtube]].
 
To listen to local audio files, use mpg321. '''sudo apt-get install mpg321'''.
 
== nm-applet lost ==
One simple way to bring it up is to add a new item '/usr/bin/nm-applet' from righting click the ''Panels'' -> Custom Application Launcher.
 
http://thesave.altervista.org/2014/02/network-manager-applet-for-mate-desktop-installing-it-right/
<syntaxhighlight lang='bash'>
# Step 1:
sudo apt-get install --reinstall network-manager network-manager-gnome
# Step 2:
sudo nano /etc/NetworkManager/NetworkManager.conf
# and change the line managed=false to managed=true
# Step 3:
# make sure that network interfaces file /etc/network/interfaces contains only the basic configuration: 
auto lo iface lo inet loopback
# Step 4:
# restart network manager with command
sudo service networking restart
# Step 5:
# In case the network manager applet does not show up on mate’s panel try these one of these fixes:
sudo nano /etc/xdg/autostart/nm-applet.desktop
# remove the line  AutostartCondition=GNOME3 unless-session gnome, and restart the networking service;
# Step 6:
# remove the .state file relative to the network manager with command 
sudo rm /var/lib/NetworkManager/NetworkManager.state
</syntaxhighlight>
 
== Arduino ==
Don't use 'apt-get' to install the IDE. It can't be launched successfully. Download the Linux ARM version from the Arduino website https://www.arduino.cc/en/Main/Software. Extract and run <install.sh>.
 
You can access the application from Applications -> Electronics -> Arduino IDE. It (Arduino 1.6.12) works on my Odroid xu4 Ubuntu 16.04.
 
My Arduino Nano ATmega 328 is plugged in one of USB 3 port. The device port is /dev/ttyUSB0 (detected by comparing the output of ''ls /dev/tty* ''before and after plugging the Arduino). Testing by running Examples -> Basics -> Blink.
 
== Compile RStudio ==
Following [https://raw.githubusercontent.com/dashaub/ARM-RStudio/master/ARM-RStudio.sh this], eventually it failed at the step of running ''sudo make install''. I got the same error when I tried it on UDOOBuntu 2.1.
{{Pre}}
odroid@odroid:/media/odroid/sandisk/rstudio-v0.98.982$ sudo make install
Scanning dependencies of target gwt_build
Buildfile: /media/odroid/sandisk/rstudio-v0.98.982/src/gwt/build.xml
 
ext:
  [jscomp] Compiling 43 file(s) with 66 extern(s)
  [jscomp] 0 error(s), 0 warning(s)
 
javac:
    [mkdir] Created dir: /media/odroid/sandisk/rstudio-v0.98.982/src/gwt/bin
    [javac] Compiling 10 source files to /media/odroid/sandisk/rstudio-v0.98.982/src/gwt/bin
    [javac] Note: Some input files use or override a deprecated API.
    [javac] Note: Recompile with -Xlint:deprecation for details.
    [javac] Compiling 1467 source files to /media/odroid/sandisk/rstudio-v0.98.982/src/gwt/bin
    [copy] Copying 683 files to /media/odroid/sandisk/rstudio-v0.98.982/src/gwt/bin
 
gwtc:
    [java] Nov 07, 2016 9:54:40 PM java.util.prefs.FileSystemPreferences$1 run
    [java] INFO: Created user preferences directory.
    [java] Compiling module org.rstudio.studio.RStudio
    [java]    Compiling 2 permutations
    [java]      Compiling permutation 0...
    [java]      Process output
    [java]          Compiling
    [java]            Compiling permutation 1...
    [java]      [WARN] Lost communication with remote process
    [java] java.io.EOFException
    [java] at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2626)
    [java] at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1321)
    [java] at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373)
    [java] at com.google.gwt.dev.ExternalPermutationWorkerFactory$ExternalPermutationWorker.compile(ExternalPermutationWorkerFactory.java:153)
    [java] at com.google.gwt.dev.PermutationWorkerFactory$Manager$WorkerThread.run(PermutationWorkerFactory.java:73)
    [java] at java.lang.Thread.run(Thread.java:745)
    [java]      Compiling permutation 1...
 
BUILD FAILED
/media/odroid/sandisk/rstudio-v0.98.982/src/gwt/build.xml:126: Java returned: 137
 
Total time: 9 minutes 21 seconds
src/gwt/CMakeFiles/gwt_build.dir/build.make:57: recipe for target 'gwt_build' failed
make[2]: *** [gwt_build] Error 137
CMakeFiles/Makefile2:106: recipe for target 'src/gwt/CMakeFiles/gwt_build.dir/all' failed
make[1]: *** [src/gwt/CMakeFiles/gwt_build.dir/all] Error 2
Makefile:149: recipe for target 'all' failed
make: *** [all] Error 2
</pre>
 
= XU4 + Ubuntu 15.10 =
[[File:OdroidUbuntu.png|250px]]
 
* http://www.hardkernel.com/main/products/prdt_info.php and [http://www.hardkernel.com/main/products/prdt_info.php?g_code=G143452239825&tab_idx=3 FAQ]
* http://odroid.com/dokuwiki/doku.php?id=en:odroid-xu4
* http://www.bitkistl.com/2015/08/odroid-xu4-features-in-detail.html
* https://plus.google.com/+MauroRibeiro-mdrjr/posts (Google+ from Mauro Ribeiro, filled with news)
 
My first impression
* I am using Ubuntu mate 15.10 image on my 32G microSD
* Need to switch the boot lever (next to the HDMI port) from eMMC to microSD
* The graphical desktop is VERY sharp on my 1920x1080 Samsung lcd. But for some reason, my 9" lcd screen (1024x600) shows a black screen. Its gpu is Mali-T628 6 cores.
* The cpu fan noise gets very annoying (see the cpu fan control below)
* the processor ([http://www.samsung.com/semiconductor/minisite/Exynos/w/solution.html#?v=octa_5410 Samsung '''Exynos5422'''] Cortex™-A15 2Ghz and Cortex™-A7 Octa core CPUs) has 4 1.4GHz cores and 4 2.0GHz cores.
* Configure my bluetooth keyboard is easy. I am using a wired mouse.
* no need to run resize (the microSD) as it was automatically done
 
=== Ethernet ===
The ethernet does not work after I ran odroid utility to upgrade the kernel from 3.10.92-76 to ...
 
=== Auto log out ===
For example if I run luakit, I'll be logged out.
 
After I installed ibus-chewing, I'll be logged out when I launch 'IBus Preferences'.
 
=== USB ports and keyboard ===
(Odroid xu4 + Ubuntu15.10) When I plug a usb3.0 flash drive, my usb wifi keyboard seems not working anymore. It is fine if I use a usb wired keyboard. Google: odroid keyboard problem. http://forum.odroid.com/viewtopic.php?f=112&t=7641
 
=== /usr/bin/EnergyMonitor ===
I got the following output
<pre>
$ sudo /usr/bin/EnergyMonitor
/dev/sensor_arm Open Fail
OpenINA231 error
IOCTL Error
</pre>
The reason is [http://forum.odroid.com/viewtopic.php?t=20735 XU4 has no INA231 sensor]. It only exists on XU3.
 
=== Slowness ===
(Update based on Ubuntu 16.04): the problems happened on 15.10 are not anymore with Ubuntu 16.04:)
 
(Ubuntu 15.10) For some reason, the machine is getting slow.
* when I type something, it does not respond after a few seconds (either directly or through ssh)
* when I mount an nfs partition and try to run 'tar xz XXXX'. The extraction stops and goes:(
 
My conclusions:
<span style="color: red">
1. Use wired keyboard 2. Use my own USB to ethernet adapter. This solve the issue that ssh connection is too slow and response is unacceptable.
</span>
 
Now I am now using ubuntu 14.04 instead of 15.10.
 
Some people have a bad luck getting a flawed power adapter (5V, 4A).
 
== Download links ==
* [http://odroid.com/dokuwiki/doku.php?id=en:xu3_release_linux_ubuntu Ubuntu]. Be sure to read the Release Note too. It teaches how to get gpu acceleration on the chromium browser.
 
== Black screen, blue light is off ==
In my case, I need to unplug the HDMI cable and power first. Then apply the power (so the fan will spin and blue light will flash) and then connect the HDMI cable.
 
== Power consumption ==
Full CPU+GPU load is probably about 14 watts. Full CPU load around 10 watts, assuming you're running a task that can fully use 8 CPU threads. http://forum.odroid.com/viewtopic.php?f=93&t=23301
 
== Forum ==
The forum is very active!!
* http://forum.odroid.com/
* [http://forum.odroid.com/viewforum.php?f=95&sid=22963af608c341160911310c600d7a75 Xu4 + Ubuntu]
* [http://forum.odroid.com/viewforum.php?f=99&sid=22963af608c341160911310c600d7a75 Xu4 + issues]
 
== Chromium ==
=== Not launch - segmentation fault ===
The solution [https://ubuntu-mate.community/t/chromium-crashes-when-starting-segfaults/4578/11 here] works (search the keyword aworan). I did not try the [https://ubuntu-mate.community/t/tutorial-install-working-chromium-50/6762 updated trick for chromium 50].
{{Pre}}
chromium-browser
# [20070:20070:0702/084757:ERROR:sandbox_linux.cc(334)] InitializeSandbox() called with multiple threads in process gpu-process
# Segmentation fault
 
apt-cache policy chromium-browser
# chromium-browser:
#  Installed: 51.0.2704.79-0ubuntu0.15.10.1.1232
#  Candidate: 51.0.2704.79-0ubuntu0.15.10.1.1232
#  Version table:
#  *** 51.0.2704.79-0ubuntu0.15.10.1.1232 0
#        500 http://ports.ubuntu.com/ wily-security/universe armhf Packages
#        500 http://ports.ubuntu.com/ wily-updates/universe armhf Packages
#        100 /var/lib/dpkg/status
#      45.0.2454.101-0ubuntu1.1201 0
#        500 http://ports.ubuntu.com/ wily/universe armhf Packages
 
# remove the newest
sudo apt-get remove chromium-browser chromium-codecs-ffmpeg-extra chromium-browser-l10n
# install the older one
sudo apt-get install chromium-browser=45.0.2454.101-0ubuntu1.1201 \
  chromium-codecs-ffmpeg-extra=45.0.2454.101-0ubuntu1.1201 \
  chromium-browser-l10n=45.0.2454.101-0ubuntu1.1201
# test
chromium-browser
# block chromium updates
sudo apt-mark hold chromium-codecs-ffmpeg-extra chromium-browser chromium-browser-l10n
</pre>
 
=== Chromium and youtube ===
The [http://forum.odroid.com/viewtopic.php?f=95&t=18375 artifacts problem] in the Chromium + youtube of Ubuntu 15.10 can be fixed by following the release note.
 
Edit /etc/chromium-browser/default
{{Pre}}
CHROMIUM_FLAGS=" --use-gl=egl --ignore-gpu-blacklist --disable-accelerated-2d-canvas --num-raster-threads=2"
</pre>
 
We can open the web page chrome://gpu to check hardware acceleration status.
 
== What that still works ==
=== Calibre ===
We need to install by apt-get. The python installation script on Calibre does not work.
 
=== mupdf ===
http://mupdf.com/docs/manual
 
* H: fit page height to window.
* [number] g: go to page number
* >: go 10 pages forward
* <: go 10 pages backward
* +: zoom in
* -: zoom out
* G: Go to last page.
* /: Start searching forward.
* ?: Start searching backward.
* n: Continue searching forward.
* N: Continue searching backward.
* w: Shrinkwrap window to fit page.
* W: Fit page width to window.
* H: Fit page height to window.
* Z: Fit page size to window.
 
=== mirage, pinta ===
 
== What do not work ==
=== Luakit ===
Not work unfortunately. I'll be logged out once I launch it.
 
=== KeePass2 ===
Open and close by itself.
 
== Mali gpu ==
<syntaxhighlight lang='bash'>
$ sudo apt-cache showpkg mali-x11
</syntaxhighlight>
 
== First Run ==
<syntaxhighlight lang='bash'>
# chmod +x ./firstrun
sudo /home/$USER/odroid-cpu-control/odroid-cpu-control -s -g "ondemand" -M 1.4G
sudo su - -c "echo none      > /sys/class/leds/blue\:heartbeart/trigger"
</syntaxhighlight>
My observation is changing to ''ondemand'' governor will make cpu4-7 to keep their maximum frequency (1.4GHz in this case) instead of around 600MHz when I use the ''conservative'' governor. Temperature will raise from 43C to 46C (not constantly though).
 
It is also OK to omit '-M' argument to use the default maximum frequencies if we have used ondemand goveroor.
 
Question: how to run the script at boot?
 
Answer: Follow [http://forum.odroid.com/viewtopic.php?f=95&t=16474 this post]. Edit '''/etc/rc.local''' to add the desired commands. It looks like
<pre>
echo none      > /sys/class/leds/blue\:heartbeart/trigger
sleep 60; /home/odroid/odroid-cpu-control/odroid-cpu-control -s -g "ondemand" -M 1.4G
exit 0
</pre>
It seems it is not necessary to modify the file '''/media/boot/boot.ini'''.
 
[https://wiki.ubuntu.com/systemd Systemd/systemctl] - an alternative boot manager
{{Pre}}
odroid@odroid:~$ ps -ef | grep system
root      366    1  0 20:25 ?        00:00:00 /lib/systemd/systemd-udevd --daemon
message+  500    1  0 20:25 ?        00:00:01 dbus-daemon --system --fork
root      533    1  0 20:25 ?        00:00:00 /lib/systemd/systemd-logind
odroid    1344  1221  0 20:25 ?        00:00:00 upstart-dbus-bridge --daemon --system --user --bus-name system
odroid    2383  1724  0 20:34 pts/6    00:00:00 grep --color=auto system
</pre>
 
=== cpu heatsink ===
I bought a heatsink designed for Odroid C1. Though xu4 can use it, the temperature goes up to 95C!!! I then remove the sticky form and use thermal paste. The temperature goes down to 70-80. Still too high. At the end, I changed back to the original fan. The temperature is about 55C in idle.
 
For Raspberry Pi 3 the temperature is around 52C and can go up to 84C when all 4 cores are in work. See [[Raspberry#Reading_temperature|Raspberry Pi]] page.
 
=== cpu governor ===
* [http://wiki.rootzwiki.com/CPU_Governors CPU Governors] According to the information there, '''interactive''' diffs from '''ondemand''' that '''interactive''' slowly drops the frequency once no longer under load while ''ondemand'' quickly scales down the frequency once the load is no longer present.
* [http://androidforums.com/threads/android-cpu-governors-explained.513426/ Android CPU governors explained]
{{Pre}}
odroid@odroid:~$ grep governor /media/boot/boot.ini
# Uncomment only one line. New governor is set after 90secs after boot.
setenv governor "performance"
# setenv governor "ondemand"
# setenv governor "interactive"
# setenv governor "conservative"
# setenv governor "powersave"
setenv bootargs "${bootrootfs} ${videoconfig} smsc95xx.macaddr=${macaddr} governor=${governor} ${hdmi_phy_control}"
</pre>
 
=== check the current CPU temperature ===
<syntaxhighlight lang='bash'>
odroid@odroid:~$ cat /sys/devices/virtual/thermal/thermal_zone0/temp
56000
</syntaxhighlight>
=== Add a temperature applet to the Panel ===
Check the [http://forum.odroid.com/viewtopic.php?f=99&t=17885 post] by meveric.
 
Create a new file with your favorite text editor and add the following lines:
<syntaxhighlight lang='bash'>
#!/bin/bash
echo "`cat /sys/devices/virtual/thermal/thermal_zone0/temp | sed "s/000//"`°C"
</syntaxhighlight>
 
Then go to your task bar right click it and choose the add to panel option. Choose the '''Command''' applet you should see a clock being displayed (that's the default). Right click it, select preferences and change the commandline to the file you just created. Done.
 
=== cpu temperature and cpu fan spin speed ===
* Tip: Do not leave a browser page with lots of flash/ads on.
* [http://forum.odroid.com/viewtopic.php?f=52&t=16308 Control automatic fan settings on XU3/XU4] (posted on 9/22/2015). Documentation about fan settings.
<syntaxhighlight lang='bash'>
odroid@odroid:~$ ls /sys/devices/odroid_fan.*/temp_levels
/sys/devices/odroid_fan.14/temp_levels
odroid@odroid:~$ ls /sys/devices/odroid_fan.*/fan_speeds
/sys/devices/odroid_fan.14/fan_speeds
odroid@odroid:~$ cat /sys/devices/odroid_fan.*/temp_levels
68 73 85
odroid@odroid:~$ cat /sys/devices/odroid_fan.*/fan_speeds
1 51 71 91
</syntaxhighlight>
meaning that at 68° and 73° C, fan is rotating with moderate speed, and when temperature rises to 85°C, rotational speed increases to almost maximum.
 
=== cpu fan control ===
* See [http://magazine.odroid.com/201601 Jan 2016 Odroid Magazine] 
** [http://forum.odroid.com/viewtopic.php?f=95&t=16474 the original post]
** https://github.com/mad-ady/odroid-cpu-control
** Maybe I should consider to use '''conservative''' instead of '''powersave'''. See http://forum.odroid.com/viewtopic.php?f=112&t=18461
{{Pre}}
cd
git clone https://github.com/mad-ady/odroid-cpu-control.git
sudo ~/odroid-cpu-control/odroid-cpu-control -s -g "powersave" -m 600M  # fixed freq at 600MHz
# or
sudo /home/$USER/odroid-cpu-control/odroid-cpu-control -s -g "conservative" -M 1.6G # conservative governor, max freq 1.6G, less noise
sudo /home/$USER/odroid-cpu-control/odroid-cpu-control -s -g "conservative" -M 2.0G -c 4-7 # conservative governor, reset max freq.
/home/$USER/odroid-cpu-control/odroid-cpu-control -l    # current cpu freq setting
/home/$USER/odroid-cpu-control/odroid-cpu-control -l -t # temperature
</pre>
Note that
{{Pre}}
$ # Original freq came with Ubuntu OS
$ sudo ./odroid-cpu-control -l
CPU0: governor performance current 1.40GHz min 200.00MHz [200.00MHz] max 1.40GHz [1.40GHz]
CPU1: governor performance current 1.40GHz min 200.00MHz [200.00MHz] max 1.40GHz [1.40GHz]
CPU2: governor performance current 1.40GHz min 200.00MHz [200.00MHz] max 1.40GHz [1.40GHz]
CPU3: governor performance current 1.40GHz min 200.00MHz [200.00MHz] max 1.40GHz [1.40GHz]
CPU4: governor performance current 2.00GHz min 200.00MHz [200.00MHz] max 2.00GHz [2.00GHz]
CPU5: governor performance current 2.00GHz min 200.00MHz [200.00MHz] max 2.00GHz [2.00GHz]
CPU6: governor performance current 2.00GHz min 200.00MHz [200.00MHz] max 2.00GHz [2.00GHz]
CPU7: governor performance current 2.00GHz min 200.00MHz [200.00MHz] max 2.00GHz [2.00GHz]
$ # Use 'Conservative' governor as above
$ cpufreq-info | grep -i current | grep CPU
  current CPU frequency is 200 MHz.
  current CPU frequency is 200 MHz.
  current CPU frequency is 200 MHz.
  current CPU frequency is 200 MHz.
  current CPU frequency is 300 MHz.
  current CPU frequency is 300 MHz.
  current CPU frequency is 300 MHz.
  current CPU frequency is 300 MHz.
$ ~/odroid-cpu-control/odroid-cpu-control -l # not exactly the same as above
CPU0: governor conservative current 300.00MHz min 200.00MHz [200.00MHz] max 1.20GHz [1.40GHz]
CPU1: governor conservative current 300.00MHz min 200.00MHz [200.00MHz] max 1.20GHz [1.40GHz]
CPU2: governor conservative current 300.00MHz min 200.00MHz [200.00MHz] max 1.20GHz [1.40GHz]
CPU3: governor conservative current 300.00MHz min 200.00MHz [200.00MHz] max 1.20GHz [1.40GHz]
CPU4: governor conservative current 600.00MHz min 200.00MHz [200.00MHz] max 1.20GHz [2.00GHz]
CPU5: governor conservative current 600.00MHz min 200.00MHz [200.00MHz] max 1.20GHz [2.00GHz]
CPU6: governor conservative current 600.00MHz min 200.00MHz [200.00MHz] max 1.20GHz [2.00GHz]
CPU7: governor conservative current 600.00MHz min 200.00MHz [200.00MHz] max 1.20GHz [2.00GHz]
$ ls /sys/devices/system/cpu/
cpu0  cpu2  cpu4  cpu6  cpufreq  kernel_max  online    power    uevent
cpu1  cpu3  cpu5  cpu7  cpuidle  offline    possible  present
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
interactive conservative ondemand powersave performance
odroid@odroid:~$
</pre>
* https://wiki.archlinux.org/index.php/CPU_frequency_scaling#Scaling_governors (it also teaches a command to watch the cpu speed in real time. But it seems the command works only on my x86 ubuntu, not my Odroid ubuntu desktop.)
<syntaxhighlight lang='bash'>
watch grep \"cpu MHz\" /proc/cpuinfo
</syntaxhighlight>
* Google: odroid cpu governor
 
=== cpu temperature ===
<syntaxhighlight lang='bash'>
~/odroid-cpu-control/odroid-cpu-control -l -t
# or to watch in real time (ctrl C to stop)
watch ~/odroid-cpu-control/odroid-cpu-control -l -t
</syntaxhighlight>
 
=== Heatsink method ===
* [http://www.hardkernel.com/main/products/prdt_info.php?g_code=G146648458113 40 x 40 x 25 mm Tall Blue Heat Sink]
* [http://www.hardkernel.com/main/products/prdt_info.php?g_code=G141637555371 C1 Heatsink]
* https://www.amazon.com/Gdstime-Aluminum-Heatsink-Computer-Northbridge/dp/B00ZRDRX8M I purchased this one (from aliexpress) and the cpu temperature goes from 65C to 45C. I can not use the Odroid case cover now since this heatsink is huge.
 
[[File:Xu4Heatsink.jpg|250px]]
* http://forum.odroid.com/viewtopic.php?f=97&t=15252
 
But you will meet the thermal throttling frequently.
Change the governor to "Interactive" or "OnDemand" to make XU4 generate lower heat.
 
=== Screensaver ===
Do not turn on it. The screensaver will help to increase CPU load and therefore raise the temperature even you think the system is in idle.
 
=== Turn off/on blue light ===
The command is (must log in as root first, sudo does not work??)
<syntaxhighlight lang='bash'>
sudo su - -c "echo heartbeat > /sys/class/leds/blue\:heartbeart/trigger"
sudo su - -c "echo none      > /sys/class/leds/blue\:heartbeart/trigger"
</syntaxhighlight>
 
The commands can be put in a cron job. See [http://forum.odroid.com/viewtopic.php?f=111&t=15429 this message].
 
== Lost ethernet connection ==
* http://forum.odroid.com/viewtopic.php?f=95&t=19034 & http://forum.odroid.com/viewtopic.php?f=95&t=19034&start=50#p136499 (ethernet sleep)
 
It seems there is a hardware/software issue with many Odroid devices. Google: odroid ethernet not working. (Not a solution was found). My current solution is to use a USB-ethernet adapter.
 
My experience is I need to replug the microSD card. Replugging ethernet, hdmi does not help.
 
From time to time, the ethernet connection is lost. Normally the ifconfig should return like
<pre>
odroid@odroid:~$ ifconfig
eth0      Link encap:Ethernet  HWaddr 00:1e:06:32:03:ac 
          inet addr:192.168.1.189  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::21e:6ff:fe32:3ac/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:26 errors:0 dropped:0 overruns:0 frame:0
          TX packets:67 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:3488 (3.4 KB)  TX bytes:9730 (9.7 KB)
 
ip6tnl0  Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 
          UP RUNNING NOARP  MTU:1452  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
 
lo        Link encap:Local Loopback 
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:243 errors:0 dropped:0 overruns:0 frame:0
          TX packets:243 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:22777 (22.7 KB)  TX bytes:22777 (22.7 KB)
 
sit0      Link encap:IPv6-in-IPv4 
          UP RUNNING NOARP  MTU:1480  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
</pre>
When there is a network problem, the 'eth0' will not appear there.
 
Ideally, we should see something ([http://forum.odroid.com/viewtopic.php?f=99&t=19204 r8152 should be detected])
<pre style="white-space: pre-wrap; /* CSS 3 */ white-space: -moz-pre-wrap; /* Mozilla, since 1999 */ white-space: -pre-wrap; /* Opera 4-6 */ white-space: -o-pre-wrap; /* Opera 7 */ word-wrap: break-word; /* IE 5.5+ */ " >
odroid@odroid:~$ lsusb -t
/:  Bus 06.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 5000M
    |__ Port 1: Dev 2, If 0, Class=Vendor Specific Class, Driver=r8152, 5000M
/:  Bus 05.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 480M
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 5000M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/2p, 480M
        |__ Port 1: Dev 3, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
        |__ Port 2: Dev 4, If 0, Class=Wireless, Driver=btusb, 12M
        |__ Port 2: Dev 4, If 1, Class=Wireless, Driver=btusb, 12M
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=exynos-ohci/3p, 12M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=s5p-ehci/3p, 480M
odroid@odroid:~$ lsusb
Bus 006 Device 002: ID 0bda:8153 Realtek Semiconductor Corp.
Bus 006 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 004: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
Bus 003 Device 003: ID 045e:00d1 Microsoft Corp. Optical Mouse with Tilt Wheel
Bus 003 Device 002: ID 05e3:0610 Genesys Logic, Inc. 4-port hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
odroid@odroid:~$ dmesg | grep -i smsc
[    0.000000] [c0] Kernel command line: console=tty1 console=ttySAC2,115200n8 root=UUID=e139ce78-9841-40fe-8823-96a304a09859 rootwait ro fsck.repair=yes net.ifnames=0 smsc95xx.macaddr=00:1e:06:61:7a:39 governor=performance hdmi_tx_amp_lvl=31 hdmi_tx_lvl_ch0=3 hdmi_tx_lvl_ch1=3 hdmi_tx_lvl_ch2=3 hdmi_tx_emp_lvl=6 hdmi_clk_amp_lvl=31 hdmi_tx_res=0 HPD=true vout=hdmi
odroid@odroid:~$ lsmod
Module                  Size  Used by
joydev                  9134  0
hidp                  13711  1
rfcomm                33609  14
bnep                  11192  2
btusb                  16475  0
bluetooth            227857  41 bnep,hidp,btusb,rfcomm
rfkill                13122  5 bluetooth
ina231_sensor          9040  0
spi_s3c64xx            14770  0
ppdev                  6506  0
lp                      8869  0
parport                22257  2 lp,ppdev
</pre>
* http://forum.odroid.com/viewtopic.php?f=95&t=18375&start=50 . Add:
ethtool -s eth0 speed 100 duplex full to /etc/rc.local
to force 100 MBit
 
== [http://oss.oetiker.ch/rrdtool/ RRDTool] ==
* http://www.rechenkraft.net/wiki/index.php?title=Hardwaremonitoring_Odroid_U2/U3_Android
* Google: rrdtool odroid
 
== EMMC module ==
I purchased a 16GB emmc module. Cannot feel improvement over microSD (testing by moving a window on the desktop).
 
=== eMMC vs SD card ===
http://forum.odroid.com/viewtopic.php?f=93&t=23453
 
=== USB 3.0 speed ===
http://forum.odroid.com/viewtopic.php?f=93&t=23000
 
=== eMMC vs SSD on UBS 3.0 ===
eMMC shows 50MB/s and SSD shows 180 MB/s.
<pre>
sync; dd if=/dev/zero of=tempfile bs=1M count=1024; sync; rm tempfile
</pre>
 
== fix date/zone ==
<syntaxhighlight lang='bash'>
sudo dpkg-reconfigure tzdata
</syntaxhighlight>
 
== lightdm ==
The output of 'htop' command shows '''/usr/bin/X -core :0 -seat seat0 -auth /var/run/lightdm/root/:0''' (or Xorg from 'top') consistently uses a lot of CPU power (1 core).
 
See the discussion of lightdm and X.org
* [http://askubuntu.com/questions/163264/how-can-i-reduce-the-cpu-usage-of-x-lightdm How to reduce the cpu usage of lightdm]
* [http://askubuntu.com/questions/4662/where-is-the-x-org-config-file-how-do-i-configure-x-there /usr/share/X11/xorg.conf.d]
* [https://www.x.org/releases/current/doc/man/man5/xorg.conf.5.xhtml xorg.conf man]
 
Udoobuntu does not have this issue.
 
The x86 Unity desktop has '''/usr/bin/X :0 -audit 0 -auth /var/lib/mdm/:0.Xauth''' (or Xorg from 'top') running with 20% CPU (1 core).
 
== Bluetooth keyboard ==
See [[Raspberry#Bluetooth_keyboard|Raspberry bluetooth keyboard]]. The blueman utility does not work for some reason. I have to temporarily plug in a regular/RF wireless keyboard and do some work on the command line.
<syntaxhighlight lang='bash'>
# Press the 'connect' button on the bluetooth keyboard first!
$ bluetoothctl # no sudo is needed
[bluetooth] default-agent
[bluetooth] scan on
[bluetooth] pair 90:7F:61:8F:D0:38        # it will ask to enter a pin code
          # type the pin number shown on pop-up windows in the top-right corner
[bluetooth] connect 90:7F:61:8F:D0:38
[bluetooth] quit
</syntaxhighlight>
 
== Lock screen ==
Go to control panel -> Screensaver -> Uncheck 'Lock screen when screensaver is active'.
 
== Boot from USB ==
[https://jamesachambers.com/odroid-xu4-xu4q-ssd-booting-guide/ ODROID XU4/XU4Q SSD Booting Guide]
<pre>
sudo fdisk /dev/sda # p  d  w
sudo su; cat /dev/mmcblk1 > /dev/sda
tune2fs -U random /dev/mmcblk1p2
blkid
e2fsck -yf /dev/sda2
reboot
</pre>
 
== I2C write error on boot ==
See [http://odroid.com/dokuwiki/doku.php?id=en:xu4_tips XU4 tip]. It is because XU4 and XU3-Lite have no energy sensor on board.
 
<syntaxhighlight lang='bash'>
sudo nano /etc/modprobe.d/blacklist-odroid.conf
# insert a line
blacklist ina231_sensor
</syntaxhighlight>
 
== Boot Linux over NFS ==
http://odroid.com/dokuwiki/doku.php?id=en:nfsboot
 
== /etc/apt/sources.list ==
<pre>
$ cat /etc/apt/sources.list
deb http://ports.ubuntu.com wily restricted universe multiverse main
deb-src http://ports.ubuntu.com wily restricted universe multiverse main
 
deb http://ports.ubuntu.com wily-backports restricted universe multiverse main
deb-src http://ports.ubuntu.com wily-backports restricted universe multiverse main
 
deb http://ports.ubuntu.com wily-proposed restricted universe multiverse main
deb-src http://ports.ubuntu.com wily-proposed restricted universe multiverse main
 
deb http://ports.ubuntu.com wily-security restricted universe multiverse main
deb-src http://ports.ubuntu.com wily-security restricted universe multiverse main
 
deb http://ports.ubuntu.com wily-updates restricted universe multiverse main
deb-src http://ports.ubuntu.com wily-updates restricted universe multiverse main
</pre>
And the /etc/apt/ directory
<syntaxhighlight lang='bash'>
odroid@odroid:~/preprocessgui$ ls /etc/apt/
apt.conf.d    sources.list  sources.list.d  trusted.gpg~
preferences.d  sources.list~  trusted.gpg    trusted.gpg.d
odroid@odroid:~/preprocessgui$ cat /etc/apt/sources.list.d/odroid.list
deb http://deb.odroid.in/5422/ wily main
odroid@odroid:~/preprocessgui$ ls /etc/apt/sources.list.d/
odroid.list
</syntaxhighlight>
 
== Kodi ==
Ubuntu 15.10 image preloads Kodi. One cool thing is the 'Display Mode' option in the System > Settings > System > Video Output is available. So Kodi can coexist with my Ubuntu. So next time when I exit Kodi, I won't need to click Ctrl-Alt-F7 to get back to Ubuntu OS.
 
Note Kodi still uses certain CPU power (cpu temperature is raised several degrees).
 
=== Audio is muted ===
Hit '+' (no 'shift' is needed) to increase volume and un-mute Kodi.
 
== Testing gigabit ethernet ==
Use [https://iperf.fr/ iperf] -The network bandwidth measurement tool.
 
See
* http://forum.odroid.com/viewtopic.php?f=112&t=18158
* http://openmaniak.com/iperf.php
* https://advanxer.com/blog/2012/06/installing-iperf-on-ubuntu/
* http://xenserver.org/discuss-virtualization/virtualization-blog/entry/basic-network-testing-with-iperf.html
 
== Printer ==
Adding a networked printer 'Brother-HL-5250DN' works (Main menu -> System Tools -> Printers). I don't need to go through some hassle like in [[Raspberry#Printer|this case]].
 
Note that though only one printer is added, when I try to print, the Print dialog shows 'BRN_EE70EF (Online)' and 'Brother-HL-5250DN-series'(default) printers. Just pick up the default.
 
== OTG gadget ==
http://forum.odroid.com/viewtopic.php?f=112&t=9111
 
== Micro USB OTG ==
* ODROID C4
* USB OTG (On-The-Go) functionality: It supports both host and device modes, allowing you to connect various USB peripherals or use the ODROID-C4 as a USB device (need an OTG adapter or cable).
* Host Mode:
** Connect a USB flash drive to transfer files or expand storage.
** Attach a USB keyboard or mouse for input.
** Connect a USB audio interface for audio input/output.
** Use a USB webcam for video capture.
* Device Mode:
** Connect to a computer to transfer files or debug the device.
** Use the device as a USB mass storage device to access its internal storage from a computer.
** Set up the device as a USB network adapter for internet tethering.
 
== Build R ==
See [[R#Debian_system_.28focus_on_arm_architecture_with_notes_from_x86_system.29|Build R from source]].
 
In summary,
<syntaxhighlight lang='bash'>
sudo apt-get build-dep r-base
wget https://cran.rstudio.com/src/base/R-3/R-3.2.5.tar.gz
tar xzvf R-3.2.5.tar.gz
cd R-3.2.5
./configure --enable-R-shlib
time make -j8 # 23 minutes
sudo make install
</syntaxhighlight>
 
== Qt ==
=== Binary ===
<syntaxhighlight lang='bash'>
$ sudo apt-get install aptitude
$ aptitude search qt5 -F "%c %p %d %V"
$ sudo apt-get update
$ sudo apt-get install qt5-default  # 5.4.2
Reading package lists... Done
Building dependency tree     
Reading state information... Done
The following extra packages will be installed:
  libqt5opengl5-dev qtbase5-dev
Suggested packages:
  libmysqlclient-dev libpq-dev libsqlite3-dev unixodbc-dev
The following NEW packages will be installed:
  libqt5opengl5-dev qt5-default qtbase5-dev
0 upgraded, 3 newly installed, 0 to remove and 2 not upgraded.
Need to get 831 kB/874 kB of archives.
 
$ dpkg -L qt5-qmake
/.
/usr
/usr/lib
/usr/lib/arm-linux-gnueabihf
/usr/lib/arm-linux-gnueabihf/qt5
...
/usr/lib/arm-linux-gnueabihf/qt5/bin
/usr/lib/arm-linux-gnueabihf/qt5/bin/qmake
...
$ dpkg -L qt5-default
/.
/usr
/usr/lib
/usr/lib/arm-linux-gnueabihf
/usr/lib/arm-linux-gnueabihf/qtchooser
/usr/share
/usr/share/doc
/usr/share/doc/qt5-default
/usr/share/doc/qt5-default/copyright
/usr/lib/arm-linux-gnueabihf/qtchooser/default.conf
/usr/share/doc/qt5-default/changelog.Debian.gz
/usr/share/doc/qt5-default/LGPL_EXCEPTION.txt
$ qmake -v
QMake version 3.0
Using Qt version 5.4.2 in /usr/lib/arm-linux-gnueabihf
</syntaxhighlight>
 
=== Build from source ===
* http://forum.odroid.com/viewtopic.php?f=77&t=14923.
* http://odroid.com/dokuwiki/doku.php?id=en:opengleslinux ODroid Mesa software rendering and Mali hardware rendering
{{Pre}}
$ cat /media/odroid/toshiba/qt-5.5.1/qtbase/mkspecs/linux-g++/qmake.conf
#
# qmake configuration for linux-g++
#
 
MAKEFILE_GENERATOR      = UNIX
CONFIG                += incremental
QMAKE_INCREMENTAL_STYLE = sublib
 
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
 
#QMAKE_INCDIR += /usr/include
#QMAKE_LIBDIR += /usr/lib
 
#QMAKE_INCDIR_OPENGL = /usr/include/GL
#QMAKE_LIBDIR_OPENGL = /usr/lib/arm-linux-gnueabihf/mesa
QMAKE_INCDIR_EGL        = /usr/include/EGL
QMAKE_LIBDIR_EGL        = /usr/lib/arm-linux-gnueabihf
QMAKE_INCDIR_OPENGL_ES2 = /usr/include/GLES2
QMAKE_LIBDIR_OPENGL_ES2 = /usr/lib/arm-linux-gnueabihf/
#QMAKE_INCDIR_OPENVG    = $QMAKE_INCDIR_EGL
#QMAKE_LIBDIR_OPENVG    = /usr/lib/arm-linux-gnueabihf/mali-egl
 
QMAKE_LIBS_EGL += -lEGL
#QMKAE_LIBS_GL  += -lGL
QMAKE_LIBS_OPENGL_ES2 += -lGLESv2 -lEGL
 
#QMAKE_LFLAGS += -Wl,-rpath-link,/usr/lib/arm-linux-gnueabihf
 
QMAKE_CFLAGS  +=  -mcpu=cortex-a15 -mfpu=neon-vfpv4 -mtune=cortex-a15.cortex-a7  -mfloat-abi=hard
QMAKE_CXXFLAGS += $$QMAKE_CFLAGS
QMAKE_CFLAGS_RELEASE  +=  -mcpu=cortex-a15 -mfpu=neon-vfpv4 -mtune=cortex-a15.cortex-a7 -mfloat-abi=hard
DISTRO_OPTS += "hard-float"
QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CXXFLAGS -O2
 
QT_INSTALL_PREFIX="/usr/local/Qt5.5.1/"  ## Edit this if you have a preference
 
# Preferred eglfs backend
EGLFS_DEVICE_INTEGRATION = eglfs_linuxfb
load(qt_config)
 
$ sudo find /usr/lib -name libGLES*
[sudo] password for odroid:
/usr/lib/arm-linux-gnueabihf/libGLESv1_CM.so
/usr/lib/arm-linux-gnueabihf/libhybris-egl/libGLESv2.so.2
/usr/lib/arm-linux-gnueabihf/libhybris-egl/libGLESv2.so.2.0.0
/usr/lib/arm-linux-gnueabihf/mali-egl/libGLESv1_CM.so
/usr/lib/arm-linux-gnueabihf/mali-egl/libGLESv1_CM.so.1.1
/usr/lib/arm-linux-gnueabihf/mali-egl/libGLESv2.so.2.0
/usr/lib/arm-linux-gnueabihf/mali-egl/libGLESv1_CM.so.1
/usr/lib/arm-linux-gnueabihf/mali-egl/libGLESv2.so.2
/usr/lib/arm-linux-gnueabihf/mali-egl/libGLESv2.so
/usr/lib/arm-linux-gnueabihf/mesa-egl/libGLESv1_CM.so
/usr/lib/arm-linux-gnueabihf/mesa-egl/libGLESv2.so.2
/usr/lib/arm-linux-gnueabihf/mesa-egl/libGLESv2.so
/usr/lib/arm-linux-gnueabihf/libGLESv2.so
</pre>
At the end of running .configure, I got
<pre>
Creating qmake...
Done.
Running configuration tests...
The OpenGL ES 2.0 functionality test failed!
You might need to modify the include and library search paths by editing
QMAKE_INCDIR_OPENGL_ES2, QMAKE_LIBDIR_OPENGL_ES2 and QMAKE_LIBS_OPENGL_ES2 in
/media/odroid/toshiba/qt-5.5.1/qtbase/mkspecs/linux-g++.
</pre>
* [http://forum.odroid.com/viewtopic.php?f=52&t=12306 Build Qt 5.4 and Qt Creator 3.3]
<syntaxhighlight lang='bash'>
./configure \
-opensource \
-developer-build \
-confirm-license \
-prefix /usr/local/qt5.4 \
-skip qtwebkit \
-no-gtkstyle \
-nomake examples \
-nomake tests \
-opengl es2
make -j 7
sudo make install
</syntaxhighlight>
Unfortunately I got an error
<pre>
Running configuration tests...
The OpenGL ES 2.0 functionality test failed!
You might need to modify the include and library search paths by editing
QMAKE_INCDIR_OPENGL_ES2, QMAKE_LIBDIR_OPENGL_ES2 and QMAKE_LIBS_OPENGL_ES2 in
/home/odroid/qt-everywhere-opensource-src-5.4.2/qtbase/mkspecs/linux-g++.
</pre>
* http://forum.odroid.com/viewtopic.php?f=112&t=9850
* https://wiki.qt.io/ODROID-XU3#Building_Qt
 
=== Qt Creator ===
When I use sudo apt-get install qtcreator, everything looks fine. But I couldn't open it.
<syntaxhighlight lang='bash'>
odroid@odroid:~$ sudo apt-get install qtcreator
The following extra packages will be installed:
  libbotan-1.10-1 libqbscore1 libqbsqtprofilesetup1 libqt5clucene5
  libqt5concurrent5 libqt5designer5 libqt5designercomponents5 libqt5help5
  libqt5quicktest5 libqt5quickwidgets5 libqt5script5 libqt5test5
  qml-module-qtquick-controls qml-module-qtquick-layouts
  qml-module-qtquick-window2 qml-module-qtquick2 qmlscene qt5-qmake
  qtbase5-dev-tools qtchooser qtcreator-data qtcreator-doc
  qtdeclarative5-dev-tools qttools5-dev-tools qtxmlpatterns5-dev-tools
Suggested packages:
  cmake kdelibs5-data subversion ubuntu-sdk qt5-doc
The following NEW packages will be installed:
  libbotan-1.10-1 libqbscore1 libqbsqtprofilesetup1 libqt5clucene5
  libqt5concurrent5 libqt5designer5 libqt5designercomponents5 libqt5help5
  libqt5quicktest5 libqt5quickwidgets5 libqt5script5 libqt5test5
  qml-module-qtquick-controls qml-module-qtquick-layouts
  qml-module-qtquick-window2 qml-module-qtquick2 qmlscene qt5-qmake
  qtbase5-dev-tools qtchooser qtcreator qtcreator-data qtcreator-doc
  qtdeclarative5-dev-tools qttools5-dev-tools qtxmlpatterns5-dev-tools
0 upgraded, 26 newly installed, 0 to remove and 1 not upgraded.
 
odroid@odroid:~$ qtcreator
No tool chain set from kit "Desktop".
No tool chain set from kit "Desktop".
Unable to find an X11 visual which matches EGL config 9
Could not initialize OpenGL for RasterGLSurface, reverting to RasterSurface.
Unable to find an X11 visual which matches EGL config 10
Could not initialize OpenGL
Aborted
odroid@odroid:~$ qtcreator -version
 
Qt Creator 3.5.0 based on Qt 5.4.2
</syntaxhighlight>
A solution is
<syntaxhighlight lang='bash'>
odroid@odroid:~$ qtcreator -noload Welcome
</syntaxhighlight>
Then Qt Creator will pop up even the 'Unable to find an X11 visual which matches EGL' message still appeared.
 
=== qt directories ===
<syntaxhighlight lang='bash'>
$ ls -l /usr/lib/arm-linux-gnueabihf/
...
drwxr-xr-x  4 root root    4096 Jan 31 15:31 qt4
drwxr-xr-x  7 root root    4096 Feb 14 10:36 qt5
drwxr-xr-x  2 root root    4096 Feb 20 18:35 qtchooser
drwxr-xr-x  3 root root    4096 Feb 14 10:37 qtcreator
drwxr-xr-x  3 root root    4096 Jan 31 15:31 qt-default
...
</syntaxhighlight>
 
== Create swap ==
* http://forum.odroid.com/viewtopic.php?f=77&t=14923
 
== Boot stages ==
The stages are Boot ROM -> Boot loader -> UBoot -> Linux Kernel.
 
== USB drive not mounted ==
When I use '''sudo dmesg | tail -n 10''', it shows the USB device but '''lsblk''' or '''sudo fdisk -l''' does not. I am using Linux odroid 4.14.180-176 Ubuntu 18.04.5 (Bionic).
 
'''Reboot''' has fixed the problem. Now '''lsblk''' or '''sudo fdisk -l''' or '''ls /dev/sd*''' shows '''sda''' is detected. Assume the usb drive has been formatted as ext fs, I can mount it before I can use it. Note: the usb drive is found on ''/dev/sda'' (raw device) rather than ''/dev/sda1'' (partition). [https://serverfault.com/a/338952 Differences between /dev/sda and /dev/sda1]
 
<pre>
sudo mount /dev/sda /mnt
</pre>
 
On my another ext usb drive, it has ntfs and ext3 partitions. For this one, I'll do
<pre>
sudo apt-get install ntfs-3g
 
sudo mkdir /mnt/ntfs
sudo mkdir /mnt/ext
sudo mount -t ntfs-3g /dev/sda1 /mnt/ntfs
sudo mount /dev/sda2 /mnt/ext
</pre>
 
I should try Ubuntu focal fossa server/desktop with kernel 5.4.y from [https://www.armbian.com/odroid-xu4/#kernels-archive-all Armbian] OS.
 
== Run from USB drive/Move Odroid rootfs filesystem to USB ==
We still need to boot from microSD or eMMC.
 
To run from USB drive,
# install os on microSD
# clone the rootfs to your hard disk or USB drive
# change the rootfs UUID located in /boot/boot.ini to match the new one from your root device.
 
Then all you need is reboot.
{{Pre}}
odroid@odroid:~$ cat /media/boot/boot.ini | grep UUID
setenv bootrootfs "console=tty1 console=ttySAC2,115200n8 root=UUID=e139ce78-9841-40fe-8823-96a304a09859 rootwait ro fsck.repair=yes net.ifnames=0 "
 
# Find UUID  https://help.ubuntu.com/community/UsingUUID
odroid@odroid:~$ sudo blkid
/dev/mmcblk0p1: SEC_TYPE="msdos" LABEL="boot" UUID="5F78-D927" TYPE="vfat" PARTUUID="0008aae4-01"
/dev/mmcblk0p2: LABEL="rootfs" UUID="e139ce78-9841-40fe-8823-96a304a09859" TYPE="ext4" PARTUUID="0008aae4-02"
/dev/mmcblk0: PTUUID="0008aae4" PTTYPE="dos"
 
odroid@odroid:~$ ls -l /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root 15 Feb 23 19:26 5F78-D927 -> ../../mmcblk0p1
lrwxrwxrwx 1 root root 15 Feb 23 19:26 e139ce78-9841-40fe-8823-96a304a09859 -> ../../mmcblk0p2
 
odroid@odroid:~$ ls -l /media/boot
total 8086
-rwxr-xr-x 1 root root    8563 Dec 20 09:20 boot.ini
-rwxr-xr-x 1 root root  50908 Feb 22 21:25 exynos5422-odroidxu3.dtb
-rwxr-xr-x 1 root root 4907768 Feb 22 21:26 uInitrd
-rwxr-xr-x 1 root root 3308224 Feb 22 21:26 zImage
 
odroid@odroid:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            743M    0  743M  0% /dev
tmpfs          200M  12M  189M  6% /run
/dev/mmcblk0p2  30G  5.7G  24G  20% /
tmpfs          996M  80K  996M  1% /dev/shm
tmpfs          5.0M  4.0K  5.0M  1% /run/lock
tmpfs          996M    0  996M  0% /sys/fs/cgroup
/dev/mmcblk0p1  128M  7.9M  120M  7% /media/boot
cgmfs          100K    0  100K  0% /run/cgmanager/fs
tmpfs          200M  24K  200M  1% /run/user/1000
</pre>
 
[https://gist.github.com/ryross/8f7665e17953535c9006eb599b85145e Move Odroid filesystem to SSD]
 
== Remote Desktop Connection ==
=== [https://www.nomachine.com/download NoMachine] ===
My server's LCD monitor has a maximum resolution of 1366x768 while my Odroid's monitor has 1920x1080 resolution.
 
When I use NoMachine to connect to my server, I can change the display resolution (move mouse to the top right corner of Ubuntu; the same position as the top-right (system setting) icon). It will show a paper flip animation. Click the animation and then 'Display' -> 'Change Settings'.
 
Unfortunately when I check 'Use Customize Resolution' option and set it to 1280x1024 it does not work (still even I restart the connection.
 
The reason is there is no such resolution in my server (check by '''xrandr'''). The solution is to add a new resolution; see [https://ubuntuforums.org/showthread.php?t=1112186 this post] and [https://wiki.ubuntu.com/X/Config/Resolution ubuntu's wiki]. After that change just disconnect the remote and reconnect it again.
<syntaxhighlight lang='bash'>
$ xrandr
Screen 0: minimum 320 x 200, current 1366 x 768, maximum 8192 x 8192
VGA-0 connected 1366x768+0+0 (normal left inverted right x axis y axis) 344mm x 193mm
  1366x768      59.8*+
  1280x800      59.8 
  1280x720      60.0 
  1024x768      75.1    70.1    66.0    60.0 
  832x624        74.6 
  800x600        72.2    75.0    60.3    56.2 
  640x480        72.8    75.0    66.7    60.0 
  720x400        70.1 
$ # run gtf or cvt to get the Modeline for the resolution we want
$ xrandr cvt 1440 900 59.9
$ # the values on the next line will depend on the output from above
$ xrandr --newmode "1440x900_59.90"  106.29  1440 1520 1672 1904  900 901 904 932  -HSync +Vsync
$ xrandr --addmode VGA-0 1440x900_59.90
$ xrandr
Screen 0: minimum 320 x 200, current 1366 x 768, maximum 8192 x 8192
VGA-0 connected 1366x768+0+0 (normal left inverted right x axis y axis) 344mm x 193mm
  1366x768      59.8*+
  1280x800      59.8 
  1280x720      60.0 
  1024x768      75.1    70.1    66.0    60.0 
  832x624        74.6 
  800x600        72.2    75.0    60.3    56.2 
  640x480        72.8    75.0    66.7    60.0 
  720x400        70.1 
  1440x900_59.90  59.9 
$ # More aggressive, 1024 is a little to high, the client needs to autohide taskbar
$ xrandr cvt 1280x1024 60
$ xrandr --newmode "1280x1024_60.00"  108.88  1280 1360 1496 1712  1024 1025 1028 1060  -HSync +Vsync
$ xrandr --addmode VGA-0 1280x1024_60.00
</syntaxhighlight>
Note that I need to check the 2nd icon 'Resize remote machine' in 'Display' settings.
 
Now NoMachine window has a good size; about 2 inches left on both sides and 1 inch left on the bottom of my LCD monitor.
 
== Benchmark ==
<syntaxhighlight lang='bash'>
odroid@odroid:~$ sysbench --num-threads=1 --test=cpu --cpu-max-prime=20000 --validate run
sysbench 0.4.12:  multi-threaded system evaluation benchmark
 
Running the test with following options:
Number of threads: 1
Additional request validation enabled.
 
 
Doing CPU performance benchmark
 
Threads started!
Done.
 
Maximum prime number checked in CPU test: 20000
 
 
Test execution summary:
    total time:                          372.6624s
    total number of events:              10000
    total time taken by event execution: 372.6445
    per-request statistics:
        min:                                37.02ms
        avg:                                37.26ms
        max:                                151.63ms
        approx.  95 percentile:              37.39ms
 
Threads fairness:
    events (avg/stddev):          10000.0000/0.00
    execution time (avg/stddev):  372.6445/0.00
</syntaxhighlight>
Note that cpu governor and speed have been modified (to reduce the cpu fan) when I ran the test
<syntaxhighlight lang='bash'>
odroid@odroid:~$ ~/odroid-cpu-control/odroid-cpu-control -l
CPU0: governor conservative    current 300.00MHz      min 200.00MHz [200.00MHz]max 1.20GHz [1.40GHz]
CPU1: governor conservative    current 300.00MHz      min 200.00MHz [200.00MHz]max 1.20GHz [1.40GHz]
CPU2: governor conservative    current 300.00MHz      min 200.00MHz [200.00MHz]max 1.20GHz [1.40GHz]
CPU3: governor conservative    current 300.00MHz      min 200.00MHz [200.00MHz]max 1.20GHz [1.40GHz]
CPU4: governor conservative    current 400.00MHz      min 200.00MHz [200.00MHz]max 1.20GHz [2.00GHz]
CPU5: governor conservative    current 400.00MHz      min 200.00MHz [200.00MHz]max 1.20GHz [2.00GHz]
CPU6: governor conservative    current 400.00MHz      min 200.00MHz [200.00MHz]max 1.20GHz [2.00GHz]
CPU7: governor conservative    current 400.00MHz      min 200.00MHz [200.00MHz]max 1.20GHz [2.00GHz]
</syntaxhighlight>
 
= Odroid-HC4 =
* [https://wiki.odroid.com/odroid-hc4/software/install_omv_nas OpenMediaVault Guide for Odroid SBCs]
* [https://chandlerswift.com/2021/05/07/odroid-hc4-nas Setting up an ODROID-HC4 as a NAS]
* [https://www.tomshardware.com/news/odroid-hc4-nas Build Your Own Dual-Bay NAS With Odroid-HC4]
* [https://www.ajfriesen.com/odroid-hc4-the-perfect-backup-nas-with-minio-s3-and-restic/ Odroid HC4 - The Perfect Backup NAS with MINIO S3 and restic]
 
= Other distributions =
== Android/Lineage ==
Android 7.1.2
* Instruction https://forum.odroid.com/viewtopic.php?f=94&t=23911
* Successful sd2emmc version from https://oph.mdrjr.net/voodik/5422/ODROID-XU3/Android/lineage-14.1/Alpha-1.3_14.12.17/
* Not successful ATV (Android TV) version from https://oph.mdrjr.net/voodik/5422/ODROID-XU3/Android/lineage-14.1-ATV/Alpha-1.0_20.11.17/
* EdiMax 802.11b/g/n nano Wireless adapter (EW-7811Un) works out of box
* Odroid XU4 does not have 3.5 audio out but HDMI can pass audio to TV.
 
I am able to install Antutu, Fain TV apps on Odroid XU4. Apr 14, 2018.
 
== [http://odroid.com/dokuwiki/doku.php?id=en:xu3_release_linux_ubuntu Ubuntu 14.04.01] ==
This is the Ubuntu version used in the demonstration video (Web Browsing and XMBC on Linux) where the LXTerminal can be dragged freely without too much delay. We can watch youtube on Chromium.
 
Note that the disk space is not extended by default. So don't hurry to run sudo apt-get update and then update all packages.
 
<syntaxhighlight lang='bash'>
odroid@odroid:~$ uname -a
Linux odroid 3.10.69 #1 SMP PREEMPT Thu Feb 12 15:22:14 BRST 2015 armv7l armv7l armv7l GNU/Linux
</syntaxhighlight>
 
=== Sharing ethernet internet through wifi ===
* http://forum.odroid.com/viewtopic.php?f=112&t=9321
* https://www.quora.com/How-do-I-create-hotspots-in-Ubuntu-14-04
 
Now
# right click the network applet on the Odroid desktop and click 'Enable Wi-Fi'
# left click the network applet and choose 'Create New Wi-Fi Network...'
# Select 'Odroid' (the connection name you just created) for the connection and the 'Create' button
 
Now the other devices can use wifi to have an internet access through the wifi hotspot (Odroid).
 
== Ubuntu 18.04 ==
https://wiki.odroid.com/odroid-xu4/os_images/linux/ubuntu_4.14/ubuntu_4.14
 
I installed the minimal bare OS version. It only uses 84 MB memory. After I install software for mediawiki, it uses 377 MB now.
 
== [http://forum.odroid.com/viewtopic.php?f=96&t=17542 Minimal Debian Jessie] ==
Also known as [https://plus.google.com/102407583165771869503/posts/bvXp3qfXCae Odroid GameStation Turbo or OGST].
 
Luckily, the gigabit network works out of box. I install LXDE desktop by following [http://forum.odroid.com/viewtopic.php?f=96&t=17542 here]. (Update: the gigabit is unstable. I have to go back to use my usb-ethernet adapter)
 
The default browser in Debian Jessie (8.4) is '''Iceweasel''' which looks very similar to Firefox.
 
The initial username/password for the minimal debian is root/odroid.
 
The uSD card has 2 partitions (boot in fat16 and GameStationTurbo in ext4).
 
Debian is a little different from Ubuntu. For example,
<ul>
<li>sudo does not work at first. See [https://www.privateinternetaccess.com/forum/discussion/18063/debian-8-1-0-jessie-sudo-fix-not-installed-by-default here] to add new users to /etc/sudoers file. nano /etc/sudoers
<pre>
yourusernamehere  ALL=(ALL:ALL) ALL
</pre></li></ul>
* I need to use 'sudo ifconfig' instead of 'ifconfig'
* [https://wiki.debian.org/HowTo/ChangeHostname change the hostname] from odroid-jessie to odroid.
* Run apt-get dist-upgrade to fix kodi cannot launch problem.
 
And again, the following commands need to be run when we reboot the computer (to take care of the cpu fan and blue led, just my opinion):
<syntaxhighlight lang='bash'>
sudo ~/odroid-cpu-control/odroid-cpu-control -s -g "conservative" -M 1.4G
sudo su - -c "echo none > /sys/class/leds/blue\:heartbeart/trigger"
</syntaxhighlight>
 
== Xu4 + Debian ==
* http://forum.odroid.com/viewtopic.php?f=96&t=16844
 
Too bad the gigabit network adapter still does not work stable. I have to use my own usb-ethernet adapter.
 
= [http://magazine.odroid.com/ Odroid Magazine] =
== Running Linux programs under Android ==
A guide to Linux chroot. Jan 2014
 
== IO ports on U3 ==
You can use any generic C/C++ or Python libraries to access the GPIOs in your program. [http://firmata.org Firma] can be used to make an interactive interface between U3 and ATmega328P. Jan 2014.
 
== Playing youtube on Linux ==
Jan 2014
 
== Use as a Wifi router ==
by using '''hostapd'''. Feb 2014.
 
== IO/O Shield access & Arduino ==
Feb 2014
 
== Game emulator ==
Feb 2014
 
From least powerful to most powerful: GB < GBC < NES < SMS < GAMEGEAR < GENESIS < SNES < GBA < PSI < PSP
 
[https://youtu.be/nIBuTJ2kNb0 ODROID N2+ The New Emulation King? Odroid N2 Plus Emulation Test]
 
== Communicate Odroid with PC via USB ==
The following 3 functions may be used simulaneously
* Emulate a mass storage device
* Emulate a serial link
* Emulate a ethernet link - the speed can be faster than 100Mbps
Feb 2014
 
== Sensors and Odroid xu ==
Mar 2014
 
== Portable Linux tablet ==
Apr 2014
 
== Build Android from source ==
Apr 2014
 
== Build Ubuntu from scratch ==
Cross compile. Apr 2014
 
== Install oracle JDK version 8 ==
Apr 2014
 
== Monitor your Linux with NMON ==
<syntaxhighlight lang='bash'>
<syntaxhighlight lang='bash'>
sudo apt-get install nmon
sudo apt-get install nmon
Line 7: Line 1,168:
May 2014
May 2014


= Introduction to Odroid-show =
== Introduction to Odroid-show ==
Using bash scripts to show texts or images.  
Using bash scripts to show texts or images.  
May 2014
May 2014


= Sort by file size =
== Sort by file size ==
<syntaxhighlight lang='bash'>
<syntaxhighlight lang='bash'>
find . -type f -exec ls -s {} \; | sort -n -r | head -5
find . -type f -exec ls -s {} \; | sort -n -r | head -5
Line 20: Line 1,181:
</syntaxhighlight>
</syntaxhighlight>


= Dual boot Android and Ubuntu =
== Petitboot ==
* Petitboot is a platform-independent bootloader based on the Linux kexec warm reboot mechanism. It supports loading kernel, initrd, and device tree files from any Linux mountable filesystem, plus can it can load files from the network using FTP, SFTP, TFTP, NFS, HTTP, and HTTPS protocols
* [https://magazine.odroid.com/article/os-installation-using-petitboot-and-usb-otg/ OS Installation using Petitboot and USB OTG]. Odroid N2, C4 support petitboot.
 
== Dual boot Android and Ubuntu ==
# Modify the Android source code for the MTP.   
# Modify the Android source code for the MTP.   
# Copy the Xubuntu root file system
# Copy the Xubuntu root file system
Line 35: Line 1,200:
May 2014
May 2014


= Pipe viewer and dd =
== Pipe viewer and dd ==
See the progress of your operation.
See the progress of your operation.
<syntaxhighlight lang='bash'>
<syntaxhighlight lang='bash'>
Line 43: Line 1,208:
May 2014
May 2014


= Android boot process =
== Android boot process ==
May 2014.
May 2014.


= Openbox =
== Openbox ==
Openbox can be run by itself or within another desktop environment. The main focus of Openbox is speed. It comes with only a terminal and web browser, and is perfect for embedded systems. Jun 2014.
Openbox can be run by itself or within another desktop environment. The main focus of Openbox is speed. It comes with only a terminal and web browser, and is perfect for embedded systems. Jun 2014.


= Lego case for Odroid U3 =
== Lego case for Odroid U3 ==
Jun 2014
Jun 2014


= Step motor and Odroid U3 =
== Step motor and Odroid U3 ==
using a bash script. Jun 2014
using a bash script. Jun 2014


= Resize Android partitions =
== Resize Android partitions ==
with gparted. Jun 2014.
with gparted. Jun 2014.


= Explore Android img files =
== Explore Android img files ==
Jun 2014
Jun 2014


= If X11 stops working =
== If X11 stops working ==
Ctrl + Alt + F1[1-6] to switch to a resident framebuffer terminal console.
Ctrl + Alt + F1[1-6] to switch to a resident framebuffer terminal console.


To switch back to X11, click Ctrl + Alt + F7.
To switch back to X11, click Ctrl + Alt + F7.


= Create deb files - checkinstall =
== Create deb files - checkinstall ==
Jun 2014
Jun 2014


= Using wiimote =
== Using wiimote ==
Jun 2014
Jun 2014


= High performance computing at home =
== High performance computing at home ==
Jan 2014, Feb 2014, Mar 2014, Apr 2014, Jul 2014.
 
LDAP, NFS/AutoFS. With LDAP (Lightweight Active Directory Protocol) configured, we will be able to have users log into any node of the cluster with the same credentials and permissions whcih, when combined with NFS/AutoFS, will permit us to configure network mounted home directories and shares, creating a uniform user experience when connecting to any node in our cluster.
LDAP, NFS/AutoFS. With LDAP (Lightweight Active Directory Protocol) configured, we will be able to have users log into any node of the cluster with the same credentials and permissions whcih, when combined with NFS/AutoFS, will permit us to configure network mounted home directories and shares, creating a uniform user experience when connecting to any node in our cluster.


== Using Xbox 360 controllers with Android ==
Jul 2014.
Jul 2014.


= Using Xbox 360 controllers with Android =
== Control your bandwidth ==
Jul 2014.
 
= Control your bandwidth =
Jul 2014.
Jul 2014.
<syntaxhighlight lang='bash'>
<syntaxhighlight lang='bash'>
Line 86: Line 1,251:
</syntaxhighlight>
</syntaxhighlight>


= Deny some users to access your machine via SSH =
== Deny some users to access your machine via SSH ==
Jul 2014.
Jul 2014.


= OS: GameStation Turbo =
== OS: GameStation Turbo ==
which is a Linux frontend for both games and media playback.
which is a Linux frontend for both games and media playback.


Jul 2014.
Jul 2014.


= Portable solar computing =
== Portable solar computing ==
Jul 2014
Jul 2014


= Odroid weather board + Qt application =
== Odroid weather board + Qt application ==
Odroid-show + PC/Odroid host.  
Odroid-show + PC/Odroid host.  
Jul 2014
Jul 2014


= Building native Android applications with RED =
== Building native Android applications with RED ==
Jul 2014
Jul 2014


= Remote Desktop Connection =
== Remote Desktop Connection ==
using '''x11vnc''' server.  If we also want to use Microsoft RDP to access, you will need to also install the '''xrd''' service.
using '''x11vnc''' server.  If we also want to use Microsoft RDP to access, you will need to also install the '''xrd''' service.


Jul 2014.  
Jul 2014.  


= Robotic Operating System =
== Robotic Operating System ==
Jul 2014.
Jul 2014.


= Mupen64 and Retroarch =
== Mupen64 and Retroarch ==
Pocket rocket and couch potato. Aug 2014
Pocket rocket and couch potato. Aug 2014


= ODROID-VU 9 inch 1280x800 touchscreen lcd =  
== ODROID-VU 9 inch 1280x800 touchscreen lcd ==
for android, linux and windows. Aug 2014
for android, linux and windows. Aug 2014


= Home web server =
== Home web server ==
using lighttpd & nginx. Aug 2014
using lighttpd & nginx. Aug 2014


= Youtube player alternative =
== Youtube player alternative ==
Tampermonkey. Aug 2014
Tampermonkey. Aug 2014


= Linux kernel compilation =
== Linux kernel compilation ==
The article provides details on starting with natively building a kernel using only the odroid itself. It does not addres cross-compiling.
The article provides details on starting with natively building a kernel using only the odroid itself. It does not addres cross-compiling.


Aug 2014
Aug 2014


= All about emmc modules =
== All about emmc modules ==
Aug 2014
Aug 2014


= Fix android overscan =
== Fix android overscan ==
Aug 2014.
Aug 2014.


= ODROID-W =
== ODROID-W ==
a miniature raspberry pi compatible wearable computer. A diy smartwatch was used as an example. It can run a full raspbian desktop environment on its own. Qt 4 and applications were used to display he clock and sms/mail/call notification.
a miniature raspberry pi compatible wearable computer. A diy smartwatch was used as an example. It can run a full raspbian desktop environment on its own. Qt 4 and applications were used to display he clock and sms/mail/call notification.


Aug 2014
Aug 2014


= Mouting sd card as extra storage when booting from emmc =
== Mouting sd card as extra storage when booting from emmc ==
instead of a USB drive.
instead of a USB drive.


Aug 2014
Aug 2014


= Android development using the linux kernel =
== Android development using the linux kernel ==
Aug 2014
Aug 2014


= Pepperflash chrome plugin =
== Pepperflash chrome plugin ==
Aug 2014
Aug 2014


= Robot =
== Robot ==
Sep 2014
Sep 2014


= Wicd - network manager =
== Wicd - network manager ==
Sep 2014
Sep 2014


= Freedomotic - home automation =
== Freedomotic - home automation ==
Sep 2014
Sep 2014


= Bash script =
== Bash script ==
* do something every time the os boots
* do something every time the os boots
* do math and concatenate strings
* do math and concatenate strings
Line 169: Line 1,334:
Sep 2014.
Sep 2014.


= Linux Gaming =
== Linux Gaming ==
Sep 2014
Sep 2014


= Conky =
== Conky ==
Oct 2014
Oct 2014


= I2C connection between U3 and Arduino module =
== I2C connection between U3 and Arduino module ==
Oct 2014.
Oct 2014.


= KVM =
== KVM ==
Really, with 1GB memory! Nov 2014.  
Really, with 1GB memory! Nov 2014.  


= Node.js =
== Node.js ==
Nov 2014.
Nov 2014.


= Odroid C1 vs Raspberry Pi B+ =
== Odroid C1 vs Raspberry Pi B+ ==
Including an introduction to C1. Dec 2014.
Including an introduction to C1. Dec 2014.


= Manage your software packages with automatic updates using apt-get =
== Manage your software packages with automatic updates using apt-get ==
Kernel updates using apt-get.
Kernel updates using apt-get.


Jan 2015.
Jan 2015.


= ownCloud =
== ownCloud ==
Jan 2015.
Jan 2015.


= Remote Desktop =
== X86 emulation on ARM ==
[https://eltechs.com/product/exagear-desktop/ Eltechs ExaGear desktop] is a virtual machine that implements  a  software-based  x86  Linux  container  on  ARM  and allows you to run Intel x86 applications directly.
 
Feb 2015
 
== Remote Desktop ==
Using Guacamole. All you need is a web browser with HTML5 support since no plugin or client-side software is required. Guacamole supports VNC, SSH and RDP.  
Using Guacamole. All you need is a web browser with HTML5 support since no plugin or client-side software is required. Guacamole supports VNC, SSH and RDP.  


Feb 2015.  
Feb 2015.


= Docker on ARMv7 =
== Docker on ARMv7 ==
Jan, Feb and March 2015.
Jan, Feb and March 2015.


= Android Kitkat and Odroid C1 =
== Android Kitkat and Odroid C1 ==
March 2015.
March 2015.


= Android Development =
== Android Development ==
Dissecting and modifying the APK file
Dissecting and modifying the APK file


Sep 2014, March 2015.
Sep 2014, March 2015.


= Installing Linux on an external USB drive =
== Installing Linux on an external USB drive ==
April 2015 issue. The boot partition is required to reside on a microSD card or emmc module. However, the root partition can be moved to a USB drive.
Mar 2014 & April 2015 issue. The boot partition is required to reside on a microSD card or emmc module. However, the root partition can be moved to a USB drive.


= GPIO shutdown =
== GPIO shutdown ==
April 2015 issue.
April 2015 issue.


= Triple boot Odroid C1 =
== Triple boot Odroid C1 ==
Pack Ubuntu, Android and Openelec.
Pack Ubuntu, Android and Openelec.


April 2015 issue.
April 2015 issue.


= Dashing =
== Dashing ==
May 2015 issue.
May 2015 issue.


= USB GPS and OBDII to track vehicles =
== USB GPS and OBDII to track vehicles ==
June 2015 issue.
June 2015.
 
== Nintendo 64 emulation ==
Jun 2015.
 
== 3.2" touchscreen driver installation ==
Jun 2015.
 
== Karaoke ==
Jun 2015
 
== Popcorn time ==
Popcorn Time uses sequential downloading to play copies of films listed by the website yts.to (YIFY). Jul 2015.
 
== PS3 controller ==
Aug 2015
 
== Building Android Kitkat on Odroid C1 ==
Aug 2015
 
== Stepmania ==
Dancing entertainment. Aug 2015
 
== Netflix under Linux + Odroid C1 ==
Chromium is used. Sep 2015
 
== Android Debian ==
Sep 2015
 
== Qt5 ==
Sep 2015
 
== ownCloud ==
Oct 2015.
 
== apt-get ==
* Kernel update
* Package list
 
Oct 2015
 
== Zygote and Android development ==
Oct 2015
 
== Seafile ==
A cloud service that allows you to create and share a private cloud library of files with friends or colleagues. Files get synced for all users. Oct 2015.
 
== Docker ==
Oct 2015
 
== Get more out of U-boot ==
It include boot rootfs from different partition or USB drive. Nov 2015
 
== Logical volume management ==
Sep 2015, Nov 2015
 
== Linux Gaming using GLshim, OpenGL ==
ODroid devices do not support OpenGL but only OpenGL ES, which is an optimized subset of OpenGL designed for embedded systems.
 
GLshim is a OpenGL to OpenGL ES wrapper, which means it's possible to translate certain OpenGL functions into OpenGL ES functions. Nov 2015
 
http://forum.odroid.com/viewtopic.php?f=95&t=13424
 
== LFTP and CRON ==
LFTP allows segmented & parallel downloads. Nov 2015
 
== Cloudshell home server ==
Oct 2015, Nov 2015
 
== RuneAudio music player ==
* LXDE auto-login
* Setup kiosk
* Auto-start Chromium
* Remote control is used.
 
Nov 2015
 
== ODroid-VU7 800x480 multi-touch screen for C1+ ==
boot.ini file needs to be configured to support 800x480 resolution and DVI output mode. Nov 2015

Latest revision as of 13:04, 21 November 2024

Manual

http://magazine.odroid.com/odroid-xu4/

XU4 + Ubuntu 16.04

http://odroid.com/dokuwiki/doku.php?id=en:xu3_release_linux_ubuntu

First impression (I did apt-get update & apt-get upgrade first)

  • Gigabit Ethernet works OK (speedtest shows 30MB/s download & 19MB/s upload when I use an ethernet connection)
  • CPU is hot (temperature > 60C) with the default settings. It goes down to 45 (about same as Udoo) after I change the governor from performance to conservative.
  • luakit and keepass2 installed fine

Ethernet

ifconfig shows the device name enx001e063203ac

Youtube

Video

Watch youtube video using Kodi -> temperature is 60C vs using web browser -> 66C vs closed Kodi -> 56C.

Kodi youtube add-on has a bug when you use the search function 'daily limit exceeded'. To fix the error, go to add-on -> Get more -> youtube. Click configure. In the 'Advanced' tab, move the cache size to the maximum. In the API Key tab, click 'Enable Personal API Keys'. Click 'OK' and open Youtube to search videos.

Note that not bothering to sign in.

When Kodi exits, it crashed (hanged). A workaround : Open a virtual terminal (ctrl-alt-F2) and kill it.

killall -9 kodi.bin

Audio

To listen Youtube audio only, use mps-youtube.

To listen to local audio files, use mpg321. sudo apt-get install mpg321.

nm-applet lost

One simple way to bring it up is to add a new item '/usr/bin/nm-applet' from righting click the Panels -> Custom Application Launcher.

http://thesave.altervista.org/2014/02/network-manager-applet-for-mate-desktop-installing-it-right/

# Step 1: 
sudo apt-get install --reinstall network-manager network-manager-gnome
# Step 2:
sudo nano /etc/NetworkManager/NetworkManager.conf 
# and change the line managed=false to managed=true
# Step 3:
# make sure that network interfaces file /etc/network/interfaces contains only the basic configuration:  
auto lo iface lo inet loopback
# Step 4:
# restart network manager with command 
sudo service networking restart
# Step 5:
# In case the network manager applet does not show up on mate’s panel try these one of these fixes:
sudo nano /etc/xdg/autostart/nm-applet.desktop
# remove the line  AutostartCondition=GNOME3 unless-session gnome, and restart the networking service;
# Step 6:
# remove the .state file relative to the network manager with command  
sudo rm /var/lib/NetworkManager/NetworkManager.state

Arduino

Don't use 'apt-get' to install the IDE. It can't be launched successfully. Download the Linux ARM version from the Arduino website https://www.arduino.cc/en/Main/Software. Extract and run <install.sh>.

You can access the application from Applications -> Electronics -> Arduino IDE. It (Arduino 1.6.12) works on my Odroid xu4 Ubuntu 16.04.

My Arduino Nano ATmega 328 is plugged in one of USB 3 port. The device port is /dev/ttyUSB0 (detected by comparing the output of ls /dev/tty* before and after plugging the Arduino). Testing by running Examples -> Basics -> Blink.

Compile RStudio

Following this, eventually it failed at the step of running sudo make install. I got the same error when I tried it on UDOOBuntu 2.1.

odroid@odroid:/media/odroid/sandisk/rstudio-v0.98.982$ sudo make install
Scanning dependencies of target gwt_build
Buildfile: /media/odroid/sandisk/rstudio-v0.98.982/src/gwt/build.xml

ext:
   [jscomp] Compiling 43 file(s) with 66 extern(s)
   [jscomp] 0 error(s), 0 warning(s)

javac:
    [mkdir] Created dir: /media/odroid/sandisk/rstudio-v0.98.982/src/gwt/bin
    [javac] Compiling 10 source files to /media/odroid/sandisk/rstudio-v0.98.982/src/gwt/bin
    [javac] Note: Some input files use or override a deprecated API.
    [javac] Note: Recompile with -Xlint:deprecation for details.
    [javac] Compiling 1467 source files to /media/odroid/sandisk/rstudio-v0.98.982/src/gwt/bin
     [copy] Copying 683 files to /media/odroid/sandisk/rstudio-v0.98.982/src/gwt/bin

gwtc:
     [java] Nov 07, 2016 9:54:40 PM java.util.prefs.FileSystemPreferences$1 run
     [java] INFO: Created user preferences directory.
     [java] Compiling module org.rstudio.studio.RStudio
     [java]    Compiling 2 permutations
     [java]       Compiling permutation 0...
     [java]       Process output
     [java]          Compiling
     [java]             Compiling permutation 1...
     [java]       [WARN] Lost communication with remote process
     [java] java.io.EOFException
     [java] 	at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2626)
     [java] 	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1321)
     [java] 	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373)
     [java] 	at com.google.gwt.dev.ExternalPermutationWorkerFactory$ExternalPermutationWorker.compile(ExternalPermutationWorkerFactory.java:153)
     [java] 	at com.google.gwt.dev.PermutationWorkerFactory$Manager$WorkerThread.run(PermutationWorkerFactory.java:73)
     [java] 	at java.lang.Thread.run(Thread.java:745)
     [java]       Compiling permutation 1...

BUILD FAILED
/media/odroid/sandisk/rstudio-v0.98.982/src/gwt/build.xml:126: Java returned: 137

Total time: 9 minutes 21 seconds
src/gwt/CMakeFiles/gwt_build.dir/build.make:57: recipe for target 'gwt_build' failed
make[2]: *** [gwt_build] Error 137
CMakeFiles/Makefile2:106: recipe for target 'src/gwt/CMakeFiles/gwt_build.dir/all' failed
make[1]: *** [src/gwt/CMakeFiles/gwt_build.dir/all] Error 2
Makefile:149: recipe for target 'all' failed
make: *** [all] Error 2

XU4 + Ubuntu 15.10

OdroidUbuntu.png

My first impression

  • I am using Ubuntu mate 15.10 image on my 32G microSD
  • Need to switch the boot lever (next to the HDMI port) from eMMC to microSD
  • The graphical desktop is VERY sharp on my 1920x1080 Samsung lcd. But for some reason, my 9" lcd screen (1024x600) shows a black screen. Its gpu is Mali-T628 6 cores.
  • The cpu fan noise gets very annoying (see the cpu fan control below)
  • the processor (Samsung Exynos5422 Cortex™-A15 2Ghz and Cortex™-A7 Octa core CPUs) has 4 1.4GHz cores and 4 2.0GHz cores.
  • Configure my bluetooth keyboard is easy. I am using a wired mouse.
  • no need to run resize (the microSD) as it was automatically done

Ethernet

The ethernet does not work after I ran odroid utility to upgrade the kernel from 3.10.92-76 to ...

Auto log out

For example if I run luakit, I'll be logged out.

After I installed ibus-chewing, I'll be logged out when I launch 'IBus Preferences'.

USB ports and keyboard

(Odroid xu4 + Ubuntu15.10) When I plug a usb3.0 flash drive, my usb wifi keyboard seems not working anymore. It is fine if I use a usb wired keyboard. Google: odroid keyboard problem. http://forum.odroid.com/viewtopic.php?f=112&t=7641

/usr/bin/EnergyMonitor

I got the following output

$ sudo /usr/bin/EnergyMonitor
/dev/sensor_arm Open Fail 
OpenINA231 error 
IOCTL Error

The reason is XU4 has no INA231 sensor. It only exists on XU3.

Slowness

(Update based on Ubuntu 16.04): the problems happened on 15.10 are not anymore with Ubuntu 16.04:)

(Ubuntu 15.10) For some reason, the machine is getting slow.

  • when I type something, it does not respond after a few seconds (either directly or through ssh)
  • when I mount an nfs partition and try to run 'tar xz XXXX'. The extraction stops and goes:(

My conclusions: 1. Use wired keyboard 2. Use my own USB to ethernet adapter. This solve the issue that ssh connection is too slow and response is unacceptable.

Now I am now using ubuntu 14.04 instead of 15.10.

Some people have a bad luck getting a flawed power adapter (5V, 4A).

Download links

  • Ubuntu. Be sure to read the Release Note too. It teaches how to get gpu acceleration on the chromium browser.

Black screen, blue light is off

In my case, I need to unplug the HDMI cable and power first. Then apply the power (so the fan will spin and blue light will flash) and then connect the HDMI cable.

Power consumption

Full CPU+GPU load is probably about 14 watts. Full CPU load around 10 watts, assuming you're running a task that can fully use 8 CPU threads. http://forum.odroid.com/viewtopic.php?f=93&t=23301

Forum

The forum is very active!!

Chromium

Not launch - segmentation fault

The solution here works (search the keyword aworan). I did not try the updated trick for chromium 50.

chromium-browser
# [20070:20070:0702/084757:ERROR:sandbox_linux.cc(334)] InitializeSandbox() called with multiple threads in process gpu-process
# Segmentation fault

apt-cache policy chromium-browser
# chromium-browser:
#   Installed: 51.0.2704.79-0ubuntu0.15.10.1.1232
#   Candidate: 51.0.2704.79-0ubuntu0.15.10.1.1232
#   Version table:
#  *** 51.0.2704.79-0ubuntu0.15.10.1.1232 0
#         500 http://ports.ubuntu.com/ wily-security/universe armhf Packages
#         500 http://ports.ubuntu.com/ wily-updates/universe armhf Packages
#         100 /var/lib/dpkg/status
#      45.0.2454.101-0ubuntu1.1201 0
#         500 http://ports.ubuntu.com/ wily/universe armhf Packages

# remove the newest
sudo apt-get remove chromium-browser chromium-codecs-ffmpeg-extra chromium-browser-l10n
# install the older one
sudo apt-get install chromium-browser=45.0.2454.101-0ubuntu1.1201 \
  chromium-codecs-ffmpeg-extra=45.0.2454.101-0ubuntu1.1201 \
  chromium-browser-l10n=45.0.2454.101-0ubuntu1.1201
# test
chromium-browser
# block chromium updates
sudo apt-mark hold chromium-codecs-ffmpeg-extra chromium-browser chromium-browser-l10n

Chromium and youtube

The artifacts problem in the Chromium + youtube of Ubuntu 15.10 can be fixed by following the release note.

Edit /etc/chromium-browser/default

CHROMIUM_FLAGS=" --use-gl=egl --ignore-gpu-blacklist --disable-accelerated-2d-canvas --num-raster-threads=2"

We can open the web page chrome://gpu to check hardware acceleration status.

What that still works

Calibre

We need to install by apt-get. The python installation script on Calibre does not work.

mupdf

http://mupdf.com/docs/manual

  • H: fit page height to window.
  • [number] g: go to page number
  • >: go 10 pages forward
  • <: go 10 pages backward
  • +: zoom in
  • -: zoom out
  • G: Go to last page.
  • /: Start searching forward.
  • ?: Start searching backward.
  • n: Continue searching forward.
  • N: Continue searching backward.
  • w: Shrinkwrap window to fit page.
  • W: Fit page width to window.
  • H: Fit page height to window.
  • Z: Fit page size to window.

mirage, pinta

What do not work

Luakit

Not work unfortunately. I'll be logged out once I launch it.

KeePass2

Open and close by itself.

Mali gpu

$ sudo apt-cache showpkg mali-x11

First Run

# chmod +x ./firstrun
sudo /home/$USER/odroid-cpu-control/odroid-cpu-control -s -g "ondemand" -M 1.4G
sudo su - -c "echo none      > /sys/class/leds/blue\:heartbeart/trigger"

My observation is changing to ondemand governor will make cpu4-7 to keep their maximum frequency (1.4GHz in this case) instead of around 600MHz when I use the conservative governor. Temperature will raise from 43C to 46C (not constantly though).

It is also OK to omit '-M' argument to use the default maximum frequencies if we have used ondemand goveroor.

Question: how to run the script at boot?

Answer: Follow this post. Edit /etc/rc.local to add the desired commands. It looks like

echo none      > /sys/class/leds/blue\:heartbeart/trigger
sleep 60; /home/odroid/odroid-cpu-control/odroid-cpu-control -s -g "ondemand" -M 1.4G
exit 0

It seems it is not necessary to modify the file /media/boot/boot.ini.

Systemd/systemctl - an alternative boot manager

odroid@odroid:~$ ps -ef | grep system
root       366     1  0 20:25 ?        00:00:00 /lib/systemd/systemd-udevd --daemon
message+   500     1  0 20:25 ?        00:00:01 dbus-daemon --system --fork
root       533     1  0 20:25 ?        00:00:00 /lib/systemd/systemd-logind
odroid    1344  1221  0 20:25 ?        00:00:00 upstart-dbus-bridge --daemon --system --user --bus-name system
odroid    2383  1724  0 20:34 pts/6    00:00:00 grep --color=auto system

cpu heatsink

I bought a heatsink designed for Odroid C1. Though xu4 can use it, the temperature goes up to 95C!!! I then remove the sticky form and use thermal paste. The temperature goes down to 70-80. Still too high. At the end, I changed back to the original fan. The temperature is about 55C in idle.

For Raspberry Pi 3 the temperature is around 52C and can go up to 84C when all 4 cores are in work. See Raspberry Pi page.

cpu governor

  • CPU Governors According to the information there, interactive diffs from ondemand that interactive slowly drops the frequency once no longer under load while ondemand quickly scales down the frequency once the load is no longer present.
  • Android CPU governors explained
odroid@odroid:~$ grep governor /media/boot/boot.ini
# Uncomment only one line. New governor is set after 90secs after boot.
setenv governor "performance"
# setenv governor "ondemand"
# setenv governor "interactive"
# setenv governor "conservative"
# setenv governor "powersave"
setenv bootargs "${bootrootfs} ${videoconfig} smsc95xx.macaddr=${macaddr} governor=${governor} ${hdmi_phy_control}"

check the current CPU temperature

odroid@odroid:~$ cat /sys/devices/virtual/thermal/thermal_zone0/temp
56000

Add a temperature applet to the Panel

Check the post by meveric.

Create a new file with your favorite text editor and add the following lines:

#!/bin/bash
echo "`cat /sys/devices/virtual/thermal/thermal_zone0/temp | sed "s/000//"`°C"

Then go to your task bar right click it and choose the add to panel option. Choose the Command applet you should see a clock being displayed (that's the default). Right click it, select preferences and change the commandline to the file you just created. Done.

cpu temperature and cpu fan spin speed

odroid@odroid:~$ ls /sys/devices/odroid_fan.*/temp_levels
/sys/devices/odroid_fan.14/temp_levels
odroid@odroid:~$ ls /sys/devices/odroid_fan.*/fan_speeds
/sys/devices/odroid_fan.14/fan_speeds
odroid@odroid:~$ cat /sys/devices/odroid_fan.*/temp_levels
68 73 85
odroid@odroid:~$ cat /sys/devices/odroid_fan.*/fan_speeds
1 51 71 91

meaning that at 68° and 73° C, fan is rotating with moderate speed, and when temperature rises to 85°C, rotational speed increases to almost maximum.

cpu fan control

cd
git clone https://github.com/mad-ady/odroid-cpu-control.git
sudo ~/odroid-cpu-control/odroid-cpu-control -s -g "powersave" -m 600M  # fixed freq at 600MHz
# or
sudo /home/$USER/odroid-cpu-control/odroid-cpu-control -s -g "conservative" -M 1.6G # conservative governor, max freq 1.6G, less noise
sudo /home/$USER/odroid-cpu-control/odroid-cpu-control -s -g "conservative" -M 2.0G -c 4-7 # conservative governor, reset max freq.
/home/$USER/odroid-cpu-control/odroid-cpu-control -l    # current cpu freq setting
/home/$USER/odroid-cpu-control/odroid-cpu-control -l -t # temperature

Note that

$ # Original freq came with Ubuntu OS
$ sudo ./odroid-cpu-control -l
CPU0: governor performance	current 1.40GHz	min 200.00MHz [200.00MHz]	max 1.40GHz [1.40GHz] 	
CPU1: governor performance	current 1.40GHz	min 200.00MHz [200.00MHz]	max 1.40GHz [1.40GHz] 	
CPU2: governor performance	current 1.40GHz	min 200.00MHz [200.00MHz]	max 1.40GHz [1.40GHz] 	
CPU3: governor performance	current 1.40GHz	min 200.00MHz [200.00MHz]	max 1.40GHz [1.40GHz] 	
CPU4: governor performance	current 2.00GHz	min 200.00MHz [200.00MHz]	max 2.00GHz [2.00GHz] 	
CPU5: governor performance	current 2.00GHz	min 200.00MHz [200.00MHz]	max 2.00GHz [2.00GHz] 	
CPU6: governor performance	current 2.00GHz	min 200.00MHz [200.00MHz]	max 2.00GHz [2.00GHz] 	
CPU7: governor performance	current 2.00GHz	min 200.00MHz [200.00MHz]	max 2.00GHz [2.00GHz] 
$ # Use 'Conservative' governor as above
$ cpufreq-info | grep -i current | grep CPU
  current CPU frequency is 200 MHz.
  current CPU frequency is 200 MHz.
  current CPU frequency is 200 MHz.
  current CPU frequency is 200 MHz.
  current CPU frequency is 300 MHz.
  current CPU frequency is 300 MHz.
  current CPU frequency is 300 MHz.
  current CPU frequency is 300 MHz.
$ ~/odroid-cpu-control/odroid-cpu-control -l # not exactly the same as above
CPU0: governor conservative	current 300.00MHz	min 200.00MHz [200.00MHz]	max 1.20GHz [1.40GHz] 
CPU1: governor conservative	current 300.00MHz	min 200.00MHz [200.00MHz]	max 1.20GHz [1.40GHz] 
CPU2: governor conservative	current 300.00MHz	min 200.00MHz [200.00MHz]	max 1.20GHz [1.40GHz] 
CPU3: governor conservative	current 300.00MHz	min 200.00MHz [200.00MHz]	max 1.20GHz [1.40GHz] 
CPU4: governor conservative	current 600.00MHz	min 200.00MHz [200.00MHz]	max 1.20GHz [2.00GHz] 
CPU5: governor conservative	current 600.00MHz	min 200.00MHz [200.00MHz]	max 1.20GHz [2.00GHz] 
CPU6: governor conservative	current 600.00MHz	min 200.00MHz [200.00MHz]	max 1.20GHz [2.00GHz] 
CPU7: governor conservative	current 600.00MHz	min 200.00MHz [200.00MHz]	max 1.20GHz [2.00GHz] 
$ ls /sys/devices/system/cpu/
cpu0  cpu2  cpu4  cpu6  cpufreq  kernel_max  online    power    uevent
cpu1  cpu3  cpu5  cpu7  cpuidle  offline     possible  present
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors 
interactive conservative ondemand powersave performance
odroid@odroid:~$ 
watch grep \"cpu MHz\" /proc/cpuinfo
  • Google: odroid cpu governor

cpu temperature

~/odroid-cpu-control/odroid-cpu-control -l -t
# or to watch in real time (ctrl C to stop)
watch ~/odroid-cpu-control/odroid-cpu-control -l -t

Heatsink method

Xu4Heatsink.jpg

But you will meet the thermal throttling frequently. Change the governor to "Interactive" or "OnDemand" to make XU4 generate lower heat.

Screensaver

Do not turn on it. The screensaver will help to increase CPU load and therefore raise the temperature even you think the system is in idle.

Turn off/on blue light

The command is (must log in as root first, sudo does not work??)

sudo su - -c "echo heartbeat > /sys/class/leds/blue\:heartbeart/trigger"
sudo su - -c "echo none      > /sys/class/leds/blue\:heartbeart/trigger"

The commands can be put in a cron job. See this message.

Lost ethernet connection

It seems there is a hardware/software issue with many Odroid devices. Google: odroid ethernet not working. (Not a solution was found). My current solution is to use a USB-ethernet adapter.

My experience is I need to replug the microSD card. Replugging ethernet, hdmi does not help.

From time to time, the ethernet connection is lost. Normally the ifconfig should return like

odroid@odroid:~$ ifconfig
eth0      Link encap:Ethernet  HWaddr 00:1e:06:32:03:ac  
          inet addr:192.168.1.189  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::21e:6ff:fe32:3ac/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:26 errors:0 dropped:0 overruns:0 frame:0
          TX packets:67 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:3488 (3.4 KB)  TX bytes:9730 (9.7 KB)

ip6tnl0   Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          UP RUNNING NOARP  MTU:1452  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:243 errors:0 dropped:0 overruns:0 frame:0
          TX packets:243 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:22777 (22.7 KB)  TX bytes:22777 (22.7 KB)

sit0      Link encap:IPv6-in-IPv4  
          UP RUNNING NOARP  MTU:1480  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

When there is a network problem, the 'eth0' will not appear there.

Ideally, we should see something (r8152 should be detected)

odroid@odroid:~$ lsusb -t
/:  Bus 06.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 5000M
    |__ Port 1: Dev 2, If 0, Class=Vendor Specific Class, Driver=r8152, 5000M
/:  Bus 05.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 480M
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 5000M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/2p, 480M
        |__ Port 1: Dev 3, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
        |__ Port 2: Dev 4, If 0, Class=Wireless, Driver=btusb, 12M
        |__ Port 2: Dev 4, If 1, Class=Wireless, Driver=btusb, 12M
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=exynos-ohci/3p, 12M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=s5p-ehci/3p, 480M
odroid@odroid:~$ lsusb
Bus 006 Device 002: ID 0bda:8153 Realtek Semiconductor Corp. 
Bus 006 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 004: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
Bus 003 Device 003: ID 045e:00d1 Microsoft Corp. Optical Mouse with Tilt Wheel
Bus 003 Device 002: ID 05e3:0610 Genesys Logic, Inc. 4-port hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
odroid@odroid:~$ dmesg | grep -i smsc
[    0.000000] [c0] Kernel command line: console=tty1 console=ttySAC2,115200n8 root=UUID=e139ce78-9841-40fe-8823-96a304a09859 rootwait ro fsck.repair=yes net.ifnames=0 smsc95xx.macaddr=00:1e:06:61:7a:39 governor=performance hdmi_tx_amp_lvl=31 hdmi_tx_lvl_ch0=3 hdmi_tx_lvl_ch1=3 hdmi_tx_lvl_ch2=3 hdmi_tx_emp_lvl=6 hdmi_clk_amp_lvl=31 hdmi_tx_res=0 HPD=true vout=hdmi
odroid@odroid:~$ lsmod
Module                  Size  Used by
joydev                  9134  0
hidp                   13711  1
rfcomm                 33609  14
bnep                   11192  2
btusb                  16475  0
bluetooth             227857  41 bnep,hidp,btusb,rfcomm
rfkill                 13122  5 bluetooth
ina231_sensor           9040  0
spi_s3c64xx            14770  0
ppdev                   6506  0
lp                      8869  0
parport                22257  2 lp,ppdev

ethtool -s eth0 speed 100 duplex full to /etc/rc.local to force 100 MBit

RRDTool

EMMC module

I purchased a 16GB emmc module. Cannot feel improvement over microSD (testing by moving a window on the desktop).

eMMC vs SD card

http://forum.odroid.com/viewtopic.php?f=93&t=23453

USB 3.0 speed

http://forum.odroid.com/viewtopic.php?f=93&t=23000

eMMC vs SSD on UBS 3.0

eMMC shows 50MB/s and SSD shows 180 MB/s.

sync; dd if=/dev/zero of=tempfile bs=1M count=1024; sync; rm tempfile

fix date/zone

sudo dpkg-reconfigure tzdata

lightdm

The output of 'htop' command shows /usr/bin/X -core :0 -seat seat0 -auth /var/run/lightdm/root/:0 (or Xorg from 'top') consistently uses a lot of CPU power (1 core).

See the discussion of lightdm and X.org

Udoobuntu does not have this issue.

The x86 Unity desktop has /usr/bin/X :0 -audit 0 -auth /var/lib/mdm/:0.Xauth (or Xorg from 'top') running with 20% CPU (1 core).

Bluetooth keyboard

See Raspberry bluetooth keyboard. The blueman utility does not work for some reason. I have to temporarily plug in a regular/RF wireless keyboard and do some work on the command line.

# Press the 'connect' button on the bluetooth keyboard first!
$ bluetoothctl # no sudo is needed
[bluetooth] default-agent
[bluetooth] scan on
[bluetooth] pair 90:7F:61:8F:D0:38        # it will ask to enter a pin code
           # type the pin number shown on pop-up windows in the top-right corner
[bluetooth] connect 90:7F:61:8F:D0:38
[bluetooth] quit

Lock screen

Go to control panel -> Screensaver -> Uncheck 'Lock screen when screensaver is active'.

Boot from USB

ODROID XU4/XU4Q SSD Booting Guide

sudo fdisk /dev/sda # p  d  w
sudo su; cat /dev/mmcblk1 > /dev/sda
tune2fs -U random /dev/mmcblk1p2
blkid
e2fsck -yf /dev/sda2
reboot

I2C write error on boot

See XU4 tip. It is because XU4 and XU3-Lite have no energy sensor on board.

sudo nano /etc/modprobe.d/blacklist-odroid.conf
# insert a line
blacklist ina231_sensor

Boot Linux over NFS

http://odroid.com/dokuwiki/doku.php?id=en:nfsboot

/etc/apt/sources.list

$ cat /etc/apt/sources.list
deb http://ports.ubuntu.com wily restricted universe multiverse main
deb-src http://ports.ubuntu.com wily restricted universe multiverse main

deb http://ports.ubuntu.com wily-backports restricted universe multiverse main
deb-src http://ports.ubuntu.com wily-backports restricted universe multiverse main

deb http://ports.ubuntu.com wily-proposed restricted universe multiverse main
deb-src http://ports.ubuntu.com wily-proposed restricted universe multiverse main

deb http://ports.ubuntu.com wily-security restricted universe multiverse main
deb-src http://ports.ubuntu.com wily-security restricted universe multiverse main

deb http://ports.ubuntu.com wily-updates restricted universe multiverse main
deb-src http://ports.ubuntu.com wily-updates restricted universe multiverse main

And the /etc/apt/ directory

odroid@odroid:~/preprocessgui$ ls /etc/apt/
apt.conf.d     sources.list   sources.list.d  trusted.gpg~
preferences.d  sources.list~  trusted.gpg     trusted.gpg.d
odroid@odroid:~/preprocessgui$ cat /etc/apt/sources.list.d/odroid.list
deb http://deb.odroid.in/5422/ wily main
odroid@odroid:~/preprocessgui$ ls /etc/apt/sources.list.d/
odroid.list

Kodi

Ubuntu 15.10 image preloads Kodi. One cool thing is the 'Display Mode' option in the System > Settings > System > Video Output is available. So Kodi can coexist with my Ubuntu. So next time when I exit Kodi, I won't need to click Ctrl-Alt-F7 to get back to Ubuntu OS.

Note Kodi still uses certain CPU power (cpu temperature is raised several degrees).

Audio is muted

Hit '+' (no 'shift' is needed) to increase volume and un-mute Kodi.

Testing gigabit ethernet

Use iperf -The network bandwidth measurement tool.

See

Printer

Adding a networked printer 'Brother-HL-5250DN' works (Main menu -> System Tools -> Printers). I don't need to go through some hassle like in this case.

Note that though only one printer is added, when I try to print, the Print dialog shows 'BRN_EE70EF (Online)' and 'Brother-HL-5250DN-series'(default) printers. Just pick up the default.

OTG gadget

http://forum.odroid.com/viewtopic.php?f=112&t=9111

Micro USB OTG

  • ODROID C4
  • USB OTG (On-The-Go) functionality: It supports both host and device modes, allowing you to connect various USB peripherals or use the ODROID-C4 as a USB device (need an OTG adapter or cable).
  • Host Mode:
    • Connect a USB flash drive to transfer files or expand storage.
    • Attach a USB keyboard or mouse for input.
    • Connect a USB audio interface for audio input/output.
    • Use a USB webcam for video capture.
  • Device Mode:
    • Connect to a computer to transfer files or debug the device.
    • Use the device as a USB mass storage device to access its internal storage from a computer.
    • Set up the device as a USB network adapter for internet tethering.

Build R

See Build R from source.

In summary,

sudo apt-get build-dep r-base
wget https://cran.rstudio.com/src/base/R-3/R-3.2.5.tar.gz
tar xzvf R-3.2.5.tar.gz
cd R-3.2.5
./configure --enable-R-shlib
time make -j8 # 23 minutes
sudo make install

Qt

Binary

$ sudo apt-get install aptitude
$ aptitude search qt5 -F "%c %p %d %V"
$ sudo apt-get update
$ sudo apt-get install qt5-default  # 5.4.2
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  libqt5opengl5-dev qtbase5-dev
Suggested packages:
  libmysqlclient-dev libpq-dev libsqlite3-dev unixodbc-dev
The following NEW packages will be installed:
  libqt5opengl5-dev qt5-default qtbase5-dev
0 upgraded, 3 newly installed, 0 to remove and 2 not upgraded.
Need to get 831 kB/874 kB of archives.

$ dpkg -L qt5-qmake
/.
/usr
/usr/lib
/usr/lib/arm-linux-gnueabihf
/usr/lib/arm-linux-gnueabihf/qt5
...
/usr/lib/arm-linux-gnueabihf/qt5/bin
/usr/lib/arm-linux-gnueabihf/qt5/bin/qmake
...
$ dpkg -L qt5-default
/.
/usr
/usr/lib
/usr/lib/arm-linux-gnueabihf
/usr/lib/arm-linux-gnueabihf/qtchooser
/usr/share
/usr/share/doc
/usr/share/doc/qt5-default
/usr/share/doc/qt5-default/copyright
/usr/lib/arm-linux-gnueabihf/qtchooser/default.conf
/usr/share/doc/qt5-default/changelog.Debian.gz
/usr/share/doc/qt5-default/LGPL_EXCEPTION.txt
$ qmake -v
QMake version 3.0
Using Qt version 5.4.2 in /usr/lib/arm-linux-gnueabihf

Build from source

$ cat /media/odroid/toshiba/qt-5.5.1/qtbase/mkspecs/linux-g++/qmake.conf
#
# qmake configuration for linux-g++
#

MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublib

include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)

#QMAKE_INCDIR += /usr/include
#QMAKE_LIBDIR += /usr/lib

#QMAKE_INCDIR_OPENGL = /usr/include/GL
#QMAKE_LIBDIR_OPENGL = /usr/lib/arm-linux-gnueabihf/mesa
QMAKE_INCDIR_EGL        = /usr/include/EGL
QMAKE_LIBDIR_EGL        = /usr/lib/arm-linux-gnueabihf
QMAKE_INCDIR_OPENGL_ES2 = /usr/include/GLES2
QMAKE_LIBDIR_OPENGL_ES2 = /usr/lib/arm-linux-gnueabihf/
#QMAKE_INCDIR_OPENVG    = $QMAKE_INCDIR_EGL
#QMAKE_LIBDIR_OPENVG    = /usr/lib/arm-linux-gnueabihf/mali-egl

QMAKE_LIBS_EGL += -lEGL
#QMKAE_LIBS_GL  += -lGL
QMAKE_LIBS_OPENGL_ES2 += -lGLESv2 -lEGL

#QMAKE_LFLAGS += -Wl,-rpath-link,/usr/lib/arm-linux-gnueabihf

QMAKE_CFLAGS   +=  -mcpu=cortex-a15 -mfpu=neon-vfpv4 -mtune=cortex-a15.cortex-a7  -mfloat-abi=hard
QMAKE_CXXFLAGS += $$QMAKE_CFLAGS
QMAKE_CFLAGS_RELEASE   +=  -mcpu=cortex-a15 -mfpu=neon-vfpv4 -mtune=cortex-a15.cortex-a7 -mfloat-abi=hard
DISTRO_OPTS += "hard-float"
QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CXXFLAGS -O2

QT_INSTALL_PREFIX="/usr/local/Qt5.5.1/"  ## Edit this if you have a preference

# Preferred eglfs backend
EGLFS_DEVICE_INTEGRATION = eglfs_linuxfb
load(qt_config)

$ sudo find /usr/lib -name libGLES*
[sudo] password for odroid: 
/usr/lib/arm-linux-gnueabihf/libGLESv1_CM.so
/usr/lib/arm-linux-gnueabihf/libhybris-egl/libGLESv2.so.2
/usr/lib/arm-linux-gnueabihf/libhybris-egl/libGLESv2.so.2.0.0
/usr/lib/arm-linux-gnueabihf/mali-egl/libGLESv1_CM.so
/usr/lib/arm-linux-gnueabihf/mali-egl/libGLESv1_CM.so.1.1
/usr/lib/arm-linux-gnueabihf/mali-egl/libGLESv2.so.2.0
/usr/lib/arm-linux-gnueabihf/mali-egl/libGLESv1_CM.so.1
/usr/lib/arm-linux-gnueabihf/mali-egl/libGLESv2.so.2
/usr/lib/arm-linux-gnueabihf/mali-egl/libGLESv2.so
/usr/lib/arm-linux-gnueabihf/mesa-egl/libGLESv1_CM.so
/usr/lib/arm-linux-gnueabihf/mesa-egl/libGLESv2.so.2
/usr/lib/arm-linux-gnueabihf/mesa-egl/libGLESv2.so
/usr/lib/arm-linux-gnueabihf/libGLESv2.so

At the end of running .configure, I got

Creating qmake...
Done.
Running configuration tests...
The OpenGL ES 2.0 functionality test failed!
 You might need to modify the include and library search paths by editing
 QMAKE_INCDIR_OPENGL_ES2, QMAKE_LIBDIR_OPENGL_ES2 and QMAKE_LIBS_OPENGL_ES2 in
 /media/odroid/toshiba/qt-5.5.1/qtbase/mkspecs/linux-g++.
./configure \
-opensource \
-developer-build \
-confirm-license \
-prefix /usr/local/qt5.4 \
-skip qtwebkit \
-no-gtkstyle \
-nomake examples \
-nomake tests \
-opengl es2 
make -j 7
sudo make install

Unfortunately I got an error

Running configuration tests...
The OpenGL ES 2.0 functionality test failed!
 You might need to modify the include and library search paths by editing
 QMAKE_INCDIR_OPENGL_ES2, QMAKE_LIBDIR_OPENGL_ES2 and QMAKE_LIBS_OPENGL_ES2 in
 /home/odroid/qt-everywhere-opensource-src-5.4.2/qtbase/mkspecs/linux-g++.

Qt Creator

When I use sudo apt-get install qtcreator, everything looks fine. But I couldn't open it.

odroid@odroid:~$ sudo apt-get install qtcreator
The following extra packages will be installed:
  libbotan-1.10-1 libqbscore1 libqbsqtprofilesetup1 libqt5clucene5
  libqt5concurrent5 libqt5designer5 libqt5designercomponents5 libqt5help5
  libqt5quicktest5 libqt5quickwidgets5 libqt5script5 libqt5test5
  qml-module-qtquick-controls qml-module-qtquick-layouts
  qml-module-qtquick-window2 qml-module-qtquick2 qmlscene qt5-qmake
  qtbase5-dev-tools qtchooser qtcreator-data qtcreator-doc
  qtdeclarative5-dev-tools qttools5-dev-tools qtxmlpatterns5-dev-tools
Suggested packages:
  cmake kdelibs5-data subversion ubuntu-sdk qt5-doc
The following NEW packages will be installed:
  libbotan-1.10-1 libqbscore1 libqbsqtprofilesetup1 libqt5clucene5
  libqt5concurrent5 libqt5designer5 libqt5designercomponents5 libqt5help5
  libqt5quicktest5 libqt5quickwidgets5 libqt5script5 libqt5test5
  qml-module-qtquick-controls qml-module-qtquick-layouts
  qml-module-qtquick-window2 qml-module-qtquick2 qmlscene qt5-qmake
  qtbase5-dev-tools qtchooser qtcreator qtcreator-data qtcreator-doc
  qtdeclarative5-dev-tools qttools5-dev-tools qtxmlpatterns5-dev-tools
0 upgraded, 26 newly installed, 0 to remove and 1 not upgraded.

odroid@odroid:~$ qtcreator
No tool chain set from kit "Desktop".
No tool chain set from kit "Desktop".
Unable to find an X11 visual which matches EGL config 9
Could not initialize OpenGL for RasterGLSurface, reverting to RasterSurface.
Unable to find an X11 visual which matches EGL config 10
Could not initialize OpenGL
Aborted
odroid@odroid:~$ qtcreator -version

Qt Creator 3.5.0 based on Qt 5.4.2

A solution is

odroid@odroid:~$ qtcreator -noload Welcome

Then Qt Creator will pop up even the 'Unable to find an X11 visual which matches EGL' message still appeared.

qt directories

$ ls -l /usr/lib/arm-linux-gnueabihf/
...
drwxr-xr-x  4 root root     4096 Jan 31 15:31 qt4
drwxr-xr-x  7 root root     4096 Feb 14 10:36 qt5
drwxr-xr-x  2 root root     4096 Feb 20 18:35 qtchooser
drwxr-xr-x  3 root root     4096 Feb 14 10:37 qtcreator
drwxr-xr-x  3 root root     4096 Jan 31 15:31 qt-default
...

Create swap

Boot stages

The stages are Boot ROM -> Boot loader -> UBoot -> Linux Kernel.

USB drive not mounted

When I use sudo dmesg | tail -n 10, it shows the USB device but lsblk or sudo fdisk -l does not. I am using Linux odroid 4.14.180-176 Ubuntu 18.04.5 (Bionic).

Reboot has fixed the problem. Now lsblk or sudo fdisk -l or ls /dev/sd* shows sda is detected. Assume the usb drive has been formatted as ext fs, I can mount it before I can use it. Note: the usb drive is found on /dev/sda (raw device) rather than /dev/sda1 (partition). Differences between /dev/sda and /dev/sda1

sudo mount /dev/sda /mnt

On my another ext usb drive, it has ntfs and ext3 partitions. For this one, I'll do

sudo apt-get install ntfs-3g

sudo mkdir /mnt/ntfs
sudo mkdir /mnt/ext
sudo mount -t ntfs-3g /dev/sda1 /mnt/ntfs
sudo mount /dev/sda2 /mnt/ext

I should try Ubuntu focal fossa server/desktop with kernel 5.4.y from Armbian OS.

Run from USB drive/Move Odroid rootfs filesystem to USB

We still need to boot from microSD or eMMC.

To run from USB drive,

  1. install os on microSD
  2. clone the rootfs to your hard disk or USB drive
  3. change the rootfs UUID located in /boot/boot.ini to match the new one from your root device.

Then all you need is reboot.

odroid@odroid:~$ cat /media/boot/boot.ini | grep UUID
setenv bootrootfs "console=tty1 console=ttySAC2,115200n8 root=UUID=e139ce78-9841-40fe-8823-96a304a09859 rootwait ro fsck.repair=yes net.ifnames=0 "

# Find UUID  https://help.ubuntu.com/community/UsingUUID
odroid@odroid:~$ sudo blkid
/dev/mmcblk0p1: SEC_TYPE="msdos" LABEL="boot" UUID="5F78-D927" TYPE="vfat" PARTUUID="0008aae4-01"
/dev/mmcblk0p2: LABEL="rootfs" UUID="e139ce78-9841-40fe-8823-96a304a09859" TYPE="ext4" PARTUUID="0008aae4-02"
/dev/mmcblk0: PTUUID="0008aae4" PTTYPE="dos"

odroid@odroid:~$ ls -l /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root 15 Feb 23 19:26 5F78-D927 -> ../../mmcblk0p1
lrwxrwxrwx 1 root root 15 Feb 23 19:26 e139ce78-9841-40fe-8823-96a304a09859 -> ../../mmcblk0p2

odroid@odroid:~$ ls -l /media/boot
total 8086
-rwxr-xr-x 1 root root    8563 Dec 20 09:20 boot.ini
-rwxr-xr-x 1 root root   50908 Feb 22 21:25 exynos5422-odroidxu3.dtb
-rwxr-xr-x 1 root root 4907768 Feb 22 21:26 uInitrd
-rwxr-xr-x 1 root root 3308224 Feb 22 21:26 zImage

odroid@odroid:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            743M     0  743M   0% /dev
tmpfs           200M   12M  189M   6% /run
/dev/mmcblk0p2   30G  5.7G   24G  20% /
tmpfs           996M   80K  996M   1% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           996M     0  996M   0% /sys/fs/cgroup
/dev/mmcblk0p1  128M  7.9M  120M   7% /media/boot
cgmfs           100K     0  100K   0% /run/cgmanager/fs
tmpfs           200M   24K  200M   1% /run/user/1000

Move Odroid filesystem to SSD

Remote Desktop Connection

NoMachine

My server's LCD monitor has a maximum resolution of 1366x768 while my Odroid's monitor has 1920x1080 resolution.

When I use NoMachine to connect to my server, I can change the display resolution (move mouse to the top right corner of Ubuntu; the same position as the top-right (system setting) icon). It will show a paper flip animation. Click the animation and then 'Display' -> 'Change Settings'.

Unfortunately when I check 'Use Customize Resolution' option and set it to 1280x1024 it does not work (still even I restart the connection.

The reason is there is no such resolution in my server (check by xrandr). The solution is to add a new resolution; see this post and ubuntu's wiki. After that change just disconnect the remote and reconnect it again.

$ xrandr
Screen 0: minimum 320 x 200, current 1366 x 768, maximum 8192 x 8192
VGA-0 connected 1366x768+0+0 (normal left inverted right x axis y axis) 344mm x 193mm
   1366x768       59.8*+
   1280x800       59.8  
   1280x720       60.0  
   1024x768       75.1     70.1     66.0     60.0  
   832x624        74.6  
   800x600        72.2     75.0     60.3     56.2  
   640x480        72.8     75.0     66.7     60.0  
   720x400        70.1  
$ # run gtf or cvt to get the Modeline for the resolution we want
$ xrandr cvt 1440 900 59.9
$ # the values on the next line will depend on the output from above
$ xrandr --newmode "1440x900_59.90"  106.29  1440 1520 1672 1904  900 901 904 932  -HSync +Vsync
$ xrandr --addmode VGA-0 1440x900_59.90
$ xrandr
Screen 0: minimum 320 x 200, current 1366 x 768, maximum 8192 x 8192
VGA-0 connected 1366x768+0+0 (normal left inverted right x axis y axis) 344mm x 193mm
   1366x768       59.8*+
   1280x800       59.8  
   1280x720       60.0  
   1024x768       75.1     70.1     66.0     60.0  
   832x624        74.6  
   800x600        72.2     75.0     60.3     56.2  
   640x480        72.8     75.0     66.7     60.0  
   720x400        70.1  
   1440x900_59.90   59.9  
$ # More aggressive, 1024 is a little to high, the client needs to autohide taskbar
$ xrandr cvt 1280x1024 60
$ xrandr --newmode "1280x1024_60.00"  108.88  1280 1360 1496 1712  1024 1025 1028 1060  -HSync +Vsync
$ xrandr --addmode VGA-0 1280x1024_60.00

Note that I need to check the 2nd icon 'Resize remote machine' in 'Display' settings.

Now NoMachine window has a good size; about 2 inches left on both sides and 1 inch left on the bottom of my LCD monitor.

Benchmark

odroid@odroid:~$ sysbench --num-threads=1 --test=cpu --cpu-max-prime=20000 --validate run
sysbench 0.4.12:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1
Additional request validation enabled.


Doing CPU performance benchmark

Threads started!
Done.

Maximum prime number checked in CPU test: 20000


Test execution summary:
    total time:                          372.6624s
    total number of events:              10000
    total time taken by event execution: 372.6445
    per-request statistics:
         min:                                 37.02ms
         avg:                                 37.26ms
         max:                                151.63ms
         approx.  95 percentile:              37.39ms

Threads fairness:
    events (avg/stddev):           10000.0000/0.00
    execution time (avg/stddev):   372.6445/0.00

Note that cpu governor and speed have been modified (to reduce the cpu fan) when I ran the test

odroid@odroid:~$ ~/odroid-cpu-control/odroid-cpu-control -l
CPU0: governor conservative     current 300.00MHz       min 200.00MHz [200.00MHz]max 1.20GHz [1.40GHz]
CPU1: governor conservative     current 300.00MHz       min 200.00MHz [200.00MHz]max 1.20GHz [1.40GHz]
CPU2: governor conservative     current 300.00MHz       min 200.00MHz [200.00MHz]max 1.20GHz [1.40GHz]
CPU3: governor conservative     current 300.00MHz       min 200.00MHz [200.00MHz]max 1.20GHz [1.40GHz]
CPU4: governor conservative     current 400.00MHz       min 200.00MHz [200.00MHz]max 1.20GHz [2.00GHz]
CPU5: governor conservative     current 400.00MHz       min 200.00MHz [200.00MHz]max 1.20GHz [2.00GHz]
CPU6: governor conservative     current 400.00MHz       min 200.00MHz [200.00MHz]max 1.20GHz [2.00GHz]
CPU7: governor conservative     current 400.00MHz       min 200.00MHz [200.00MHz]max 1.20GHz [2.00GHz]

Odroid-HC4

Other distributions

Android/Lineage

Android 7.1.2

I am able to install Antutu, Fain TV apps on Odroid XU4. Apr 14, 2018.

Ubuntu 14.04.01

This is the Ubuntu version used in the demonstration video (Web Browsing and XMBC on Linux) where the LXTerminal can be dragged freely without too much delay. We can watch youtube on Chromium.

Note that the disk space is not extended by default. So don't hurry to run sudo apt-get update and then update all packages.

odroid@odroid:~$ uname -a
Linux odroid 3.10.69 #1 SMP PREEMPT Thu Feb 12 15:22:14 BRST 2015 armv7l armv7l armv7l GNU/Linux

Sharing ethernet internet through wifi

Now

  1. right click the network applet on the Odroid desktop and click 'Enable Wi-Fi'
  2. left click the network applet and choose 'Create New Wi-Fi Network...'
  3. Select 'Odroid' (the connection name you just created) for the connection and the 'Create' button

Now the other devices can use wifi to have an internet access through the wifi hotspot (Odroid).

Ubuntu 18.04

https://wiki.odroid.com/odroid-xu4/os_images/linux/ubuntu_4.14/ubuntu_4.14

I installed the minimal bare OS version. It only uses 84 MB memory. After I install software for mediawiki, it uses 377 MB now.

Minimal Debian Jessie

Also known as Odroid GameStation Turbo or OGST.

Luckily, the gigabit network works out of box. I install LXDE desktop by following here. (Update: the gigabit is unstable. I have to go back to use my usb-ethernet adapter)

The default browser in Debian Jessie (8.4) is Iceweasel which looks very similar to Firefox.

The initial username/password for the minimal debian is root/odroid.

The uSD card has 2 partitions (boot in fat16 and GameStationTurbo in ext4).

Debian is a little different from Ubuntu. For example,

  • sudo does not work at first. See here to add new users to /etc/sudoers file. nano /etc/sudoers
    yourusernamehere  ALL=(ALL:ALL) ALL
    
  • I need to use 'sudo ifconfig' instead of 'ifconfig'
  • change the hostname from odroid-jessie to odroid.
  • Run apt-get dist-upgrade to fix kodi cannot launch problem.

And again, the following commands need to be run when we reboot the computer (to take care of the cpu fan and blue led, just my opinion):

sudo ~/odroid-cpu-control/odroid-cpu-control -s -g "conservative" -M 1.4G 
sudo su - -c "echo none > /sys/class/leds/blue\:heartbeart/trigger"

Xu4 + Debian

Too bad the gigabit network adapter still does not work stable. I have to use my own usb-ethernet adapter.

Odroid Magazine

Running Linux programs under Android

A guide to Linux chroot. Jan 2014

IO ports on U3

You can use any generic C/C++ or Python libraries to access the GPIOs in your program. Firma can be used to make an interactive interface between U3 and ATmega328P. Jan 2014.

Playing youtube on Linux

Jan 2014

Use as a Wifi router

by using hostapd. Feb 2014.

IO/O Shield access & Arduino

Feb 2014

Game emulator

Feb 2014

From least powerful to most powerful: GB < GBC < NES < SMS < GAMEGEAR < GENESIS < SNES < GBA < PSI < PSP

ODROID N2+ The New Emulation King? Odroid N2 Plus Emulation Test

Communicate Odroid with PC via USB

The following 3 functions may be used simulaneously

  • Emulate a mass storage device
  • Emulate a serial link
  • Emulate a ethernet link - the speed can be faster than 100Mbps

Feb 2014

Sensors and Odroid xu

Mar 2014

Portable Linux tablet

Apr 2014

Build Android from source

Apr 2014

Build Ubuntu from scratch

Cross compile. Apr 2014

Install oracle JDK version 8

Apr 2014

Monitor your Linux with NMON

sudo apt-get install nmon
nmon -f -s 30 -c 120  # ~/<hostname>_date_time.nmon will be created

May 2014

Introduction to Odroid-show

Using bash scripts to show texts or images. May 2014

Sort by file size

find . -type f -exec ls -s {} \; | sort -n -r | head -5

Find fils that are larger than 100MB

find - -size +100M

Petitboot

  • Petitboot is a platform-independent bootloader based on the Linux kexec warm reboot mechanism. It supports loading kernel, initrd, and device tree files from any Linux mountable filesystem, plus can it can load files from the network using FTP, SFTP, TFTP, NFS, HTTP, and HTTPS protocols
  • OS Installation using Petitboot and USB OTG. Odroid N2, C4 support petitboot.

Dual boot Android and Ubuntu

  1. Modify the Android source code for the MTP.
  2. Copy the Xubuntu root file system
    1. Modify the odroid-config script
    2. Check the u-boot version
  3. Generate a new partition table
  4. Format the partitions
  5. Install the Ubuntu rootfs
    1. Replace UUID in boot.scr
  6. Install the Android system files
  7. Using the prebuilt image
  8. Switching between Android and Ubuntu

May 2014

Pipe viewer and dd

See the progress of your operation.

sudo apt-get install pv
dd if=/dev/sdX bs=4M | pv | dd of=/dev/sdY

May 2014

Android boot process

May 2014.

Openbox

Openbox can be run by itself or within another desktop environment. The main focus of Openbox is speed. It comes with only a terminal and web browser, and is perfect for embedded systems. Jun 2014.

Lego case for Odroid U3

Jun 2014

Step motor and Odroid U3

using a bash script. Jun 2014

Resize Android partitions

with gparted. Jun 2014.

Explore Android img files

Jun 2014

If X11 stops working

Ctrl + Alt + F1[1-6] to switch to a resident framebuffer terminal console.

To switch back to X11, click Ctrl + Alt + F7.

Create deb files - checkinstall

Jun 2014

Using wiimote

Jun 2014

High performance computing at home

Jan 2014, Feb 2014, Mar 2014, Apr 2014, Jul 2014.

LDAP, NFS/AutoFS. With LDAP (Lightweight Active Directory Protocol) configured, we will be able to have users log into any node of the cluster with the same credentials and permissions whcih, when combined with NFS/AutoFS, will permit us to configure network mounted home directories and shares, creating a uniform user experience when connecting to any node in our cluster.

Using Xbox 360 controllers with Android

Jul 2014.

Control your bandwidth

Jul 2014.

sudo apt-get install nload

Deny some users to access your machine via SSH

Jul 2014.

OS: GameStation Turbo

which is a Linux frontend for both games and media playback.

Jul 2014.

Portable solar computing

Jul 2014

Odroid weather board + Qt application

Odroid-show + PC/Odroid host. Jul 2014

Building native Android applications with RED

Jul 2014

Remote Desktop Connection

using x11vnc server. If we also want to use Microsoft RDP to access, you will need to also install the xrd service.

Jul 2014.

Robotic Operating System

Jul 2014.

Mupen64 and Retroarch

Pocket rocket and couch potato. Aug 2014

ODROID-VU 9 inch 1280x800 touchscreen lcd

for android, linux and windows. Aug 2014

Home web server

using lighttpd & nginx. Aug 2014

Youtube player alternative

Tampermonkey. Aug 2014

Linux kernel compilation

The article provides details on starting with natively building a kernel using only the odroid itself. It does not addres cross-compiling.

Aug 2014

All about emmc modules

Aug 2014

Fix android overscan

Aug 2014.

ODROID-W

a miniature raspberry pi compatible wearable computer. A diy smartwatch was used as an example. It can run a full raspbian desktop environment on its own. Qt 4 and applications were used to display he clock and sms/mail/call notification.

Aug 2014

Mouting sd card as extra storage when booting from emmc

instead of a USB drive.

Aug 2014

Android development using the linux kernel

Aug 2014

Pepperflash chrome plugin

Aug 2014

Robot

Sep 2014

Wicd - network manager

Sep 2014

Freedomotic - home automation

Sep 2014

Bash script

  • do something every time the os boots
  • do math and concatenate strings
  • accept arguments
  • run a loop
  • launch a bunch of child processes with different arguments

Sep 2014.

Linux Gaming

Sep 2014

Conky

Oct 2014

I2C connection between U3 and Arduino module

Oct 2014.

KVM

Really, with 1GB memory! Nov 2014.

Node.js

Nov 2014.

Odroid C1 vs Raspberry Pi B+

Including an introduction to C1. Dec 2014.

Manage your software packages with automatic updates using apt-get

Kernel updates using apt-get.

Jan 2015.

ownCloud

Jan 2015.

X86 emulation on ARM

Eltechs ExaGear desktop is a virtual machine that implements a software-based x86 Linux container on ARM and allows you to run Intel x86 applications directly.

Feb 2015

Remote Desktop

Using Guacamole. All you need is a web browser with HTML5 support since no plugin or client-side software is required. Guacamole supports VNC, SSH and RDP.

Feb 2015.

Docker on ARMv7

Jan, Feb and March 2015.

Android Kitkat and Odroid C1

March 2015.

Android Development

Dissecting and modifying the APK file

Sep 2014, March 2015.

Installing Linux on an external USB drive

Mar 2014 & April 2015 issue. The boot partition is required to reside on a microSD card or emmc module. However, the root partition can be moved to a USB drive.

GPIO shutdown

April 2015 issue.

Triple boot Odroid C1

Pack Ubuntu, Android and Openelec.

April 2015 issue.

Dashing

May 2015 issue.

USB GPS and OBDII to track vehicles

June 2015.

Nintendo 64 emulation

Jun 2015.

3.2" touchscreen driver installation

Jun 2015.

Karaoke

Jun 2015

Popcorn time

Popcorn Time uses sequential downloading to play copies of films listed by the website yts.to (YIFY). Jul 2015.

PS3 controller

Aug 2015

Building Android Kitkat on Odroid C1

Aug 2015

Stepmania

Dancing entertainment. Aug 2015

Netflix under Linux + Odroid C1

Chromium is used. Sep 2015

Android Debian

Sep 2015

Qt5

Sep 2015

ownCloud

Oct 2015.

apt-get

  • Kernel update
  • Package list

Oct 2015

Zygote and Android development

Oct 2015

Seafile

A cloud service that allows you to create and share a private cloud library of files with friends or colleagues. Files get synced for all users. Oct 2015.

Docker

Oct 2015

Get more out of U-boot

It include boot rootfs from different partition or USB drive. Nov 2015

Logical volume management

Sep 2015, Nov 2015

Linux Gaming using GLshim, OpenGL

ODroid devices do not support OpenGL but only OpenGL ES, which is an optimized subset of OpenGL designed for embedded systems.

GLshim is a OpenGL to OpenGL ES wrapper, which means it's possible to translate certain OpenGL functions into OpenGL ES functions. Nov 2015

http://forum.odroid.com/viewtopic.php?f=95&t=13424

LFTP and CRON

LFTP allows segmented & parallel downloads. Nov 2015

Cloudshell home server

Oct 2015, Nov 2015

RuneAudio music player

  • LXDE auto-login
  • Setup kiosk
  • Auto-start Chromium
  • Remote control is used.

Nov 2015

ODroid-VU7 800x480 multi-touch screen for C1+

boot.ini file needs to be configured to support 800x480 resolution and DVI output mode. Nov 2015