部分内容7---升级固件

来源:互联网 发布:最优化 教材 编辑:程序博客网 时间:2024/05/01 17:22

1、在system.lua中找到:

entry({"admin", "system", "flashops"}, call("action_flashops"), _("Backup / Flash Firmware"), 70)

对应函数
function action_flashops()里有:

local upgrade_avail = nixio.fs.access("/lib/upgrade/platform.sh"),注意platform.sh

从页面查找,当升级失败,有信息:

The uploaded image file.......

找对应flashops.htm里有:

<% if image_invalid then %>
<div class="cbi-section-error"><%:The uploaded image file ....%></div>
<% end %>

可以知道关键在if 语句里的image_invalid

回到system.lua,有:

if step == 1 then
if image_supported() then
luci.template.render("admin_system/upgrade", {
checksum = image_checksum(),
storage  = storage_size(),
size     = nixio.fs.stat(image_tmp).size,
keep     = (not not luci.http.formvalue("keep"))
})
else
nixio.fs.unlink(image_tmp)
luci.template.render("admin_system/flashops", {
reset_avail   = reset_avail,
upgrade_avail = upgrade_avail,
image_invalid = true
})
end

可以看出又有一个if判断,image_supported()是关键。

在image_supported()里:

local function image_supported()
-- XXX: yay...
return ( 0 == os.execute(
". /lib/functions.sh; " ..
"include /lib/upgrade; " ..
"platform_check_image %q >/dev/null"
% image_tmp
) )
end

从这个函数找到对应functions.sh      platform.sh  common.sh三个对应脚本

platform.sh又出现了,在platform_check_image() 里发现没有对应产品平台?

添加,编译,OK,可以升级固件了。


2、问题又出现了,升级固件后,无线没有起来

串口有打印信息:

Open file "*****t" failed!

即****.dat文件没有在etc目录下

而tmp目录却有**.dat文件

那么应该是一个ln 的链接没有成功,查找

在rt***.sh里发现:

ln -s /tmp/****.dat /etc/Wireless/*****

分别增加调试信息,echo "hjb****" >> /hjb

最终问题定位在

while grep -qs "^ *ra$((++i)):" /proc/net/dev;里

即断电重启,++i=0,reboot重启++i就是1了,grep没有找到对应ra1,就不继续向下执行了

升级固件和重启类似,但是升级固件时候会删掉etc/***.dat,所以无线起不来。

怎么办?

在while语句前增加一句了ln -s语句,强制链接不久ok了吗?

结果证明猜测正确。


结论:这类型bug解决,很多时候都是找到对应文件,猜测功能,用打印信息调试。验证正确即修改正确了。

总之,一句玩笑话,问题的解决都是猜的。




0 0