effective scripting in embedded devices
play

Effective Scripting in Embedded Devices Steve Bennett 1 What is - PowerPoint PPT Presentation

ELC 2010 Effective Scripting in Embedded Devices Steve Bennett 1 What is Embedded? ELC 2010 2 Creating an Embedded Product Time to market Linux kernel Quality uClibc Features Busybox Cost Other open source


  1. ELC 2010 Effective Scripting in Embedded Devices Steve Bennett 1

  2. What is Embedded? ELC 2010 2

  3. Creating an Embedded Product • Time to market • Linux kernel • Quality • uClibc • Features • Busybox • Cost • Other open source • Size • Custom drivers • Performance • Custom applications ELC 2010 3

  4. Embedded Applications Embedded Minimalists Application Porters • linked list • C++ toolchain • hash table • Boost • exec wrapper • PostgreSQL • config parser • byte order • customisation API • unaligned access Greenspun’s Tenth Rule Any sufficiently complicated C program contains an ad-hoc, informally-specified, bug-ridden, slow implementation of half of a scripting language. ELC 2010 4

  5. Language Strengths C/C++ Scripting • Bit/byte twiddling • String mangling • Efficient storage • Lists, Dictionaries • Access entire • Searching, Sorting system API • Customisation • Compiled code ELC 2010 6

  6. Make it Fit Percentage of 8MB NOR flash used Boot loader 3% Kernel 13% Config 6% uClibc 3% App space 75% ELC 2010 7

  7. Make it work Percentage of 8MB NOR flash used Boot loader 3% Kernel 13% Config 6% uClibc 3% App space 53% snmpd 8% ssl/libcrypto 7% bash iptables strace 3% openssh 1% 2% 1% ELC 2010 8

  8. Add Scripting Boot loader Kernel 3% 13% Config 6% uClibc 3% Perl App space Python 75% Tcl 8.4 bash ash TinyTcl lua Jim 0% 50% 100% 150% Percentage of available space used by “core” scripting language ELC 2010 9

  9. Languages Attributes Rapid Development Jim ash bash Python Tcl Lua Resource Efficient Resource Hungry Perl Java C++ C ELC 2010 Slow Development 10

  10. Growth over Time Minimal Linux Kernel 0.99 1.2 1.3 2.0 2.2 2.4 2.6 Note: Sizes are indicative only ELC 2010 11

  11. Making big things small • It is hard since all features are critical to someone • Minimal Tcl - 5+ years with no progress • Deeply Embedded Python - abandoned • miniperl - unsupported • Much easier to start small and focussed ELC 2010 12

  12. Size - Speed All things being equal, large applications and libraries are slower to load and run than small applications and libraries System System Time Relocations Calls Intel(R) Core(TM)2 Quad CPU 43ms 173 3740 2.33GHz, 4GB RAM Tcl 8.4 (glibc) XScale-IXP42x (v5b) 1ms 37 766 266MHz, 32MB RAM Jim Tcl (uClibc) ELC 2010 Simple ‘Hello World’ Test 13

  13. Case Study Automated Testing telnet Test Host Device under Test (Expect) Tcl scripts TinyTcl Test Script Expect + inetd + TinyTcl ELC 2010 14

  14. source $testlib use netconf net test cable { # Find a dhcp connection we can use array set conn [ netconf_find dhcp] # Configure it remote dev=$conn(dev) devname=$conn(devname) { config load -update set eth [ config ref eth<devname=$dev>] set o [ config new dhcp interface $eth] config set $o type cable if {$devname != "eth0"} { config set $o fwclass wan } config set $eth conn $o config save } # Wait for it to come up net_wait $conn(intf) pass "cable connection on $conn(intf) OK" ELC 2010 } 15

  15. Case Study Web Framework cgi app web server Traditional (script) (C) Embedded framework application web server (C) (script) Scripting (C) ELC 2010 16

  16. µWeb C-based Customisation C-based customisation callback events C Framework API Web Framework ELC 2010 17

  17. submit -c { const char *tz = cgi_get("tz"); /* find timezone spec for selected TZ */ FILE *fh = fopen(ZONEFILE, "r"); while ((fgets(buf, sizeof(buf), fh) != NULL) { /* parse line, * match timezone, * write to /etc/TZ */ ... } fclose(fh); /* write ntpserver */ snprintf(buf, "%s/ntpserver", cgi_configdir()); fh = fopen(buf, "w"); fprintf(fh, "%s\n", cgi_get("ntpserver"); fclose(fh); /* should use msntp.pid, ...*/ system("killall msntp"); ELC 2010 } 18

  18. µWeb Jim Tcl Scripting Tcl Callback Tcl-based customisation Glue callback events Jim Tcl Tcl Web Binding C Framework API Web Framework ELC 2010 19

  19. submit -tcl { # read timezones set zones [readfile $ZONEFILE] # write /etc/TZ writefile /etc/TZ $zones([cgi get tz]) # write ntpserver writefile $CONFDIR/ntpserver [cgi get ntpserver] # kill (and respawn) msntp kill -TERM [readfile /var/run/msntp.pid] } ELC 2010 20

  20. What scriptlets do • Access application API (Tcl commands) • Examine/update strings, lists, arrays • Use standard Tcl commands • Interact with OS - files, commands, processes ELC 2010 21

  21. How Fast is it? C-based round trip latency 38ms POST scriptlet 1ms display scriptlet 2ms framework processing 12ms Total response 53ms ELC 2010 22

  22. How Fast is it? Tcl Scripting round trip latency 38ms interpreter creation 4ms POST scriptlet 17ms display scriptlet 2ms framework processing 12ms Total response 73ms ELC 2010 23

  23. Timing Comparison C-based Tcl-Based round trip latency 38ms 38ms interpreter creation - 4ms POST scriptlet 1ms 17ms display scriptlet 2ms 2ms framework processing 12ms 12ms Total response 53ms 73ms ELC 2010 24

  24. Possible Applications • control cameras, frame rate, image processing, network access • environmental sensor data gathering, analysis • industrial control ELC 2010 25

  25. Scripting Language Requirements • Written in portable C • Designed to be embedded, not standalone • Small • Fast to start • Modular, to allow unneeded features to be removed • BSD or equivalent licence ELC 2010 26

  26. Jim - Tcl for a small world • 10x speed of TinyTcl, 50% of Tcl 8.4 • Small (80-150KB) • Designed for embedding • BSD licence ELC 2010 27

  27. Jim Tcl Features • regular expressions • arrays as first class objects • exec • 64 bit integers • associative arrays, lists • strings containing nulls • file, glob, open, close, • list expansion operator read, write • functional programming • simple packages • accurate error reporting • event loop, sockets ELC 2010 28

  28. Lua • Designed for embedding • Portable • Small • Byte code • BSD licence • Used in World of Warcraft ELC 2010 29

  29. Other Scripting Languages • Pawn (formerly Small) • Pike • Nesla ELC 2010 30

  30. Leveraging Scripting Ad-hoc scripts Vendor/product Version 1.0 Mar 19 12:23:35 EST 2010 1. Modem 1 [Active] 2. Modem 2 [Not Installed] k. Modulation Control [Running] t. Modem Test Signal (0x1B) [None (0)] m. Modulation (0x01) [QPSK (0x00)] q. Quit Select option []: Simple Menuing System for Internal Use ELC 2010 31

  31. Leveraging Scripting Prototyping • Fills the gap between shell scripts and C • Small daemons • Configure systems • Exec commands • Parse files • Reload config on SIGHUP ELC 2010 32

  32. Leveraging Scripting Replace Complex Shell Scripts • String and data structure manipulation • Invocations of sed/awk/grep are slow • Shell quoting hell • No floating point math • Start-up time may be critical ELC 2010 33

  33. Leveraging Scripting “Free” CLI • Easy to add Command Line Interface • User Interaction • Debugging • Possible mechanisms: • Unix domain sockets • Special startup mode ELC 2010 34

  34. Pitfalls • Excessive stack usage • Unicode support • No-MMU support • Licencing • IP Leaking ELC 2010 35

  35. More about Jim Tcl • Expand operator • List-dictionary duality • Source location tracking • Get it: • http://jim.workware.net.au/ ELC 2010 36

Recommend


More recommend