远程更新对于硬件设备非常的重要,在 4G 的设备上面我们用的是 luat,
但是它原本的 ota 更新是有问题对的, 在他们的 github 上面提交 issue, 没有人鸟。
于是干脆自己设计一个。
我把自己写的应用代码全部都打包到一个文件上面。
在入口的位置,require 两个不同的文件。
用一个 safeRequire 如下:
function safeRequire(file)
local oldPath = package.path
package.path = "/?.lua;/?.luac;/?.luae;"..package.path
local result, para = pcall(require, file .. '_new')
if not result then
result, para = pcall(require, file)
end
package.path = oldPath
return result, para
end
--加载功能模块
local result, _ = safeRequire('sensor')
if not result then
require"sensor"
end
我们主要文件名字为 sensor.lua
, 我们更新后的文件叫 /sensor_new.lua
, 所以也把它加到 package.path 上。
利用 pcall
的特性去 加载 所需要的 模块。
我们更新固件的时候只需要把文件写到 /sensor_new.lua
, 然后重启一下机器就可以。
local function updateDoneCb(result, prompt, heads)
if result then
sys.timerStart(function()
sys.restart("UPDATE_DOWNLOAD_SUCCESS")
end, 1000)
end
end
local url = 'https://example.com/path/to/you/sensor.lua'
http.request("GET", url, nil, nil, nil, 60000, updateDoneCb, '/sensor_new.lua')
网友评论