嵌入式Lua开发环境的搭建

  • 背景

作为一个嵌入式软件从业者,近几年的工作经历渐渐感觉到了从事嵌入式软件开发,工作投入高而产出低。提高工作效率的方法,笔者认为其之一是尽量避免使用C/C++语言进行嵌入式系统层面的开发,而是根据开发的具体系统功能,选择适合语言来开发。通常而言,C/C++的运行效率高而开发效率低,大多数脚本语言则运行效率不及使用C/C++开发的应用,而开发效率要高很多。

近来半载在“高人”的带领下,接触到了基于开源项目openwrt的嵌入式系统开发,而巧合的是openwrt系统的几个核心组件自带了Lua脚本编程接口;在接触openwrt之前我也浅略地学过Lua语言,并在工作实际中运用了Lua语言脚本。Openwrt开源项目中的ubus/uloop,是一个进程间通信的组件,可以很大程度上加速多进程项目的开发;此外openwrt还可以为我们编译zeromq及其Lua接口,这几点促使笔者使用openwrt编译了嵌入式Lua开发环境,并测试在安卓手机可以正常运行:这样就可以通过SSH连接到手机上进行一些简单的Lua脚本开发了。

该Lua开发环境也可以运行在常见的嵌入式ARM/Linux系统上,虽然笔者未曾测试过。除了openwrt的几个核心组件(ubus/uloop/uci等)它还集成了以下Lua库,基于笔者的经验,基于这些Lua库可以完成绝大多数的嵌入式系统服务的开发工作:

Lua-cjson/luabitop/lua-openssl/luasocket/luaposix/luasql/lzmq。

 

  • 使用openwrt编译

笔者使用的openwrt 版本为19.07。作为一个通常用于开发路由器、网关的开源项目,它通常会禁用交叉编译器的软浮点支持,需要修改两处使能ARM平台的硬浮点支持,首先,为bcm53xx平台添加浮点计算的配置:

之后,修改交叉工具链的后缀名:

然后,执行make menuconfig选中bcm53xx芯片平台,并清除大部分不需要编译的软件包,仅保留我们需要的与Lua相关的软件包:

最后,确认生成的.config文件中,软浮点支持是被禁用了的(CONFIG_SOFT_FLOAT is not set):

这样就可以编译openwrt了。注意到我们清除了太多的我们不需要的软件包(包括openwrt默认选译的一些软件包),最终编译openwrt失败,仅管我们所需要的,与Lua相关的软件包都编译成功了:

编译完成后,我们对根文件系统root-bcm53xx建立一个Git仓库,下面的工作就是需要对这个仓库进行修改,以将其制作成我们想要的Lua开发环境:

  • 对二进制文件的修改

由于我们只选择了Lua相关的软件包,编译得到的根文件系统中的文件是比较少的,当然也与根文件系统很多文件夹是空文件夹相关:

除了删除一些不需要的文件外(如openwrt编译出来的内核驱动模块等),笔者编写了三个简单的shell脚本(这三个脚本均可以在压缩包中找到;暂时未上传至服务器),记录了对ELF可执行文件及一些动态库的修改,主要目的是为了让该Lua开发环境能在任意设备上正常运行。

首先,修改可执行文件的动态链接器,修改为/lia目录下的ld-linux-armhf.yejq:

其次,修改/usr目录为/usa目录,以避免在ARM/Linux系统上与现有的文件系统上的/usr目录冲突:

最后,修改动态链接器ld-2.27.so,将环境变量解析时的LD_更改为LA_;同时将/lib目录修改成为/lia,这样动态链接器不会受以LD_为前缀的环境变量的影响,也不会从/lib:/usr/lib目录下寻找动态库文件(而会从/lia:/usa/lia目录下寻找动态库):

至此,Lua开发环境的二进制文件修改就结束了。这三点应当能够保证它能在很多嵌入式ARM/Linux上正常运行。由于64位ARM处理器也能够加载32位的ARM应用,它也应该能够在64位ARM平台上运行。需要注意的有两点,一个是时间相关的,Lua应用在获取系统时间时,会访问/etc/localtime时区数据文件,这个在开发环境中是没有的,需要使用者自己去解决;另一个是与网络解析相关的,需要访问/etc/resolv.conf文件,这个文件也是没有的,可以手动添加。笔者后继会完善这个Lua开发环境(暂时不上传),但不会更新此博客。如果有需要的可以发邮件至xiaoqzye@qq.com,笔者会将安装的压缩包发过去(不需积分^_^)。

 

  • 在安卓手机上安装

笔者没有编写的安装脚本,下图是笔者在安卓手机上的安装过程:

安装完成后,可以试着运行一下,Lua解析器可以正常加载一些模块,如lzmq等:

至此,我们就可以在安卓手机或非openwrt-based的嵌入式ARM/Linux设备上开发简单的Lua系统服务了。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要配置VSCode的Lua开发环境,你可以按照以下步骤进行操作: 1. 首先,确保你已经安装了Visual Studio Code编辑器。你可以从官方网站上下载并安装它。 2. 打开VSCode,点击左侧的扩展图标(四个方块组成的图标),在搜索框中输入"Lua",然后选择并安装"Lua"扩展插件。这个插件将为你提供Lua语言的语法高亮、代码补全等功能。 3. 接下来,你需要创建一个名为"launch.json"的配置文件。你可以在VSCode中打开你的项目文件夹,然后点击左侧的调试图标(类似于一个虫子的图标),选择"创建一个launch.json文件"。在弹出的菜单中选择"Lua"作为调试器类型。 4. 在打开的"launch.json"文件中,你可以根据你的需求进行配置。你可以设置"program"属性为你的Lua脚本文件的路径,例如"${workspaceFolder}/debug.lua"。你还可以设置其他调试器相关的属性,如"request"和"name"。 5. 保存并关闭"launch.json"文件。 现在,你已经成功配置了VSCode的Lua开发环境。你可以在VSCode中打开你的Lua项目,并使用调试功能来调试你的Lua代码。请注意,这个配置过程是基于引用\[1\]和\[2\]提供的信息。 #### 引用[.reference_title] - *1* [Visual Studio Code -> VSCode 开发环境搭建 ---- Lua 代码调试(code runner 插件)](https://blog.csdn.net/yanwennian/article/details/103524744)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Visual Studio Code -> VSCode 开发环境搭建 ---- Lua 开发环境搭建 及 代码运行(code runner 插件)](https://blog.csdn.net/yanwennian/article/details/103480938)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值