1
0
mirror of https://github.com/elua/elua.git synced 2025-01-08 20:56:17 +08:00
elua/docs/adding_a_new_platform.txt
2008-08-04 12:08:24 +00:00

59 lines
2.9 KiB
Plaintext

(NOTE: view this file with a monospaced font)
04. Adding a new platform to eLua
================================================================================
If you want to add a new platform to eLua, the first thing you need to check is
if the platform has enough resources to run Lua. Roughly speaking, 256k of Flash
(or even 128k for the integer-only version) and 64k of RAM should be enough for
a 32-bit platform. As usual, the more, the better (this is especially true for
the RAM memory).
Next, check if a GCC/Newlib toolchain is available for the platform. TO be more
precise, the compiler doesn't really matter, as long as you're able to compile
Newlib with it. If you don't, you won't be able to compile eLua. This limitation
might be eliminated in future versions, but it's not a priority of the project,
so don't count on it happening too soon.
After this, you need to make sure that you have a basic understanding of the
platform, or at least of its initialization sequence. Most platforms require
specific sequences for initializing the clock subsystem, or for disabling the
watchdog timer, or for remapping the internal memory, and many others.
Fortunately the vast majority of chips manufacturers provide support packages
for their CPUs, so once you download the support package and understand the
initialization code, you should be safe. At the very least, you'll need:
- a "startup" sequence, generally written in assembler, that does very low level
intialization, sets the stack pointer, zeroes the BSS section, copies ROM to
RAM for the DATA section, and then jumps to main.
- a linker command file for GNU LD.
- the "high-level" initialization code (for example peripheral initialization).
Let's suppose that your new platform is called "foo". In order to compile eLua
for foo, follow these steps:
1. create the src/platform/foo directory
2. change the main build script (SConstruct) to include your new platform:
(BEGIN SConstruct)
..........................
# Sanity check
if platform not in [ 'at91sam7x', 'i386', 'foo' ]:
print "Invalid platform", platform
sys.exit( -1 )
..........................
(END SConstruct)
3. you need at least 3 files (besides your platform specific files) in the
src/platform/foo directory:
- conf.py: this is read by SConstruct and describes how to build files for
the platform, as well as the platform specific files. Start from an existent
conf.py file and modify it to suit your needs, it's easier this way.
- type.h: data types used by eLua, declared in a platform independent way.
Again, start from an existent type.h file and modify it if needed.
- platform_libs.h: see "platform modules.txt" for details.
4. implement the platform interface functions (see "platform interface.txt"). By
convention, they should be implemented in a file called "platform.c".
5. That's it! Build (see "building.txt") and enjoy!