SlideShare a Scribd company logo
1 of 32
Download to read offline
Presented by
Date
Event
Internet of Tiny Linux (IoTL)
status and progressNicolas Pitre
BKK16-211 March 8, 2016
Linaro Connect BKK16
Internet of Tiny Linux (IoTL)
Discussion about various methods
put forward to reduce the size of
Linux kernel and user space binaries
to make them suitable for
small IoT applications.
Very pervasive:
● Cable/ADSL Modems
● Smart Phones
● Smart Watches
● Internet Connected Refrigerators
● WI-FI-Enabled Washing Machines
● Smart TV Sets
● Wi-Fi enabled Light Bulbs
● Connected Cars
● Alarm Systems monitored via Internet
● etc.
"Internet of Things" (IoT)
Problem: Cost
Software Development is
● Hard
● Expensive
● Slow
Legacy Software Maintenance is
● Hard
● Expensive
● Uninteresting
"Internet of Things" (IoT)
Another Problem: *Security*
● All solutions _will_ eventually be broken
○ Think NSA…
○ Then professional thieves...
○ Then script kiddies…
● Security Response is a _must_... even for gadgets!*
quote, Bruce Schneier:
https://www.schneier.com/essays/archives/2014/01/the_internet_of_thin.html
“The Internet of Things Is Wildly Insecure‫ـ‬And Often Unpatchable”
"Internet of Things" (IoT)
Solutions:
● Avoid custom base software
● Leverage the Open Source community
● Gather critical mass around common
infrastructure
● Share the cost of non-differentiating
development
"Internet of Things" (IoT)
Linux is a logical choice
● Large community of developers
● Best looked-after network stack
● Extensive storage options
● Already widely used in embedded setups
● Etc.
"Internet of Things" (IoT)
The Linux kernel is a logical choice... BUT
● it is featureful -> Bloat
● its default tuning is for high-end systems
● the emphasis is on scaling up more than scaling down
● its flexible configuration system leads to
○ Kconfig hell
○ suboptimal build
● is the largest component in most Linux-based embedded systems
Linux Kernel Size Reduction is part of the solution*
"Internet of Things" (IoT)
Reducing the Linux Kernel Size
What can be done?
Existing resources:
● Linux Kernel Tinification Wiki https://tiny.wiki.kernel.org/
● Kernel Size Reduction Work - eLinux.org http://elinux.
org/Kernel_Size_Reduction_Work
"Internet of Things" (IoT)
Reducing the Linux Kernel Size
Already Done (few examples):
● Compile out block device support.
● Compile out NTP support.
● Compile out support for capabilities (only root is granted
permission).
● Compile out support for non-root users and groups.
● Compile out printk() and related strings.
Needed: more similar config options.
"Internet of Things" (IoT)
Reducing the Linux Kernel Size
Work In Progress: A poor man's LTO[]
LTO is cool... BUT
Table 1: Full Kernel Build Timing
Table 2: Kernel Rebuild Timing After a Single Change
NOTE: Build Details: Linux v4.2 ARM multi_v7_defconfig gcc v5.1.0 Intel Core2 Q6600 CPU at 2.40GHz
Build Type Wall Time
Standard Build 4m53s
LTO Build 10m23s
Build Type Wall Time
Standard Build 0m12s
LTO Build 6m27s
"Internet of Things" (IoT)
Reducing the Linux Kernel Size
Alternative to LTO: `ld -gc-sections`
The `-gc-sections` result is somewhat bigger but so much faster to build.
Build Type Size (bytes) Reference %
allnoconfig 860508 100%
allnoconfig +
CONFIG_NO_SYSCALLS
815804 94.8%
allnoconfig +
CONFIG_NO_SYSCALLS +
CONFIG_GC_SECTIONS
555798 64.6%
allnoconfig +
CONFIG_NO_SYSCALLS +
CONFIG_LTO
488264 56.7%
"Internet of Things" (IoT)
Reducing the Linux Kernel Size
The `ld -gc-sections` approach: more intrusive than meets the eye
Let's not forget changes to linker scripts, modpost, etc.
--- a/arch/arm/include/asm/assembler.h
+++ b/arch/arm/include/asm/assembler.h
@@ -88,6 +88,17 @@
#endif
/*
+ * Special .pushsection wrapper with explicit dependency to prevent
+ * garbage collection of the specified section. This is needed when no
+ * explicit symbol references are made to this section.
+ */
+ .macro .pushlinkedsection name:vararg
+ .reloc . - 1, R_ARM_NONE, 9909f
+ .pushsection name
+9909:
+ .endm
+
+/*
"Internet of Things" (IoT)
Reducing the Linux Kernel Size (continued)
The `ld -gc-sections` approach: more intrusive than meets the eye
Let's not forget changes to linker scripts, modpost, etc.
* Enable and disable interrupts
*/
#if __LINUX_ARM_ARCH__ >= 6
@@ -239,7 +250,7 @@
#define USER(x...) 
9999: x; 
- .pushsection __ex_table,"a"; 
+ .pushlinkedsection __ex_table,"a"; 
.align 3; 
.long 9999b,9001f; 
.popsection
"Internet of Things" (IoT)
Reducing the Linux Kernel Size
Submitted Upstream: Trim unused exported kernel symbols
● EXPORT_SYMBOL(foo_bar) forces foo_bar() into the
kernel even if there is no users.
● Let's export only those symbols needed by the set of
configured modules.
● Allows LTO and -gc-sections to get rid of related code.
"Internet of Things" (IoT)
Reducing the Linux Kernel Size
List of symbols required by modules
----
$ nm linux/crypto/sha512_generic.ko
00000000 T cleanup_module
U crypto_register_shashes
00000880 T crypto_sha512_finup
00000bc0 T crypto_sha512_update
U crypto_unregister_shashes
00000000 T init_module
U memcpy
000000e8 r __module_depends
00000000 t sha384_base_init
00000000 d sha512_algs
00000090 t sha512_base_init
00000d00 t sha512_final
...
"Internet of Things" (IoT)
Reducing the Linux Kernel Size
List of symbols required by modules
linux/include/generated/autoksyms.h
----
/*
* Automatically generated file; DO NOT EDIT.
*/
#define __KSYM_crypto_register_shashes 1
#define __KSYM_crypto_unregister_shashes 1
#define __KSYM_memcpy 1
----
"Internet of Things" (IoT)
Reducing the Linux Kernel Size
Trim unused exported kernel symbols == some preprocessor magic
Excerpt from mainline submission
--- a/include/linux/export.h
+++ b/include/linux/export.h
@@ -65,6 +65,24 @@
__attribute__((section("___ksymtab" sec "+" #sym), unused)) 
= { (unsigned long)&sym, __kstrtab_##sym }
+#ifdef CONFIG_TRIM_UNUSED_KSYMS
+
+#include <linux/kconfig.h>
+#include <generated/autoksyms.h>
+
+#define __EXPORT_SYMBOL(sym, sec) 
+ __cond_export_sym(sym, sec, config_enabled(__KSYM_##sym))
+#define __cond_export_sym(sym, sec, conf) 
+ ___cond_export_sym(sym, sec, conf)
"Internet of Things" (IoT)
Reducing the Linux Kernel Size
Trim unused exported kernel symbols == some preprocessor magic (Continued)
Excerpt from mainline submission
+#define ___cond_export_sym(sym, sec, enabled) 
+ __cond_export_sym_##enabled(sym, sec)
+#define __cond_export_sym_1(sym, sec) ___EXPORT_SYMBOL(sym, sec)
+#define __cond_export_sym_0(sym, sec) /* nothing */
+
+#else
+#define __EXPORT_SYMBOL ___EXPORT_SYMBOL
+#endif
+
#define EXPORT_SYMBOL(sym) 
__EXPORT_SYMBOL(sym, "")
----
"Internet of Things" (IoT)
Reducing the Linux Kernel Size
Trim unused exported kernel symbols == more preprocessor magic
Excerpt from <linux/kconfig.h> for the config_enabled() definition
----
/*
* Getting something that works in C and CPP for an arg that may or may
* not be defined is tricky. Here, if we have "#define CONFIG_BOOGER 1"
* we match on the placeholder define, insert the "0," for arg1 and generate
* the triplet (0, 1, 0). Then the last step cherry picks the 2nd arg (a one).
* When CONFIG_BOOGER is not defined, we generate a (... 1, 0) pair, and when
* the last step cherry picks the 2nd arg, we get a zero.
*/
#define __ARG_PLACEHOLDER_1 0,
#define config_enabled(cfg) _config_enabled(cfg)
#define _config_enabled(value) __config_enabled(__ARG_PLACEHOLDER_##value)
#define __config_enabled(arg1_or_junk) ___config_enabled(arg1_or_junk 1, 0)
#define ___config_enabled(__ignored, val, ...) val
----
"Internet of Things" (IoT)
Reducing the Linux Kernel Size
Trim unused exported kernel symbols: build refresh dependencies
Avoid rebuilding the whole kernel when content of <linux/autoksyms.h>
changes.
First attempt: augment the fixdep parser
● EXPORT_SYMBOL()
● EXPORT_SYMBOL_GPL()
● EXPORT_PER_CPU_SYMBOL()
● EXPORT_EARLY_SYMBOL()
● ACPI_EXPORT_SYMBOL()
● ACPI_EXPORT_SYMBOL_INIT()
And combinations such as EXPORT_PER_CPU_SYMBOL_GPL(), etc.
"Internet of Things" (IoT)
Reducing the Linux Kernel Size
Trim unused exported kernel symbols: build refresh dependencies
Now this:
#define PCI_USER_READ_CONFIG(size, type) 
int pci_user_read_config_##size 
(struct pci_dev *dev, int pos, type *val) 
{ 
[...] 
} 
EXPORT_SYMBOL_GPL(pci_user_read_config_##size);
"Internet of Things" (IoT)
Reducing the Linux Kernel Size
Trim unused exported kernel symbols: build refresh dependencies
Extract symbol name warnings:
# Filter out exported kernel symbol names advertised as warning pragmas
# by the preprocessor and write them to $(1). We must consider continuation
# lines as well: they start with a blank, or the preceeding line ends with
# a ':'. Anything else is passed through as is.
# See also __KSYM_DEP() in include/linux/export.h.
ksym_dep_filter = sed -n 
-e '1 {x; $$!d;}' 
-e '/^ / {H; $$!d;}' 
-e 'x; /:$$/ {x; H; $$!d; s/^/ /; x;}' 
-e ':filter; /^.*KBUILD_AUTOKSYM_DEP: /! {p; b next;}' 
-e 's//KSYM_/; s/n.*//; w $(1)' 
-e ':next; $$!d' 
-e '1 q; s/^/ /; x; /^ /! b filter'
"Internet of Things" (IoT)
Reducing the Linux Kernel Size
Trim unused exported kernel symbols: build refresh dependencies
Dedicated preprocessor pass:
--- a/include/linux/export.h
+++ b/include/linux/export.h
@@ -65,7 +65,18 @@ extern struct module __this_module;
__attribute__((section("___ksymtab" sec "+" #sym), unused)) 
= { (unsigned long)&sym, __kstrtab_##sym }
-#ifdef CONFIG_TRIM_UNUSED_KSYMS
+#if defined(__KSYM_DEPS__)
+
+/*
+ * For fine grained build dependencies, we want to tell the build system
+ * about each possible exported symbol even if they're not actually exported.
+ * We use a string pattern that is unlikely to be valid code that the build
+ * system filters out from the preprocessor output (see ksym_dep_filter
+ * in scripts/Kbuild.include).
+ */
"Internet of Things" (IoT)
Reducing the Linux Kernel Size
Trim unused exported kernel symbols: build refresh dependencies (Continued)
Dedicated preprocessor pass:
+#define __EXPORT_SYMBOL(sym, sec) === __KSYM_##sym ===
+
+#elif defined(CONFIG_TRIM_UNUSED_KSYMS)
#include <linux/kconfig.h>
#include <generated/autoksyms.h>
"Internet of Things" (IoT)
Reducing the Linux Kernel Size
Trim unused exported kernel symbols: some numbers.
Kernel v4.5-rc2 X86 defconfig
Kernel v4.5-rc2 X86 defconfig + CONFIG_TRIM_UNUSED_KSYMS
Because the x86 defconfig only contains 18 modules, the number of
needed exported symbols is only 225 out of a possible 8806 for this
configuration. The kernel text size shrank by about 2.4%.
$ size vmlinux
text data bss dec hex filename
12362563 1856456 1101824 15320843 e9c70b vmlinux
$ wc -l Module.symvers
8806 Module.symvers
$ size vmlinux
text data bss dec hex filename
12059848 1856456 1101824 15018128 e52890 vmlinux
$ wc -l Module.symvers
225 Module.symvers
"Internet of Things" (IoT)
Reducing the Linux Kernel Size
Trim unused exported kernel symbols: more numbers, on ARM this time.
Kernel v4.5-rc2 ARM defconfig
.Kernel v4.5-rc2 ARM defconfig + CONFIG_TRIM_UNUSED_KSYMS
This time many more modules (279 of them) are part of the build configuration. Still, only 2703 out of 10044
exported symbols are required. And despite a smaller number of omitted exports, the kernel shrank by 3%.
NOTE: defconfig is equivalent to multi_v7_defconfig
$ size vmlinux
text data bss dec hex filename
13664222 1554068 351368 15569658 ed92fa vmlinux
$ wc -l Module.symvers
10044 Module.symvers
$ size vmlinux
text data bss dec hex filename
13255051 1554132 351240 15160423 e75467 vmlinux
$ wc -l Module.symvers
2703 Module.symvers
"Internet of Things" (IoT)
Reducing the Linux Kernel Size
Trim unused exported kernel symbols: more numbers using LTO build.
Kernel v4.5-rc2 ARM defconfig + LTO
Kernel v4.5-rc2 ARM defconfig + LTO + CONFIG_TRIM_UNUSED_KSYMS
This time the kernel shrank by 5%.
$ size vmlinux
text data bss dec hex filename
12813766 1538324 344356 14696446 e03ffe vmlinux
$ wc -l Module.symvers
8415 Module.symvers
$ size vmlinux
text data bss dec hex filename
12197437 1536052 338660 14072149 d6b955 vmlinux
$ wc -l Module.symvers
1742 Module.symvers
"Internet of Things" (IoT)
Reducing the Linux Kernel Size
Trim unused exported kernel symbols: more numbers on a small build. Let's have a look at a configuration that is potentially more representative of an embedded target.
Kernel v4.5-rc2 ARM realview_defconfig + LTO
Kernel v4.5-rc2 ARM realview_defconfig + LTO + CONFIG_TRIM_UNUSED_KSYMS
Here we reduced the kernel text by about 13.6%. Disabling module support altogether does
reduce it by 13.9% i.e. only 0.3% difference.
This means the overhead of using modules on embedded targets is greatly reduced.
$ size vmlinux
text data bss dec hex filename
4422942 209640 126880 4759462 489fa6 vmlinux
$ wc -l Module.symvers
5597 Module.symvers
$ size vmlinux
text data bss dec hex filename
3823485 205416 125800 4154701 3f654d vmlinux
$ wc -l Module.symvers
52 Module.symvers
"Internet of Things" (IoT)
Reducing the Linux Kernel Size *AND* User Space Size
What next?
● Apply same trick to system calls
● Tool to determine list of system calls used by user space
To be effective, this implies:
● Statically linked applications
● Single executable file (busybox style)
For more flexibility:
● Shared library with minimal support (discard unused objects)
● Fine grained object dependencies (more .o files with less code for each)
"Internet of Things" (IoT)
Reducing the Linux Kernel Size *AND* User
Space Size
Miscellaneous:
● Code utilization profiling
● Binary size regression tests
● NoMMU Linux on Cortex-A processors
● Mainline support for FDPIC executable format
● Revive XIP support for the kernel and user space
● More kernel feature modularization
"Internet of Things" (IoT)
Questions ?

More Related Content

What's hot

New Zephyr features: LWM2M / FOTA Framework - SFO17-113
New Zephyr features: LWM2M / FOTA Framework - SFO17-113New Zephyr features: LWM2M / FOTA Framework - SFO17-113
New Zephyr features: LWM2M / FOTA Framework - SFO17-113Linaro
 
Tommaso Cucinotta - Low-latency and power-efficient audio applications on Linux
Tommaso Cucinotta - Low-latency and power-efficient audio applications on LinuxTommaso Cucinotta - Low-latency and power-efficient audio applications on Linux
Tommaso Cucinotta - Low-latency and power-efficient audio applications on Linuxlinuxlab_conf
 
LAS16-TR03: Upstreaming 201
LAS16-TR03: Upstreaming 201LAS16-TR03: Upstreaming 201
LAS16-TR03: Upstreaming 201Linaro
 
Mirko Damiani - An Embedded soft real time distributed system in Go
Mirko Damiani - An Embedded soft real time distributed system in GoMirko Damiani - An Embedded soft real time distributed system in Go
Mirko Damiani - An Embedded soft real time distributed system in Golinuxlab_conf
 
IPSN 2009 Contiki / uIP tutorial
IPSN 2009 Contiki / uIP tutorialIPSN 2009 Contiki / uIP tutorial
IPSN 2009 Contiki / uIP tutorialadamdunkels
 
Deploy STM32 family on Zephyr - SFO17-102
Deploy STM32 family on Zephyr - SFO17-102Deploy STM32 family on Zephyr - SFO17-102
Deploy STM32 family on Zephyr - SFO17-102Linaro
 
Using SoC Vendor HALs in the Zephyr Project - SFO17-112
Using SoC Vendor HALs in the Zephyr Project - SFO17-112Using SoC Vendor HALs in the Zephyr Project - SFO17-112
Using SoC Vendor HALs in the Zephyr Project - SFO17-112Linaro
 
LAS16-500: The Rise and Fall of Assembler and the VGIC from Hell
LAS16-500: The Rise and Fall of Assembler and the VGIC from HellLAS16-500: The Rise and Fall of Assembler and the VGIC from Hell
LAS16-500: The Rise and Fall of Assembler and the VGIC from HellLinaro
 
Deep Learning on ARM Platforms - SFO17-509
Deep Learning on ARM Platforms - SFO17-509Deep Learning on ARM Platforms - SFO17-509
Deep Learning on ARM Platforms - SFO17-509Linaro
 
BUD17-104: Scripting Languages in IoT: Challenges and Approaches
BUD17-104: Scripting Languages in IoT: Challenges and ApproachesBUD17-104: Scripting Languages in IoT: Challenges and Approaches
BUD17-104: Scripting Languages in IoT: Challenges and ApproachesLinaro
 
Alessio Lama - Development and testing of a safety network protocol
Alessio Lama - Development and testing of a safety network protocolAlessio Lama - Development and testing of a safety network protocol
Alessio Lama - Development and testing of a safety network protocollinuxlab_conf
 
SGX Trusted Execution Environment
SGX Trusted Execution EnvironmentSGX Trusted Execution Environment
SGX Trusted Execution EnvironmentKernel TLV
 
Linux-wpan: IEEE 802.15.4 and 6LoWPAN in the Linux Kernel - BUD17-120
Linux-wpan: IEEE 802.15.4 and 6LoWPAN in the Linux Kernel - BUD17-120Linux-wpan: IEEE 802.15.4 and 6LoWPAN in the Linux Kernel - BUD17-120
Linux-wpan: IEEE 802.15.4 and 6LoWPAN in the Linux Kernel - BUD17-120Linaro
 
Claudio Scordino - Handling mixed criticality on embedded multi-core systems
Claudio Scordino - Handling mixed criticality on embedded multi-core systemsClaudio Scordino - Handling mixed criticality on embedded multi-core systems
Claudio Scordino - Handling mixed criticality on embedded multi-core systemslinuxlab_conf
 
Luca Cipriani - Control your Embedded Linux remotely by using MQTT and a web ...
Luca Cipriani - Control your Embedded Linux remotely by using MQTT and a web ...Luca Cipriani - Control your Embedded Linux remotely by using MQTT and a web ...
Luca Cipriani - Control your Embedded Linux remotely by using MQTT and a web ...linuxlab_conf
 
Andrea Righi - Spying on the Linux kernel for fun and profit
Andrea Righi - Spying on the Linux kernel for fun and profitAndrea Righi - Spying on the Linux kernel for fun and profit
Andrea Righi - Spying on the Linux kernel for fun and profitlinuxlab_conf
 
Kernel Recipes 2015: Greybus
Kernel Recipes 2015: GreybusKernel Recipes 2015: Greybus
Kernel Recipes 2015: GreybusAnne Nicolas
 
Valerio Di Giampietro - Introduction To IoT Reverse Engineering with an examp...
Valerio Di Giampietro - Introduction To IoT Reverse Engineering with an examp...Valerio Di Giampietro - Introduction To IoT Reverse Engineering with an examp...
Valerio Di Giampietro - Introduction To IoT Reverse Engineering with an examp...linuxlab_conf
 

What's hot (20)

New Zephyr features: LWM2M / FOTA Framework - SFO17-113
New Zephyr features: LWM2M / FOTA Framework - SFO17-113New Zephyr features: LWM2M / FOTA Framework - SFO17-113
New Zephyr features: LWM2M / FOTA Framework - SFO17-113
 
Tommaso Cucinotta - Low-latency and power-efficient audio applications on Linux
Tommaso Cucinotta - Low-latency and power-efficient audio applications on LinuxTommaso Cucinotta - Low-latency and power-efficient audio applications on Linux
Tommaso Cucinotta - Low-latency and power-efficient audio applications on Linux
 
LAS16-TR03: Upstreaming 201
LAS16-TR03: Upstreaming 201LAS16-TR03: Upstreaming 201
LAS16-TR03: Upstreaming 201
 
Mirko Damiani - An Embedded soft real time distributed system in Go
Mirko Damiani - An Embedded soft real time distributed system in GoMirko Damiani - An Embedded soft real time distributed system in Go
Mirko Damiani - An Embedded soft real time distributed system in Go
 
IPSN 2009 Contiki / uIP tutorial
IPSN 2009 Contiki / uIP tutorialIPSN 2009 Contiki / uIP tutorial
IPSN 2009 Contiki / uIP tutorial
 
Deploy STM32 family on Zephyr - SFO17-102
Deploy STM32 family on Zephyr - SFO17-102Deploy STM32 family on Zephyr - SFO17-102
Deploy STM32 family on Zephyr - SFO17-102
 
Using SoC Vendor HALs in the Zephyr Project - SFO17-112
Using SoC Vendor HALs in the Zephyr Project - SFO17-112Using SoC Vendor HALs in the Zephyr Project - SFO17-112
Using SoC Vendor HALs in the Zephyr Project - SFO17-112
 
LAS16-500: The Rise and Fall of Assembler and the VGIC from Hell
LAS16-500: The Rise and Fall of Assembler and the VGIC from HellLAS16-500: The Rise and Fall of Assembler and the VGIC from Hell
LAS16-500: The Rise and Fall of Assembler and the VGIC from Hell
 
Deep Learning on ARM Platforms - SFO17-509
Deep Learning on ARM Platforms - SFO17-509Deep Learning on ARM Platforms - SFO17-509
Deep Learning on ARM Platforms - SFO17-509
 
BUD17-104: Scripting Languages in IoT: Challenges and Approaches
BUD17-104: Scripting Languages in IoT: Challenges and ApproachesBUD17-104: Scripting Languages in IoT: Challenges and Approaches
BUD17-104: Scripting Languages in IoT: Challenges and Approaches
 
Alessio Lama - Development and testing of a safety network protocol
Alessio Lama - Development and testing of a safety network protocolAlessio Lama - Development and testing of a safety network protocol
Alessio Lama - Development and testing of a safety network protocol
 
SGX Trusted Execution Environment
SGX Trusted Execution EnvironmentSGX Trusted Execution Environment
SGX Trusted Execution Environment
 
Linux-wpan: IEEE 802.15.4 and 6LoWPAN in the Linux Kernel - BUD17-120
Linux-wpan: IEEE 802.15.4 and 6LoWPAN in the Linux Kernel - BUD17-120Linux-wpan: IEEE 802.15.4 and 6LoWPAN in the Linux Kernel - BUD17-120
Linux-wpan: IEEE 802.15.4 and 6LoWPAN in the Linux Kernel - BUD17-120
 
Claudio Scordino - Handling mixed criticality on embedded multi-core systems
Claudio Scordino - Handling mixed criticality on embedded multi-core systemsClaudio Scordino - Handling mixed criticality on embedded multi-core systems
Claudio Scordino - Handling mixed criticality on embedded multi-core systems
 
Luca Cipriani - Control your Embedded Linux remotely by using MQTT and a web ...
Luca Cipriani - Control your Embedded Linux remotely by using MQTT and a web ...Luca Cipriani - Control your Embedded Linux remotely by using MQTT and a web ...
Luca Cipriani - Control your Embedded Linux remotely by using MQTT and a web ...
 
Andrea Righi - Spying on the Linux kernel for fun and profit
Andrea Righi - Spying on the Linux kernel for fun and profitAndrea Righi - Spying on the Linux kernel for fun and profit
Andrea Righi - Spying on the Linux kernel for fun and profit
 
Kernel Recipes 2015: Greybus
Kernel Recipes 2015: GreybusKernel Recipes 2015: Greybus
Kernel Recipes 2015: Greybus
 
Contiki OS Research Projects Guidance
Contiki OS Research Projects GuidanceContiki OS Research Projects Guidance
Contiki OS Research Projects Guidance
 
Valerio Di Giampietro - Introduction To IoT Reverse Engineering with an examp...
Valerio Di Giampietro - Introduction To IoT Reverse Engineering with an examp...Valerio Di Giampietro - Introduction To IoT Reverse Engineering with an examp...
Valerio Di Giampietro - Introduction To IoT Reverse Engineering with an examp...
 
Libpcap
LibpcapLibpcap
Libpcap
 

Viewers also liked

BKK16-107 Budget Fair Queueing heuristics in the block layer
BKK16-107 Budget Fair Queueing heuristics in the block layerBKK16-107 Budget Fair Queueing heuristics in the block layer
BKK16-107 Budget Fair Queueing heuristics in the block layerLinaro
 
BKK16-309A Open Platform support in UEFI
BKK16-309A Open Platform support in UEFIBKK16-309A Open Platform support in UEFI
BKK16-309A Open Platform support in UEFILinaro
 
BKK16-505 Kernel and Bootloader Consolidation and Upstreaming
BKK16-505 Kernel and Bootloader Consolidation and UpstreamingBKK16-505 Kernel and Bootloader Consolidation and Upstreaming
BKK16-505 Kernel and Bootloader Consolidation and UpstreamingLinaro
 
LAS16-306: Exploring the Open Trusted Protocol
LAS16-306: Exploring the Open Trusted ProtocolLAS16-306: Exploring the Open Trusted Protocol
LAS16-306: Exploring the Open Trusted ProtocolLinaro
 
SFO15-200: Linux kernel generic TEE driver
SFO15-200: Linux kernel generic TEE driverSFO15-200: Linux kernel generic TEE driver
SFO15-200: Linux kernel generic TEE driverLinaro
 
BKK16-201 Play Ready OPTEE Integration with Secure Video Path lhg-1
BKK16-201 Play Ready OPTEE Integration with Secure Video Path lhg-1BKK16-201 Play Ready OPTEE Integration with Secure Video Path lhg-1
BKK16-201 Play Ready OPTEE Integration with Secure Video Path lhg-1Linaro
 
HKG15-505: Power Management interactions with OP-TEE and Trusted Firmware
HKG15-505: Power Management interactions with OP-TEE and Trusted FirmwareHKG15-505: Power Management interactions with OP-TEE and Trusted Firmware
HKG15-505: Power Management interactions with OP-TEE and Trusted FirmwareLinaro
 
BKK16-200 Designing Security into low cost IO T Systems
BKK16-200 Designing Security into low cost IO T SystemsBKK16-200 Designing Security into low cost IO T Systems
BKK16-200 Designing Security into low cost IO T SystemsLinaro
 
LAS16-504: Secure Storage updates in OP-TEE
LAS16-504: Secure Storage updates in OP-TEELAS16-504: Secure Storage updates in OP-TEE
LAS16-504: Secure Storage updates in OP-TEELinaro
 
SFO15-503: Secure storage in OP-TEE
SFO15-503: Secure storage in OP-TEESFO15-503: Secure storage in OP-TEE
SFO15-503: Secure storage in OP-TEELinaro
 
LCU14 500 ARM Trusted Firmware
LCU14 500 ARM Trusted FirmwareLCU14 500 ARM Trusted Firmware
LCU14 500 ARM Trusted FirmwareLinaro
 
LAS16-203: Platform security architecture for embedded devices
LAS16-203: Platform security architecture for embedded devicesLAS16-203: Platform security architecture for embedded devices
LAS16-203: Platform security architecture for embedded devicesLinaro
 
LCU14-103: How to create and run Trusted Applications on OP-TEE
LCU14-103: How to create and run Trusted Applications on OP-TEELCU14-103: How to create and run Trusted Applications on OP-TEE
LCU14-103: How to create and run Trusted Applications on OP-TEELinaro
 
HKG15-311: OP-TEE for Beginners and Porting Review
HKG15-311: OP-TEE for Beginners and Porting ReviewHKG15-311: OP-TEE for Beginners and Porting Review
HKG15-311: OP-TEE for Beginners and Porting ReviewLinaro
 
LAS16-111: Easing Access to ARM TrustZone – OP-TEE and Raspberry Pi 3
LAS16-111: Easing Access to ARM TrustZone – OP-TEE and Raspberry Pi 3LAS16-111: Easing Access to ARM TrustZone – OP-TEE and Raspberry Pi 3
LAS16-111: Easing Access to ARM TrustZone – OP-TEE and Raspberry Pi 3Linaro
 
HKG15-505: Power Management interactions with OP-TEE and Trusted Firmware
HKG15-505: Power Management interactions with OP-TEE and Trusted FirmwareHKG15-505: Power Management interactions with OP-TEE and Trusted Firmware
HKG15-505: Power Management interactions with OP-TEE and Trusted FirmwareLinaro
 
BUD17-400: Secure Data Path with OPTEE
BUD17-400: Secure Data Path with OPTEE BUD17-400: Secure Data Path with OPTEE
BUD17-400: Secure Data Path with OPTEE Linaro
 
LAS16-402: ARM Trusted Firmware – from Enterprise to Embedded
LAS16-402: ARM Trusted Firmware – from Enterprise to EmbeddedLAS16-402: ARM Trusted Firmware – from Enterprise to Embedded
LAS16-402: ARM Trusted Firmware – from Enterprise to EmbeddedLinaro
 
BUD17-DF15 - Optimized Android N MR1 + 4.9 Kernel
BUD17-DF15 - Optimized Android N MR1 + 4.9 KernelBUD17-DF15 - Optimized Android N MR1 + 4.9 Kernel
BUD17-DF15 - Optimized Android N MR1 + 4.9 KernelLinaro
 

Viewers also liked (19)

BKK16-107 Budget Fair Queueing heuristics in the block layer
BKK16-107 Budget Fair Queueing heuristics in the block layerBKK16-107 Budget Fair Queueing heuristics in the block layer
BKK16-107 Budget Fair Queueing heuristics in the block layer
 
BKK16-309A Open Platform support in UEFI
BKK16-309A Open Platform support in UEFIBKK16-309A Open Platform support in UEFI
BKK16-309A Open Platform support in UEFI
 
BKK16-505 Kernel and Bootloader Consolidation and Upstreaming
BKK16-505 Kernel and Bootloader Consolidation and UpstreamingBKK16-505 Kernel and Bootloader Consolidation and Upstreaming
BKK16-505 Kernel and Bootloader Consolidation and Upstreaming
 
LAS16-306: Exploring the Open Trusted Protocol
LAS16-306: Exploring the Open Trusted ProtocolLAS16-306: Exploring the Open Trusted Protocol
LAS16-306: Exploring the Open Trusted Protocol
 
SFO15-200: Linux kernel generic TEE driver
SFO15-200: Linux kernel generic TEE driverSFO15-200: Linux kernel generic TEE driver
SFO15-200: Linux kernel generic TEE driver
 
BKK16-201 Play Ready OPTEE Integration with Secure Video Path lhg-1
BKK16-201 Play Ready OPTEE Integration with Secure Video Path lhg-1BKK16-201 Play Ready OPTEE Integration with Secure Video Path lhg-1
BKK16-201 Play Ready OPTEE Integration with Secure Video Path lhg-1
 
HKG15-505: Power Management interactions with OP-TEE and Trusted Firmware
HKG15-505: Power Management interactions with OP-TEE and Trusted FirmwareHKG15-505: Power Management interactions with OP-TEE and Trusted Firmware
HKG15-505: Power Management interactions with OP-TEE and Trusted Firmware
 
BKK16-200 Designing Security into low cost IO T Systems
BKK16-200 Designing Security into low cost IO T SystemsBKK16-200 Designing Security into low cost IO T Systems
BKK16-200 Designing Security into low cost IO T Systems
 
LAS16-504: Secure Storage updates in OP-TEE
LAS16-504: Secure Storage updates in OP-TEELAS16-504: Secure Storage updates in OP-TEE
LAS16-504: Secure Storage updates in OP-TEE
 
SFO15-503: Secure storage in OP-TEE
SFO15-503: Secure storage in OP-TEESFO15-503: Secure storage in OP-TEE
SFO15-503: Secure storage in OP-TEE
 
LCU14 500 ARM Trusted Firmware
LCU14 500 ARM Trusted FirmwareLCU14 500 ARM Trusted Firmware
LCU14 500 ARM Trusted Firmware
 
LAS16-203: Platform security architecture for embedded devices
LAS16-203: Platform security architecture for embedded devicesLAS16-203: Platform security architecture for embedded devices
LAS16-203: Platform security architecture for embedded devices
 
LCU14-103: How to create and run Trusted Applications on OP-TEE
LCU14-103: How to create and run Trusted Applications on OP-TEELCU14-103: How to create and run Trusted Applications on OP-TEE
LCU14-103: How to create and run Trusted Applications on OP-TEE
 
HKG15-311: OP-TEE for Beginners and Porting Review
HKG15-311: OP-TEE for Beginners and Porting ReviewHKG15-311: OP-TEE for Beginners and Porting Review
HKG15-311: OP-TEE for Beginners and Porting Review
 
LAS16-111: Easing Access to ARM TrustZone – OP-TEE and Raspberry Pi 3
LAS16-111: Easing Access to ARM TrustZone – OP-TEE and Raspberry Pi 3LAS16-111: Easing Access to ARM TrustZone – OP-TEE and Raspberry Pi 3
LAS16-111: Easing Access to ARM TrustZone – OP-TEE and Raspberry Pi 3
 
HKG15-505: Power Management interactions with OP-TEE and Trusted Firmware
HKG15-505: Power Management interactions with OP-TEE and Trusted FirmwareHKG15-505: Power Management interactions with OP-TEE and Trusted Firmware
HKG15-505: Power Management interactions with OP-TEE and Trusted Firmware
 
BUD17-400: Secure Data Path with OPTEE
BUD17-400: Secure Data Path with OPTEE BUD17-400: Secure Data Path with OPTEE
BUD17-400: Secure Data Path with OPTEE
 
LAS16-402: ARM Trusted Firmware – from Enterprise to Embedded
LAS16-402: ARM Trusted Firmware – from Enterprise to EmbeddedLAS16-402: ARM Trusted Firmware – from Enterprise to Embedded
LAS16-402: ARM Trusted Firmware – from Enterprise to Embedded
 
BUD17-DF15 - Optimized Android N MR1 + 4.9 Kernel
BUD17-DF15 - Optimized Android N MR1 + 4.9 KernelBUD17-DF15 - Optimized Android N MR1 + 4.9 Kernel
BUD17-DF15 - Optimized Android N MR1 + 4.9 Kernel
 

Similar to IoTL Status and Progress

IoT Getting Started with Intel® IoT Devkit
IoT Getting Started with Intel® IoT DevkitIoT Getting Started with Intel® IoT Devkit
IoT Getting Started with Intel® IoT DevkitVasily Ryzhonkov
 
First Steps Developing Embedded Applications using Heterogeneous Multi-core P...
First Steps Developing Embedded Applications using Heterogeneous Multi-core P...First Steps Developing Embedded Applications using Heterogeneous Multi-core P...
First Steps Developing Embedded Applications using Heterogeneous Multi-core P...Toradex
 
Introduction to Linux Kernel Development
Introduction to Linux Kernel DevelopmentIntroduction to Linux Kernel Development
Introduction to Linux Kernel DevelopmentLevente Kurusa
 
Exploiting Llinux Environment
Exploiting Llinux EnvironmentExploiting Llinux Environment
Exploiting Llinux EnvironmentEnrico Scapin
 
Userspace drivers-2016
Userspace drivers-2016Userspace drivers-2016
Userspace drivers-2016Chris Simmonds
 
Auditing the Opensource Kernels
Auditing the Opensource KernelsAuditing the Opensource Kernels
Auditing the Opensource KernelsSilvio Cesare
 
MattsonTutorialSC14.pptx
MattsonTutorialSC14.pptxMattsonTutorialSC14.pptx
MattsonTutorialSC14.pptxgopikahari7
 
Introduction To Linux Kernel Modules
Introduction To Linux Kernel ModulesIntroduction To Linux Kernel Modules
Introduction To Linux Kernel Modulesdibyajyotig
 
Lab Handson: Power your Creations with Intel Edison!
Lab Handson: Power your Creations with Intel Edison!Lab Handson: Power your Creations with Intel Edison!
Lab Handson: Power your Creations with Intel Edison!Codemotion
 
syzbot and the tale of million kernel bugs
syzbot and the tale of million kernel bugssyzbot and the tale of million kernel bugs
syzbot and the tale of million kernel bugsDmitry Vyukov
 
[OpenInfra Days Korea 2018] Day 2 - E4 - 딥다이브: immutable Kubernetes architecture
[OpenInfra Days Korea 2018] Day 2 - E4 - 딥다이브: immutable Kubernetes architecture[OpenInfra Days Korea 2018] Day 2 - E4 - 딥다이브: immutable Kubernetes architecture
[OpenInfra Days Korea 2018] Day 2 - E4 - 딥다이브: immutable Kubernetes architectureOpenStack Korea Community
 
Android on IA devices and Intel Tools
Android on IA devices and Intel ToolsAndroid on IA devices and Intel Tools
Android on IA devices and Intel ToolsXavier Hallade
 
[Defcon] Hardware backdooring is practical
[Defcon] Hardware backdooring is practical[Defcon] Hardware backdooring is practical
[Defcon] Hardware backdooring is practicalMoabi.com
 
DEF CON 23 - Phil Polstra - one device to pwn them all
DEF CON 23 - Phil Polstra - one device to pwn them allDEF CON 23 - Phil Polstra - one device to pwn them all
DEF CON 23 - Phil Polstra - one device to pwn them allFelipe Prado
 

Similar to IoTL Status and Progress (20)

Начало работы с Intel IoT Dev Kit
Начало работы с Intel IoT Dev KitНачало работы с Intel IoT Dev Kit
Начало работы с Intel IoT Dev Kit
 
IoT Getting Started with Intel® IoT Devkit
IoT Getting Started with Intel® IoT DevkitIoT Getting Started with Intel® IoT Devkit
IoT Getting Started with Intel® IoT Devkit
 
First Steps Developing Embedded Applications using Heterogeneous Multi-core P...
First Steps Developing Embedded Applications using Heterogeneous Multi-core P...First Steps Developing Embedded Applications using Heterogeneous Multi-core P...
First Steps Developing Embedded Applications using Heterogeneous Multi-core P...
 
Introduction to Linux Kernel Development
Introduction to Linux Kernel DevelopmentIntroduction to Linux Kernel Development
Introduction to Linux Kernel Development
 
Exploiting Llinux Environment
Exploiting Llinux EnvironmentExploiting Llinux Environment
Exploiting Llinux Environment
 
Userspace drivers-2016
Userspace drivers-2016Userspace drivers-2016
Userspace drivers-2016
 
Auditing the Opensource Kernels
Auditing the Opensource KernelsAuditing the Opensource Kernels
Auditing the Opensource Kernels
 
MattsonTutorialSC14.pptx
MattsonTutorialSC14.pptxMattsonTutorialSC14.pptx
MattsonTutorialSC14.pptx
 
Basic Linux kernel
Basic Linux kernelBasic Linux kernel
Basic Linux kernel
 
Introduction To Linux Kernel Modules
Introduction To Linux Kernel ModulesIntroduction To Linux Kernel Modules
Introduction To Linux Kernel Modules
 
Lab Handson: Power your Creations with Intel Edison!
Lab Handson: Power your Creations with Intel Edison!Lab Handson: Power your Creations with Intel Edison!
Lab Handson: Power your Creations with Intel Edison!
 
MattsonTutorialSC14.pdf
MattsonTutorialSC14.pdfMattsonTutorialSC14.pdf
MattsonTutorialSC14.pdf
 
Programar para GPUs
Programar para GPUsProgramar para GPUs
Programar para GPUs
 
syzbot and the tale of million kernel bugs
syzbot and the tale of million kernel bugssyzbot and the tale of million kernel bugs
syzbot and the tale of million kernel bugs
 
New204
New204New204
New204
 
[OpenInfra Days Korea 2018] Day 2 - E4 - 딥다이브: immutable Kubernetes architecture
[OpenInfra Days Korea 2018] Day 2 - E4 - 딥다이브: immutable Kubernetes architecture[OpenInfra Days Korea 2018] Day 2 - E4 - 딥다이브: immutable Kubernetes architecture
[OpenInfra Days Korea 2018] Day 2 - E4 - 딥다이브: immutable Kubernetes architecture
 
Android on IA devices and Intel Tools
Android on IA devices and Intel ToolsAndroid on IA devices and Intel Tools
Android on IA devices and Intel Tools
 
[Defcon] Hardware backdooring is practical
[Defcon] Hardware backdooring is practical[Defcon] Hardware backdooring is practical
[Defcon] Hardware backdooring is practical
 
DEF CON 23 - Phil Polstra - one device to pwn them all
DEF CON 23 - Phil Polstra - one device to pwn them allDEF CON 23 - Phil Polstra - one device to pwn them all
DEF CON 23 - Phil Polstra - one device to pwn them all
 
Ansible101
Ansible101Ansible101
Ansible101
 

More from Linaro

Deep Learning Neural Network Acceleration at the Edge - Andrea Gallo
Deep Learning Neural Network Acceleration at the Edge - Andrea GalloDeep Learning Neural Network Acceleration at the Edge - Andrea Gallo
Deep Learning Neural Network Acceleration at the Edge - Andrea GalloLinaro
 
Arm Architecture HPC Workshop Santa Clara 2018 - Kanta Vekaria
Arm Architecture HPC Workshop Santa Clara 2018 - Kanta VekariaArm Architecture HPC Workshop Santa Clara 2018 - Kanta Vekaria
Arm Architecture HPC Workshop Santa Clara 2018 - Kanta VekariaLinaro
 
Huawei’s requirements for the ARM based HPC solution readiness - Joshua Mora
Huawei’s requirements for the ARM based HPC solution readiness - Joshua MoraHuawei’s requirements for the ARM based HPC solution readiness - Joshua Mora
Huawei’s requirements for the ARM based HPC solution readiness - Joshua MoraLinaro
 
Bud17 113: distribution ci using qemu and open qa
Bud17 113: distribution ci using qemu and open qaBud17 113: distribution ci using qemu and open qa
Bud17 113: distribution ci using qemu and open qaLinaro
 
OpenHPC Automation with Ansible - Renato Golin - Linaro Arm HPC Workshop 2018
OpenHPC Automation with Ansible - Renato Golin - Linaro Arm HPC Workshop 2018OpenHPC Automation with Ansible - Renato Golin - Linaro Arm HPC Workshop 2018
OpenHPC Automation with Ansible - Renato Golin - Linaro Arm HPC Workshop 2018Linaro
 
HPC network stack on ARM - Linaro HPC Workshop 2018
HPC network stack on ARM - Linaro HPC Workshop 2018HPC network stack on ARM - Linaro HPC Workshop 2018
HPC network stack on ARM - Linaro HPC Workshop 2018Linaro
 
It just keeps getting better - SUSE enablement for Arm - Linaro HPC Workshop ...
It just keeps getting better - SUSE enablement for Arm - Linaro HPC Workshop ...It just keeps getting better - SUSE enablement for Arm - Linaro HPC Workshop ...
It just keeps getting better - SUSE enablement for Arm - Linaro HPC Workshop ...Linaro
 
Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...
Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...
Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...Linaro
 
Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...
Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...
Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...Linaro
 
Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...
Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...
Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...Linaro
 
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainlineHKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainlineLinaro
 
HKG18-100K1 - George Grey: Opening Keynote
HKG18-100K1 - George Grey: Opening KeynoteHKG18-100K1 - George Grey: Opening Keynote
HKG18-100K1 - George Grey: Opening KeynoteLinaro
 
HKG18-318 - OpenAMP Workshop
HKG18-318 - OpenAMP WorkshopHKG18-318 - OpenAMP Workshop
HKG18-318 - OpenAMP WorkshopLinaro
 
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainlineHKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainlineLinaro
 
HKG18-315 - Why the ecosystem is a wonderful thing, warts and all
HKG18-315 - Why the ecosystem is a wonderful thing, warts and allHKG18-315 - Why the ecosystem is a wonderful thing, warts and all
HKG18-315 - Why the ecosystem is a wonderful thing, warts and allLinaro
 
HKG18- 115 - Partitioning ARM Systems with the Jailhouse Hypervisor
HKG18- 115 - Partitioning ARM Systems with the Jailhouse HypervisorHKG18- 115 - Partitioning ARM Systems with the Jailhouse Hypervisor
HKG18- 115 - Partitioning ARM Systems with the Jailhouse HypervisorLinaro
 
HKG18-TR08 - Upstreaming SVE in QEMU
HKG18-TR08 - Upstreaming SVE in QEMUHKG18-TR08 - Upstreaming SVE in QEMU
HKG18-TR08 - Upstreaming SVE in QEMULinaro
 
HKG18-113- Secure Data Path work with i.MX8M
HKG18-113- Secure Data Path work with i.MX8MHKG18-113- Secure Data Path work with i.MX8M
HKG18-113- Secure Data Path work with i.MX8MLinaro
 
HKG18-120 - Devicetree Schema Documentation and Validation
HKG18-120 - Devicetree Schema Documentation and Validation HKG18-120 - Devicetree Schema Documentation and Validation
HKG18-120 - Devicetree Schema Documentation and Validation Linaro
 
HKG18-223 - Trusted FirmwareM: Trusted boot
HKG18-223 - Trusted FirmwareM: Trusted bootHKG18-223 - Trusted FirmwareM: Trusted boot
HKG18-223 - Trusted FirmwareM: Trusted bootLinaro
 

More from Linaro (20)

Deep Learning Neural Network Acceleration at the Edge - Andrea Gallo
Deep Learning Neural Network Acceleration at the Edge - Andrea GalloDeep Learning Neural Network Acceleration at the Edge - Andrea Gallo
Deep Learning Neural Network Acceleration at the Edge - Andrea Gallo
 
Arm Architecture HPC Workshop Santa Clara 2018 - Kanta Vekaria
Arm Architecture HPC Workshop Santa Clara 2018 - Kanta VekariaArm Architecture HPC Workshop Santa Clara 2018 - Kanta Vekaria
Arm Architecture HPC Workshop Santa Clara 2018 - Kanta Vekaria
 
Huawei’s requirements for the ARM based HPC solution readiness - Joshua Mora
Huawei’s requirements for the ARM based HPC solution readiness - Joshua MoraHuawei’s requirements for the ARM based HPC solution readiness - Joshua Mora
Huawei’s requirements for the ARM based HPC solution readiness - Joshua Mora
 
Bud17 113: distribution ci using qemu and open qa
Bud17 113: distribution ci using qemu and open qaBud17 113: distribution ci using qemu and open qa
Bud17 113: distribution ci using qemu and open qa
 
OpenHPC Automation with Ansible - Renato Golin - Linaro Arm HPC Workshop 2018
OpenHPC Automation with Ansible - Renato Golin - Linaro Arm HPC Workshop 2018OpenHPC Automation with Ansible - Renato Golin - Linaro Arm HPC Workshop 2018
OpenHPC Automation with Ansible - Renato Golin - Linaro Arm HPC Workshop 2018
 
HPC network stack on ARM - Linaro HPC Workshop 2018
HPC network stack on ARM - Linaro HPC Workshop 2018HPC network stack on ARM - Linaro HPC Workshop 2018
HPC network stack on ARM - Linaro HPC Workshop 2018
 
It just keeps getting better - SUSE enablement for Arm - Linaro HPC Workshop ...
It just keeps getting better - SUSE enablement for Arm - Linaro HPC Workshop ...It just keeps getting better - SUSE enablement for Arm - Linaro HPC Workshop ...
It just keeps getting better - SUSE enablement for Arm - Linaro HPC Workshop ...
 
Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...
Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...
Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...
 
Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...
Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...
Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...
 
Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...
Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...
Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...
 
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainlineHKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
 
HKG18-100K1 - George Grey: Opening Keynote
HKG18-100K1 - George Grey: Opening KeynoteHKG18-100K1 - George Grey: Opening Keynote
HKG18-100K1 - George Grey: Opening Keynote
 
HKG18-318 - OpenAMP Workshop
HKG18-318 - OpenAMP WorkshopHKG18-318 - OpenAMP Workshop
HKG18-318 - OpenAMP Workshop
 
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainlineHKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
 
HKG18-315 - Why the ecosystem is a wonderful thing, warts and all
HKG18-315 - Why the ecosystem is a wonderful thing, warts and allHKG18-315 - Why the ecosystem is a wonderful thing, warts and all
HKG18-315 - Why the ecosystem is a wonderful thing, warts and all
 
HKG18- 115 - Partitioning ARM Systems with the Jailhouse Hypervisor
HKG18- 115 - Partitioning ARM Systems with the Jailhouse HypervisorHKG18- 115 - Partitioning ARM Systems with the Jailhouse Hypervisor
HKG18- 115 - Partitioning ARM Systems with the Jailhouse Hypervisor
 
HKG18-TR08 - Upstreaming SVE in QEMU
HKG18-TR08 - Upstreaming SVE in QEMUHKG18-TR08 - Upstreaming SVE in QEMU
HKG18-TR08 - Upstreaming SVE in QEMU
 
HKG18-113- Secure Data Path work with i.MX8M
HKG18-113- Secure Data Path work with i.MX8MHKG18-113- Secure Data Path work with i.MX8M
HKG18-113- Secure Data Path work with i.MX8M
 
HKG18-120 - Devicetree Schema Documentation and Validation
HKG18-120 - Devicetree Schema Documentation and Validation HKG18-120 - Devicetree Schema Documentation and Validation
HKG18-120 - Devicetree Schema Documentation and Validation
 
HKG18-223 - Trusted FirmwareM: Trusted boot
HKG18-223 - Trusted FirmwareM: Trusted bootHKG18-223 - Trusted FirmwareM: Trusted boot
HKG18-223 - Trusted FirmwareM: Trusted boot
 

Recently uploaded

The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 

Recently uploaded (20)

The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 

IoTL Status and Progress

  • 1. Presented by Date Event Internet of Tiny Linux (IoTL) status and progressNicolas Pitre BKK16-211 March 8, 2016 Linaro Connect BKK16
  • 2. Internet of Tiny Linux (IoTL) Discussion about various methods put forward to reduce the size of Linux kernel and user space binaries to make them suitable for small IoT applications.
  • 3. Very pervasive: ● Cable/ADSL Modems ● Smart Phones ● Smart Watches ● Internet Connected Refrigerators ● WI-FI-Enabled Washing Machines ● Smart TV Sets ● Wi-Fi enabled Light Bulbs ● Connected Cars ● Alarm Systems monitored via Internet ● etc.
  • 4. "Internet of Things" (IoT) Problem: Cost Software Development is ● Hard ● Expensive ● Slow Legacy Software Maintenance is ● Hard ● Expensive ● Uninteresting
  • 5. "Internet of Things" (IoT) Another Problem: *Security* ● All solutions _will_ eventually be broken ○ Think NSA… ○ Then professional thieves... ○ Then script kiddies… ● Security Response is a _must_... even for gadgets!* quote, Bruce Schneier: https://www.schneier.com/essays/archives/2014/01/the_internet_of_thin.html “The Internet of Things Is Wildly Insecure‫ـ‬And Often Unpatchable”
  • 6. "Internet of Things" (IoT) Solutions: ● Avoid custom base software ● Leverage the Open Source community ● Gather critical mass around common infrastructure ● Share the cost of non-differentiating development
  • 7. "Internet of Things" (IoT) Linux is a logical choice ● Large community of developers ● Best looked-after network stack ● Extensive storage options ● Already widely used in embedded setups ● Etc.
  • 8. "Internet of Things" (IoT) The Linux kernel is a logical choice... BUT ● it is featureful -> Bloat ● its default tuning is for high-end systems ● the emphasis is on scaling up more than scaling down ● its flexible configuration system leads to ○ Kconfig hell ○ suboptimal build ● is the largest component in most Linux-based embedded systems Linux Kernel Size Reduction is part of the solution*
  • 9. "Internet of Things" (IoT) Reducing the Linux Kernel Size What can be done? Existing resources: ● Linux Kernel Tinification Wiki https://tiny.wiki.kernel.org/ ● Kernel Size Reduction Work - eLinux.org http://elinux. org/Kernel_Size_Reduction_Work
  • 10. "Internet of Things" (IoT) Reducing the Linux Kernel Size Already Done (few examples): ● Compile out block device support. ● Compile out NTP support. ● Compile out support for capabilities (only root is granted permission). ● Compile out support for non-root users and groups. ● Compile out printk() and related strings. Needed: more similar config options.
  • 11. "Internet of Things" (IoT) Reducing the Linux Kernel Size Work In Progress: A poor man's LTO[] LTO is cool... BUT Table 1: Full Kernel Build Timing Table 2: Kernel Rebuild Timing After a Single Change NOTE: Build Details: Linux v4.2 ARM multi_v7_defconfig gcc v5.1.0 Intel Core2 Q6600 CPU at 2.40GHz Build Type Wall Time Standard Build 4m53s LTO Build 10m23s Build Type Wall Time Standard Build 0m12s LTO Build 6m27s
  • 12. "Internet of Things" (IoT) Reducing the Linux Kernel Size Alternative to LTO: `ld -gc-sections` The `-gc-sections` result is somewhat bigger but so much faster to build. Build Type Size (bytes) Reference % allnoconfig 860508 100% allnoconfig + CONFIG_NO_SYSCALLS 815804 94.8% allnoconfig + CONFIG_NO_SYSCALLS + CONFIG_GC_SECTIONS 555798 64.6% allnoconfig + CONFIG_NO_SYSCALLS + CONFIG_LTO 488264 56.7%
  • 13. "Internet of Things" (IoT) Reducing the Linux Kernel Size The `ld -gc-sections` approach: more intrusive than meets the eye Let's not forget changes to linker scripts, modpost, etc. --- a/arch/arm/include/asm/assembler.h +++ b/arch/arm/include/asm/assembler.h @@ -88,6 +88,17 @@ #endif /* + * Special .pushsection wrapper with explicit dependency to prevent + * garbage collection of the specified section. This is needed when no + * explicit symbol references are made to this section. + */ + .macro .pushlinkedsection name:vararg + .reloc . - 1, R_ARM_NONE, 9909f + .pushsection name +9909: + .endm + +/*
  • 14. "Internet of Things" (IoT) Reducing the Linux Kernel Size (continued) The `ld -gc-sections` approach: more intrusive than meets the eye Let's not forget changes to linker scripts, modpost, etc. * Enable and disable interrupts */ #if __LINUX_ARM_ARCH__ >= 6 @@ -239,7 +250,7 @@ #define USER(x...) 9999: x; - .pushsection __ex_table,"a"; + .pushlinkedsection __ex_table,"a"; .align 3; .long 9999b,9001f; .popsection
  • 15. "Internet of Things" (IoT) Reducing the Linux Kernel Size Submitted Upstream: Trim unused exported kernel symbols ● EXPORT_SYMBOL(foo_bar) forces foo_bar() into the kernel even if there is no users. ● Let's export only those symbols needed by the set of configured modules. ● Allows LTO and -gc-sections to get rid of related code.
  • 16. "Internet of Things" (IoT) Reducing the Linux Kernel Size List of symbols required by modules ---- $ nm linux/crypto/sha512_generic.ko 00000000 T cleanup_module U crypto_register_shashes 00000880 T crypto_sha512_finup 00000bc0 T crypto_sha512_update U crypto_unregister_shashes 00000000 T init_module U memcpy 000000e8 r __module_depends 00000000 t sha384_base_init 00000000 d sha512_algs 00000090 t sha512_base_init 00000d00 t sha512_final ...
  • 17. "Internet of Things" (IoT) Reducing the Linux Kernel Size List of symbols required by modules linux/include/generated/autoksyms.h ---- /* * Automatically generated file; DO NOT EDIT. */ #define __KSYM_crypto_register_shashes 1 #define __KSYM_crypto_unregister_shashes 1 #define __KSYM_memcpy 1 ----
  • 18. "Internet of Things" (IoT) Reducing the Linux Kernel Size Trim unused exported kernel symbols == some preprocessor magic Excerpt from mainline submission --- a/include/linux/export.h +++ b/include/linux/export.h @@ -65,6 +65,24 @@ __attribute__((section("___ksymtab" sec "+" #sym), unused)) = { (unsigned long)&sym, __kstrtab_##sym } +#ifdef CONFIG_TRIM_UNUSED_KSYMS + +#include <linux/kconfig.h> +#include <generated/autoksyms.h> + +#define __EXPORT_SYMBOL(sym, sec) + __cond_export_sym(sym, sec, config_enabled(__KSYM_##sym)) +#define __cond_export_sym(sym, sec, conf) + ___cond_export_sym(sym, sec, conf)
  • 19. "Internet of Things" (IoT) Reducing the Linux Kernel Size Trim unused exported kernel symbols == some preprocessor magic (Continued) Excerpt from mainline submission +#define ___cond_export_sym(sym, sec, enabled) + __cond_export_sym_##enabled(sym, sec) +#define __cond_export_sym_1(sym, sec) ___EXPORT_SYMBOL(sym, sec) +#define __cond_export_sym_0(sym, sec) /* nothing */ + +#else +#define __EXPORT_SYMBOL ___EXPORT_SYMBOL +#endif + #define EXPORT_SYMBOL(sym) __EXPORT_SYMBOL(sym, "") ----
  • 20. "Internet of Things" (IoT) Reducing the Linux Kernel Size Trim unused exported kernel symbols == more preprocessor magic Excerpt from <linux/kconfig.h> for the config_enabled() definition ---- /* * Getting something that works in C and CPP for an arg that may or may * not be defined is tricky. Here, if we have "#define CONFIG_BOOGER 1" * we match on the placeholder define, insert the "0," for arg1 and generate * the triplet (0, 1, 0). Then the last step cherry picks the 2nd arg (a one). * When CONFIG_BOOGER is not defined, we generate a (... 1, 0) pair, and when * the last step cherry picks the 2nd arg, we get a zero. */ #define __ARG_PLACEHOLDER_1 0, #define config_enabled(cfg) _config_enabled(cfg) #define _config_enabled(value) __config_enabled(__ARG_PLACEHOLDER_##value) #define __config_enabled(arg1_or_junk) ___config_enabled(arg1_or_junk 1, 0) #define ___config_enabled(__ignored, val, ...) val ----
  • 21. "Internet of Things" (IoT) Reducing the Linux Kernel Size Trim unused exported kernel symbols: build refresh dependencies Avoid rebuilding the whole kernel when content of <linux/autoksyms.h> changes. First attempt: augment the fixdep parser ● EXPORT_SYMBOL() ● EXPORT_SYMBOL_GPL() ● EXPORT_PER_CPU_SYMBOL() ● EXPORT_EARLY_SYMBOL() ● ACPI_EXPORT_SYMBOL() ● ACPI_EXPORT_SYMBOL_INIT() And combinations such as EXPORT_PER_CPU_SYMBOL_GPL(), etc.
  • 22. "Internet of Things" (IoT) Reducing the Linux Kernel Size Trim unused exported kernel symbols: build refresh dependencies Now this: #define PCI_USER_READ_CONFIG(size, type) int pci_user_read_config_##size (struct pci_dev *dev, int pos, type *val) { [...] } EXPORT_SYMBOL_GPL(pci_user_read_config_##size);
  • 23. "Internet of Things" (IoT) Reducing the Linux Kernel Size Trim unused exported kernel symbols: build refresh dependencies Extract symbol name warnings: # Filter out exported kernel symbol names advertised as warning pragmas # by the preprocessor and write them to $(1). We must consider continuation # lines as well: they start with a blank, or the preceeding line ends with # a ':'. Anything else is passed through as is. # See also __KSYM_DEP() in include/linux/export.h. ksym_dep_filter = sed -n -e '1 {x; $$!d;}' -e '/^ / {H; $$!d;}' -e 'x; /:$$/ {x; H; $$!d; s/^/ /; x;}' -e ':filter; /^.*KBUILD_AUTOKSYM_DEP: /! {p; b next;}' -e 's//KSYM_/; s/n.*//; w $(1)' -e ':next; $$!d' -e '1 q; s/^/ /; x; /^ /! b filter'
  • 24. "Internet of Things" (IoT) Reducing the Linux Kernel Size Trim unused exported kernel symbols: build refresh dependencies Dedicated preprocessor pass: --- a/include/linux/export.h +++ b/include/linux/export.h @@ -65,7 +65,18 @@ extern struct module __this_module; __attribute__((section("___ksymtab" sec "+" #sym), unused)) = { (unsigned long)&sym, __kstrtab_##sym } -#ifdef CONFIG_TRIM_UNUSED_KSYMS +#if defined(__KSYM_DEPS__) + +/* + * For fine grained build dependencies, we want to tell the build system + * about each possible exported symbol even if they're not actually exported. + * We use a string pattern that is unlikely to be valid code that the build + * system filters out from the preprocessor output (see ksym_dep_filter + * in scripts/Kbuild.include). + */
  • 25. "Internet of Things" (IoT) Reducing the Linux Kernel Size Trim unused exported kernel symbols: build refresh dependencies (Continued) Dedicated preprocessor pass: +#define __EXPORT_SYMBOL(sym, sec) === __KSYM_##sym === + +#elif defined(CONFIG_TRIM_UNUSED_KSYMS) #include <linux/kconfig.h> #include <generated/autoksyms.h>
  • 26. "Internet of Things" (IoT) Reducing the Linux Kernel Size Trim unused exported kernel symbols: some numbers. Kernel v4.5-rc2 X86 defconfig Kernel v4.5-rc2 X86 defconfig + CONFIG_TRIM_UNUSED_KSYMS Because the x86 defconfig only contains 18 modules, the number of needed exported symbols is only 225 out of a possible 8806 for this configuration. The kernel text size shrank by about 2.4%. $ size vmlinux text data bss dec hex filename 12362563 1856456 1101824 15320843 e9c70b vmlinux $ wc -l Module.symvers 8806 Module.symvers $ size vmlinux text data bss dec hex filename 12059848 1856456 1101824 15018128 e52890 vmlinux $ wc -l Module.symvers 225 Module.symvers
  • 27. "Internet of Things" (IoT) Reducing the Linux Kernel Size Trim unused exported kernel symbols: more numbers, on ARM this time. Kernel v4.5-rc2 ARM defconfig .Kernel v4.5-rc2 ARM defconfig + CONFIG_TRIM_UNUSED_KSYMS This time many more modules (279 of them) are part of the build configuration. Still, only 2703 out of 10044 exported symbols are required. And despite a smaller number of omitted exports, the kernel shrank by 3%. NOTE: defconfig is equivalent to multi_v7_defconfig $ size vmlinux text data bss dec hex filename 13664222 1554068 351368 15569658 ed92fa vmlinux $ wc -l Module.symvers 10044 Module.symvers $ size vmlinux text data bss dec hex filename 13255051 1554132 351240 15160423 e75467 vmlinux $ wc -l Module.symvers 2703 Module.symvers
  • 28. "Internet of Things" (IoT) Reducing the Linux Kernel Size Trim unused exported kernel symbols: more numbers using LTO build. Kernel v4.5-rc2 ARM defconfig + LTO Kernel v4.5-rc2 ARM defconfig + LTO + CONFIG_TRIM_UNUSED_KSYMS This time the kernel shrank by 5%. $ size vmlinux text data bss dec hex filename 12813766 1538324 344356 14696446 e03ffe vmlinux $ wc -l Module.symvers 8415 Module.symvers $ size vmlinux text data bss dec hex filename 12197437 1536052 338660 14072149 d6b955 vmlinux $ wc -l Module.symvers 1742 Module.symvers
  • 29. "Internet of Things" (IoT) Reducing the Linux Kernel Size Trim unused exported kernel symbols: more numbers on a small build. Let's have a look at a configuration that is potentially more representative of an embedded target. Kernel v4.5-rc2 ARM realview_defconfig + LTO Kernel v4.5-rc2 ARM realview_defconfig + LTO + CONFIG_TRIM_UNUSED_KSYMS Here we reduced the kernel text by about 13.6%. Disabling module support altogether does reduce it by 13.9% i.e. only 0.3% difference. This means the overhead of using modules on embedded targets is greatly reduced. $ size vmlinux text data bss dec hex filename 4422942 209640 126880 4759462 489fa6 vmlinux $ wc -l Module.symvers 5597 Module.symvers $ size vmlinux text data bss dec hex filename 3823485 205416 125800 4154701 3f654d vmlinux $ wc -l Module.symvers 52 Module.symvers
  • 30. "Internet of Things" (IoT) Reducing the Linux Kernel Size *AND* User Space Size What next? ● Apply same trick to system calls ● Tool to determine list of system calls used by user space To be effective, this implies: ● Statically linked applications ● Single executable file (busybox style) For more flexibility: ● Shared library with minimal support (discard unused objects) ● Fine grained object dependencies (more .o files with less code for each)
  • 31. "Internet of Things" (IoT) Reducing the Linux Kernel Size *AND* User Space Size Miscellaneous: ● Code utilization profiling ● Binary size regression tests ● NoMMU Linux on Cortex-A processors ● Mainline support for FDPIC executable format ● Revive XIP support for the kernel and user space ● More kernel feature modularization
  • 32. "Internet of Things" (IoT) Questions ?