This shows you the differences between two versions of the page.
iothings:proiecte:2018:nuttx-sparrow [2022/02/11 16:57] laura.ruse removed |
— (current) | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Porting NuttX on Sparrow ====== | ||
- | ===== Description ===== | ||
- | This page is a tutorial on how to port NuttX ROTS to Sparrow platform and how to improve it. | ||
- | |||
- | ===== Hardware ===== | ||
- | If you are not familiar with Sparrow you can find more about it here: [[:sparrow_v4_en|Sparrow Wireless Sensor Node]]. | ||
- | ===== NuttX ===== | ||
- | [[http://nuttx.org/|Nuttx]] is n RTOS with an emphasis on standards compliance and small footprint. Scalable from 8-bit to 32-bit micro controller environments, the primary governing standards in NuttX are Posix and ANSI standards. | ||
- | |||
- | Nuttx is very flexible when it comes to communication protocols. | ||
- | It support a large range of protocols from low power ones like 6LoWPAN for radio network drivers (IEEE 802.15.4 MAC and generic packet radios), Radio Network Drivers: IEEE 802.15.4 MAC, Generic Packet Radio, Bluetooth LE. But also more advanced protocols like IEEE 802.11 FullMac, IPv4, IPv6, TCP/IP, UDP, ARP, ICMP, ICMPv6, IGMPv2 (client) stacks. | ||
- | |||
- | Memory allocation on this RTOS is grouped into standard heap memory allocation, granule allocator, shared memory, and dynamically sized, per-process heaps. Depending on what platform you chose to run Nuttx, you can adapt this memory allocator to use the appropriate amount of memory. | ||
- | |||
- | This RTOS is made to be portable and works most of the ARM processors, 8-bit Atmel architecture and more. It also has a large number of drivers already implemented, but it has not yet been ported to the Sparrow's microcontroller, ATmega128RFA1. | ||
- | |||
- | When it comes to multi-threading and scheduling, Nuttx is the most advanced one, having implemented a few scheduling algorithms like FIFO, round-robin, and “sporadic” scheduling. | ||
- | |||
- | NuttX uses a flash aware file system which handles all the operations with the memory and makes it transparent to the user. It is a filesystem that has been designed to work primary with small, serial NOR type flash parts that are 1M byte to 16M byte in size (though this is not a limitation). The filesystem operates by segmenting the flash (or flash partition) into “logical sectors” of equal size and then managing them (allocating, mapping, chaining, releasing, etc.) to build files and directories. | ||
- | |||
- | Nuttx also provides an optional small, scalable, bash-like shell with rich feature set and small footprint used for debugging, configuration and launching applications. | ||
- | ===== Setup ===== | ||
- | <code bash Install Packets> | ||
- | sudo apt-get install build-essential git texinfo libgmp-dev libmpfr-dev libmpc-dev libncurses5-dev bison flex gettext gperf libtool autoconf pkg-config libftdi-dev libusb-1.0-0-dev zlib1g zlib1g-dev python-yaml gcc-avr avr-libc avrdude | ||
- | </code> | ||
- | |||
- | <code bash Install NuttX Tools> | ||
- | clone tools repo: https://github.com/jodersky/nuttx/tree/master/misc/tools | ||
- | cd tools/kconfig-frontends | ||
- | ./configure --enable-mconf | ||
- | LD_RUN_PATH=/usr/local/lib | ||
- | make | ||
- | make install | ||
- | </code> | ||
- | |||
- | <code bash Get NuttX for Sparrow> | ||
- | git clone git@bitbucket.org:vanbarbascu/nuttx_sparrow.git | ||
- | cd nuttx_sparrow | ||
- | </code> | ||
- | |||
- | <code bash Configure and Build> | ||
- | LD_LIBRARY_PATH=/usr/local/lib/ tools/configure.sh -l -a apps sparrow_4.1/nsh | ||
- | make | ||
- | </code> | ||
- | |||
- | <code bash Flash to board> | ||
- | tools/flash.sh --port /dev/ttyUSB0 | ||
- | </code> | ||
- | |||
- | Connecting to the serial port gives us the NuttxShell. | ||
- | <code > | ||
- | screen /dev/ttyUSB0 | ||
- | </code> | ||
- | |||
- | ===== Bibliography ===== | ||
- | |||
- | [[http://www.nuttx.org/Documentation/NuttxPortingGuide.html#Introduction|NuttX porting guide]] | ||
- | |||
- | [[https://clkdiv8.com/wiki/doku.php|Sparrow Wireless Sensor Node]] |