<<

Ubuntu 14.04 Trusty Tahr Is Here • Peek Inside Android Source Code

Year One Issue #3 Mar 2014

ODROIDMagazine Gaming on the ODROID

Making Money with ODROID Web Development Set up Keep your Boot a Linux a HPC kernels up Distro from an Head Node to date USB Drive

EDITORIAL

e’ve had an exciting first two months here at ODROID Magazine, and it’s been a pleasure to read the many awesome submissions from our diverse W team of international authors. The articles have been well received by the community, with nearly 10,000 downloads in our first month. Now that we’ve introduced you to the $59 U3 powerhouse board, and shown you how to be the first on your block with a Giant Android tablet, we’re going to explore the fun side of Linux: its amazing GAMES. Remember those early 8- and 16-bit computer games with amazing gameplay, unique stories, and really catchy music? Arcade and console classics such as Donkey Kong, Pac- Man, Super Mario Brothers, Maniac Mansion, Mortal Kombat, and Star Wars all run great on the ODROID in stereo sound and HD graphics. Hold on to your joystick! Premiering in ODROID Magazine this month is Nanik, who is our new Android De- veloper columnist. He brings with him a deep understanding of software development, and presents us this month with an in-depth look into the Android source code. Ronaldo is another recent addition as our Android Gaming expert, with reviews, tips, and guides to the thousands of Android games available from the Play Store and other sources. Also joining the regular contributor circle is Manuel, our new Multilingual Editor, providing a full Spanish translation of each month’s issue for the benefit of our international community. We are also very proud to introduce our Proof- readers Venkat and Fabien, who review and test the magazine articles before publication from a reader’s perspective. Look for an announcement on the ODROID Magazine forum at http://forum. odroid.com for more details on the upcoming Spanish version. Welcome aboard, Nanik, Ronaldo, Manuel, Venkat and Fabien!

ODROIDMagazine

Rob Roy, Chief Editor Bo Lechnowsky, Editor Bruno Doiche, Art Editor

I am a computer programmer living I am President of Respectech, Inc., a Fetched a Lapdock Altrix to play with and working in Silicon Valley, CA, technology consultancy in Ukiah, CA, his ODROIDS so now his fiancée can USA, designing and building websites USA that I founded in 2001. From my stop sending him away from the living such as Vevo, Hi5, Dolby Laboratories background in electronics and com- room TV to watch Netflix. and Hyundai. My primary languages puter programming, I manage a team are jQuery, Angular JS and HTML5/ of technologists, plus develop custom CSS3. I also develop pre-built operat- solutions for companies ranging from ing systems, custom kernels and opti- small businesses to worldwide corpora- mized applications for the ODROID tions. ODROIDs are one of the weap- platform based on Hardkernel’s official ons in my arsenal for tackling these releases, for which I have won several projects. My favorite development Monthly Forum Awards. I own a lot of languages are Rebol and Red, both of ODROIDs, which I use for a variety of which run fabulously on ARM-based purposes, including media center, web systems like the ODROID-U2. I have server, application development work- deep experience with many unique op- station, and gaming console. erating systems.

ODROID Magazine, published monthly at http://magazine.odroid.com, is your source for all things ODROIDian. • Hard Kernel, Ltd. • 704 Anyang K-Center, Gwanyang, Dongan, Anyang, Gyeonggi, South Korea, 431-815 • Makers of the ODROID family of quad-core development boards and the world’s first ARM big.LITTLE architecture based single board computer. Join the ODROID community with members from over 135 countries, at http://forum.odroid.com, and explore the new technologies offered by Hardkernel at http://www.hardkernel.com.

ODROID MAGAZINE 3 ODROID MAGAZINE 3 TECHNICAL ARTICLE BOOTING A LINUX DISTRIBUTION FROM AN EXTERNAL USB DRIVE THE MOST POPULAR ARTICLE REQUEST FROM OUR USER FORUMS by Suriyan Ramasami

frequent contributor to the Getting the image get an understanding of where the boot ODROID community, Suriyan The popular image for the and the root file system partitions reside. A is well known for his updated ODROID U3, which is available for ODROID bootloader, which permits free download at http://odroid. booting into a Linux root file system in/-u2-u3/, will be used located on a USB or network partition. in this article to demonstrate how to /dev/mmcblk0p1 is the first VFAT He graciously shares his expertise in move the root file system to an ex- partition which hosts the boot related response to a highly requested forum ternal USB drive. The same methods files topic: how to set up an ODROID, apply to any similar ODROID distri- /dev/mmcblk0p2 is the EXT parti- particularly the U2 and U3, with a bution, including Debian, OpenSUSE, tion which is the root file system minimal boot and root file system ALARM, and Ubuntu. partitions, so that all other operating Although some flavors of Linux The boot partition and the root file system files can be accessed from an may contain simpler tools to keep the system both reside on the SD card, as external USB hard drive. root file system on a separate drive, the indicated by the letters “mmc” in the de- approach shown here uses common vice name. The Need for an tools that are present in most (if not eMMC or SD card all) distributions. Exploring the boot Although the root file system can partition be stored on a network or USB drive, Gathering an eMMC or SD card is required to the Equipment store the boot loader related files. The Choose any ODROID from the X, U ODROID hardware always looks for or XU series along with a pre-flashed SD the boot loader, known as u-boot, on card containing the official Hardkernel the local eMMC module or SD card. Xubuntu image linked above. Any type boot.scr: The boot loader (u- The ODROID XU has a DIP of USB drive, such as a flash or external boot) uses this file for its input variables switch which lets the user choose USB, can be attached to the ODROID boot-*.scr: Sample files which can between eMMC and SD card for the for storing the external file system. To be used as replacements for boot.scr boot media. The U2 and U3 models, begin, boot up the default image in or- zImage: Linux kernel on the other hand, always tries to boot der to access the files involved in the uInitrd: initial ramdisk used by the from eMMC first, if a disk is present, boot process. Linux kernel and falls back to booting from the SD card if not. System Partitions The boot loader’s job is to load zIm- Let’s look at the system partitions to age and uInitrd, then pass control to

ODROID MAGAZINE 4 TECNHICAL ARTICLE zImage along with some boot param- A better approach is to use file sys- corresponding Linux image would boot eters that are set in boot.scr. tem labels instead. To read the label of to its desktop or command prompt. an existing EXT file system, use the The following guide details the steps Looking at the boot. e2label command. involved in customizing an ODROID in scr file order to implement this ideal scenario. root@odroid:~# e2label /dev/ First, the boot loader must be modified mmcblk0p2 to support USB drives. rootfs Modifying boot.scr To change the label of an existing file The newer boot loaders, such as The root= variable is passed as sytem, the tune2fs command should be the one included with the XU and the a parameter to the Linux kernel by the used. modified U2/U3, are able to read vari- boot loader, instructing it to use the file ables from a boot.ini file as a plain text system matching the given ID. root@odroid:~# tune2fs -L file. However, the previous version of root assignments can take three “RootFS” /dev/mmcblk0p2 the Hardkernel boot loader read from forms: tune2fs 1.42.8 (20-Jun-2013) a boot.scr file instead, which is a pro- cessed text file. Therefore, the boot.scr root=UUID=... root@odroid:~# e2label /dev/ file needs an additional conversion step root=LABEL=... mmcblk0p2 when modifying it. root=/dev/ RootFS The utility mkimage is used for this purpose. The first two variations can only be The form root=LABEL=RootFS used if an init ramdisk is used along with will work as well, and is the most flexible root@odroid:~# cp /media/ the Linux kernel. The ArchLinuxArm method of identification, since the label boot/boot.scr /media/boot/ distribution does not use an init ramdisk can be easily changed using tune2fs. boot.scr.org for booting, and so the third form should root@odroid:~# strings /me- be used to ensure a that the boot loader Using the /boot/boot.scr > /media/ remains compatible with ALARM. root=LABEL=... boot/boot.txt In order to determine the UUID of parameter root@odroid:~# vi /media/ the EXT partition, use the dumpe2fs Consider the case where the ability to boot/boot.txt command. boot to different distributions is needed (Debian, Ubuntu, etc.) while using the Modify boot.txt with to match the root@odroid:~# dumpe2fs / same kernel for each of them. file shown below. Note that the first two dev/mmcblk0p2 |grep UUID dumpe2fs 1.42.8 (20-Jun- When setting up the partitions, the lines are deleted, and that the root= pa- 2013) first VFAT partition would remain un- rameter has been changed. Filesystem UUID: changed, since it simply stores the boot e139ce78-9841-40fe-8823- 96a304a09859 loader files, along with a modified boot. scr containing the entry root=RootFS. In a triple-boot system, the second EXT As shown above, the UUID listed partition could be used as the root file Convert the boot.txt to a boot.scr us- should match the root=UUID=... system for Ubuntu, and the third EXT ing the utility mkimage. parameter in boot.scr. If they don’t partition as the root file system for De- match, Linux will not be able to iden- bian. tify the root file system, and will be When using this ideal setup, switching unable to mount it. between distributions involves simply The problem with the UUID ap- changing the label of the intended parti- proach is that, if a new file system is tion to RootFS, and updating the other It would seem that if the root file created and the root file system is cop- EXT partition labels to anything except system is copied over to a partition in ied over to it, it will fail to boot up, so RootFS. After rebooting, the partition the USB drive and its file system label the UUIDs need to remain manually with the RootFS label would be recog- changed to RootFS, then a reboot would synchronized. nized as the root file system, and the subsequently select that USB partition

ODROID MAGAZINE 5 TECHNICAL ARTICLE

as the root file system. However, there storage, sd_mod, scsi_mod. They has been assigned to /dev/sda1. To are two small obstacles: are located in the current root file sys- verify the applicable device name on tem in /lib/modules: your local system, run the dmesg com- 1. The Linux kernel does not have USB /lib/modules/3.8.13.14/ker- mand and inspect the output. storage access built into the kernel nel/drivers/usb/storage/usb- storage.ko 2. The modules which enable USB stor- /lib/modules/3.8.13.14/ker- age access are not yet present in initrd. nel/drivers/scsi/sd_mod.ko Next, create an EXT file system on /lib/modules/3.8.13.14/ker- the USB drive. If, in the future, Hardkernel distri- nel/drivers/scsi/scsi_mod.ko bution images default to having USB_ root@odroid:~# mkfs.ext4 / STORAGE enabled in the kernel, or the dev/sda1 init ramdisks already contain the USB mke2fs 1.42.8 (20-Jun-2013) storage modules, the following step can Filesystem label= be skipped. Copy these over to the initrd tree and OS type: Linux update the module information by run- ( … ) Exploring ning depmod. It is essential to run dep- Writing superblocks and file- the uInitrd file mod in the initrd tree as it updates many system accounting informa- initrd is a gzip image, and uInitrd files related to loading modules. tion: done is a format recognized by the boot load- root@odroid:~# er, called u-boot. U-boot presently has a Regenerating 64 byte header, though this size can vary. uInitrd Change the label of the USB drive Use the mkimage -l uInitrd com- partition to RootFS, then mount the mand to determine the exact length. partition as /dst, as shown below. Extract the gzip image from uInitrd and gunzip it. It is a cpio archive.

The init ramdisk now contains the Preparing the source required USB storage-related modules. root file system The image file xubuntu-13.10-desk- Once it’s uncompressed, you can Select the USB top-armhf_odroidu_20140107.img will view and modify the files. The next drive as the root be used to extract the root file system. step should be performed using an EXT filesystem Because of space considerations, it was partition, instead of the VFAT partition The USB drive requires some prepa- first copied over to the USB partition where it will eventually reside. ration before storing the root file sys- created in the previous step. tem. First, changing its label to RootFS, as mentioned above. The label of the current root file system should also be changed from RootFS to RootFS.org, so To write the image file to the partition, that two EXT file systems do not end up use the utility kpartx, which may need to with the same label. be installed with the command apt-get The goal here is to update the ini- install kpartx. For ArchLinuxArm users, trd ramdisk image to include the mod- Prepare it should be built from source, located ules needed for the Linux kernel to the USB drive at http://christophe.varoqui. mount the root file system from the To avoid losing data, it is recom- free.fr/. USB storage. mended to work with a blank USB drive. A rebuild of kernel or modules isn’t Plug it into the ODROID in order to required, since all the modules, with the create a new partition. In this example, a For this Xubuntu example, loop0p1 correct versions, are already present in 12 GB partition was created using fdisk is the VFAT boot partition, and loop0p2 the current root file system. as the first partition on the drive. is the root file system that needs to be The modules required are: usb_ In these screenshots, the USB drive copied over to the USB partition.

ODROID MAGAZINE 6 TECHNICAL ARTICLE

Mounting and copying the source Reboot the root file system on an external USB root file system to the USB partition After a power cycle, the ODROID drive should use this quick checklist: will boot into the root file system lo- cated on the USB drive. If it does not, go back and check to see if any of the steps were overlooked. It may take a Changing the label of few attempts before getting everything the current root file to work together perfectly. system Use root=LABEL= in the boot.scr The current file system needs to be Verifying script. called something other than RootFS, the changes since that label will be reserved for the Once the ODROID has finished boot- Build a kernel with USB storage bootable partition. RootFS.org is a good ing, there are two things to be verified: support built in. alternative label. Did the boot.scr pass the correct root= If the kernel does not include parameter to the Linux kernel? built in USB storage support, bun- Is the USB drive really being used as dle the init ramdisk with the USB the root filesystem? storage related modules.

Cleaning up Now enjoy using your Linux in Guidelines whichever external USB disk you need. Any ODROID distribution devel- oper who wishes to facilitate storage of

Would you like to write a column for ODROID Magazine to share your knowledge and experience? The following positions are currently open, and offer an opportunity to participate in the emerging field of ARM technology with a worldwide audience of nearly 10,000 ODROID enthusiasts, and that was just in our first month! Kali/Backtrack: A column covering the basics of Kali and similar penetration testing suites. Linux Developer: Guides for setting up the development environment, basic compilation with kernel examples, and how to use the command line interface effectively.

To apply, please send an email to odroidmagazine(at)gmail.com with a description of your qualifications.

ODROID MAGAZINE 7 PLAYSTATION MEDIA SERVER USE YOUR ODROID AS A PLAYSTATION 3 MEDIA SERVER CHILL OUT IN STYLE BETWEEN GAMING SESSIONS by Bruno Doiche

this point, many ODROIDians have already put two or more Aof these amazing computers to Don’t be fooled by their misleading project good use, probably with one ODROID name! The Playstation media server will allow at the home office and at least one more your ODROID to support lots of devices. plugged into a TV set. But what if you are a single ODROID server, overcoming the insurmountable By keeping these rules in mind, I al- owner, happily using it on your home of- distance from your home office to your ways experience great movies and video fice, but also hoping to access your mul- living room. By following my guide, I’ll playback on my ODROID. timedia content from your living room? show you how to do exactly that! The ODROID’s portability is a great advantage, so you could just pack it up The right tool for the and get your setup running on your right job TV. It’s just a matter to get it plugged into the HDMI port, turning it on, and Although the setup and implementa- launching XBMC, right? tion of a PS3 Media Server is far from But what do you do if you are too rocket science, transcoding and sending lazy or busy to disconnect your USB the files over your network can some- drives, disassemble your robotics project times be problematic. So to keep things and take them all the way to the TV set working smoothly, I suggest the follow- (mine is a daunting 5 yards away)? ing rules of thumb: Go to www.ps3mediaserver.org/ Additionally, you may already have For any quad-core ODROID (X2, your TV connected to a Playstation 3 or U2, U3), you can transcode videos up to another device such as: 720p using cabled ethernet, but you may experience video stuttering if Microsoft XBOX 360 Asus O!Play you try to use wireless ether- Sony Bravia Xtreamer Google Android AC Ryan PlayOn!HD net, or upgrade the resolution Freebox HD Brite-view CinemaTube to 1080p; For any octa-core Freecom MusicPal Samsung TVs ODROID (XU, XULite) you Pioneer Kuro Philips Streamium can set the resolution up to Philips Aurea Western Digital WD TV Live 1080p using the gigabit ether- Philips Net TV XBMC Media Center The download and saving process is pretty Popcorn Hour Boxee net adapter, or use a wireless setup as described in the “XU straightforward but beware, if you download from your windows PC or your Mac, check that The answer is that you can make your Wireless Router” article in the you are really getting the Linux version! ODROID work as an incredible media Feb 2014 issue of ODROID magazine.

ODROID MAGAZINE 8 PLAYSTATION MEDIA SERVER

The default configurations on the ODROID Linux- based builds is the lxcbr interface. Set the default network to the cabled network interface (in this case, eth0) instead.

The IP whitelist can be used in case you need to Extract your .tar.gz file by right-clicking and limit the number of ma- selecting a folder for uncompression. chines connected to your media server. This guaran- tees that no one will be pig- gybacking on your server while you are using it.

The server defaults video sharing to use the root directory. To avoid this, change your shared folder to the location of your vid- eos and songs to save your- self from having to navigate to deep directories. Locate the PMS.sh file, and right-click it to run the script.

Whenever you change the And that’s it! Now that you have configuration options, re- your Playstation Media Server running, member to save your settings, then press the it still needs to connect to the network. “Restart Server” button. It seems obvious, Never hide the #TRANSCODE folder, since but this step is easily overlooked. this may hinder your ability to choose from Doing so is a simple matter of match- different transcoding engines on the PS3 in ing the configuration options shown in order to select specific subtitles or audio. these screenshots. The 3 possible Getting another status transcoding engine It never hurts to have options, and Scanning: the server is sometimes a specific transcoding engine probing the network to is more effective at handling a certain find a device for you, video or audio file than another. To may take a while if your Don’t forget to edit your hostname to avoid the guarantee that everything goes smooth- odroid is firewalled. sight of seeing your beloved media server go- ly, do yourself (and your ODROID) a ing by the drab name of “localhost. favor, and use your package manager to install the most recent version of Men- No deal: check your net- coder, VLC and ffmpeg. To play a me- work, firewall rules, and dia file using a different encoding engine specially if your client on the PS3, go to the #TRANSCODE device is on! folder, and select another option.

Media decoder engines galore! Although Success: hurry, get the Mencoder does the job, FFMPEG and VLC tend popcorn and the soda! to save the day.

ODROID MAGAZINE 9 ANDROID DEVELOPMENT ANDROID DEVELOPMENT INSPECTING THE ANDROID SOURCE CODE UNDER A MICROSCOPE by Nanik Tolaram

hen discussing Android de- velopment, the first thing W usually mentioned is the sheer size of the code base, and how dif- ficult it can be to navigate through the different parts of the Android source. To give you an idea of how big Android is, the current size on my local drive for the ODROID-specific version of An- droid 4.1.2 (excluding Linux kernel) is 8.6GB. When confronted with a mas- sive code base like Android, the easiest approach is to break it down Altogether, there are 23 Under the hood into smaller pieces for ease of main Android directories, Let’s start putting the source code understanding. Android is like however, this number chang- under the microscope by looking at what a gigantic jigsaw puzzle that es from version to version. each directory contains. can be packed and unpacked again as needed. Architecture abi/ (Libraries) This article presents an Details This directory stores Gabi++, a new overview of the different di- In order to understand minimalistic ++ runtime that provides rectories located inside the what role the different source the same headers as the system one, with source code, describes what code pieces play in the over- the addition of RunTime Type Informa- projects each directory con- all Android architecture, we tion (RTTI) support. The content of tains, and what kind of useful will map each role shown to this directory is useful if you are plan- things you will find in each you below to a directory. ning to write applications using the C++ area. It is surprising how The source code will be language. much can be learned and ex- associated with tracted simply by browsing this diagram by us- the source code. ing the labels that differentiate each A Bird’s Eye layer, such as Ap- View plications, Appli- Here is the top direc- cation Framework, tory structure of the Android Libraries, and An- source code. droid Runtime.

High Level Directory structure Android of Android source code Architecture

ODROID MAGAZINE 10 ANDROID DEVELOPMENT bionic/ (Libraries) and a single .iso (for Inside If you have done any C x86). Figure 3 shows /dalvik programming in Linux, then the different relevant you are familiar with the BSD sub-directories inside the C library. However, because recovery area. the BSD library is big in terms of size, Android uses cts/ (Test) a port of that library called This directory contains Bionic. Bionic is a stripped the compatibility test suites down version of the original (CTS) that allow device man- BSD C library, and supports ufacturers to test whether a x86 and ARM architecture particular device is Android instruction sets. This is the compatible. Test cases are core library upon which all written in a language called Android code depends. Junit, which provides direct access to the Android test- bootable/ (Booting) ing . To learn more Most Linux users are fa- about the CTS, please refer miliar with the GRUB boot- to the Android CTS website loader that runs at http://source.an- Inside on an x86 PC, /recovery droid.com/compatibil- and in the ity/cts-intro.html. ARM embedded world, a similar boot- tains files for different hardware. For loader, with a smaller footprint, is used. dalvik/ (Android Runtime) example, below look at the differences This directory normally stores the boot- This directory contains the complete between the files required for Nexus 7 loader code for use with your embedded source code for the Dalvik virtual ma- devices (left) and the files required for device, such as u-boot or one of its de- chine. Besides Dalvik, it also contains Hardkernel devices (right). rivatives. Android devices contain a spe- several useful tools that are related to cial partition called “recovery”, which is profiling, tracedump and many more. technically a self-contained application The Dalvik core itself inside the that includes a Linux kernel with which vm/ subdirectory. a user can performance maintenance, troubleshooting or upgrades to Android. development/ This “recovery” app is inside the subdi- This directory is of interest to An- rectory called recovery/ . droid application developers, since it contains a number of sample applica- build/ (Build) tions that can be re-used or extended. The complex nature of Android There are also several useful tools inside Inside the /device directory warrants its own build system. This di- this directory such as the Android APK rectory contains all of the scripts (, checker, an HTTP server for testing, and If you look inside Python and Makefile) that are needed to many others. App developers will want the proprietary/ build the source code from its various to take a look at apps/ and samples/ folder, you will find directories and package them together directory for example projects. a number of binary into a single set of image files. On com- drivers that are used pletion of the build process, Android is device/ (Build) specifically for the reduced to several .img files (for ARM) Android runs on hundreds of devic- ODROID platform. es, and each device has a unique configu- ration in terms of hardware and periph- erals. Device configurations and scripts that are specific to a particular device Inside hardkernel /build are stored inside this directory, and con- proprietary/

ODROID MAGAZINE 11 ANDROID DEVELOPMENT

Docs/ (Document) goldmine for application developers who This directory contains documen- wants to understand how applications tation for the Android framework and are interacting with the system services API. The files are in raw format that such as the network, phone, sms, and ac- are converted to HTML during the celerometer. The apps/ subdirectory build process. contains most of the applications, while the experimental/ directory contains external/ (Libraries) experimental applications which do not After the kernel, this directory is the get included in the final image file. most complex in terms of its source The inputmethods/ subdirectory code. It contains all the different open contains input applications such as key- source projects that Android relies on HAL layer source code directory board, mouse, touch, etc. As expected, for its existence. All applications run- the wallpapers/ subdirectory contains ning in Android, either directly or indi- libcore/ (Android Runtime) wallpaper applications and resources. rectly, use some of the libraries inside The main focus of this directory is the “external” directory. to house the core library used by the framework, as well as header files that frameworks/ (Application Framework) are used by native code when using the The “frameworks” directory is the the Java Native Interface (JNI). Other sub- heart of Android system, and contains directories contain libraries such as json, a combination of applications, SDK, luni (“lang util net io”) and dalvik Inside packages/ APIs, utilities and much more. The level system utilities (dexfile and vmruntime). of code complexity is similar to the ex- prebuilt/ (Build) ternal/ directory. If you ever need libnativehelper/ (Libraries) The content of this directory is to customize Android, or want to learn Android provide the flexibility of slightly different than prebuilts/, how the whole application stack works, writing apps in Java and interfacing with but does not exist after version 4.1.2. this is the place to look. Most of the native code with the help of the Java Na- However, it does contain the GCC 4.4.3 user space applications reside here. tive Interface (JNI). This library contains toolchain and some jar files that are used the module called libnativehelper that is during the build process. / used internally by Android to interface This is an experimental directory that between Java and the native world. The prebuilts/ (Build) was introduced in Android 4.1.2, but integration layer is a simple JNI abstrac- This directory contains the binaries does not exist after version 4.1.2. It tion tool to make integration easier. for the toolchain suite that is used to contains llvm and CLANG code, which compile Android source code to an im- is not currently being used inside the ndk/ (Libraries) age file. Due to licensing issues, the JDK Android framework. Due to the experi- The Native Development Kit is nor- is not part of this directory, but instead mental nature of this directory, it can be mally used to develop Android applica- contains the toolchain that is included safely ignored. tions using native code, and this direc- with the GNU compiler. The compiler tory contains the NDK source code. It supports both ARM and x86 architec- hardware/ (Build) includes tools needed for building NDK ture, and the main toolchain resides in This directory contains the Hard- applications, including template makefile the gcc/linux-x86/toolchain di- ware Abstraction Layer (HAL). The for building the native code on different rectory for Linux and gcc/darwin- HAL permits vendors that do not platform such as ARM, MIPS, and x86. x86/toolchain for Mac. Addition- provide open source drivers to supply A few additional tools such as make, sed ally, the directory contains the prebuilt their own pre-compiled binary drivers. and toolbox can be also found inside kernel for the qemu emulators inside the The two main directories that provide this directory. qemu-kernel directory. the Android HAL are shown in Figure 8. The rest of the directories contain packages/ (Applications) sdk/ (Tools/Build) source code for the user space HAL All of Android’s prebuilt applications The Android development kit not that is made available in the Android such as Calculator, Launcher and Set- only consist of libraries and API that repository. tings are found here. This directory is a a developer can use, but also includes

ODROID MAGAZINE 12 ANDROID DEVELOPMENT a number of tools, apps and scripts. vendor/ (Build) Further Reading This directory contains many auxiliary Vendor related hardware drivers that Regardless what you are trying to programs such as the SDK launcher, are provided as binary files are stored achieve with Android, there many educa- Traceview, and more. here. Normally, the directory contains a tional benefits from studying the source subdirectory indicating which hardware code (both native and Java) and under- system/ (Application Framework) is supported. All the necessary binary standing how the whole stack works to- This directory contains the librar- objects, including configuration files, are gether. To explore more in depth about ies and applications that form part of available in the “vendor” directory. the Android source code components, the core Android framework. Different As an Android developer, you will please visit my eLinux wiki page, which global services that are made available most likely need to learn about more details the different subdirectories in- to all applications, such as bluetooth, than one aspect of Android develop- side the Android source code: http:// volume mounting, security and vold are ment, and thus you will be looking into elinux.org/Android_Source_ located here. the various directories for support, ex- Code_Description. amples and documentation. If you like to design applications, you will mostly be interested in the packages directory to understand how the internal built-in application uses the API, or to discover if there are any hidden APIs that you can leverage. However, if you are a plat- form developer who would like to cus- tomize Android for a particular vertical Inside system/ market, then the framework and system directory will be of interest.

KEEPING YOUR ODROIDS UP TO DATE DON’T MISS THE CHANCE TO BE RUNNING THE LATEST AND GREATEST KERNEL RELEASE by Rob Roy, Chief Editor

id you know that Hardkernel $ wget builder.mdrjr.net/\ In addition to updating the kernel, publishes nightly builds of its tools/kernel-update.sh it’s also important to update the packag- Dcustom ODROID kernels, so $ sudo sh kernel-update.sh es included on your Ubuntu or Debian that you can easily keep your personal distro. system updated with the latest software Once the script has completed, re- To do so, connect to the official soft- improvements? The kernel packages are boot the ODROID so that the new ker- ware repository and download the lat- built on an ODROID-XU directly from nel may take effect. The main supported est package updates using the following the GitHub source code, and then up- operating systems include Ubuntu, Fe- command: loaded to the Hardkernel website for dora, OpenSUSE, Debian, and Ubuntu your convenience. Server, but the script can be easily modi- $ sudo apt-get update \ In order to update your image with fied for any distribution. && sudo apt-get dist-upgrade\ the latest Linux kernel, directly from The script also automatically detects && sudo apt-get autoremove the desks of the Hardkernel developers, the ODROID platform (U, X, or XU) download the kernel installation script and installs the appropriate kernel ver- Ubuntu updates are released daily, from http://builder.mdrjr. sion. Should you experience any issues and it’s a good idea to update your ker- net/tools/kernel-update.sh, with the upgrade, a backup of the kernel nel and software as often as possible. and initiate the update from any Termi- files is stored as a .tgz file in the/root/ nal window by typing: directory for quick recovery. ODROID MAGAZINE 13 HPC AT HOME HIGH PERFORMANCE COMPUTING AT HOME SETTING UP AN HPC HEAD NODE by Cooper Filby and Anthony Skjellum - Runtime Computing Solutions LLC

Looks like a simple thing to do right? n the February 2014 issue of Cluster Overview Well, after reading this article, it will be ODROID Magazine, we started Up above, we illustrate a sample even simpler for you. I our series on efficient and inex- network connection for our ODROID pensive High Performance Comput- cluster in order to diagram how the ing achievable from the comfort of listed components will be used. In our head node should be configured to allow your own home. We began by describ- finished set up, all of our compute communication with both the compute ing the process of setting up a head- nodes will be connected to our dedi- nodes and the outside world. less cluster for running MPI-based cated cluster switch, either using on- Editing /etc/network/inter- parallel programs. In this article, we board or USB ethernet. faces, we need to set up eth0 to use detail the networking configuration The head node will use its USB eth- the home network’s DHCP, and eth2, required to set up a dedicated head ernet to connect to the cluster switch, the USB Ethernet Adapter, to commu- node for our cluster using iptables and use its onboard ethernet to con- nicate with the rest of the cluster. For to configure NAT, and DNSMasq to nect to the home network switch. eth0, your entry should look as follows: configure DHCP and DNS services Compute nodes will be able to com- for our cluster. municate with the home network and auto eth0 What you’ll need for this article: outside world through the head node. iface eth0 inet dhcp hwaddress ether • 2x ODROIDs - in our examples, we Connecting 1a:e7:ed:f2:ff:73 will be using XU+Es running Ubuntu the Head Node 13.09 server. More ODROIDs can eas- As outlined above, we need to wire Where the MAC address (in this ily be included as well, to create a big- our head node to be multihomed, that case 1a:e7:ed:f2:ff:73) can be of ger cluster. is, connected to two networks, the home your choosing. For eth2, we will want network and our cluster network. On to designate its static networking in- • 1x Ethernet Switch (preferably Giga- the node you wish to use as your head formation, since it will be hosting a bit Ethernet, also called 1000-BaseT) node (in this case the ODROID XU+E our DHCP and DNS service for the we have named odroid-server0 as in part rest of our cluster. The exact infor- • 3x Ethernet Cables (plus 1 cable for 1 of our series), connect the onboard mation we use may vary by user, but each additional ODROID) ethernet device to your home network, for the purposes of this article we’re and then connect the USB ethernet going to assume that our cluster net- • 1x USB Gigabit Ethernet Adapter dongle to the switch for your cluster. work is 192.168.128.0 through (ideally 1 for each ODROID) Both of our network interfaces on our 192.168.128.24.

ODROID MAGAZINE 14 HPC AT HOME

Thus, we will configure eth2 as follows: other hosts on the private network on iptables with sudo apt-get install which they’re defined. Furthermore, iptables and run three commands to auto eth2 hosts on a private network are hidden setup NAT on the head node: iface eth2 inet static from the rest of the world, as external address 192.168.128.254 hosts have no direct way to send traffic $ sudo iptables -t nat -A netmask 255.255.255.0 to a host without a public IP. So, the POSTROUTING -o eth0 \ question becomes this: if private net- -j MASQUERADE Once we run sudo service network- work IP’s are for internal traffic only, ing restart, eth0 and eth2 will be config- how can home networks communicate $ sudo iptables -A FORWARD ured to connect and communicate with with the rest of the world? The answer -i eth0 -o eth2 -m state our two separate networks; eth0 will be is Network Address Translation (NAT). --state RELATED,ESTABLISHED assigned an IP address from your home WIth NAT, your home router will “vir- -j ACCEPT router, while eth2 will get the IP speci- tualize” the Source IP address on your fied in /etc/network/interfaces outgoing packet with that of your Public $ sudo iptables -A FORWARD (which is 192.168.128.254 in this ex- IP (like the one assigned by your ISP), -i eth2 -o eth0 -j ACCEPT ample). Next, we will configure /etc/ allowing remote hosts to respond to the hosts with our static IP as follows: request of an internal machine. In the These commands may look a bit context of our cluster, we will create a confusing, but fortunately we can 127.0.0.1 localhost new private network that will allow us describe what they’re doing without 192.168.128.254 odroid-serv- to further isolate cluster traffic from our much difficulty. In essence, we’re en- er0.ocluster odroid-server0 home network, and use the head node to abling NAT and telling the head node gain access to our compute nodes. to forward all traffic coming to eth2 Where ocluster is the chosen The translation that happens in (the internal network) through eth0, name of our cluster domain and your router on the way out (private to and to allow external traffic to pass odroid-server0 is the chosen name public) and on the way in (public to to internal network if it’s part of an of our head node. You can pick a private) is the main feature of NAT. established connection. As of now, different hostname for your head One public IP address belonging to these settings are temporary, and will node as long as you update /etc/ your router can practically manage be cleared upon reboot of the head hosts accordingly. thousands of private IPs using the node unless we explicitly save them standard protocol. and set them to load on boot. Configuring NAT With NAT in mind, we will need to Unfortunately, testing these settings A good next networking question set up our head node for NAT by en- without a DNSMasq service setup re- to ask is this: What is Network Address abling IP forwarding and configuring the quires a bit more work, such as using Translation (NAT), and why is it impor- firewall with iptables. In this instance, a machine with a GUI and manually tant to our cluster? When it comes un- we are going to use eth0 for our external assigning an IP address and routing derstanding NAT, it’s essential to know network, and eth2 (implemented using rules to test external communication. how communication occurs between the USB dongle) to communicate with Instead, we’re going to push forward networks and hosts, and the two main the internal network to allow fast com- bravely and configure these settings to types of IP addresses: public and pri- munication between nodes. First, we save and load on reboot, then go about vate. Public IP addresses are assigned by will need to edit /etc/sysctl.conf, configuring DNSMasq so we can test a central authority and delegated to you, and remove the # from the line contain- everything at once. such as by your Internet Service Pro- ing net.ipv4.ip_forward = 1 (and To save the current firewall rules, vider (ISP). They can be used to send make sure it equals 1 and not 0). we can run sudo iptables-save > traffic externally between networks or To enable this setting, we can then iptables.up.rules ; sudo mv hosts with a public IP on the Internet. run sudo sysctl -p /etc/sy- iptables.up.rules /etc/. Alter- On the other hand, private IP addresses sctl.conf to apply our changes. Al- natively, if you’re running as root, or are for internal usage within a local area ternatively, if you just want to test this have invoked sudo -i, you can simply network (such as your home network). setting without applying it permanently, run sudo iptables-save > /etc/ Private IP addresses don’t make you can run sudo sysctl -w net. iptables.up.rules. Finally, we’ll sense on the public Internet; they can ipv4.ip_forward=1. With IP Forward- need to create a startup script to load only be directly used to send traffic to ing enabled, we now just need to install our iptables rules on boot by editing /

ODROID MAGAZINE 15 HPC AT HOME

etc/network/if-pre-up.d/ipt- as this should make it easier for us to etc/hosts file on each node to in- ables, and writing the following lines make changes later on since all our set- clude the IP addresses and hostnames to it: tings will be in one place. For our clus- of all the nodes on the cluster. While ter, we added the following lines: this approach can be simpler in some #!/bin/bash regards, it is much less suitable for a /sbin/iptables-restore < / interface=eth2 larger cluster, and thus will not be dis- etc/iptables.up.rules domain=ocluster cussed here. dhcp-range=eth2,192.168.128 Finally, run sudo chmod +x / .1,192.168.128.254,255.255. Connecting etc/network/if-pre-up.d/ip- 255.0 Compute Nodes tables, so the script can be executed dhcp-host=00:13:3b:99:92:b1, If you have your compute nodes on start. 192.168.128.254 configured correctly so there are no MAC address or hostname conflicts, Configuring So what do all these configuration lines then connecting the compute nodes DNSMasq mean? Interface specifies which interface is as simple as hooking them up and Our next question: What’s DNS- the DHCP and DNS server should listen powering them on (assuming the eth- Masq, and why do we need it for our for requests on, while domain specifies ernet devices are configured to use cluster? DNSMasq provides us with a the domain of our cluster. dhcp). From the head node you should lightweight DHCP server and a DNS DHCP-range specifies the range be able to use ssh to connect to your server, both of which make our clus- of IPs that can be allocated to hosts compute nodes, e.g. ssh odroid- ter more flexible for a variable number on the specified interface, in this case server1. Once connected, verify of nodes. DHCP is the Dynamic Host IP’s between 192.168.128.1-192- DNS and NAT are working by pinging Configuration Protocol, and in essence .168.128.254 on our internal net- your head node by hostname and an it assigns IP addresses and networking work, eth2. The final line is a static external website such as google.com. information to hosts that request it. IP lease for our head node, where On the off chance you run into On the other hand, DNS is the Do- 00:13:3b:99:92:b1 is the MAC ad- configuration issues, there are a main Name System, and it allows us to dress of our head node on eth2, and few steps you can take to determine refer to individual machines by a host- 192.168.128.254 is the static IP. whether DHCP/DNS or NAT is caus- name, rather than by it’s IP address. With these changes made, we need to ing issues. You can use the tool nmap However, before we install and con- configure odroid-server0 to use itself to scan and see if your compute nodes figure dnsmasq it’s worth noting that as it’s primary DNS server so it can re- are being assigned an IP with nmap misconfiguring your DNS server or solve the names of internal hosts. -sP 192.168.128.0/24. DHCP server could cause all sorts of To do this, we can modify /etc/ If you can connect to your com- chaos on your home network. Fortu- dhcp/dhclient.conf and re- pute nodes but get a message about nately, should this happen, unplugging move the # from the line containing an unknown host when pinging other the head node should rectify these is- #prepend domain-name-servers hosts by hostname, then there is likely sues should that happen. 127.0.0.1; and run sudo dhclient a problem with DNS. If you have is- To get started, we’re going to run so the changes take effect. Finally, we sues connecting to external hosts from sudo apt-get install dnsmasq to install found that dnsmasq would not work your compute node try running ping the server, and then stop it with sudo correctly for internal nodes when in- 8.8.8.8 to see if NAT is working /etc/init.d/dnsmasq stop. To voked by its startup script unless we correctly and allowing traffic through configure DNSmasq, use a text editor modified /etc/default/dnsmasq the head node. to modify /etc/dnsmasq.conf (as and removed the # from the line, #IG- sudo). You may notice that there are a NORE_RESOLVECONF=yes, although A Simple large number of commented out lines your mileage may vary. MPI Example showing various configuration options Once this is all configured, we can Now that we’ve done all the set for DNS and DHCP. In this case, we’re run sudo /etc/init.d/dnsmasq up, here’s an example of parallel pro- going to specify a few options for our restart to start the service. Alterna- gramming using MPI. You can run head node at the end of the file, in- tively, we could go ahead and just con- a “canned MPI application,” ours is stead of uncommenting the individual figure all of the nodes of cluster with simple, with more complex programs lines throughout the file that we need, static IP addressess and modify the / coming in future installments. This

ODROID MAGAZINE 16 HPC AT HOME ANDROID GAMING

script, which we’ve called simple1. In this case, we used 4 ODROIDs sh, just reports networking and host systems to run our simple script, with FLAPPY BIRD information from each of the com- 1 cores each. We used MPICH2 with INSTALLING pute nodes. an enumerated host list, and you can THE ORIGINAL GAME install MPI on Ubuntu with sudo simple1.sh apt-get install mpich2 (installs by Ronaldo Andrade MPICH2 and dependencies). #!/bin/bash ame enthusiasts all over the A=` -n “Hello from: “` Next Steps world were surprised when H1=`hostname ` From here, we can now easily add G Vietnamese developer Dong H2=`hostname -i ` more nodes to our cluster once they Nguyen decided to remove his master- H3=`hostname -I ` have a basic networking configuration piece from the Google Play and Apple H4=`hostname -f ` in place. So where do we go from here? stores. But this does not mean you can’t get Flappy Bird anymore! echo $PMI_RANK $A name=$H1 Thus far, we have just been using the All you have to do to join the fun is to shortlist=$H2 longlist=$H3 ODROID user on each node, but this download the APK to your ODROID, is not ideal if you want to have several FQHN=$H4 install and play. It’s a free application users on your cluster. that doesn’t require any additional li- Type the following to run the Furthermore, copying files around censing, and you no longer have to be script: can be a hassle with the current setup. jealous of everyone who downloaded it Therefore, we will continue this se- before it became scarce. $ mpirun -np 4 -hosts ries by detailing an AutoFS and LDAP odroid-server1,odroid- server setup on the head node to allow http://apkandroid.blogspot.com. br/2014/02/flappy-bird-13-apk. server2,odroid- us to share files and authenticate users html server3,odroid-server4 ~/ across our cluster. scripts/simple1.sh Additionally, we will look into run- Enjoy, and don’t break your screen! ning more complex MPI jobs using C/ Which gives the following output: C++ programs we write as examples rather than the simple shell script we 0 Hello from: showed here to better demonstrate name=odroid-server1 our cluster’s capabilities. Real MPI shortlist=192.168.128.1 programs transfer data with message longlist=192.168.128.1 passing and and harness parallel pro- FQHN=odroid-server1.ocluster cessing by working together, rather than our script, which ran indepen- 1 Hello from: dently on each ODROID. name=odroid-server2 shortlist=192.168.128.2 Additional Reading longlist=192.168.128.2 The MPICH Programming Lan- FQHN=odroid-server2.ocluster guage is a high performance and widely portable implementation of the Mes- 2 Hello from: sage Passing Interface (MPI) standard. name=odroid-server3 MPICH and its derivatives form the shortlist=192.168.128.3 most widely used implementations longlist=192.168.128.3 of MPI in the world. They are used FQHN=odroid-server3.ocluster exclusively on nine of the top 10 su- percomputers (as of November 2013), 3 Hello from: including the world’s fastest supercom- puter: Tianhe-2. Learn more by visit- name=odroid-server4 Ronaldo has the bragging rights of a shortlist=192.168.128.4 ing http://www.mpich.org, which monk-like patience, and the highest longlist=192.168.128.4 offers many tutorials, publications, and score among the magazine’s team FQHN=odroid-server4.ocluster other documents for developers.

ODROID MAGAZINE 17 TECHNICAL ARTICLE HOW TO KNOW WHEN YOUR CAT IS NAPPING A GUIDE FOR ATTACHING SENSORS TO THE ODROID-XU by Marian Mihailescu

ne of the advantages of having an ODROID board as a com- Oputing platform is flexibility. It can be used as a computer, a research Of course this article made us feel tool, a game console, or a media center. digital temperature sensor and the HC- obliged to use as many cat memes as the In this article we will explore a new way SR501 Pyroelectric Infrared (PIR) mo- art editor would deem appropriate. in which the ODROID can be used: for tion sensor detector, each available for monitoring your home. More exactly, we around US$2 on eBay. sor’s Data output directly to the board is will discuss how to attach a couple of Both sensors connect using 3 pins: dangerous. The second problem is that sensors to the ODROID-XU which will Power, Ground, and Data. However, af- the 1-wire bus protocol is not enabled allow us to detect motion and to moni- ter inspecting the datasheets, we see two on the ODROID boards. tor the room temperature. major problems. The sensors need 3.3V Motion and temperature sensors are or 5V power, and output on the Data Connecting some of the easiest to connect, and have pin needs a similar voltage. The motion the sensors made the Arduino and the Raspberry Pi sensor outputs a logical value (0V = no In order to be able to connect the platforms very popular, as you can attach motion; 3.5V/5V = motion), while the sensors, we need to adjust their output them easily to the GPIO (General Pur- temperature sensor outputs the temper- to the 1.8V voltage compatible with the pose Input/Output) pins exposed on the ature using the 1-wire bus protocol. The ODROID boards. This is done using board. Of the Hardkernel products, the first problem is that all the ODROID ODROID XU series is better suited to expansion headers are 1.8V (except the connecting sensors, as it includes a 30- PWRON signal), so connecting the sen- Left: HC-SR501 PIR Motion Sensor pin expansion port that can be used for Right: DS18B20 Digital Temperature Sensor several types of connections, such as SPI (Serial Peripheral Interface) , I2C (Inter- Integrated Circuit) and GPIO. For the ODROID U series, there is an IO board accessory that can be connected to the USB port, providing similar capabilities. The sensors used for the purpose of the article, shown right, are quite com- mon and inexpensive: the DS18B20

ODROID MAGAZINE 18 TECHNICAL ARTICLE a level converter, such as the Freetron- ics Logic Level Converter Module. Al- though it is not explicitly stated that it is compatible with 1.8V, the level con- verter works by having high power and low power references that are used to provide a bidirectional interface between different devices operating at these volt- ages. The connections for the logic level converter are shown in Figure 2.

Freetronics Logic Level Converter Module Cats can sleep up to 16 hours a day, enough time with 4 IO Ports provided by ODROID, 304 is the “base” for them to dream up new ways to be cute and address of GPX1 chip, to which we add the cuddly and still hold down a full-time job desired GPX pin address (in this case, 0). To provide the low voltage ref- The second line is used to configure the pin erence or 1.8V, we connect another for logical output, while the last line will set GPIO pin of the ODROID board, the output to logical 1, resulting 1.8V on pin root@odroid:/ # cat /sys/ which we configure to always output 16. The motion sensor data output (OUT), class/gpio/gpio309/value the logical value “1”. which will be 5V when motion is detected, 1 The entire connection schematic for is connected (using the yellow wire) to the the motion sensor is depicted in Figure logic level converter High V I/O 1 pin, with 3. Pin 1 (5V0) of the ODROID board the corresponding Low V I/O 1 pin (which is connected (using the red wire) to the is transformed to 1.8V) being connected to Connect the Motion Sensor as show in this sche- motion sensor power pin (VCC) and to the board GPIO pin 13 (GPX1.5) using matic, remember that this is for the ODROID-XU the logic level converter High V IN in- the blue wire. To pin uses the address 309 put. Next, Pin 2 (GND) of the board (304+5) and is enabled using the following is connected (using the black wire) to command: the motion sensor ground pin (GND) and the logic converter GND pins. We root@odroid:/ # echo 309 > / are using the GPIO pin 16 (GPX1.0) sys/class/gpio/export to provide the reference 1.8V power to the level converter Low V IN input (the The default configuration for a GPIO green wire), using the following linux pin is “input”, and the state can be read commands: from “value”. A value of 1 indicates mo- tion, while a value of 0 indicates no mo- root@odroid:/ # echo 304 > / tion detected. The sys/class/gpio/export sensor also has two root@odroid:/ # echo out > / resistors which can sys/class/gpio/gpio304/di- configure the sen- rection sitivity (Sx) and the root@odroid:/ # echo 1 > / time which the out- sys/class/gpio/gpio304/value put is set to “1” when motion is detected - The first line is used to select GPIO from a few seconds pin 16 (GPX1.0). From the documentation to minutes (Tx).

ODROID MAGAZINE 19 TECHNICAL ARTICLE

Enabling the 1-wire form_data w1_gpio_pdata = { protocol .pin = EXYNOS5410_GPX1(6), The digital temperature sensor is .is_open_drain= 0, connected in a similar way as the mo- }; tion sensor (see Figure 4). The sensor power (VCC) is connected to the board’s static struct platform_de- 5V source (pin 1), the sensor ground vice ODROIDxu_w1_device = { (GND) to the board’s pin 2 (GND), .name = “w1-gpio”, and the sensor data (DQ) is connected .id = -1, The ODROID-XU sensors capture my cat to the level converter High V I/O 3 in- .dev.platform_data = put (using the magenta wire). The level roaming around the house at 5AM and &w1_gpio_pdata; 6:30AM converter Low V I/O 3 is connected to }; the board’s GPIO pin 17 (GPX1.6) us- If you’d like to get more detailed in- ing the cyan wire. The only difference is formation about the XU sensors, you the presence of a 4.7KOhm pull-up re- This will allow pin 17 (GPX1.6) can use the magic of Google Search, or sistor between the VCC and GND pins to be used for the 1-wire protocol if visit some of the recommended links of the temperature sensor, used to keep it is enabled in the kernel configu- listed below: the data transfer stable. ration. After the new kernel is com- piled, the sensor is acti- DS18B20 datasheet: http:// vated and the temperature datasheets.maximintegrat- (which needs to be divid- ed.com/en/ds/DS18B20.pdf ed by 1000 to get Celsius HC-SR501 datasheet: degrees) is read with the http://www.mpja.com/ following commands: download/31227sc.pdf ODROID XU connectors: root@odroid:/ # mod- http://odroid.com/dokuwi- probe w1-gpio ki/doku.php?id=en:odroid- root@odroid:/ # mod- xu#expansion_connectors probe w1-therm kernel patch to enable w1 root@odroid:/ # cd / protocol: https://github. sys/bus/w1/devices; com/hardkernel/linux/commi ls t/6ffdec4496b7fcb2504423ab3 Connect the Temperature Sensor lrwxrwxrwx 1 root root 0 827993ff341696d Feb 1 12:24 28-000004bc791d -> ../../../devices/w1_bus_ The DS18B20 is using the 1-wire master1/28-000004bc791d protocol for communication. The linux lrwxrwxrwx 1 root root 0 Feb kernel has a driver for the 1-wire proto- 1 12:24 w1_bus_master1 -> col (w1), and all that needs to be done ../../../devices/w1_bus_mas- on the ODROID devices is to specify ter1 what pin header we want to use for root@odroid:/ # cat 28- this protocol. For the ODROID XU, 000004bc791d/w1_slave the modifications are done in the file 28625 arch/arm/mach-exynos/board- ODROIDxu-ioboard.c and include This article provides a basis for con- the following lines: necting various sensors to your ODROID board. There is a small step from reading #if defined(CONFIG_W1_MAS- and visualising the sensor values, to mak- TER_GPIO) || defined(CONFIG_ ing active decisions based on them (e.g. That was definitely fun to do, I hope some- W1_MASTER_GPIO_MODULE) sending an email when motion is detect- time soon we do something with another static struct w1_gpio_plat- ed) and then home automation. pet, parrots maybe...

ODROID MAGAZINE 20 UBUNTU 14.04 FOR ODROID UBUNTU 14.04 TRUSTY TAHR NOW AVAILABLE FOR THE ODROID PLATFORM! by Rob Roy, Chief Editor

lthough Ubuntu 14.04 is not set for official release until April A 17th, 2014, ODROID owners can perform an early upgrade to Trusty Tahr using the “update-manager” appli- cation. By synchronizing your OS ver- sion with the latest release, you can keep your favorite Ubuntu im- What does the Tahr say? “Dude, if you have age running indefinitely, without needing early adopter blood, go and upgrade!” to reinstall the entire grade, your system will ask for a reboot. whenever a new version is announced. Before doing so, it’s important to replace After the ODROID has rebooted, ODROID computers that are already the default video configuration file, so verify that your new operating system running an Ubuntu 13.04 or 13.10 image that the ODROID video settings in / is installed by typing the following com- only need to enter a few commands in etc/X11/xorg.conf take effect and mand in a Terminal window: order to upgrade the Ubuntu operating produce an HDMI signal. $ lsb_release -a system to the latest 14.04 version. To If you’ve already rebooted, don’t wor- begin, close all open applications, launch ry, you can perform the patch via SSH. It’s that easy! Don’t forget to get your a Terminal window, and type: Otherwise, open a second Terminal win- new Trusty Tahr 14.04 desktop wallpaper dow and enter the next two commands to from Flickr at http://www.flickr. $ sudo apt-get update \ && sudo apt-get upgrade \ restore the ODROID video drivers: com/groups/2484760@N20/. Please && sudo apt-get dist-upgrade\ note that some earlier versions of Ubuntu && sudo apt-get autoremove \ $ cd /etc/X11/xorg.conf.d may also require the additional step of re- && sudo apt-get clean $ sudo mv exynos.conf \ compiling the Mali drivers for use with Xorg exynos.conf.original The update-manager command Server 1.14, which is detailed in the May is- applies the latest updates to the current If you’re running Lubuntu Whis- sue under the title “Recompiling Mali”. operating system, in preparation for the per, you’ll also need to move the upgrade. Confirm all questions until the desktop service into the LXDE configu- bash prompt re-appears, then type: ration file to retain desktop compatibil- ity with 14.04: $ sudo update-manager –d $ cd ~/.config/autostart Press the “Upgrade” button, click $ rm xfdesktop.desktop $ cd ~/.config/lxsession/LXDE “Continue” a few times, and go make $ echo “@xfdesktop \ Enrich your desktop experience, there is as a sandwich! After determining which --replace” >> autostart many wallpapers as you would ever need. packages will be required for the up- $ sync && sudo reboot ODROID MAGAZINE 21 LEARN REBOL LEARN REBOL WRITING MORE USEFUL PROGRAMS WITH AMAZINGLY SMALL AND EASY-TO-UNDERSTAND CODE By Nick Antonaccio and Bohdan Lechnowsky

ebol (Relative Expression the download icon (usual- Based Object Language) is a ly by the clock) and grant Rrevolutionary advancement in permissions to install. programming language emerging from Go to the apps list over thirty years of language research. and click the icon for R3/ It offers enormous flexibility and Droid. power, with a focus on intuitive R3-GUI can be loaded from the web the first installment of Learn Rebol Ubuntu: by simply using the command: load-gui last month, we discussed the motivation Open a web browser and down- Here’s the code for a little note pad behind Rebol and learned how easy it is load http://atronixengi- app that allows you to create, load, edit, to create a GUI-based program in Rebol neering.com/r3/downloads/ and save a text file. You could use it to on Android. r3-arm-view-linux-2014- store an editable to-do list, shopping list, In this installment, we’ll briefly re- 02-19-715e14 notes and reminders, or other free form visit how to install Rebol on Android, Perform the following com- data. The first two lines are stock code but we’ll also show how to install it for mands in the terminal emulator in that you’ll see at the beginning of every ODROID’s Ubuntu environment. In the directory where you download- example in this section. There’s a text addition, we’ll show how to create a ed r3 (as sudo): area widget and two buttons which load text editor with which you can write and save the notes.txt file. It’s pretty easy Rebol programs (or anything else for mv r3-arm-view-linux-2014- to follow the code, even without any 02-19-715e14 r3 that matter), calculators, bar charts, chmod +x r3 formal introduction to Rebol: data input grids, and even a Web photo ./r3 viewer – all from scratch! Not only REBOL [title: “Tiny Note will these programs run on your An- Note: Not only does Rebol 3 work Editor” file: %tiny-note- editor.r] droid or Ubuntu installation, but they great on ODROID devices, but Re- load-gui will also run on your Windows, Linux bol 3 for Linux-ARM is being de- view [ and MacOS X laptop or desktop with- veloped on ODROID devices. a: area button “Load” on-action out any modifications! Pretty simple, eh? [attempt [set-face a read/ And yes, you can run any app you string %notes.txt]] create in Rebol 3 on your Android-pow- button “Save” on-action [write %notes.txt get-face a ered phone or tablet as well! Getting to work alert “Saved”] As mentioned in the last installment, ] Installation Rebol has multiple GUI toolkits. In Re- Android: bol 3, the most popular is called R3-GUI. Open a web browser and navi- The GUI toolkit of choice needs to be gate to http://development. loaded if the program is going to make saphirion.com/experimen- use of it. This can be done dynamically tal/builds/android/ from the web (for always automatically Download r3-droid.apk using the latest version), or a copy of the (amazingly smaller than 2MB). GUI toolkit can be stored on your com- When finished, double-click on puter (for quicker access).

ODROID MAGAZINE 22 LEARN REBOL

If you don’t feel like typing in the restaurant tips. Like every other app Network access and web protocols code, you can simply enter the follow- here, it can be run instantly on any An- are built into R3 natively, to provide easy ing to load it from the web where I have droid phone, tablet, or device, or on access to all types of online data. Here’s saved a copy of the script: any desktop/laptop PC, using the exact a variation of the above program, which same code: displays a chart of live data read directly do http://respectech.com/ from a web URL (http://learnre- odroid/learnrebol/tiny-note- REBOL [title: “Tip Calcula- bol.com/chartdata). Change the editor.r tor” file: %tip-calculator.r] load-gui data at the web URL, run the app, and Likewise, the following examples view [ the bar chart displays the appropriate can be accessed the same way, but just f: field “49.99” graphic adjustments: t: field “.20” change “tiny-note-editor.r” to the file- button “Calculate” on- name specified in the REBOL header action [ REBOL [title: “Bar Chart - on each script. set-face x round/to Live Online Data” file: %bar- (to-decimal get-face f) * (1 chart-live-data.r] Now, we’ll modify it so we can specify + (to-decimal get-face t)) load-gui the file to open and the filename to save: .01 d: load http://learnrebol. ] com/chartdata g: [] foreach [m v] d [ap- REBOL [title: “Tiny Text x: title “Total: “ ] pend g reduce [‘button m v * Editor” file: %tiny-text- 10]] view g editor.r] load-gui view [ a: area filename: text file 200 button “Load” on-action [ set-face filename request-file set-face a read/ Here’s an example that displays a string to-file get-face file- block of data in graphic bar chart for- name ] mat. It consists of 2 stock header lines, 1 button “Save” on-action line of data to display, and 1 short line of [ actual code. Like every other R3 exam- write file: request- file/file to-file get-face file- ple in this text, all you need to create and name get-face a run this application on any platform is set-face filename a text editor and the tiny R3 interpreter. form probe file alert “Saved” This app, along with the R3 interpreters ] for every popular OS platform, could be ] quickly emailed to friends or co-workers, Here’s a grid display, typical of any and opened instantly on any device each app that involves managing tables of user happens to have available: text, numbers, or other data. Rows can be added or removed, cells can be edited REBOL [title: “Bar Chart” manually by the user, and the values are file: %bar-chart.r] load-gui sortable and filterable by clicking col- d: [“March” 13 “April” 9 umn headers (months are automatically “May” 21 “June” 29 “July” arranged chronologically, text alphabeti- 10] g: [] foreach [m v] d [ap- cally, numbers ordinally, etc.). Most of pend g reduce [‘button m v * this example is just the data to be dis- As you can see, Rebol’s code structure 10]] view g played. You don’t really even need to un- is pretty free-form. The Tiny Text Editor derstand anything about programming is laid out differently than the Tiny Note to follow this code: Editor, but mostly because the buttons’ on-action blocks are split into lines based REBOL [title: “List-View/ Grid display” file: %grid- on the actions being specified. display.r] Here’s a short program to calculate load-gui

ODROID MAGAZINE 23 LEARN REBOL

Conclusion “[“ mold random As you might conclude from the pre- view [ “abcd” “ “ random now/date “ text-table [“Text” 100 “ random 100 “]” ceding examples, creating powerful and “Dates” 200 “Numbers”] [ ] useful apps in Rebol 3 is about as simple [“abcd” 1-jan-2013 ] as it can get. But, it can get even easi- 44] print data [“bdac” 27-may-2013 er! In a future article in this series, we’ll 4 ] discuss using Rebol 3 to create DSLs [“dcab” 13-aug-2014 5 ] Here’s another simple web app. It (Domain-specific Languages) to make ] centers and displays all photos found programming applications as simple as ] in a given folder on a web server, along you can imagine. with the total count of all displayed im- If you want to get in on the discus- ages. A demo of this script is available sion with the Rebol/Red community, at http://learnrebol.com/pho- there are two main forums where you tos.cgi. Web apps like this can run can interact with other programmers on any computing device that has an and developers in real-time: The [Rebol R3 can be used to create full featured Internet connection, even if R3 isn’t in- and Red] chat room on StackOverflow. web applications. Here’s a variation of stalled on the device. All you need is a com, and the Rebol-powered darknet the above program, which reads data web browser (the code runs on the web “AltME Rebol4 World”. To join the created by an R3 web app running at server, and pushes out results for the AltME world, send an email to user bo http://learnrebol.com/grid- browser to see): at the domain respectech.com and/or data.cgi. Run it several times to see henrikmk at the domain gmail.com ask- the updated data generated each time by #!./rebol3 -cs ing to be invited. We are a closed com- the web app: REBOL [title: “Web Photo munity to avoid spam. Don’t be shy, the Viewer”] print {content-type: text/ Rebol/Red community is known as the REBOL [title: “List-View/ html^/} friendliest software development com- Grid display” file: %grid- folder: read %./ munity on the planet! display-live-data.r] count: 0 load-gui foreach file folder [ webdata: load to-string read foreach ext [“.jpg” http://learnrebol.com/grid- “.gif” “.png” “.bmp”] [ data.cgi if find file ext [ view [text-table [“Text” 100 print rejoin “Dates” 200 “Numbers”] (web- [{

}] count: count + 1 ] ] ] print join {
Total Images: } count

Here’s the code for the app run- ning on the web server that creates the random data displayed in the GUI grid above:

#!./rebol3 -cs REBOL [] random/ now/time print {content-type: text/ html^/} data: copy {} loop 100 [ append data rejoin [

ODROID MAGAZINE 24 LEARN RED LEARN RED THE NEXT EVOLUTION OF REBOL: PART 1 By Gregory Pecheret

Red’s logo depicts a full stack language able to cover the full development spectrum from low-level to high- level programming. Red is a full-stack language!

uestion: Which programming language similar to a C-level language no installation is required, except chmod language has ALL of the fol- suitable for device driver development, +x red-041 on systems that require this. Q lowing advantages? native library usage, and more. Red is The Red executable is both a Red com- a flexible mid to high level scripting piler and a Red interpreter, all rolled cross-platform language similar to Rebol, suitable for into one file. If you run it without any cross-compiling complete applications, user interfaces, command line options, it will launch as a open source data modeling, domain-specific lan- Red interpreter (Read Eval Print Loop). embeddable guage creation and scripting. The first time it is launched, it will com- Unicode-compliant Red’s runtime uses a hybrid approach pile the interpreter automatically. Since Lua//Rebol-inspired by compiling what can be solved statically, Red compiles its own REPL, we’ll need paradigm neutral (functional, imperative, using a just-in-time compiler for other cas- to download the Red source code from symbolic, prototype-based objects) es, and finally interpreting when none of github.com/red/red to perform full stack (machine level to Meta Domain- those approaches satisfies. this compilation. If you’re not familiar Specific Language, and everything in-be- with GitHub, go to https://github. tween) Getting Started com/red/red/tags and click the .zip simple/compact/fast/ubiquitous/portable/ We will first use the Red executable (Windows) or .tar.gz (Linux) file under flexible/green (available since version 0.4.0) to compile the most recent version (v0.4.1 as of this the Red console (available since version writing). Now, let’s compile the REPL The answer is Red! 0.3.2), and then we’ll use this console to console for ODROID: Red is a modern programming lan- learn some Red language basics. The console executable for Linux- guage that re-uses most of Rebol’s syn- Red is built on the earlier Rebol 2, which ARMhf (“Linux-ARMhf ” for hard-float tax and semantics. While Rebol is an was never ported to Linux ARM (like vs “Linux-ARMsf ” for soft-float operat- interpreted language, Red can run either Ubuntu on ODROID). The current ver- ing systems) is now available in the red- as an interpreted language, or be stati- sion of Rebol 3 has been ported to Linux master folder. Ubuntu on ODROID is cally compiled to native code. The Red ARM, but is not compatible with Red at a hard-float operating system. interpreter and compiler is written in this time. Therefore, we will need to cross- The following example illustrates both Rebol 2, so at most a Rebol 2 interpreter compile our Linux ARM programs on a Li- capabilities by calling a Red library embed- is required to compile a Red program nux, Windows or Mac OS X desktop ma- ded in Java to build a basic user interface through Red. Red also has a standalone chine until Red becomes self-hosted. through the Java AWT. This is based on the executable that can be used to interpret From the download section of code available in your Red root directory at or compile programs. Beginning with http://red-lang.org, download red/bridges/java/hello.red. version 2, the Red engine will be ported the Red executable for your favorite from Rebol 2 to Red. This will make Red desktop platform. Create a directory on Compiling Red Console on MS Windows a self-hosted language, with two stacks your system called “Red”, and place the called Red and Red/System. Red executable Red/System is the low-level com- in that directory. ponent of the Red programming lan- This will be your guage and provides Red’s runtime li- Red root directo- brary, a linker to produce executables ry. Run it straight and a low-level system programming from the file since

ODROID MAGAZINE 25 LEARN RED

Since version 0.3.3, it is possible to both compile a Red program as a native library and to embed a Red view [ library in Java thru JNI. set “AWT/Red” 4 1 200x200 button1: button [] main: function [][ label1: label “Demo AWT/ frame: java-new [java. Red” center awt.Frame “AWT/Red”] checkbox1: check “Option layout: java-new [ 1” java.awt.GridLayout textfield: field “Hello !” 4 1 ] Here you have to build hello.red as a ] library and bridge.java with a JDK. button1: java-new [ Just imagine how much more pro- To build hello.red, use the Rebol 2 ex- java.awt.Button ductive software developers could be by ecutable you downloaded earlier on one “Button” using the power of DSLs like this. The of the supported platforms and run this ] view dialect example above uses less than Rebol command from the Rebol console: label: java-new [ ¼ the amount of code than the Java ex- java.awt.Label ample it replaces, and is much more read- cd %path/to/your/red/root/ “Demo AWT/Red” able and easy to debug and change. directory label.CENTER do/args %red.r “-dlib -o ] Red’s Past %red/bridges/java/hello checkbox1: java-new [ and Future %red/bridges/java/hello.red” java.awt.Checkbox The author of Red, Nenad Rakocevic, “Option 1” first announced his intent to build the Red Then compile bridge.java using Java’s ] language on February 26th, 2011 at the Re- compiler (which you must already have textfield: java-new [ bol/Boron conference in the Netherlands. installed, and which is beyond the scope java.awt.TextField He has since been working full-time on his of this tutorial): “Hello !” endeavor. Red is still a work in progress, ] but Red foundations have been set and it javac bridge.java java-do [frame/setLayout is already possible to cross-compile and/ layout] or embed Red in Java, for example. And run it with Java (again, which java-do [frame/add la- Android is clearly a focus, and Red must already be installed): bel] is able to produce APK binaries as the java-do [frame/add but- proof of concept “eval” progam dem- Java –Djava.library.path=. ton1] onstrates (download it from http:// bridge java-do [frame/add static.red-lang.org/eval.apk). checkbox1] Red is becoming an alternative to allow To avoid potential issues, make sure java-do [frame/add tex- development of Android applications that your Java runtime and compiler matches tfield] remain independent of complicated IDEs (javac –version, java –version). java-do [frame/setSize and development environments and is ex- Since Red v0.4.1, Red features a pars- 200 200] tremely lightweight. Upcoming releases ing engine, a well-known method in Re- java-do [frame/setVis- will include simple I/O support of files, bol to write dialects (sometimes referred ible yes] full object support, Visual Interface Dia- to as DSLs – Domain-Specific Languag- lect for GUI creation, and more. es). A typical case of parse usage would events: java-new be rewrite the code shown next column To view Nenad’s recent talk on “What [events] in a more elegant way to wrap the AWT is Red” at the ReCode Conference 2013, java-do [frame/addWin- calls. This is part of the Red roadmap. visit http://www.youtube.com/ dowListener events] Using a dialect, then it could be com- watch?v=H4kMlOkN894. The talk ] pressed to something simple with the flex- was recorded with a camera programmed ibility of the following AWT examples: and developed using Red and Rebol 3.

ODROID MAGAZINE 26 MAKING MONEY WITH ODROIDS WEB DEVELOPMENT WITH CODE MONKEY AND QUIET GIANT: USING ODROIDS TO BUILD A SUCCESSFUL BUSINESS by Rob Roy, Chief Editor

DROID computers are ex- tremely versatile, and can be O used for nearly every type of computing application, including gam- ing, robotics, desktop publishing, web browsing, audio production, media serv- er and playback, and much more. Many ODROID owners use them exclusively for fun, learning and home entertain- ment. However, because of their pow- erful quad-core processors, generous 2GB of RAM, and low cost, you can The Code Monkey desktop’s default wallpaper also run a successful web development my ODROID-X2 and ODROID-U2, reminds you that you can do more with less. business with an ARM-based ODROID using them exclusively to produce and cluster from your home! maintain modern HTML5 websites that The high cost of a typical software are viewed by hundreds of thousands Environments (IDEs) including Blue- development computer can be prohibi- of visitors each month. Almost any fish Web Editor, which will be used in tive for home enthusiasts who wish to web software that can be written using this article to illustrate how to get a basic offer professional web development an expensive Windows- or OSX-based Wordpress site running in an inexpen- services, especially considering the cost system can also be developed using an sive sandbox environment. Both images of installing a typical Windows or OSX ODROID, including HTML5, respon- used in this article are available for free operating system, purchasing expensive sive layouts, content management, cross- download from the ODROID forums laptops, hard drives, memory, proces- browser compatible code, and web ap- at http://forum.odroid.com. sors and cooling systems, licensing a de- plications written in popular modern velopment studio package such as Visual languages such as jQuery, AngularJS, Choosing Studio, and renting a dedicated develop- PHP, Java, and JavaScript. the Development ment server from a data center. For those aspiring to augment their Environment In contrast, the startup cost of build- income with web development, the The development stack used on ing an ODROID-based development community images Code Monkey and many internet servers is known as studio is approximately 90% less ex- Quiet Giant provide a virtual 8-core sys- LAMP, which stands for Linux, Apache, pensive than a home-built x86 machine, tem that operates in parallel to provide a MySql, and PHP. Code Monkey runs while leveraging the latest free, open- sandbox web environment. A sandbox a version of Linux called Ubuntu, and source operating systems and communi- environment is where a website is proto- Quiet Giant runs a server-specific ver- ty-supported software to provide a ro- typed on a local network server before sion of Ubuntu, published by Linaro, bust platform for web developers. being published to an expensive public which is optimized for high traffic serv- I have been running a successful web internet server. Code Monkey includes er usage. Nginx is a popular alternative development business since 2012 with several great Interactive Development to Apache, and other Linux distribu-

ODROID MAGAZINE 27 MAKING MONEY WITH ODROIDS tions such as Debian are also viable for Setting up er on the client machine, a request use as the server OS. MySql is the stan- the Network for port 80 is sent to that server, dard database package for storing per- Three protocols are used to share which then notifies the web soft- sistent user data, layout and other web resources between the two machines, ware, such as Apache, that a visitor information relevant to the appearance creating a robust development envi- is requesting a copy of the site. and data storage of the site. ronment paired with powerful server Before installing WordPress, Quiet Giant comes with MySql and capabilities: a static IP address for the server Apache pre-installed, along with sev- Samba file-sharing protocol en- needs to be established so that the eral other services that can be used ables a remote server’s shared direc- client and server machines can find to mirror a production environment, tory to be mounted as if it were a lo- each other. To establish the static such as DNS, Tomcat and Mail. It is cal hard drive. Quiet Giant includes IP, boot up the Quiet Giant image, not recommended to expose the sand- a pre-configured Samba server that plug in the ethernet cable, and log box website to the internet for security automatically permits sharing of the into the router admin panel from any reasons, so it is very important to use Apache web directory (www), mak- other computer on the network. The a router with a firewall in order to pro- ing it visible as a mountable drive to ODROID running Quiet Giant can tect the local system from intrusion, any client machine located on the lo- be identified in the router’s client list injection or spying. As a general rule, cal network. by its host name of “odroid-server”. never keep sensitive data on a public- SSH allows remote commands After configuring the DHCP res- facing internet server unless proper se- to be sent to the Quiet Giant server ervation, it may be necessary to re- curity and firewall software is in place from the Code Monkey development boot the Quiet Giant server in order to prevent hacking. ODROID over an encrypted, pass- for the new address to be assigned. The advantages to LAMP develop- word-protected connection. It mim- For more details on creating a static ment are the wide availability of qual- ics the use of the Terminal window on IP, please refer the specific router’s ity low- and no-cost software, a stable the server by creating a remote BASH instruction manual. OS environment that requires minimal shell that can be used to start and stop Although it may be tempting to use maintenance, and an ability to host the services. In this example, SSH will be a wireless dongle as part of the serv- website on any machine, regardless of used to configure the MySql server be- er’s hardware configuration, a wired the server’s performance profile. For fore Wordpress is installed. ethernet connection will give the purposes of demonstrating sand- HTTP is the standard web pro- performance, and reduce the amount box development, the Quiet Giant tocol that runs on port 80, and al- of waiting required when updating image will run the same software that lows Apache to listen for incom- files, due to the higher throughput of would be installed on a high-end inter- ing web traffic. Whenever the web the LAN connection which is up to net server (Apache, PHP and MySql) server’s URL is typed into a brows- 30% faster than wireless. so that, when it comes time to push the site to the data center, there will be no compatibility issues, since the code or XU series can be used, with the XU serve space in the database for Word- was developed using the same tools being the best option for the Quiet Gi- press content and configuration files. and software packages that are run- ant server due to its USB 3.0 ports and To configure the MySql installation, log ning in the production environment. high-performance A15 cores, and the into the Quiet Giant server using the X or U machine serving as the ideal SSH protocol by booting up Code Mon- Gathering development computer due to their key on the client ODROID and launch- the Equipment low cost and portability. If an XU is ing a Terminal session. The default SSH To illustrate the concepts of not available, another X or U computer username and password of “odroid”, ODROID web development, I chose can be substituted for the server, since and a server address of 192.168.1.100, Wordpress 3.8 as an example Content Quiet Giant has already been ported to will be used in the following examples. Management System (CMS) platform, every ODROID hardware platform. which will be installed onto the Quiet ssh [email protected] Giant server, and then customized us- Configuring ing Web Editor from the sec- the Database Server Start the MySql admin panel after the ond ODROID running Code Monkey. For the Wordpress installation to command prompt appears with the fol- Any two ODROIDs from the X, U function properly, MySql needs to re- lowing command. The default MySql

ODROID MAGAZINE 28 MAKING MONEY WITH ODROIDS

configuration and installation will be performed using the development ma- chine, and the SSH session to the Quiet Giant server is no longer needed.

Copying the Client’s Website Wordpress, one of the world’s most popular and well-supported Content Establishing an SSH connection to our server Management Systems (CMS), is open- Validating the Samba credentials source and available for free at https:// wordpress.org/download/. It lets The Samba file-sharing protocol fa- developers build professional websites cilitates the installation of Wordpress quickly, while also providing an interface files on the server by mounting the for non-technical people to update web- Apache “www” directory as if it were a site content. Wordpress is very simple local hard drive on the client ODROID. Checking the MySql root user privileges to install, use, and customize, while also After the website is installed, the same offering hundreds of useful add-ons Samba share allows customization of that easily perform complex tasks such the layout, styles and other Wordpress ad rotation, social media integration, im- code via Bluefish Web Editor. age slideshows, video carousels, respon- Using , copy the files from sive layouts and much more. inside the newly extracted wordpress Download the Wordpress .tar.gz directory, and paste them into the www package and save it to the ~/Down- shared directory (smb://odroid- loads/ directory on the Code Monkey server/www/). client machine. Decompress the pack- Configuring the MySql server age by right-clicking it in the Thunar File for use by Wordpress Manager and selecting “Extract Here”. To copy Wordpress to the Quiet Gi- username is “root” and the password is ant server, first connect to the server’s “odroid”: shared Samba “www” directory by se- lecting the “Browse Network” option mysql -u root -p’odroid’ on the left side of the Thunar window. Navigate to the “Windows Network” Once the MySql admin panel is -> “WORKGROUP” -> “ODROID- launched, the Wordpress database can SERVER” directory, and click on the be configured: “www” share. The Samba share may also be accessed directly by typing mysql> create database word- “smb://odroid-server/www” into press; the Thunar address bar. Use the default mysql> grant all privi- username and password of “odroid” to leges on wordpress.* to complete the connection. Copying the Wordpress files to the server “odroid”@”localhost” identi- fied by “odroid”; mysql> flush privileges; Configuring mysql> exit the Wordpress Site Once the files have been copied, launch Now that the MySql database is ready any web browser from the Code Monkey to accept the Wordpress content, start desktop, and type the static IP address of the program by double- the Quiet Giant machine as the URL (for clicking its shortcut on the Code Mon- Locating the Samba share example, http://192.168.1.100/) . key desktop. The rest of the Wordpress The Wordpress welcome screen will ap- ODROID MAGAZINE 29 MAKING MONEY WITH ODROIDS pear, with a notification that one of the Switch back to the browser and click web server. Making local changes, push- configuration file needs to be created. So on “Run the Install” to access the Da- ing them to the internet server, then con- far, so good! tabase Setup screen. Replace both the stantly hitting Refresh in the browser, username and password with “odroid”, wastes valuable time that is better spent and click “Submit”. customizing the site. By setting up a multi-boxed sandbox environment, the Quiet Giant machine resides behind the local network, and all development can be done directly on its hard drive using the Samba file shar- ing protocol to edit the files from the Initial setup of Wordpress Code Monkey development machine. Since Apache and MySql are used in the To create the necessary wp-config. ODROID sandbox environment, com- php configuration file, open the pre-built patibility with any production environ- example from the Wordpress web page ment that offers LAMP is nearly guaran- by clicking on the “We Got It” link, and teed. File are copied to the server using copying the file contents using Ctrl-C. the File Manager instead of FTP, result- Launch the Text Editor from the ing in enormous time savings because Code Monkey desktop, and paste the file of instantaneous file access. into a new document using Ctrl-V. Save Final setup screen of Wordpress Additionally, the low cost of the all- the file as “wp-config.php” by pressing ODROID development studio means Ctrl-S, clicking on the “www on odroid- Customizing that a beginning website business can server” link in the left side of the Save the Wordpress Site make money on its first project, with- File dialog, and pressing “Save”. At this point, the Wordpress sand- out having to first recover high startup box development environment is equipment costs. ODROIDs also make ready for use. Many administrative it very easy to test websites on both and configuration tasks, such as adding Desktop and Mobile without the need themes and plugins, can be performed to purchase additional QA tablets, since via the wp-admin interface located at the ODROID is capable of running http://192.168.1.100/wp-admin. both Linux and Android, and support- Advanced developers may want to ing a wide selection of browsers on both customize the site PHP files, located in operating systems. smb://odroid-server/www/, by us- ing the Bluefish Web Editor application to Migrating open the shared Samba directory. Exten- the Website sive tutorials on customizing Wordpress, to a Public Server downloading themes and plugins, and Once the content of the Wordpress Copying the example wp-config.php Word- press configuration file modifying the source code are available website is ready for publication, the at the official Wordpress site https:// site files can be uploaded to the public codex.wordpress.org/Getting_ server either via FTP, or through a stan- Started_with_WordPress. dard cPanel application, depending on the hosting service. Filezilla is available The Sandbox on the Code Monkey image for host- Advantage ing companies that provide access to The ODROID web development the website’s FTP server. If using the multi-boxing setup solves the produc- cPanel interface to transfer the website tivity issue of constantly using FTP to files instead, they may be uploaded di- publish incremental changes to a remote rectly from the Samba share at smb:// odroid-server/www/. Database setup of Wordpress Once the web files have been cop-

ODROID MAGAZINE 30 MAKING MONEY WITH ODROIDS ODROID LINUX TIPS

ied to the public internet server, it’s also shared on the local network at smb:// REBOOT YOUR necessary to migrate the Wordpress da- odroid-server/spigot/, and can UBUNTU AFTER tabase, which contains the site’s content also be modified from Code Monkey us- and custom settings. Connect to the ing any available IDE in the same way INSTALLING CPUFREQ Quiet Giant image via SSH and type the that the Wordpress site was edited. fter installing your CPU governor from Issue 2, have you noticed following command: To run Spigot, establish an SSH ses- that your Ubuntu distro hangs sion to Quiet Giant, then type the fol- A when issuing a restart? If so, check your mysqldump -u odroid lowing command: current cpufreq policy by typing: -p’odroid’ wordpress > ~/ Public/www/wordpress-data- cd ~/Public/spigot sudo cpufreq-info base.sql sh ./spigot.sh If your policy is set to anything other This exports a copy of the database Anyone on the local network may then than “performance”, you may have to to the file “wordpress-database.sql” play Minecraft on the Spigot server, and power cycle your ODROID to reboot. on the server’s local hard drive. This test out the server’s world by using Qui- But don’t worry, you can also just issue file may then be imported to the pub- et Giant’s static IP address as the server the following command prior to a re- start in order to get the job done: lic MySql server directly from Apache’s name. Complete support for customiz- “www” directory, which is already avail- ing and administering Spigot is available sudo cpufreq-set -g performance able as a shared drive to the Code Mon- at http://www.spigotmc.org. key machine. After the database import Once the Minecraft server has and bam! Your ODROID is able to is completed, the new Wordpress web- been customized for public use, fol- restart now. site will be identical to the one created in low the same procedure for upload- the sandbox environment. ing as with the Wordpress site, using either Filezilla or cPanel to send the files from the sandbox server to the RESIZE YOUR public site. Using addons, Minecraft PARTITION players can submit donations and pur- id you install a new image on chases directly to a PayPal account, your eMMC card or SD card which can cover the cost of the pub- Dand forget to allocate the free lic server, and perhaps bring in some space on your main partition? You extra money on the side. don’t need to go through the hassle of disconnecting the card or module and ODROIDs taking it all the way back to GParted for Profit on another copy of Linux. Mauro, one of the Hardkernel developers, created Who knew that a $59 computer a handy script for our convenience: could be a core part of your home web development business? Replac- http://forum.odroid.com/ ing expensive laptop and desktop download/file.php?id=502&sid Working Wordpress Site computers with ODROIDs can save =842ba747c84c171245591847c5 you thousands of dollars in equip- 53b7af ment costs. Clients who wish to Other Sandbox maintain security while developing Make it executable: Applications: their websites can be assured that chmod +x resize.sh Hosting their product will not be available on a Minecraft Server the Internet until it’s ready, thanks to run it as sudo Quiet Giant is a powerful OS that the privacy of the sandbox environ- also comes with an optimized Minecraft ment. The portability of ODROIDs sudo ./resize.sh server build called Spigot. Spigot is writ- make it easy to write software on the ten in Java, and allows complete custom- go, making it an ideal solution for a Then, reboot your ODROID. Once ization of any aspect of the Minecraft lucrative mobile software develop- the boot is completed, run the com- server. The Spigot files are automatically ment business. mand again to allocate the free space, and you are all set! ODROID MAGAZINE 31 MEET AN ODROIDIAN MEET AN ODROIDIAN ROB ROY: CHIEF EDITOR OF ODROID MAGAZINE by Robert Hall

Rob Roy, a frequent contributor to the ODROID forums, was recently selected by Hardkernel to publish ODROID Maga- zine due to his passion for ARM technol- ogy. Currently living in San Francisco, California, Rob has worked in the software engineering industry for over 20 years, with many stories to tell about the early days of computing. He’s been recognized for his in- novative contributions by many high-profile clients such as PNC Bank, Cleveland Indi- ans, BP, Chevron, PPG, Hyundai, Dolby Technologies, Hi5, and VEVO.

How did you get started with computers? When I was about 10 years old, my parents let me visit with my uncle Jack and aunt Eydie in Pittsburgh, Pennsyl- Heavenly ski trip in South Lake Tahoe 2014 vania for a few weeks, as a summer va- was built into the Apple hardware. cation. Jack was a mechanical engineer, When I got home from my vacation, It reminds me of that first Apple and used an Apple ][+ and an Apple ][e I told my parents exactly what I wanted Bytes meeting with my uncle, where peo- in his job to perform stress calculations. for Christmas: an Apple //c. My brother ple from all walks of life and backgrounds I was very interested in math, and so he and I played games on it, did our home- got together to speak the same language. gave me a couple lessons in how to use work, and even wrote little programs to ODROIDs provide an opportunity for the computer, along with a typing pro- do simple things like bouncing a pixel everyone to learn and experiment with gram called Letter Invaders. around the screen, or keeping track of ARM technology in a supportive environ- That weekend, he took me to a lo- the shopping list for the week. We later ment. The depth of knowledge available cal Apple Bytes enthusiast club, where I got an 2000, which was a very ad- in the forums, and the worldwide appeal got to meet a lot of really smart and fun vanced computer for its time. I attend- of ODROIDs, bring back that feeling of people who shared a common interest of ed Carnegie Mellon University, where I something exciting about to happen. I exploring the possibilities of these revo- had access to a Cray YMP through my think that ODROIDs herald a new revo- lutionary new home computers. It was on-campus job, and got to explore the lution of affordable home computing, absolutely amazing what could be done early internet, when it was only used by which is a long-awaited breath of fresh air with 64KB of RAM and 113KB 5-¼” a handful of universities, before HTTP for the technology world. floppy disks back then. After the meet- was invented. ing, I played the game Ultima 3 non-stop What other interests and hobbies do you for a few days, then started learning BA- What do you like most about the ODROID enjoy? SIC from my uncle, since the language community? I have been a vegetarian for almost 20

ODROID MAGAZINE 32 MEET AN ODROIDIAN

but very challenging for a beginner to customize. The forums were sup- portive of experimentation, and other ODROID contributors inspired me to want to learn more. For my web business, I decided to use the official Linaro 12.04 image which came with the standard Unity desktop. I started hacking away on the command line until I got rid of all of the warnings and errors in the kernel log. Then, I installed and configured every desktop environment that I could find, and downloaded all of the equivalent Linux programs to those that I had used in Windows. Throughout the process, years, and follow a living foods diet. For table. I read an article on Wired about there were many software obstacles that those who are curious about what a living the Raspberry Pi, and remembered using required research, questions, and perse- foods diet consists of, I have many free RISC-based machines in college. That verance in order to achieve a completely and original gourmet recipes available at led me to research and buy the most stable environment. I really learned a http://icaneatraw.blogspot. powerful ARM board that I could find, lot about Linux from that experience. com. I also enjoy almost any type of which happened to be the ODROID- After learning that I could copy an exercise, including running, skiing, swim- X2. After seeing what it could do, I set image using the “dd” command, I pub- ming, biking and martial arts. I earned a a goal for myself to completely replace lished my first pre-built OS called Fully second-degree black belt in Hapkido after my Windows XP machine with my new Loaded, which included several desk- college, and just recently came back from ODROID, while still doing everything top environments such as Unity, KDE a ski trip with my girlfriend at Heavenly that I used to do in Windows, by instead Plasma, LXDE, Gnome and Xubuntu. in South Lake Tahoe. I do a hot springs using Ubuntu and Android on my X2. After that, I was encouraged to create a retreat at least once a month, to relax and When I got my first ODROID, I few more images for my own personal enjoy the beautiful California Redwoods. knew next to nothing about Linux, use such as Pocket Rocket and Whisper, coming from a Microsoft and Apple and realized how easy it was to share What motivated you to produce the OS im- background, so I kept reading and ask- what I had done with others. ages available on the forums? ing questions on the ODROID forums. I currently offer more than a dozen I run a web development company I wanted to tweak the Linux OS to be images to the ODROID community, from my home office, and I was look- more like my old Windows XP envi- and receive PayPal donations from many ing to replace my trusty 2008 HP laptop ronment. I tried an ODROID port of community members who appreciate with something more modern and por- Slackware, which was graphically fast, the time and effort that I put into mak- ing them. I very much enjoy interacting with people from around the world, and by learning more about Linux, I’ve been able to help others find new ways to use ODROIDs to fit their needs.

Rob Roy’s ODROID software contributions may be downloaded for free from http:// oph.mdrjr.net/robroyhall/.

The Ultimate ODROID Setup: U3, XU, Q2 and a BERO bluetooth robot http://www.betherobot.com

ODROID MAGAZINE 33 THANK YOU FOR READING!!! THANK YOU THIS MAGAZINE ISSUE ENDED you can now stop reading....

Okay...

Wait a minute... where is the cover article?

OKAY, OKAY SO, BY POPULAR DEMAND and because you probably skipped ahead to read about how to play all the cool games on the front cover…

ODROID MAGAZINE 34 LINUX GAMING ON ODROID THE RIGHT SYSTEM FOR YOUR GAMES (PART TWO) by Tobias Schaaf

ast month, I presented and them very well on the discussed many of the differ- ODROID. ent emulators available for the It runs the L ScummVM, a testment to the ODROID platform. I compared some famous Monkey of them and showed what the differ- classic age of point and click Island series: adventure games with compel- ences are, and how the emulators have And other ling stories great 16bit art and evolved over the years. If you are un- classics such an ambience that even the most sure where to find the games you want as Day of the die hard indie developers are to play, or choosing what system to pick Tentacle, The still struggling to recapture for gamers worldwide for your games, this article will help you Dig, Beneath a find some answers. Steel Sky, and Bro- ken Sword: Choosing the right More system for your informa- favorite game genre There are plenty of genres to choose from, but which system is best for which genre, and what of the original PC or Amiga games for your genre exists for games. So, there is no need to which system? If you read my consider the console Adventure last article, you know that, for ports, since the same games are example, you won’t find ad- most likely available for Scum- venture games for the MAME mVM, which also supports dif- or NeoGeo emulators, but where ferent versions of the same do you find them? What system game. This means that you offers the best racing games, and can even play the original which has the best strategic games? Amiga version of Monkey Since there are many genres and tion about Island or the Mac OS version many systems to play on, this will be ScummVM can of Day of the Tentacle directly once again reflect my personal prefer- be found here: on ScummVM. ences, is based on my own experiences. http://scummvm. org. Action Adventure There are many awesome Adventure There are many Action subgenres If you want to play adventures, you games available for the ODROID, and such as shooter, fighting games, beat ‘em should definitely go for ScummVM! you can play them with either mouse, up, side and top down scrollers. If you ScummVM is an awesome piece keyboard, joystick or gamepad. There look into the gigantic MAME library of work. There are tons of Adven- were some adventures available for con- and my personal favorite, the NeoGeo, ture games and ScummVM just plays sole systems, but they are mostly ports you will find hundreds of Action games.

ODROID MAGAZINE 35 LINUX GAMING

Need to make your blood boil, Jump ‘n Run sharpen your reflexes and wish or Platformer to complete your DIY arcade Although it’s easier controls? So, look no further to associate Adventure than MAME games, with the added benefit of not having to and Action games with spend bags and bags of quarters specific emulators and systems, to end those darned difficult it’s more difficult to determine games. which platform to use when looking for Platformer games to play, as they and NeoGeo are available for every system. were subsequent- Platformers, also known as Jump ‘n ly ported to other Run, is an extremely popular and time- platforms. They are less genre. Classics such as Earthworm generally somewhat Jim, Turrican, Aladdin and Asterix are easier than the arcade rewritten for each new console as either originals, so if you modernized versions or faithful remakes want the original of the originals. gaming experi- But how can you find a specific Plat- ence, I strongly former game that you’re looking for? Some recommend Nearly every big Disney production notable examples include MAME emula- has its own Platformer or Jump ‘n Run, the Metal Slug Series, 1944 - tion. along with many other cartoons from The Loop Master, Blazing Star, Other console sys- Gun Force 2, King of Fighters tems offered quality ac- Series, and Last Blade 2: tion games too, such as the Jungle Strike If you really like fast action games, and series which were beat ‘em up, action scrollers and shoot- available for several systems such as ers, these games are what you’re looking Amiga and SNES. for, and ODROID does a really good Another well job with this genre. The best part is that known series is most of these games are made for two the infamous or more players, so that you can play Mortal with a friend on your ODROID and en- Kombat joy these kind of games together. games, There are many action games avail- which is a able for all of the major consoles, and brutal fight- most of the games that ing emulator exists for MAME not suitable for children due to One of the games its extreme vio- that made the ESRB rating lence and re- exist, but was loved by kids alistic blood everywhere: Mortal Kombat

A little reminder of 90’s-era the 90s, such as Aladdin, Lion American endeavors to keep a King, Asterix, Tiny Toons, Bat- changing world at peace: Man, SpiderMan, X-Men, Mickey, the “Strike” series. Kirby, Donkey Kong, and so on. Up until the GameBoy Advance (GBA) these types of games were very effects. common, but on newer generations of

ODROID MAGAZINE 36 LINUX GAMING

The 16-bit console era will always be remembered by its other systems. Examples many mascots that shaped the of the Strategy genre include gamer’s imagination, and kept us in love with those heroes in Free Heroes 2, Battle for Wes- updated forms noth, Zod Engine, Advanced Strategic Command, Crimson Fields, OpenXCom, Jagget Alliance consoles, since 2, Unknown Horizons and Widelands. they are played If you’re looking for strategy games, best with a mouse it’s rather easy to find good games that and keyboard. For run directly on Linux, and with an these types of ODROID, you have plenty to choose games, a native from. You can experience your old fa- Linux pro- vorites with games such as Zod Engine, gram in- OpenXCom, Jagget Alliance 2, or you stead of an can try new original games such as Battle emulator for Wesnoth. There are a lot of games consoles, such as the PlaySta- provides the in the Debian and Ubuntu software re- tion 1 or the PlayStation Portable, most interac- positories, as well as some that I the and- there are fewer versions of the tive experience. classic Platformers. So, the best ex- I really love perience for the jump ‘n run genre will those very early strat- be found with the NES, SMS, Genesis, egy games. I spent weeks finishing all SNES, and GBA emulators. the levels of Dune 2 when it first came There are some great Action games out, and today there are on the Amiga as well. Back in the day, some really nice re- I really enjoyed a game called Flash- makes such as Dune Back which was interesting because it Legacy. Careful strategy, resource control, learning to adapt quickly offered lots of different sceneries and There is an to changing situations, tasks. FlashBack is considered a more abundance and thinking about the con- “mature” platformer, and also exists for of Strategy sequences of your actions. If other systems such as the SNES. It was games that run you have ever played a strategy even recently remastered for PCs again natively on Linux. game, you know what we are talking about with a modernized look. Some are remakes from old clas- Strategy sics, and some Strategy games are not very common are new games around consoles, but there are a few that exist for games such as Tac- Linux and tics or Advanced Wars. However, those games are nothing compared to the real strategy games found for PC (or some for Amiga as well), and as their name suggests, they are more about tactics than real strategy. Games such as Dune 2 (the original RTS), Command and Conquer, and round based strategy games such as Battle Isle and Histo- ryline 1914-1918 are hard to find on

ODROID MAGAZINE 37 LINUX GAMING created and posted online in my reposi- tory mentioned at the beginning of this article. So, if you like strategic games like I do, you will love playing them on an ODROID in high definition.

Racing Although it’s not my fa- vorite genre, I used to play some of the racing games, and it really is a matter of personal preference. If you like the old 2D classics, such as the OutRun series, or the Lo- tus series, or the all famous Ma- rio Kart, then the SNES, Amiga and emulators From the technically focused will offer the most choices. games like Gran Turismo to just There are also several bird plain fun ones like Mario Kart, perspective racing games racing games put our com- like the old Micro Ma- petitive instincts in motion, and make us want to become good chines racing games. enough to finish in 1st place. line feature, and You can also play more the multitude of modern racing games on the add-ons available for PS1 or the PSP, such as the 3D the game. You even can racing games Gran Turismo and As- have old trains from the 19th century. clones of the Civilization and the Colo- phalt: Urban GT 2. What other simulation games exist nization series. I also enjoy playing the The Genesis also has some racing for the ODROID? Some of them run original Colonization on the Amiga be- games with good looking graphics and on emulators, such as Theme Park for cause of its awesome music and enter- catchy music, and the PS1 and PSP offer the Amiga and SNES. taining graphics. several famous series such as Need For Many simulation games exist as na- There are some exceptionally well- Speed and Gran Turismo. tive Linux ports. Examples include done 3D space simulators available on Widelands, a clone from the old Settlers the ODROID. The FreeSpace series, Simulation series, and Unknown which I loved to play on the PC, runs Simulations such as CrosixTH Horizons, which is great on the ODROID. It has stunning or OpenTTD can run directly similar to the graphics, engaging gameplay, and is a re- on Linux for the ODROID Just five more minutes! How series. FreeCiv ally big game! There are huge destroyers without an emulator. many times have you told and FreeCol are in the game that are literally a thousand I love Corsix TH! It’s yourself that when playing an times bigger then your space fighter. engrossing board or computer very fun to see many crazy The best place to look for your favor- game, only to be surprised when illnesses you can discover the sun comes up? ite simulation games is the Software and cure, and the game has Center included with your Linux some lovely animation. I also distribution. really like OpenTTD. I played the original Transport Tycoon on my first DOS-based PC. It was awesome to see all that money flowing in, and I re- ally wished it was that easy in real life. OpenTTD is unique because of the on-

ODROID MAGAZINE 38 LINUX GAMING

Role Playing Games for a game from that era. (RPG) I also enjoy paying “Riviera – The Role Playing Games is actually one Promised Land”, which has a very deep of my favorite genres, and there are story and a great fighting style as well. I quite a lot of RPGs available, with way recently found out that Riviera was re- too many to mention them all. Some made for the PSP, which has pretty much highlights include the now famous Final the same graphics with improved effects Fantasy saga, the Tales series and Chro- and voice acting as an improvement no Trigger. Although NES, Sega and over the GBA version. I also recom- SNES offer a few great RPGs, such mend some of the as Link of Zelda, Secret of Mana well-done Drag- and Earthbound, but RPGs have on Ball Saga games for the evolved over the years. As I The Jedi Knight games are not mentioned GBA. pure FPS but as we all know, it’s I main- just more fun to slice the enemy ly recom- up with your light saber! mend the GBA, PS1 and PSP emulators on GST if you en- joy RPG games. exotics such as the Jedi Knight series.

Irrefutably bounded to Japanese Conclusion anime, RPG will take you to As you can see, the ODROID offers wonderous journeys that will many options when it comes to games. kept you wanting one more gaming sequel! There are quite a few more sub-genres First than those detailed here, such as sport Person games like soccer and tennis, puzzle Shooter games, and other games such as Harvest (FPS) Moon which are hard to fit into any of You won’t find many, if at all, FPS the main genres. games on the first generation of video con- With the ability to emulate many differ- soles such as the NES and SNES. How- ent systems on the ODROID, you have the ever, titles such as Battlefield 3, Battlefield world of gaming at your fingertips, so grab in my previous article, newer emulators 4 and Call of Duty, all of which are avail- your controller, mouse and keyboard, and equals bigger ROM sizes which equals able for current Xbox and PlayStation con- see how well you can do on that big TV of more content, resulting in better looking soles, are proof that people like to play FPS yours! games. games on console systems. Ultimately, I prefer the GBA for RPG As a side note, I never understood Tobias, a long-time contributor to the games, especially the se- the attraction of playing an FPS game ODROID forums and Linux Gam- ries. I really love its fighting style, which on a console. It’s called “point and ing columnist, produces a popular Gam- is rather rare for a Role Playing Game. shoot”, not “swirl around and shoot”, ing OS called ODROID GameStation Turbo with XBMC, available for free You actually have to fight your enemies and the mouse is a natural pointing download at in real time with different weapons, and device whereas a gamepad is not. Ap- http://oph.mdrjr.net/ meveric/images/. GST offers many you jump, block and force them back parently a lot of console gamers do not gaming console and system emulators for while using a set of spells. It’s all very share my opinion, but that’s fine. the X and U series, along with a custom fun to play, especially since the game Anyway, the ODROID offers some build of XBMC designed specifically permits forging special weapons of dif- nice FPS titles as well, such as Quake 3 for gamers. He maintains a repository ferent types with unique attributes, de- Arena (Open Arena) or World of Padman of many of his favorite classic games at pending upon the Materials used. All of which offer fast multiplayer action on the http://oph.mdrjr.net/meveric/re- this adds up to great gameplay, especially ODROID. We even have some very nice pository/.

ODROID MAGAZINE 39