Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Agenda 
● What is Edison? 
● Play with Edison 
● Yocto 101 
● Connect Hardware
What is Edison?
Overview 
● Tiny computer to make IoT/Wearable device 
● Dual x86 core SoC (Atom Z34XX + Quark) 
● WiFi/BT combo (BCM43340...
What you can do 
● Run Linux kernel 
– W/ WiFi+BT functions 
● Run Arduino sketch (top on Linux)
What you cannot do (So far...) 
● No BSP other than Linux 
● Play with Quark 
● Unleash GPU power 
● Hardware video enc/de...
Edison Alternatives? 
Application Processor 
based Microcontroller based
Edison Alternatives? 
Linux Video/Graphics Low-power Making your own device 
(Custom PCB) 
Arduino No No Yes Very Easy 
(A...
Edison is something diferent 
● Yes it's x86. 
● No Video/Graphics, but full featured Linux. 
● Not low-power as uCs, but ...
Current Buying Options 
+ + + 
For wimps 
Decent choice 
For rich people 
For 
true enthusiasts
Current Buying Options 
SparkFun Amazon Mouser Fry's Sunnyvale 
Edison 49.95 49.99 53.40@10 49.99 
Edison + Mini 
breakout...
Why you should not buy 
“Arduino board” 
● You want “Arduino-compatible-pin-header”? 
Really? 
● Price is expensive 
– Too...
Play with Edison
Powering up
Booting 
****************************** 
PSH KERNEL VERSION: b0182727 
WR: 20104000 
****************************** 
SCU I...
Powering up 
(Mini Breakout) 
USB Micro B 
(For Console) 
USB Micro AB 
(For OTG) 
Ext. Power 7-17V 
Li-Po 
Battery 
● 3 M...
Powering up 
(Bare Module) 
Edison 
VSYS 
Where VSYS is: 3.15-4.5V i.e. VBAT voltage 
Do NOT connect 5V
Booting 
****************************** 
PSH KERNEL VERSION: b0182727 
WR: 20104000 
****************************** 
SCU I...
Boot process 
Trusted Boot ROM U-Boot Kernel
Working with WiFi 
● Intel ofers “quick setup” script called 
“confgure_edison” 
– Many people use this script. 
● Intel a...
Quick Start ConnMan 
~# systemctl start connman 
~# systemctl start wpa_supplicant 
~# connmanctl 
connmanctl> enable wifi...
Quick Start ConnMan 
● Make sure connman and wpa_supplicant is 
working 
● connmanctl is a tiny CLI to full access 
connma...
ConnMan Overview 
● Connection manager developed by Intel 
● It was a part of Moblin/MeeGo project 
● Fully modular system...
ConnMan API 
● All APIs are D-Bus interface 
● Manager API 
● Technology API 
● Service API 
● Session API 
● Agent API 
●...
Technology API 
● Enable 
● Disable 
– rfkill 
● Settings 
● Scan 
– AP Scan 
● Tethering 
– Edison supports 
tethering!
Service API 
● Connect 
● Disconnect 
● Get details 
– SSID 
– Strength
Session API 
WiFi 
Service 
WiFi 
Service 
LTE 
Service 
LTE 
Service 
Ether 
Service 
Keep one Session while 
using many ...
Agent API 
● API layer for UI 
● ConnMan requests 
passphrase input via 
Agent API 
Example: 
Requesting a passphrase for ...
Quick Start SSH 
vi /lib/systemd/system/sshd.socket 
[Unit] 
Conflicts=sshd.service 
[Socket] 
ExecStartPre=/bin/mkdir -p ...
Yocto 101 
It's not an embedded Linux distribution 
– it creates a custom one for you
Overview 
● Build tool to create your own distribution 
– Build your Toolchain 
– Build your Bootloader/Kernel 
– Build yo...
Architecture
Workfow - Recipes 
Recipe 
● Source codes? 
● Config files? 
● Patches? 
● Compile options? 
● Target(s)? 
Build Package
Workfow - Packages 
Meta Layer 
Packages 
Meta Layer 
Meta Layer Your Repository
Workfow - Deploy 
Packages 
Kernel 
zImage 
U-Boot 
u-boot.bin 
RootFS 
(chroot-ed) 
Cross 
Toolchain 
Deploy 
Deploy 
roo...
Workfow - Cross build 
Packages 
(for Host) 
Recipes 
(for Host) 
Cross 
Toolchain 
Packages 
(for Target) 
Recipes 
(for ...
What is Poky? 
● Poky is the “reference distribution” of Yocto 
– You may fork poky to create your own 
● Basic recipes 
–...
Quick Start Yocto - Prerequisite 
● Host Linux build machine 
– I use Ubuntu 14.04 LTS 
– Actually “Intel-flavored-poky” s...
Quick Start Yocto 
Extract Edison Linux source fles then, 
$ cd edison-src 
$ ./device-software/setup.sh 
$ source poky/oe...
Quick Start Yocto 
3-4 hours later.... 
edison-src$ ls build/tmp/deploy/images/edison/ 
bzImage modules-edison.tgz 
bzImag...
Quick Start Yocto 
To fash image to Edison 
Connect Edison (via OTG) then, 
$ device-software/utils/flash/postBuild.sh 
$ ...
Poky-Edison? 
● Intel-forked version of poky 
● Using systemd (Yes seriously) instead of 
sysvinit
Connect Hardware
Basic Interfaces 
● GPIO 
– Digital I/O, PWM 
● I2C 
– Edison has 2 I2C port. 
● SPI 
● UART 
– Edison has 2 UART port, bu...
Additional Interfaces 
● I2S 
– For ADC/DAC (audio codecs) 
● SD 
– You need level shifter :( 
● USB 
REMEMBER: Edison log...
How to use them? 
● Linux standard methods 
– User space 
– Kernel module 
● MRAA(+UPM) (for basic interfaces) 
– A part o...
Using GPIO 
● sysfs 
– Standard method 
– Used by MRAA and Arduino lib 
● PCI device 
– Fast path to read/write 
– Example...
Quick Start MRAA (C) 
#include "mraa.h" 
void main() { 
mraa_gpio_context gpio; 
mraa_init(); 
gpio = mraa_gpio_init(8); 
...
Quick Start MRAA (JS) 
var m = require('mraa'); 
var myLed = new m.Gpio(13); 
myLed.dir(m.DIR_OUT); 
myLed.write(1);
Upcoming SlideShare
Loading in …5
×

How to Hack Edison

7,132 views

Published on

Bay Area Kernel/VM Hackers, Nov 3, 2014

Published in: Technology
  • Dating direct: ♥♥♥ http://bit.ly/2Qu6Caa ♥♥♥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Dating for everyone is here: ❶❶❶ http://bit.ly/2Qu6Caa ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

How to Hack Edison

  1. 1. Agenda ● What is Edison? ● Play with Edison ● Yocto 101 ● Connect Hardware
  2. 2. What is Edison?
  3. 3. Overview ● Tiny computer to make IoT/Wearable device ● Dual x86 core SoC (Atom Z34XX + Quark) ● WiFi/BT combo (BCM43340) – W/ chip antenna ● No graphics at all – GPU has been disabled ● Linux kernel is available – Forked from 3.10 yocto kernel
  4. 4. What you can do ● Run Linux kernel – W/ WiFi+BT functions ● Run Arduino sketch (top on Linux)
  5. 5. What you cannot do (So far...) ● No BSP other than Linux ● Play with Quark ● Unleash GPU power ● Hardware video enc/dec acceleration
  6. 6. Edison Alternatives? Application Processor based Microcontroller based
  7. 7. Edison Alternatives? Linux Video/Graphics Low-power Making your own device (Custom PCB) Arduino No No Yes Very Easy (AT Mega) mbed No No Yes Easy (Cortex-M devices) Raspberry Pi Yes Yes No (C) Almost Impossible (BCM2835) Beagle Bone Yes Yes No Difcult (AM335x) Edison Yes No Reasonable Easy
  8. 8. Edison is something diferent ● Yes it's x86. ● No Video/Graphics, but full featured Linux. ● Not low-power as uCs, but still reasonable power consumption. – Approx. 200mA without connectivity – You can sleep device easily ● Tiny integrated module, not a “dev board”
  9. 9. Current Buying Options + + + For wimps Decent choice For rich people For true enthusiasts
  10. 10. Current Buying Options SparkFun Amazon Mouser Fry's Sunnyvale Edison 49.95 49.99 53.40@10 49.99 Edison + Mini breakout 74.95 67.84 69.00 59.99 Edison + Arduino board 99.95 N/A 99.00 84.99 Edison + Sparkfun boards (Pre-Order) 79.90 – 200 or more N/A N/A N/A GO FRY'S NOW
  11. 11. Why you should not buy “Arduino board” ● You want “Arduino-compatible-pin-header”? Really? ● Price is expensive – Too much components to make it “compatible” with Arduino shields* ● Though Intel recommend beginners to buy this board, documents are crap. *Edison logic level is 1.8Vc
  12. 12. Play with Edison
  13. 13. Powering up
  14. 14. Booting ****************************** PSH KERNEL VERSION: b0182727 WR: 20104000 ****************************** SCU IPC: 0x800000d0 0xfffce92c PSH miaHOB version: TNG.B0.VVBD.0000000c microkernel built 23:15:13 Apr 24 2014 ******* PSH loader ******* PCM page cache size = 192 KB Cache Constraint = 0 Pages Arming IPC driver .. Adding page store pool .. PagestoreAddr(IMR Start Address) = 0x04899000 pageStoreSize(IMR Size) = 0x00080000 *** Ready to receive application *** U-Boot 2014.04 (Nov 01 2014 - 02:50:55) Watchdog enabled DRAM: 980.6 MiB MMC: tangier_sdhci: 0 In: serial Out: serial Err: serial Hit any key to stop autoboot: 0
  15. 15. Powering up (Mini Breakout) USB Micro B (For Console) USB Micro AB (For OTG) Ext. Power 7-17V Li-Po Battery ● 3 Methods – 5V via OTG – External DC-in – Li-Po Battery ● OTG host will only works with DC-in ● Li-Po will charged at 190mA – i.e. Connect 190mAh or higher Edison Recommend external DC-In BE CAREFUL WITH POLARITY
  16. 16. Powering up (Bare Module) Edison VSYS Where VSYS is: 3.15-4.5V i.e. VBAT voltage Do NOT connect 5V
  17. 17. Booting ****************************** PSH KERNEL VERSION: b0182727 WR: 20104000 ****************************** SCU IPC: 0x800000d0 0xfffce92c PSH miaHOB version: TNG.B0.VVBD.0000000c microkernel built 23:15:13 Apr 24 2014 ******* PSH loader ******* PCM page cache size = 192 KB Cache Constraint = 0 Pages Arming IPC driver .. Adding page store pool .. PagestoreAddr(IMR Start Address) = 0x04899000 pageStoreSize(IMR Size) = 0x00080000 *** Ready to receive application *** U-Boot 2014.04 (Nov 01 2014 - 02:50:55) Watchdog enabled DRAM: 980.6 MiB MMC: tangier_sdhci: 0 In: serial Out: serial Err: serial Hit any key to stop autoboot: 0
  18. 18. Boot process Trusted Boot ROM U-Boot Kernel
  19. 19. Working with WiFi ● Intel ofers “quick setup” script called “confgure_edison” – Many people use this script. ● Intel also ofers connection manager daemon called “ConnMan” – Many people think it is more difficult to handle, which is not. – Easy to use, and scalable.
  20. 20. Quick Start ConnMan ~# systemctl start connman ~# systemctl start wpa_supplicant ~# connmanctl connmanctl> enable wifi connmanctl> scan wifi connmanctl> agent on connmanctl> connect wifi_xxxxxxxxxxxx_xxx_xxx
  21. 21. Quick Start ConnMan ● Make sure connman and wpa_supplicant is working ● connmanctl is a tiny CLI to full access connman API
  22. 22. ConnMan Overview ● Connection manager developed by Intel ● It was a part of Moblin/MeeGo project ● Fully modular system ● Lightweight ● Designed to be running on embedded device, tablet, phone.
  23. 23. ConnMan API ● All APIs are D-Bus interface ● Manager API ● Technology API ● Service API ● Session API ● Agent API ● VPN
  24. 24. Technology API ● Enable ● Disable – rfkill ● Settings ● Scan – AP Scan ● Tethering – Edison supports tethering!
  25. 25. Service API ● Connect ● Disconnect ● Get details – SSID – Strength
  26. 26. Session API WiFi Service WiFi Service LTE Service LTE Service Ether Service Keep one Session while using many Services
  27. 27. Agent API ● API layer for UI ● ConnMan requests passphrase input via Agent API Example: Requesting a passphrase for WPA2 network RequestInput("/service1", { "Passphrase" : { "Type" : "psk", "Requirement" : "mandatory" } } ==> { "Passphrase" : "secret123" }
  28. 28. Quick Start SSH vi /lib/systemd/system/sshd.socket [Unit] Conflicts=sshd.service [Socket] ExecStartPre=/bin/mkdir -p /var/run/sshd ListenStream=22 # restrict access to wired access for security reasons # comment this line to remove restriction BindToDevice=usb0 <-- Comment here Accept=yes [Install] WantedBy=sockets.target
  29. 29. Yocto 101 It's not an embedded Linux distribution – it creates a custom one for you
  30. 30. Overview ● Build tool to create your own distribution – Build your Toolchain – Build your Bootloader/Kernel – Build your RootFS ● Merged with OpenEmbedded – OE-Core/Yocto ● Using BitBake – Embedded-target version of Portage(Gentoo)
  31. 31. Architecture
  32. 32. Workfow - Recipes Recipe ● Source codes? ● Config files? ● Patches? ● Compile options? ● Target(s)? Build Package
  33. 33. Workfow - Packages Meta Layer Packages Meta Layer Meta Layer Your Repository
  34. 34. Workfow - Deploy Packages Kernel zImage U-Boot u-boot.bin RootFS (chroot-ed) Cross Toolchain Deploy Deploy rootfs tar.gz Deploy Here also use a recipe called “image recipe”
  35. 35. Workfow - Cross build Packages (for Host) Recipes (for Host) Cross Toolchain Packages (for Target) Recipes (for Target) Target Images
  36. 36. What is Poky? ● Poky is the “reference distribution” of Yocto – You may fork poky to create your own ● Basic recipes – Yocto reference kernel – OE-Core – Basic image recipes ● Reference setup – Determine preferred version for each recipes – Determine preferred init ● sysvinit
  37. 37. Quick Start Yocto - Prerequisite ● Host Linux build machine – I use Ubuntu 14.04 LTS – Actually “Intel-flavored-poky” supports other build machine. (i.e. Windows and Mac) But I would not recommend. ● “Edison Linux source fles” from ofcial site ● $ sudo apt-get install build-essential git diffstat gawk chrpath texinfo libtool gcc-multilib
  38. 38. Quick Start Yocto Extract Edison Linux source fles then, $ cd edison-src $ ./device-software/setup.sh $ source poky/oe-init-build-env $ bitbake edison-image
  39. 39. Quick Start Yocto 3-4 hours later.... edison-src$ ls build/tmp/deploy/images/edison/ bzImage modules-edison.tgz bzImage--3.10.17+git0+6ad20f049a_c03195ed6e-r0-edison-20141101085834.bin README_- _DO_NOT_DELETE_FILES_IN_THIS_DIRECTORY.txt bzImage-edison.bin u-boot.bin edison-image-edison-20141101085834.hddimg u-boot-edison-2014.04-1- r0.bin edison-image-edison-20141101085834.rootfs.ext4 u-boot-edison-2014.04-1- r0.img edison-image-edison-20141101085834.rootfs.manifest u-boot-edison.bin edison-image-edison.ext4 u-boot-edison.img edison-image-edison.hddimg u-boot-envs edison-image-edison.manifest u-boot.img modules--3.10.17+git0+6ad20f049a_c03195ed6e-r0-edison-20141101085834.tgz Hooray!
  40. 40. Quick Start Yocto To fash image to Edison Connect Edison (via OTG) then, $ device-software/utils/flash/postBuild.sh $ build/toFlash/flashall.sh
  41. 41. Poky-Edison? ● Intel-forked version of poky ● Using systemd (Yes seriously) instead of sysvinit
  42. 42. Connect Hardware
  43. 43. Basic Interfaces ● GPIO – Digital I/O, PWM ● I2C – Edison has 2 I2C port. ● SPI ● UART – Edison has 2 UART port, but 1 for debugging normally. REMEMBER: Edison logic level is 1.8V!!
  44. 44. Additional Interfaces ● I2S – For ADC/DAC (audio codecs) ● SD – You need level shifter :( ● USB REMEMBER: Edison logic level is 1.8V!!
  45. 45. How to use them? ● Linux standard methods – User space – Kernel module ● MRAA(+UPM) (for basic interfaces) – A part of Intel iot-devkit project (Galileo) ● Arduino Library (for basic interfaces) – Need to hack around to use other than Arduino board. ● Quark bare metal – Not available so far
  46. 46. Using GPIO ● sysfs – Standard method – Used by MRAA and Arduino lib ● PCI device – Fast path to read/write – Example included in Intel-Arduino source ● Kernel – True interrupt
  47. 47. Quick Start MRAA (C) #include "mraa.h" void main() { mraa_gpio_context gpio; mraa_init(); gpio = mraa_gpio_init(8); mraa_gpio_dir(gpio, MRAA_GPIO_OUT); mraa_gpio_write(gpio, 1); mraa_gpio_close(gpio); }
  48. 48. Quick Start MRAA (JS) var m = require('mraa'); var myLed = new m.Gpio(13); myLed.dir(m.DIR_OUT); myLed.write(1);

×