跳转到内容

Mizar32/编译 eLua

来自 Wikibooks,开放世界中的开放书籍

使用网页构建器

[编辑 | 编辑源代码]

Mizar32 网页构建器位于 http://builder.simplemachines.it,它允许您以多种方式自定义固件,并将为您构建新的固件镜像,而无需您进行任何繁琐的操作。

如果这还不够,或者您只是喜欢这种事情,那么深呼吸,然后...

安装 AVR32 交叉编译器

[编辑 | 编辑源代码]

在 Linux 上

[编辑 | 编辑源代码]

Atmel AVR 32 位工具链 3.4.2

[编辑 | 编辑源代码]

Linux 上的交叉编译器是 Atmel AVR Toolchain for Linux.

截至撰写本文时(2013 年 4 月),最新版本是 Atmel AVR Toolchain 3.4.2,基于 GNU C 编译器 4.4.7 版本。

要跳过 Atmel 注册表格,您可以使用以下快速下载链接

您还需要

并且,如果您有兴趣自己构建工具链,源代码在这里

获取并解压工具链

[编辑 | 编辑源代码]

这里我们展示安装 32 位版本的步骤

cd
wget http://www.atmel.com/Images/avr32-gnu-toolchain-3.4.2.435-linux.any.x86.tar.gz
tar xfz avr32-gnu-toolchain-3.4.2.435-linux.any.x86.tar.gz
# Fetch, unpack and install the header files
wget http://www.atmel.com/Images/atmel-headers-6.1.3.1475.zip
unzip atmel-headers-6.1.3.1475.zip
mv atmel-headers-6.1.3.1475/avr32 avr32-gnu-toolchain-linux_x86/avr32/include/
# Clean up
rm -r atmel-headers*
rm avr32-gnu-toolchain-*.gz

然后,为了使用它,在每次会话中执行一次

PATH=$HOME/avr32-gnu-toolchain-linux_x86/bin:$PATH
export PATH

您可以设置包含路径 (C_INCLUDE_PATH),以便使用 atmel-headers-6.1.3.1475 与 avr32 结合使用。

对于 64 位版本,将上述所有 "x86" 替换为 "x86_64"

将其安装为 Debian/Ubuntu 软件包

[编辑 | 编辑源代码]

要从这个中制作 Debian/Ubuntu 软件包,请执行上述操作,然后转到

sudo apt-get install alien fakeroot
cd avr32-gnu-toolchain-linux_x86
mkdir usr
mv [a-s]* usr/
# It includes a lot of files that it shouldn't, so select the toolchain ones.
tar cfz avr32-gnu-toolchain-3.4.2.tgz usr/avr32 usr/bin/avr32-* \
    usr/lib/gcc/avr32 usr/libexec usr/share/man/man1 
fakeroot alien --keep-version avr32-gnu-toolchain-3.4.2.tgz
mv avr32-gnu-toolchain_3.4.2-1_all.deb avr32-gnu-toolchain_3.4.2-1_i386.deb
rm avr32-gnu-toolchain-3.4.2.tgz
rm -r usr

或者,对于 64 位版本,在 avr32-gnu-toolchain-linux_x86_64 中执行相同操作,并将 .deb 文件重命名为 ..._amd64.deb

如果您安装了他们旧的 2.4.2 Ubuntu 软件包,则需要先删除它们

sudo apt-get purge avr32-binutils avr32-buildroot-essentials avr32-gcc-newlib \
 avr32-gdb avr32gdbproxy avr32headers avr32parts avr32program avr32trace \
 avrfwupgrade libavr32ocd libavr32sim libavrtools libelfdwarfparser

然后您可以使用以下命令安装新的工具链

sudo dpkg -i avr32-gnu-toolchain_3.4.2-1_*.deb

(要再次删除它,请运行 sudo apt-get purge avr32-gnu-toolchain)

从源代码构建工具链

[编辑 | 编辑源代码]

ct-ngcrosstool-ng 的一个分支)为您构建了更好的 AVR32 交叉编译器

sudo apt-get install git autoconf bash gawk g++ libncurses-dev
git clone http://[email protected]/git/ct-ng 
cd ct-ng
./bootstrap
./configure --enable-local
make
./ct-ng build

默认情况下,它将交叉工具链安装在您的主目录下,因此在构建 eLua 之前,您需要说

PATH=$HOME/x-tools/avr32-unknown-none/bin:$PATH
export PATH

在 Windows 上

[编辑 | 编辑源代码]

Atmel 还提供 Atmel AVR Toolchain for Windows 作为 setup.exe,其快速下载链接为

安装构建系统

[编辑 | 编辑源代码]

Alcor6L 构建系统(与官方 elua0.9 相同)使用 "scons" 和 "gcc"。eLua/Alcor6L 源代码位于 git 下,因此请安装它们。

在 Debian 或 Ubuntu 上

sudo apt-get install scons gcc git

下载源代码

[编辑 | 编辑源代码]

稳定版本

[编辑 | 编辑源代码]

最新的稳定源代码版本是 elua0.9,它完全支持 Mizar32 板。

wget http://download.berlios.de/elua/elua0.9.tgz
tar xfz elua0.9.tgz
cd elua0.9

另一个选择是

当前开发版本

[编辑 | 编辑源代码]

eLua 项目

[编辑 | 编辑源代码]
git clone https://github.com/elua/elua
cd elua

请注意:(最新)eLua 构建系统已更改,因此使用 scons 的说明需要更改。另一方面,Alcor6L 没有这个问题。它使用 scons

Alcor6L 项目

[编辑 | 编辑源代码]
git clone https://github.com/simplemachines-italy/Alcor6L.git
cd Alcor6L

编译 eLua/Alcor6L

[编辑 | 编辑源代码]

针对 Mizar32 A 和 B

[编辑 | 编辑源代码]

256KB 和 512KB 闪存/64MB 内部 RAM 版本的 Mizar32 使用相同的 eLua/Alcor6L 固件。使用以下命令

scons board=mizar32 cpu=AT32UC3A0256

如果您正在编译 eLua 源代码,构建将创建一个名为 elua_lua_at32uc3a0256.elf 的文件。另一方面,如果您正在编译 Alcor6L 源代码,它将创建一个名为 Alcor6L_elua_fp_at32uc3a0256_<timestamp>.elf 的文件。<timestamp> 表示构建的日期。

Alcor6L 默认编译 eLua(版本 0.9)。要在 Mizar32 上使用其他语言(例如,Lisp),请使用以下命令

scons cpu=AT32UC3A0256 board=mizar32 lang=picolisp prog

上述命令将生成 Alcor6L_picolisp_fp_at32uc3a0256_<timestamp>.elf。生成的 文件可以通过多种方式编程到 Mizar32 板中:请参阅 刷写固件 章节。

要构建 eLua 解释器版本,其中所有数字变量都是整数而不是浮点值,这将更小,速度稍快,请使用以下命令

scons board=mizar32 cpu=AT32UC3A0256 target=lualong

针对 Mizar32 C

[编辑 | 编辑源代码]

在 128KB 的闪存中,您可以放入 8KB 的 DFU 引导加载程序和 120K 整数版本的 eLua。为 Mizar C 编译的标准 eLua,

scons board=mizar32 cpu=at32uc3a0128 target=lualong optram=0

会生成一个固件,其中省略了大部分 eLua 模块,只保留了 PIO定时器UART 模块。

eLua 的 Mizar32 分支 进行了一系列修改,以减少代码大小,以便包含所有 eLua 模块,除了 以太网 模块。它从 eLua 中删除的功能包括

  • eLua shell(它直接运行 Lua 解释器);
  • Lua 中断(GPIO定时器UART 模块提供的选项);
  • Lua debug 模块,它在嵌入式系统中几乎没有用处;
  • dump(),用于将编译后的代码或 Lua 数据写入文件;
  • undump(),用于读回相同的代码或从 *.lc 文件加载预编译的 Lua 字节码;
  • collectgarbage()gcinfo(),用于监控和微调 eLua 对 RAM 的使用;
  • 紧急垃圾回收器,用于提高内存非常小的系统的性能。

要使用此分支,请获取它的副本

 git clone http://github.com/elua/elua
 cd elua
 git checkout Mizar32

并像这样编译它

 scons board=mizar32 cpu=at32uc3a0128 target=lualong optram=0

将固件编程到板子上

[编辑 | 编辑源代码]

编译完成后,它应该会创建一个名为 elua_lualong_at32uc3a0256.elf 的文件,该文件可以通过多种方式编程到 Mizar32 板子上:请参阅有关 刷写固件 的章节。

如果您将使用 dfu-programmer 来完成此操作,您首先需要将 .elf 文件转换为 .hex 文件。例如

elua=elua_lualong_at32uc3a0256
avr32-objcopy -O ihex $elua.elf $elua.hex
华夏公益教科书