页面升级步骤 网页的页面在usr/lib/lua/luci/view/admin_system/flashops.htm 该页面中 <% if upgrade_avail then %> ------判断升级是否可用
第一步:判断升级是否可用, 判断upgrade_avail时调用了/usr/lib/lua/luci /controller/admin/system.lua中的action_flashops()函数, local upgrade_avail =nixio.fs.access("/lib/upgrade/platform.sh") 内核中的/lib/upgrade/下没有platform.sh文件,所以会出现图A 当在此路径下添加platform.sh文件后,其他的平台生成的是.trx和.bin文件,此文件如下图
目的是判断上传的镜像是否为trx后缀! 下一步是<% if image_invalid then %>判断上传的文件是否可用: 在system.lua中的action_flashops()函数中调用了子函数image_supported()
此处调用了platform.sh文件中的platform_check_image函数判断文件的后缀 经过grep -rn "platform.sh" .发现 在./target/linux/下brcm-2.4,adm5120 ar71xx au1000 brcm-2.4 brcm63xx generic-2.4 ixp4xx lantiq等文件夹下的base-files/lib/upgrade/.svn/entries文件中均有下载platform.sh的话,但是feroceon-kw是自定义的目标,所以不包含此文件,现在要解决的是/lib/upgrade/platform.sh文件生成的问题,由于打补丁只能对内核起作用,所以通过补丁的方法不可行。在/target/linux下的其他平台文件夹中可以看到有base-file/有些会有lib/upgrade/platform.sh,说明也可以在自己的平台下建立此种文件夹来达到生成platform.sh的目的。
从页面升级只能是一个文件,而现在所生成的uImage,.img文件为两个文件,需要把两个文件合并为一个文件并按照mtd分区填充空白区,填充值为1 合并的方法 dd命令 修改target/linux/feroceon-kw/image/Makefile产生.bin文件
填充的块大小要根据盘的自己系统而定,dd的参数bs的大小也是根据系统和内存而定 Mtd分区:
setenv mtdparts mtdparts=spi_flash:1m(u-boot)ro,3m(kernel),-(rootfs)
通过上面的方法可以将uImage和img文件合并为一个bin文件, 现在要解决的是如何让/lib/upgrade/platform.sh中的platform_check_image()判断正确,即 case "$(get_magic_word"$1")" in 2705) return 0;;这儿的2705这个数字怎么确定 而platform_check_image()调用了common.sh中的get_magic_word(),get_magic_word()调用了get_image(),通过看这几个函数发现问题的关键在于 cat 镜像名| dd bs=2 count=12>/dev/null | hexdump -n 2 -e '1/1 "%02x"')" 这个命令的反回值是多少,经过测试得到为2705
/usr/lib/lua/luci/controller/admin/system.lua
/lib/upgrade/platform.sh
/lib/upgrade/common.sh
升级用的函数
Openwrt中mtd的使用
PS:openwrt固件编译luci模块的选择:
make menuconfig
luci--->Collections--->Luci选中即可
任何一个web 界面都包括两部分内容,一部分是web 服务器,一部分是界面语言,openwrt 的web 服务器默认采用uhttpd,端口80,web 界面语言为luci,luci 包括两部分内容,它是由lua 和uci 合并起来的,lua 是一种执行效率非常高的解释性语言,uci 是配置openwrt 的默认工具。
默认的固件是没有路由器登录界面的,固件中编译进luci模块才可以看到。
烧录固件后出现类似下面的页面
如果要看整个文档,请下载附件
openwrt页面升级整理.zip
(245.81 KB, 下载次数: 5)
|