利用mtd工具实现嵌入式设备在线升级

版权声明:本文为博主原创文章,未经博主允许不得转载。

 

目录(?)[+]

 

主要思路是:通过web post方式将升级文件交给CGI程序处理,然后通过mtd工具实现设备在线升级.

1.页面部分

<form target="_blank" enctype="multipart/form-data" method="POST" action="./update.cgi">

<p>选择升级文件:    

<input type="file" value=""  name="file">

<input type="submit" value="确认" name="savebasesetting">

</p>

</form>

 

这部分主要是将待升级的文件上传给服务器(交给update.cgi)处理.

注意表单form属性:

1必需的 action 属性规定当提交表单时,向何处发送表单数据。

2 enctype属性规定在发送到服务器之前应该如何对表单数据进行编码。



描述


application/x-www-form-urlencoded


在发送前编码所有字符(默认)


multipart/form-data


不对字符编码。


text/plain


空格转换为 "+" 加号,但不对特殊字符编码。

3 method属性规定如何发送表单数据(表单数据发送到 action 属性所规定的页面)。

表单数据可以作为 URL 变量(method="get")或者 HTTPpost (method="post")的方式来发送。

method属性

浏览器使用method 属性设置的方法将表单中的数据传送给服务器进行处理。共有两种方法:POST 方法和 GET 方法。

如果采用 POST 方法,浏览器将会按照下面两步来发送数据。首先,浏览器将与 action 属性中指定的表单处理服务器建立联系,一旦建立连接之后,浏览器就会按分段传输的方法将数据发送给服务器。

在服务器端,一旦 POST 样式的应用程序开始执行时,就应该从一个标志位置读取参数,而一旦读到参数,在应用程序能够使用这些表单值以前,必须对这些参数进行解码。用户特定的服务器会明确指定应用程序应该如何接受这些参数。

另一种情况是采用 GET 方法,这时浏览器会与表单处理服务器建立连接,然后直接在一个传输步骤中发送所有的表单数据:浏览器会将数据直接附在表单的action URL 之后。这两者之间用问号进行分隔。

一般浏览器通过上述任何一种方法都可以传输表单信息,而有些服务器只接受其中一种方法提供的数据。可以在<form> 标签的 method (方法)属性中指明表单处理服务器要用方法来处理数据,使 POST 还是 GET。

POST还是 GET?

如果表单处理服务器既支持 POST 方法又支持 GET 方法,那么你该选择哪种方法呢?下面是有关这方面的一些规律:

·       如果希望获得最佳表单传输性能,可以采用 GET 方法发送只有少数简短字段的小表单。

·       一些服务器操作系统在处理可以立即传递给应用程序的命令行参数时,会限制其数目和长度,在这种情况下,对那些有许多字段或是很长的文本域的表单来说,就应该采用 POST 方法来发送。

·       如果你在编写服务器端的表单处理应用程序方面经验不足,应该选择 GET 方法。如果采用 POST 方法,就要在读取和解码方法做些额外的工作,也许这并不很难,但是也许你不太愿意去处理这些问题。

·       如果安全性是个问题,那么我们建议选用 POST 方法。GET 方法将表单参数直接放在应用程序的 URL 中,这样网络窥探者可以很轻松地捕获它们,还可以从服务器的日志文件中进行摘录。如果参数中包含了信用卡帐号这样的敏感信息,就会在不知不觉中危及用户的安全。而 POST 应用程序就没有安全方面的漏洞,在将参数作为单独的事务传输给服务器进行处理时,至少还可以采用加密的方法。

·       如果想在表单之外调用服务器端的应用程序,而且包括向其传递参数的过程,就要采用 GET 方法,因为该方法允许把表单这样的参数包括进来作为 URL 的一部分。而另一方面,使用 POST 样式的应用程序却希望在 URL 后还能有一个来自浏览器额外的传输过程,其中传输的内容不能作为传统<a> 标签的内容。

2 mtd工具介绍:

mtd-util,即mtd的utilities,是mtd相关的很多工具的总称,包括常用的mtdinfo,flash_erase, flash_eraseall,nanddump, nandwrite等,每一个工具,基本上都对应着一个同文件名的C文件。

mtd-util,由mtd官方维护更新,开发这一套工具,目的是为了Linux的MTD层提供一系列工具,方便管理维护mtd分区。mtd工具对应的源码,叫做mtd-utils,随着时间更新,发布了很多版本。

Mtd 工具源码下载: http://git.infradead.org/,

Mtd: 官方网站: http://git.infradead.org/,

3 升级前准备:

对flash 进行分区规划,通过uboot将信息传递给kernel:

setenv bootargs 'mem=64Mconsole=ttyAMA0,115200 root=/dev/mtdblock3 rootfstype=cramfsmtdparts=hi_sfc:512k(boot),512k(bootargs),3M(kernel),13M(rootfs),13M(app),2M(config)'

 

 

分区的目前是便于管理,在升级时可以单独升级rootfs,或者只升级App.等.

 

4.升级代码

升级代码主要分为4个部分.

1主要是获取上传文件的信息,如文件名,文件长度. 函数GetFileInfo()

2 主要是将上传的文件保存至内存中.函数: SaveFileToLocal

3 主要是对上传的文件进行crc校验: TestCrc,针对的是cramfs文件系统

4利用mtd工具进行升级:

源文件:

5升级注意事项:

1 由于用的是boa web服务器,上传时临时文件会用到目录/tmp,所以必须保证这个目录是可以读写的.由于cramfs是只读文件系统.所以可以采用把/tmp设置为tmpfs文件系统.(相当于内存).

设置/etc/fstab文件

tmpfs           /tmp            tmpfs   size=16m

 

2 重新分区后,每次启动需要挂载,所以可以在rcS文件中添加

mount -t cramfs  /dev/mtdblock4/opt

mount -t jffs2  /dev/mtdblock5/mnt/nand

 

3升级时间有时会过长,导致web页面无法正常返回.可以修改boa.conf,及defines.h

#define REQUEST_TIMEOUT                        60

时间: 2024-09-30 19:15:02

利用mtd工具实现嵌入式设备在线升级的相关文章

VB中利用第三方控件实现软件在线升级

大家对金山毒霸.瑞星等杀毒软件的在线升级一定不陌生吧?它们可以利用在线升级程序进行在线升级,无需用户访问网站下载.这样的功能的确对于使用者来说是十分方便的.那么,您是否也想为您的软件添加方便的在线升级的功能呢?下面介绍一个第三方控件,能够帮你非常容易地就实现. bkDLControl控件一个可以快速实现在线下载的控件,它在下载的同时通过进度条显示进度.你可以编写当其下载完成后的事件,这样我们就可以轻松达到在线升级的目的. 要了解该控件强大便捷的功能,下面我们就通过一个实例来讲解. 第一步:首先启

新型IoT僵尸网络正快速扩张,家中有这些设备赶快升级打补丁

路由器.家用摄像头是现代一些家庭的标配,给很多人的生活带来了便利和安全保障.不过,如果你家里有下列品牌的路由器和摄像头就要小心了,因为它们可能被病毒感染. 近日,360安全研究人员率先发现一个新的针对IoT设备的僵尸网络,并将其命名为"IoT_reaper".据悉,该僵尸网络利用路由器.摄像头等设备的漏洞,将僵尸程序传播到互联网,感染并控制大批在线主机,从而形成具有规模的僵尸网络.目前,很多厂商的公开漏洞都已经被IoT_reaper病毒所利用,其中包括Dlink(路由器).Netgea

嵌入式设备web服务器比较

目录(?)[-] Boa Thttpd Mini_httpd Shttpd Lighttpd Goahead AppWeb Apache 开发语言和开发工具 结论 备注   现在在嵌入式设备中所使用的web服务器主要有:boa.thttpd.mini_httpd.shttpd.lighttpd.goaheand.appweb和apache等. Boa 1.介绍 Boa诞生于1991年,作者Paul Philips.是开源的,应用很广泛,特别适合于嵌入式设备,网上流行程度很广.它的官方网站说boa

嵌入式设备web服务器

操作系统:ubuntu10.04 前言:    为了提高对设备的易操作性,很多设备中提供pc机直接通过浏览器操作设备的功能.这就需要在设备中实现web服务器.    现在在嵌入式设备中所使用的web服务器主要有:boa.thttpd.mini_httpd.shttpd.lighttpd.goaheand.appweb和apache等. 一,比对             Boa 1.介绍 Boa诞生于1991年,作者Paul Philips.是开源的,应用很广泛,特别适合于嵌入式设备,网上流行程度

LINUX网络嵌入式设备

  这不是什么新鲜东西,无线路由器很早前就开始使用了,不过最近才慢慢理解其原理.现在网络嵌入式设备的功能越来越强大了,各芯片厂商的解决方法支持着这种复杂性.最近公司实习,做一个家庭网关的项目.下面的内容应该不算泄密吧,写得随意一点. 1.一个网络芯片架构 大家应该看得出来,这是一个DSL芯片.其网络部分由一个switch core构成核心,对外有3个交换口(粉红色的):左侧为以太网MAC,可外接以太网芯片MAC或PHY,称为LAN端;右侧为DSL的TPS子层,按照DSL标准传输ATM/PTM数据

木马通过修改手机ROOT工具攻击安卓设备

日前,Palo Alto Networks公司安全研究人员Wenjun Hu, Claud Xiao 和 Zhi Xu发现了一款新型木马Rootnik,通过使用商业root工具获取手机root访问权限,进而获取安卓设备的敏感信息,并影响范围甚广. 什么是Rootnik Rootnik使用一款定制的root工具Root Assistant软件获取设备的访问权限,并通过逆向工程和重新打包,获取了至少5个可利用漏洞来支持其恶意行为,运行Android 4.3及之前版本的设备均会受到影响.Root As

《嵌入式设备驱动开发精解》——1.2 基于ARM处理器的嵌入式Linux系统

1.2 基于ARM处理器的嵌入式Linux系统 嵌入式Linux应用开发完全手册 1.2.1 ARM处理器介绍 1.ARM的概念 嵌入式处理器种类繁多,有ARM.MIPS.PPC等多种架构.ARM处理器的文档丰富,各类嵌入式软件大多(往往首选)支持ARM处理器,使用ARM开发板来学习嵌入式开发是个好选择.基于不同架构CPU的开发是相通的,掌握ARM架构之后,在使用其他CPU时也会很快上手.当然,作为产品进行选材时,需要考虑的因素就非常多了,这不在本书的介绍范围之内. ARM(Advanced R

利用聊天工具MSN进行传播的蠕虫新变种现身互联网

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 新华网天津7月27日电(记者张建新.王宇丹)国家计算机病毒应急处理中心通过对互联网的监测发现,近期出现了一种利用聊天工具MSN进行传播的蠕虫新变种.该蠕虫利用了社会工程学原理,通过向聊天好友发送诱惑性消息,诱骗对方点击下载含有病毒文件的压缩包. 该蠕虫运行后,会在受感染操作系统的后台收集系统中的一些信息,并将其发送到指定服务器站点上.如果蠕虫

《嵌入式设备驱动开发精解》——1.2 关于本教程涉及的实例

1.2 关于本教程涉及的实例 嵌入式设备驱动开发精解在后续的章节中会经常提及实例这个词,此处的实例指的是我们进行开发实验的一整套包括软件.硬件的整体开发和调试环境,软件方面的开发环境可以依据后续章节中的关于如何建立自己的开发环境进行搭建,有了软件开发环境,同样需要有一套硬件开发板来支撑后续程序的开发调试与功能的验证,这里选用的是一套手机开发的硬件平台,当然也可以使用一些ARM 开发板作为硬件环境,因为我们建立的开发环境只要稍做修改就可以适配各种编译器.各种CPU,是不依赖于某一类CPU的. 那么