利用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-12-27 23:11:58

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

嵌入式系统 - 在线升级

所谓在线升级,指在Linux启动后可通过网络传输内核或者文件系统,然后替换掉原来的文件,有以下2种方法: 提示:在线升级功能要使用ramdisk文件系统.这种文件系统会加载到内存中使用,用户做任何修改都不会写入flash,不会保存. 1.uboot下将内核.文件系统等文件通过jffs2压缩后写进flash某个分区,在Linux下将次分区挂载到文件夹下, 然后就能看到这些文件,可以直接予以替换升级: 2.内核等文件直接写入flash分区中,在Linux下通过 /dev/mtdblock 设备将升级

利用手机工具教你快速完成英语翻译在线翻译中文

利用手机工具教你快速完成英语翻译在线翻译中文?世界那么大,谁都想出去看看,可是当你遇到语言问题没法解决时,你还想出去看看吗?恐怕没人愿意,所以今天小编就为大家带来一个英语在线翻译为中文的方法,让你可以有出去看看的决心.1:打开手机翻译工具"语音翻译器"后,首先我们选择翻译模式,总共有语音翻译和文本翻译两种翻译模式,小编通常使用文本翻译模式,觉得不仅方便,而且很实用.2:选择源语种和目标语种,源语种选择中文,目标语种选择英文.3:当你想要进行翻译时,点击文本框,开始打字输入你想要进行翻译

基于串口通信的DSP应用程序在线升级方法

转载内容,源地址http://www.qiytech.com/jiejuefangan/gongyekz/922.html 摘  要:为解决特殊场合DSP程序升级困难的问题,以TMS320F28035为例,介绍了一种基于串口通信的适合于TMS320C2000系列DSP实现程序更新的在线升级方法.描述了该在线升级方法的基本思想和实现步骤,给出了关键部分的程序代码.实验证明,该方法简单可靠,可用于嵌入式设备软件程序的升级更新中. 关键词: 在线升级: DSP:串口通信: Flash TMS320C2

嵌入式设备中支持国密算法的方法(二)

上一篇文章中我们为大家介绍了嵌入式设备中支持国密算法的几种方法.本篇我们详细的介绍一下第一种方法:移植Miracl库的具体操作步骤.第一步 获取源码MIRACL密码库是开源软件,可以直接到官网下载,也可在csdn等论坛中获取.第二步 利用MIRACL库函数实现SM2算法实现sm2的功能需要用到MIRACL库中的36个源文件,例如mraes.c.mrec2.c.mrarth0.c.mrcore.c.mrshs.c.mezzn2.c.mrxgcd.c.mrgcm.c.mrio1.c等.然后需要新建一

嵌入式设备中支持国密算法的方法(三)

本篇文章是介绍国密算法在嵌入式设备中应用方法系列文章的第三篇,介绍移植openssl库到嵌入式设备中的具体方法,当然最终的目的还是使我们的设备能支持国密算法.同上一篇文章中介绍的miracl密码库相比,openssl库的应用更加广泛,资料支持度更好,但是代码体量要大于miracl库.需要再次说明的是,同miracl库一样,openssl的库也并不能直接提供国密算法的接口,我们是利用库中相应的API接口(如椭圆曲线等)来构建自己的国密算法,下面我们具体介绍移植的步骤.第一步 获取库作为应用广泛的开

Android在线升级相关笔记一(解析服务器版本与当前版本比较)

大概流程:Android客户端去访问服务器上的封装了版本号等信息的xml文件,对服务器上的版本和当前版本进行比较, 如果低于服务器的版本,则下载服务器上的新版软件,进行安装替换,完成升级. 一.首先用tomcat搭建服务器,用于开发测试. 下载tomcat请参考:http://blog.csdn.net/only_tan/article/details/25110625 1.在tomcat中新建自己的项目: \apache-tomcat-6.0.39\webapps 目录下新建自己的项目文件夹,

SequoiaDB版本在线升级介绍说明

1.前言 在SequoiaDB数据库发展过程中,基本保持每半年对外发行一个正式的Release版本.并且每个新发布的Release版本相对老版本而言,性能方面都有很大的提高,并且数据库也会在新版本中加入很多新的功能,希望能够提高数据库开发的易用性. 在SequoiaDB发展过程中,越来越多的开发者了解到它,并且对它发生兴趣.现在已经有越来越多的用户在学习.研究SequoiaDB,并且也有越来越多的企业用户在对SequoiaDB经过充分测试后,决定将SequoiaDB部署在企业的生产环境中,利用S

PIC32MZ 通过USB在线升级 -- USB CDC bootloader

了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 最近给我的开发板PIC32MZ EC starter kit写了个USB 在线升级程序--USB CDC bootloader.有了它,我可以很方便的升级我的应用程序.我大概是一个星期前开始决定写这个USB在线升级程序的,USB 有很两种类型,USB host和USB device. 由于USB host接触不多,所以我

软件更新相关,使用utuils框架在线升级,显示progressDialog,下载完成后自动弹出安装界面。

使用utuils框架在线升级,显示progressDialog,下载完成后自动弹出安装界面. 1 private void updateDownload() { 2 //检测内存设备是否可用 3 if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ 4 //设置存储路径 5 final String targer = Environment.getExternalStorageDirectory