SlideShare a Scribd company logo
1 of 82
Download to read offline
NERVES PROJECT
ENHANCED EMBEDDED SYSTEMS
198019801980
SMALLER!
EASIER!
I NEED AN EMBEDDED SYSTEM
AND I NEED IT IN 1 WEEK.
Element ID
this page intentionally left blank
NERVES LET US CREATE AND
DELIVER A PRODUCTION PRODUCT
IN 5 DAYS WITHOUT SACRIFICING
PERFORMANCE OR RELIABILITY.
Element ID
…UNLIKE OTHER EMBEDDED PLATFORMS
WE'VE USED, MODIFICATIONS AND
FEATURE ENHANCEMENTS ARE GOING TO
BE EASY TO DO IN THE FUTURE.
Element ID
2 Web Developers
5 Days
Community
elixir-lang slack #nerves
Frank
Hunleth
Justin
Schneck
Garth
Hitchens
NERVES
WHAT IS
WHAT IS NERVES
FRAMEWORKS PLATFORM TOOLING
WHAT IS NERVES
FRAMEWORKS PLATFORM TOOLING
nerves_led
nerves_networking
nerves_uart
elixir_ale
nerves_io_neopixel
nerves_ssdp_server
nerves_ssdp_client
nerves_hub
nerves_system_ag150
nerves_system_alix
nerves_system_bbb
nerves_system_rpi
nerves_system_rpi2
nerves_system_rpi3
nerves_system_br
nerves_toolchain
nerves_toolchain_…
mix tasks
• mix nerves.new
• mix
nerves.loadpaths
• mix
nerves.precompile
• mix firmware
• mix firmware.burn
utilities
• fwup
• cell
WHAT IS NERVES
SUPPORTED TARGETS TARGET NAME
Raspberry Pi B / A+ /B+ / Zero rpi
Raspberry Pi 2 rpi2
Raspberry Pi 3 rpi3
BeagleBone Black bbb
Alix alix
AG150 ag150
Intel Galileo 2 galileo
Lego EV3 ev3
QEmu Arm qemu_arm
WHAT IS NERVES
LINUX SINGLE BOARD COMPUTERS
SANDBOX
GETTING STARTED
THE SANDBOX
RASBIAN / DEBIAN LINUX
• Update system
• Establish network
• SSH
• Install Erlang (ESL)
• Install Elixir
• Checkout Blinky
• mix run
THE SANDBOX
RASBIAN / DEBIAN LINUX
THERE HAS TO
BE A BETTER
WAY!
NERVES PLATFORM
GETTING STARTED
GETTING STARTED - NERVES PLATFORM
LETS MAKE THIS EASY
# install bake
Bakefile…
bake system get —target
bake toolchain get —target
bake firmware
bake burn
GETTING STARTED - NERVES PLATFORM
LETS MAKE THIS EASY
mix deps.get
mix firmware
mix firmware.burn
GETTING STARTED - NERVES PLATFORM
MIXING FIRMWARE
YOUR APP
ELIXIR
C CODE
NIF / PORTS
GETTING STARTED - NERVES PLATFORM
COMPILING ON YOUR MACHINE
YOUR APP
ELIXIR
C CODE
NIF / PORTS
MIX
BEAM
BINARY
YOUR APP
(ARCH SPECIFIC)
GETTING STARTED - NERVES PLATFORM
MIXING FIRMWARE WITH BAKE
YOUR APP
ELIXIR
C CODE
NIF / PORTS
BAKE MIX
YOUR APP
(FOR RPI2)
GETTING STARTED - NERVES PLATFORM
MIXING FIRMWARE WITH BAKE
BAKE MIX
YOUR APP
(FOR RPI2)
TOOLCHAIN
SYSTEM
rpi2
GETTING STARTED - NERVES PLATFORM
MIXING FIRMWARE
MIX
YOUR APP
(FOR RPI2)
TOOLCHAIN
SYSTEM
rpi2
Precompile
compile
GETTING STARTED - NERVES PLATFORM
TOOLCHAINS
TOOLCHAINTOOLCHAIN CONFIG• crosstool
ng
• for target
• host
configs
• compilers
• run on
host
• compile
for target
GETTING STARTED - NERVES PLATFORM
TOOLCHAIN CONFIG
CT_LOCAL_TARBALLS_DIR="${CT_TOP_DIR}/../dl"
CT_SAVE_TARBALLS=y
CT_PREFIX_DIR="${CT_TOP_DIR}/../x-tools/${CT_TARGET}"
# CT_REMOVE_DOCS is not set
CT_LOG_EXTRA=y
CT_ARCH_FLOAT_HW=y
CT_ARCH_arm=y
CT_KERNEL_linux=y
CT_KERNEL_V_3_4=y
CT_BINUTILS_LINKER_LD_GOLD=y
CT_BINUTILS_GOLD_THREADS=y
CT_BINUTILS_LD_WRAPPER=y
CT_BINUTILS_PLUGINS=y
…
GETTING STARTED - NERVES PLATFORM
SYSTEMS
SYSTEMSYSTEM CONFIG
• buildroot
• defconfig
• rootfs-
additions
• bootfoles
• rootfs
• linux
kernel
GETTING STARTED - NERVES PLATFORM
SYSTEM CONFIG
BR2_arm=y
BR2_cortex_a7=y
BR2_ARM_FPU_NEON_VFPV4=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y
BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y
BR2_PACKAGE_NERVES_CONFIG_APPS="crypto"
BR2_PACKAGE_NERVES_CONFIG_EXTRA_MOUNTS="/dev/mmcblk0p3:/root:vfat:
BR2_PACKAGE_NERVES_CONFIG_HANG_ON_EXIT=y
BR2_PACKAGE_NERVES_CONFIG_UNIQUEID_PROG=""/usr/bin/boardid -b rpi
4""
BR2_PACKAGE_NERVES_CONFIG_HOSTNAME_PATTERN="nerves-%.4s"
BR2_PACKAGE_HOST_ERLANG_RELSYNC=y
BR2_PACKAGE_HOST_ERLANG_RELX=y
BR2_PACKAGE_HOST_FWUP=y
…
GETTING STARTED - NERVES PLATFORM
MIX LIFECYCLE
MIX deps.precompile
BOOTSTRAP
DEPS
phoenix
cowboy
nerves_system_rpi2
nerves_system_br
…
nerves.exs
config :nerves_system_rpi2, :nerves_env,
type: :system,
mirrors: [
"https://github.com/nerves-project/
nerves_system_rpi2/releases/download/
v#{version}/nerves_system_rpi2-
v#{version}.tar.gz"],
build_platform: Nerves.System.Platforms.BR,
build_config: [
defconfig: "nerves_defconfig"
]
nerves_system
DEPS
phoenix
cowboy
nerves_system_rpi2
nerves_system_br
…
SYSTEM ENV
GETTING STARTED - NERVES PLATFORM
MIX LIFECYCLE
MIX deps.precompile
BOOTSTRAP
nerves_system
deps.loadpaths
BOOTSTRAP
nerves_system
system
toolchain
compile
NERVES ENV
toolchain
GETTING STARTED - NERVES PLATFORM
NERVES BOOTSTRAP
mix archive.install https://github.com/nerves-project/archives/raw/
master/nerves_bootstrap.ez
GETTING STARTED - NERVES PLATFORM
MIX FILE
defmodule Blinky.Mixfile do
use Mix.Project
@target System.get_env("NERVES_TARGET") || “rpi2"
…
end
GETTING STARTED - NERVES PLATFORM
MIX FILE
defmodule Blinky.Mixfile do
…
def project do
[app: :blinky,
version: "0.1.0",
archives: [nerves_bootstrap: "~> 0.1"],
target: @target,
deps_path: "deps/#{@target}",
build_path: "_build/#{@target}",
config_path: "config/#{@target}/config.exs",
aliases: aliases,
deps: deps ++ system(@target)]
end
end
GETTING STARTED - NERVES PLATFORM
MIX FILE
defmodule Blinky.Mixfile do
…
def system("rpi2") do
[{:nerves_system_rpi2, “~> 0.4.0”}]
end
def aliases do
["deps.precompile": ["nerves.precompile", "deps.precompile"],
"deps.loadpaths": ["deps.loadpaths", "nerves.loadpaths"]]
end
end
GETTING STARTED - NERVES PLATFORM
MIX FILE
defmodule Blinky.Mixfile do
…
def system("rpi") do
[{:nerves_system_rpi, "~> 0.4.0"}]
end
def system("rpi2") do
[{:nerves_system_rpi2, “~> 0.4.0”}]
end
def system("rpi3") do
[{:nerves_system_rpi3, “~> 0.4.0”}]
end
…
end
GETTING STARTED - NERVES PLATFORM
CHANGING TARGETS
NERVES_TARGET=rpi3 mix deps.get
export NERVES_TARGET=rpi3
mix deps.get
mix deps.get
# @target System.get_env("NERVES_TARGET") || "rpi2"
GETTING STARTED - NERVES PLATFORM
MIX FIRMWARE
MIX compile
YOUR APP
(FOR RPI2)
… firmware
EXRM
system
erl_libs
OTP RELEASE
SYSTEM
FIRMWARE
BUNDLE
fwupsquash fs
GETTING STARTED - NERVES PLATFORM
MIX FIRMWARE
MIX compile
YOUR APP
(FOR RPI2)
… firmware
FIRMWARE
BUNDLE
fwup
SD CARD/
FIRMWARE
IMAGE
fwup
firmware.burn
FIRMWARE A
GETTING STARTED - NERVES PLATFORM
THE RESULT
linux
erlinit
your_app
readonly
FIRMWARE B
linux
erlinit
your_app
BOOT APPDATA
read/write
EXTRA
readonly readonly
FIRMWARE A
GETTING STARTED - NERVES PLATFORM
THE RESULT
linux
erlinit
your_app
readonly
FIRMWARE B
linux
erlinit
your_app
BOOT APPDATA
read/write
EXTRA
readonly readonly
FIRMWARE A
GETTING STARTED - NERVES PLATFORM
THE RESULT
linux
erlinit
your_app
readonly
FIRMWARE B
linux
erlinit
your_app
BOOT APPDATA
read/write
EXTRA
readonly readonly
frequent
non
frequent
NERVES FRAMEWORK
GETTING STARTED
GETTING STARTED - NERVES FRAMEWORK
NETWORKING
{:nerves_networking, “~> 0.5.0”}
{:ok, _} = Networking.setup :eth0
mode: "static",
ip: "10.0.0.5",
router: "10.0.0.1",
mask: "16",
subnet: "255.255.0.0",
mode: "static",
dns: "8.8.8.8 8.8.4.4",
hostname: "myhost"
GETTING STARTED - NERVES FRAMEWORK
WIFI
{:nerves_wifi, “~> 0.1.0”}
GETTING STARTED - NERVES FRAMEWORK
WIFI
WPA SUPPLICANT IPINTERFACE DETECTION
USB WLAN0 AP CONN CONN EST DHCP
Actor Actor Actor
Initialization Transitions
GETTING STARTED - NERVES FRAMEWORK
INTERACTING WITH HARDWARE
{:elixir_ale, “~> 0.4.0”}
{:ok, pid} = Gpio.start_link(1, :output)
Gpio.write(pid, 1)
USER INTERFACES
GETTING STARTED
GETTING STARTED - USER INTERFACES
PHOENIX FOR WEB ADMIN
your_app_umbrella
|- your_app_nerves
|- your_app_ui
UI CORE
DEV
GETTING STARTED - USER INTERFACES
UI CORESUPERVISOR
STUB STUB
STUB STUB
PIN PIN
PIN PIN
PROD
GETTING STARTED - USER INTERFACES
UI CORESUPERVISOR
STUB STUB
STUB STUB
PIN PIN
PIN PIN
GETTING STARTED - USER INTERFACES
NERVES FIRMWARE
ADVANCED
ADVANCED - NERVES FIRMWARE
ADDING FILES TO THE ROOT FILE SYSTEM
config :nerves, :firmware,
rootfs_additions: "config/rpi2/rootfs-additions"
rootfs-additions
|- etc
|- my_utility.conf
ROOTFS
ADVANCED - NERVES FIRMWARE
ADDING FILES TO THE ROOT FILE SYSTEM
config :nerves, :firmware,
rootfs_additions: "config/rpi2/rootfs-additions"
rootfs-additions
|- etc
|- my_utility.conf
ROOTFS
ADVANCED - NERVES FIRMWARE
CHANGING FILES ON ROOT FILESYSTEM
config :nerves, :firmware,
rootfs_additions: "config/rpi2/rootfs-additions"
rootfs-additions
|- etc
|- erlinit.conf
# Uncomment to hang the board rather than rebooting when
Erlang exits
#--hang-on-exit
ADVANCED - NERVES FIRMWARE
CHANGING FILES ON ROOT FILESYSTEM
ROOTFS
ADVANCED - NERVES FIRMWARE
CHANGING FILES ON ROOT FILESYSTEM
ROOTFS
ADVANCED - NERVES FIRMWARE
CHANGING FILES ON BOOT PARTITION
ADVANCED - NERVES FIRMWARE
CHANGING FILES ON BOOT PARTITION
# config/rpi2/config.exs
config :nerves, :firmware,
fwup_conf: "config/rpi2/fwup.conf",
# config/rpi2/fwup.conf
file-resource cmdline.txt {
host-path = “${NERVES_APP}/config/rpi2/cmdline.txt"
}
# config/rpi2/cmdline.txt
console=tty1 console=ttyS0,115200 root=/dev/mmcblk0p2 rootwait
ADVANCED - NERVES FIRMWARE
CHANGING FIRMWARE PARTITIONS
+----------------------------+
| MBR |
+----------------------------+
| p0: Boot partition (FAT32) |
| zImage, bootcode.bin, |
| config.txt, etc. |
+----------------------------+
| p1*: Rootfs A (squashfs) |
+----------------------------+
| p1*: Rootfs B (squashfs) |
+----------------------------+
| p2: Application (FAT32) |
+----------------------------+
ADVANCED - NERVES FIRMWARE
CHANGING FIRMWARE PARTITIONS
# Log partition
define(LOG_PART_OFFSET, 1643048)
define(LOG_PART_COUNT, 1048576)
partition 3 {
block-offset = ${LOG_PART_OFFSET}
block-count = ${LOG_PART_COUNT}
type = 0x83 # Linux
}
ADVANCED - NERVES FIRMWARE
CONNECTING TO REMOTE NODES
NERVES PROJECT
WHATS AHEAD
WHATS AHEAD
THE FUTURE-ISH
Display / Touch Screen support
Network Firmware Update
Develop Lifecycle
• Always connected target nodes
• Target Distributed ExText
• Development Kits
Easier IO for connecting to arduinos
Video camera support
Better Docs
Tutorials
Videos
Books
THE REVOLUTION
NERVES EMBEDDED SYSTEMS
THE REVOLUTION
CHANGE THE WORLD
THE REVOLUTION
CHANGE THE WORLD
LETS REWRITE
EMBEDDED
THE REVOLUTION
@wsmoak
THE REVOLUTION
@diptimmo
2016
2016
Justin Schneck
@mobileoverlord
@nervesproject

More Related Content

Viewers also liked

Janelle Ferro resume
Janelle Ferro resumeJanelle Ferro resume
Janelle Ferro resumeJanelle Ferro
 
Barcelona is beautiful
Barcelona is beautifulBarcelona is beautiful
Barcelona is beautifulAlexSB8
 
Las Leyes del Movimiento
Las Leyes del MovimientoLas Leyes del Movimiento
Las Leyes del Movimientoazael treviño
 
Cartilha infância adolescencia_online
Cartilha infância adolescencia_onlineCartilha infância adolescencia_online
Cartilha infância adolescencia_onlineACECTALCT
 
Prospects on Agric. & Afforestation in Abu Dhabi 2004 - Arabic
Prospects on Agric. & Afforestation in Abu Dhabi 2004 - ArabicProspects on Agric. & Afforestation in Abu Dhabi 2004 - Arabic
Prospects on Agric. & Afforestation in Abu Dhabi 2004 - ArabicAbdul-Sattar Al-Mashhadani
 
La observacion de los niños
La observacion de los niñosLa observacion de los niños
La observacion de los niñosmagdalena cando
 
This Dragon runs on African Oil
This Dragon runs on African OilThis Dragon runs on African Oil
This Dragon runs on African OilMatthew Pearson
 
Guion diseño y evaluación
Guion diseño y evaluaciónGuion diseño y evaluación
Guion diseño y evaluaciónticgrupo555
 
Moral casais juan_francisco_lu2_tarea_global2
Moral casais juan_francisco_lu2_tarea_global2Moral casais juan_francisco_lu2_tarea_global2
Moral casais juan_francisco_lu2_tarea_global2juan moral
 
Μηχανές και άνθρωποι
Μηχανές και άνθρωποιΜηχανές και άνθρωποι
Μηχανές και άνθρωποιMARIANTHI ARVANITIDOU
 

Viewers also liked (14)

Janelle Ferro resume
Janelle Ferro resumeJanelle Ferro resume
Janelle Ferro resume
 
Barcelona is beautiful
Barcelona is beautifulBarcelona is beautiful
Barcelona is beautiful
 
CVJ
CVJCVJ
CVJ
 
Las Leyes del Movimiento
Las Leyes del MovimientoLas Leyes del Movimiento
Las Leyes del Movimiento
 
Media task 3
Media task 3Media task 3
Media task 3
 
Cartilha infância adolescencia_online
Cartilha infância adolescencia_onlineCartilha infância adolescencia_online
Cartilha infância adolescencia_online
 
Prospects on Agric. & Afforestation in Abu Dhabi 2004 - Arabic
Prospects on Agric. & Afforestation in Abu Dhabi 2004 - ArabicProspects on Agric. & Afforestation in Abu Dhabi 2004 - Arabic
Prospects on Agric. & Afforestation in Abu Dhabi 2004 - Arabic
 
La observacion de los niños
La observacion de los niñosLa observacion de los niños
La observacion de los niños
 
CWG Final Presentation
CWG Final PresentationCWG Final Presentation
CWG Final Presentation
 
This Dragon runs on African Oil
This Dragon runs on African OilThis Dragon runs on African Oil
This Dragon runs on African Oil
 
Peugeot vs Volskwagen
Peugeot vs VolskwagenPeugeot vs Volskwagen
Peugeot vs Volskwagen
 
Guion diseño y evaluación
Guion diseño y evaluaciónGuion diseño y evaluación
Guion diseño y evaluación
 
Moral casais juan_francisco_lu2_tarea_global2
Moral casais juan_francisco_lu2_tarea_global2Moral casais juan_francisco_lu2_tarea_global2
Moral casais juan_francisco_lu2_tarea_global2
 
Μηχανές και άνθρωποι
Μηχανές και άνθρωποιΜηχανές και άνθρωποι
Μηχανές και άνθρωποι
 

Recently uploaded

Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...confluent
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Velvetech LLC
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxRTS corp
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Natan Silnitsky
 
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...Akihiro Suda
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based projectAnoyGreter
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Matt Ray
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaHanief Utama
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Angel Borroy López
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odishasmiwainfosol
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commercemanigoyal112
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...OnePlan Solutions
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)jennyeacort
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfFerryKemperman
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...Technogeeks
 
Xen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfXen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfStefano Stabellini
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceBrainSell Technologies
 

Recently uploaded (20)

Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
 
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based project
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief Utama
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
 
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort ServiceHot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commerce
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdf
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...
 
Xen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfXen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdf
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. Salesforce
 
Advantages of Odoo ERP 17 for Your Business
Advantages of Odoo ERP 17 for Your BusinessAdvantages of Odoo ERP 17 for Your Business
Advantages of Odoo ERP 17 for Your Business
 

Enhanced Embedded Systems With Nerves

  • 3.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10. I NEED AN EMBEDDED SYSTEM AND I NEED IT IN 1 WEEK. Element ID
  • 12.
  • 13. NERVES LET US CREATE AND DELIVER A PRODUCTION PRODUCT IN 5 DAYS WITHOUT SACRIFICING PERFORMANCE OR RELIABILITY. Element ID
  • 14. …UNLIKE OTHER EMBEDDED PLATFORMS WE'VE USED, MODIFICATIONS AND FEATURE ENHANCEMENTS ARE GOING TO BE EASY TO DO IN THE FUTURE. Element ID
  • 18. WHAT IS NERVES FRAMEWORKS PLATFORM TOOLING
  • 19. WHAT IS NERVES FRAMEWORKS PLATFORM TOOLING nerves_led nerves_networking nerves_uart elixir_ale nerves_io_neopixel nerves_ssdp_server nerves_ssdp_client nerves_hub nerves_system_ag150 nerves_system_alix nerves_system_bbb nerves_system_rpi nerves_system_rpi2 nerves_system_rpi3 nerves_system_br nerves_toolchain nerves_toolchain_… mix tasks • mix nerves.new • mix nerves.loadpaths • mix nerves.precompile • mix firmware • mix firmware.burn utilities • fwup • cell
  • 20. WHAT IS NERVES SUPPORTED TARGETS TARGET NAME Raspberry Pi B / A+ /B+ / Zero rpi Raspberry Pi 2 rpi2 Raspberry Pi 3 rpi3 BeagleBone Black bbb Alix alix AG150 ag150 Intel Galileo 2 galileo Lego EV3 ev3 QEmu Arm qemu_arm
  • 21. WHAT IS NERVES LINUX SINGLE BOARD COMPUTERS
  • 23. THE SANDBOX RASBIAN / DEBIAN LINUX • Update system • Establish network • SSH • Install Erlang (ESL) • Install Elixir • Checkout Blinky • mix run
  • 24. THE SANDBOX RASBIAN / DEBIAN LINUX
  • 25. THERE HAS TO BE A BETTER WAY!
  • 27. GETTING STARTED - NERVES PLATFORM LETS MAKE THIS EASY # install bake Bakefile… bake system get —target bake toolchain get —target bake firmware bake burn
  • 28. GETTING STARTED - NERVES PLATFORM LETS MAKE THIS EASY mix deps.get mix firmware mix firmware.burn
  • 29. GETTING STARTED - NERVES PLATFORM MIXING FIRMWARE YOUR APP ELIXIR C CODE NIF / PORTS
  • 30. GETTING STARTED - NERVES PLATFORM COMPILING ON YOUR MACHINE YOUR APP ELIXIR C CODE NIF / PORTS MIX BEAM BINARY YOUR APP (ARCH SPECIFIC)
  • 31. GETTING STARTED - NERVES PLATFORM MIXING FIRMWARE WITH BAKE YOUR APP ELIXIR C CODE NIF / PORTS BAKE MIX YOUR APP (FOR RPI2)
  • 32. GETTING STARTED - NERVES PLATFORM MIXING FIRMWARE WITH BAKE BAKE MIX YOUR APP (FOR RPI2) TOOLCHAIN SYSTEM rpi2
  • 33. GETTING STARTED - NERVES PLATFORM MIXING FIRMWARE MIX YOUR APP (FOR RPI2) TOOLCHAIN SYSTEM rpi2 Precompile compile
  • 34. GETTING STARTED - NERVES PLATFORM TOOLCHAINS TOOLCHAINTOOLCHAIN CONFIG• crosstool ng • for target • host configs • compilers • run on host • compile for target
  • 35. GETTING STARTED - NERVES PLATFORM TOOLCHAIN CONFIG CT_LOCAL_TARBALLS_DIR="${CT_TOP_DIR}/../dl" CT_SAVE_TARBALLS=y CT_PREFIX_DIR="${CT_TOP_DIR}/../x-tools/${CT_TARGET}" # CT_REMOVE_DOCS is not set CT_LOG_EXTRA=y CT_ARCH_FLOAT_HW=y CT_ARCH_arm=y CT_KERNEL_linux=y CT_KERNEL_V_3_4=y CT_BINUTILS_LINKER_LD_GOLD=y CT_BINUTILS_GOLD_THREADS=y CT_BINUTILS_LD_WRAPPER=y CT_BINUTILS_PLUGINS=y …
  • 36. GETTING STARTED - NERVES PLATFORM SYSTEMS SYSTEMSYSTEM CONFIG • buildroot • defconfig • rootfs- additions • bootfoles • rootfs • linux kernel
  • 37. GETTING STARTED - NERVES PLATFORM SYSTEM CONFIG BR2_arm=y BR2_cortex_a7=y BR2_ARM_FPU_NEON_VFPV4=y BR2_TOOLCHAIN_EXTERNAL=y BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y BR2_PACKAGE_NERVES_CONFIG_APPS="crypto" BR2_PACKAGE_NERVES_CONFIG_EXTRA_MOUNTS="/dev/mmcblk0p3:/root:vfat: BR2_PACKAGE_NERVES_CONFIG_HANG_ON_EXIT=y BR2_PACKAGE_NERVES_CONFIG_UNIQUEID_PROG=""/usr/bin/boardid -b rpi 4"" BR2_PACKAGE_NERVES_CONFIG_HOSTNAME_PATTERN="nerves-%.4s" BR2_PACKAGE_HOST_ERLANG_RELSYNC=y BR2_PACKAGE_HOST_ERLANG_RELX=y BR2_PACKAGE_HOST_FWUP=y …
  • 38. GETTING STARTED - NERVES PLATFORM MIX LIFECYCLE MIX deps.precompile BOOTSTRAP DEPS phoenix cowboy nerves_system_rpi2 nerves_system_br … nerves.exs config :nerves_system_rpi2, :nerves_env, type: :system, mirrors: [ "https://github.com/nerves-project/ nerves_system_rpi2/releases/download/ v#{version}/nerves_system_rpi2- v#{version}.tar.gz"], build_platform: Nerves.System.Platforms.BR, build_config: [ defconfig: "nerves_defconfig" ] nerves_system
  • 39. DEPS phoenix cowboy nerves_system_rpi2 nerves_system_br … SYSTEM ENV GETTING STARTED - NERVES PLATFORM MIX LIFECYCLE MIX deps.precompile BOOTSTRAP nerves_system deps.loadpaths BOOTSTRAP nerves_system system toolchain compile NERVES ENV toolchain
  • 40. GETTING STARTED - NERVES PLATFORM NERVES BOOTSTRAP mix archive.install https://github.com/nerves-project/archives/raw/ master/nerves_bootstrap.ez
  • 41. GETTING STARTED - NERVES PLATFORM MIX FILE defmodule Blinky.Mixfile do use Mix.Project @target System.get_env("NERVES_TARGET") || “rpi2" … end
  • 42. GETTING STARTED - NERVES PLATFORM MIX FILE defmodule Blinky.Mixfile do … def project do [app: :blinky, version: "0.1.0", archives: [nerves_bootstrap: "~> 0.1"], target: @target, deps_path: "deps/#{@target}", build_path: "_build/#{@target}", config_path: "config/#{@target}/config.exs", aliases: aliases, deps: deps ++ system(@target)] end end
  • 43. GETTING STARTED - NERVES PLATFORM MIX FILE defmodule Blinky.Mixfile do … def system("rpi2") do [{:nerves_system_rpi2, “~> 0.4.0”}] end def aliases do ["deps.precompile": ["nerves.precompile", "deps.precompile"], "deps.loadpaths": ["deps.loadpaths", "nerves.loadpaths"]] end end
  • 44. GETTING STARTED - NERVES PLATFORM MIX FILE defmodule Blinky.Mixfile do … def system("rpi") do [{:nerves_system_rpi, "~> 0.4.0"}] end def system("rpi2") do [{:nerves_system_rpi2, “~> 0.4.0”}] end def system("rpi3") do [{:nerves_system_rpi3, “~> 0.4.0”}] end … end
  • 45. GETTING STARTED - NERVES PLATFORM CHANGING TARGETS NERVES_TARGET=rpi3 mix deps.get export NERVES_TARGET=rpi3 mix deps.get mix deps.get # @target System.get_env("NERVES_TARGET") || "rpi2"
  • 46. GETTING STARTED - NERVES PLATFORM MIX FIRMWARE MIX compile YOUR APP (FOR RPI2) … firmware EXRM system erl_libs OTP RELEASE SYSTEM FIRMWARE BUNDLE fwupsquash fs
  • 47. GETTING STARTED - NERVES PLATFORM MIX FIRMWARE MIX compile YOUR APP (FOR RPI2) … firmware FIRMWARE BUNDLE fwup SD CARD/ FIRMWARE IMAGE fwup firmware.burn
  • 48. FIRMWARE A GETTING STARTED - NERVES PLATFORM THE RESULT linux erlinit your_app readonly FIRMWARE B linux erlinit your_app BOOT APPDATA read/write EXTRA readonly readonly
  • 49. FIRMWARE A GETTING STARTED - NERVES PLATFORM THE RESULT linux erlinit your_app readonly FIRMWARE B linux erlinit your_app BOOT APPDATA read/write EXTRA readonly readonly
  • 50. FIRMWARE A GETTING STARTED - NERVES PLATFORM THE RESULT linux erlinit your_app readonly FIRMWARE B linux erlinit your_app BOOT APPDATA read/write EXTRA readonly readonly frequent non frequent
  • 52. GETTING STARTED - NERVES FRAMEWORK NETWORKING {:nerves_networking, “~> 0.5.0”} {:ok, _} = Networking.setup :eth0 mode: "static", ip: "10.0.0.5", router: "10.0.0.1", mask: "16", subnet: "255.255.0.0", mode: "static", dns: "8.8.8.8 8.8.4.4", hostname: "myhost"
  • 53. GETTING STARTED - NERVES FRAMEWORK WIFI {:nerves_wifi, “~> 0.1.0”}
  • 54. GETTING STARTED - NERVES FRAMEWORK WIFI WPA SUPPLICANT IPINTERFACE DETECTION USB WLAN0 AP CONN CONN EST DHCP Actor Actor Actor Initialization Transitions
  • 55. GETTING STARTED - NERVES FRAMEWORK INTERACTING WITH HARDWARE {:elixir_ale, “~> 0.4.0”} {:ok, pid} = Gpio.start_link(1, :output) Gpio.write(pid, 1)
  • 57. GETTING STARTED - USER INTERFACES PHOENIX FOR WEB ADMIN your_app_umbrella |- your_app_nerves |- your_app_ui UI CORE
  • 58. DEV GETTING STARTED - USER INTERFACES UI CORESUPERVISOR STUB STUB STUB STUB PIN PIN PIN PIN
  • 59. PROD GETTING STARTED - USER INTERFACES UI CORESUPERVISOR STUB STUB STUB STUB PIN PIN PIN PIN
  • 60. GETTING STARTED - USER INTERFACES
  • 62. ADVANCED - NERVES FIRMWARE ADDING FILES TO THE ROOT FILE SYSTEM config :nerves, :firmware, rootfs_additions: "config/rpi2/rootfs-additions" rootfs-additions |- etc |- my_utility.conf ROOTFS
  • 63. ADVANCED - NERVES FIRMWARE ADDING FILES TO THE ROOT FILE SYSTEM config :nerves, :firmware, rootfs_additions: "config/rpi2/rootfs-additions" rootfs-additions |- etc |- my_utility.conf ROOTFS
  • 64. ADVANCED - NERVES FIRMWARE CHANGING FILES ON ROOT FILESYSTEM config :nerves, :firmware, rootfs_additions: "config/rpi2/rootfs-additions" rootfs-additions |- etc |- erlinit.conf # Uncomment to hang the board rather than rebooting when Erlang exits #--hang-on-exit
  • 65. ADVANCED - NERVES FIRMWARE CHANGING FILES ON ROOT FILESYSTEM ROOTFS
  • 66. ADVANCED - NERVES FIRMWARE CHANGING FILES ON ROOT FILESYSTEM ROOTFS
  • 67. ADVANCED - NERVES FIRMWARE CHANGING FILES ON BOOT PARTITION
  • 68. ADVANCED - NERVES FIRMWARE CHANGING FILES ON BOOT PARTITION # config/rpi2/config.exs config :nerves, :firmware, fwup_conf: "config/rpi2/fwup.conf", # config/rpi2/fwup.conf file-resource cmdline.txt { host-path = “${NERVES_APP}/config/rpi2/cmdline.txt" } # config/rpi2/cmdline.txt console=tty1 console=ttyS0,115200 root=/dev/mmcblk0p2 rootwait
  • 69. ADVANCED - NERVES FIRMWARE CHANGING FIRMWARE PARTITIONS +----------------------------+ | MBR | +----------------------------+ | p0: Boot partition (FAT32) | | zImage, bootcode.bin, | | config.txt, etc. | +----------------------------+ | p1*: Rootfs A (squashfs) | +----------------------------+ | p1*: Rootfs B (squashfs) | +----------------------------+ | p2: Application (FAT32) | +----------------------------+
  • 70. ADVANCED - NERVES FIRMWARE CHANGING FIRMWARE PARTITIONS # Log partition define(LOG_PART_OFFSET, 1643048) define(LOG_PART_COUNT, 1048576) partition 3 { block-offset = ${LOG_PART_OFFSET} block-count = ${LOG_PART_COUNT} type = 0x83 # Linux }
  • 71. ADVANCED - NERVES FIRMWARE CONNECTING TO REMOTE NODES
  • 73. WHATS AHEAD THE FUTURE-ISH Display / Touch Screen support Network Firmware Update Develop Lifecycle • Always connected target nodes • Target Distributed ExText • Development Kits Easier IO for connecting to arduinos Video camera support Better Docs Tutorials Videos Books
  • 80. 2016
  • 81. 2016