Mizar32/编译 eLua
Mizar32 网页构建器位于 http://builder.simplemachines.it,它允许您以多种方式自定义固件,并将为您构建新的固件镜像,而无需您进行任何繁琐的操作。
如果这还不够,或者您只是喜欢这种事情,那么深呼吸,然后...
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 软件包,请执行上述操作,然后转到
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-ng(crosstool-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
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
另一个选择是
git clone https://github.com/elua/elua cd elua
请注意:(最新)eLua 构建系统已更改,因此使用 scons
的说明需要更改。另一方面,Alcor6L 没有这个问题。它使用 scons
git clone https://github.com/simplemachines-italy/Alcor6L.git cd Alcor6L
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
在 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