- lualoader是我写的一个简单项目,主体为go语言,通过CGO进行与原生lua的绑定。项目支持使用lua来处理简单的http请求(如表单推送,URL参数),不支持复杂http请求(如文件上传)。项目地址
- 首先下载
gcc-riscv64-linux-gnu
工具链。sudo apt install gcc-riscv64-linux-gnu
。 - 前往Lua官方下载站下载最新的lua源代码,并解压。进入lua目录,执行
make CC=riscv64-linux-gnu-gcc
。 - 此时
src/
目录下已经生成了lua
和luac
两个可执行文件。通过file
命令查看,我们发现其需要/lib/ld-linux-riscv64-lp64d.so.1
库。我们可以在/usr/riscv64-linux-gnu/lib/
中找到这个库,将库复制到Duo系统的/lib
下。 - 将
lua
和luac
两个可执行文件复制进Duo系统,测试执行。我们发现还需要libm.so.6
和libc.so.6
。这些同样可以在/usr/riscv64-linux-gnu/lib/
下找到。我们将其复制进Duo系统的/lib
下。 - 再次执行,发现一切正常了。至此lua移植教程结束,很简单吧~
- lualoader是由go语言编写的,所以我们需要先搭建好go编译环境。过程比较简单,这里不再赘述。
- 使用
git clone https://github.com/sapidexs/lualoader
来下载lualoader的源码。注意不需要下载submodule。我们将之前编译好的lua项目src/
下除了Makefile
,lua
和luac
之外的全部文件复制到lualoader/lua/
文件夹下。 - 在
lualoader/
文件夹下执行CGO_ENABLED=1 CC=riscv64-linux-gnu-gcc GOOS=linux GOARCH=riscv64 go build -ldflags "-s -w" .
即可编译项目(怎么样,go的交叉编译很简单吧)。命令中-ldflags "-s -w"
用于去除调试信息,缩小可执行文件体积,可以不写。 - 将
lualoader
拷贝进Duo系统,尝试执行,能跑(因为需要的库之前已经复制进去了)但是报错fatal error: out of memory allocating heap arena map
(空间不足)。此时我们可以遵循教程开启Duo的Swap空间。 - 设置完Swap之后,再次执行
lualoader
,发现已经可以正常启动了。我们可以按照README来配置插件,并且访问网页测试看看效果。至此lualoader移植教程结束,也很简单吧~