跳轉到內容

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://anonymous@spaces.atmel.com/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
華夏公益教科書