当前位置:  编程技术>移动开发
本页文章导读:
    ▪嵌入式中程序晋级,使用ftp shell脚本,方式        嵌入式中程序升级,使用ftp shell脚本,方式这个脚本是两年前写的,基本原理是ftp服务器端有个文件列表,客户端定时把文件列表下载下来,校验一下本地文件与升级服务器上的文件是否一致,如果.........
    ▪ 【3月17日下海】邀您参加游戏与移动领域前沿精英论坛        【3月17日上海】邀您参加游戏与移动领域前沿精英论坛随着Adobe游戏开发工具集的发布,给页游开发带来新的可能性。客户端C/C++开发者加入页游开发队伍中来。移动游戏市场日趋成熟,越来.........
    ▪ ubuntu 删除顶部任务栏下固定的快速启动程序按钮       ubuntu 删除顶部任务栏上固定的快速启动程序按钮按住alt键并点击鼠标邮件即可。。。 很神奇吧。。。 呵呵。分享了。 ......

[1]嵌入式中程序晋级,使用ftp shell脚本,方式
    来源: 互联网  发布时间: 2014-02-18
嵌入式中程序升级,使用ftp shell脚本,方式

这个脚本是两年前写的,基本原理是ftp服务器端有个文件列表,客户端定时把文件列表下载下来,校验一下本地文件与升级服务器上的文件是否一致,如果不一致则升级。

服务器端的文件列表

大概如下

count = 1

01=MD5=ftp路径=设备存放路径。


注意!看脚本是先看一下定义,然后从下往上看。


#!/bin/sh

#升级目录在 /update 中
#升级目录在 /update/list.ini 服务器上列表
#升级目录在 /update/list.ini_bak 服务器上列表备份
#升级目录在 /update/loc_list.int 本地文件列表
#升级目录在 /update/update_list.ini 升级文件列表
#升级目录在 /update/down/ 为升级的文件夹 保存所有下载的文件


#ip port folder 90.0.17.35 21 tgr20
#rm -rf /update/*


ftp_name="tgr20"
ftp_passwd="tgr20"
#ip=$1
#port=$2
#folder=$3
#list="list.ini"
#ftp_url="ftp://$ip:$port/"
#echo $ftp_url
#if [ $# == 3 ]
#then
#ftp_url="$ftp_url$folder/"
#fi
list="list.ini"
mkdir -p "/update"
folder="tgr20/"
ftp_url="$1/$folder"
ftp_url_para="/update/ftp_url_para"
ver="cur_ver"
if [ $# == 0 ]
then
ls $ftp_url_para > /dev/null
if [ $? != "0" ]
then
exit 0
fi
ftp_url=`cat $ftp_url_para`
fi
echo $ftp_url > $ftp_url_para
echo "url=$ftp_url"
ftp_list="$ftp_url$list"
sev_list="/update/$list"
sev_list_bak=$sev_list"bak"
loc_list="/update/loc_$list"
ftp_ver="$ftp_url$ver"
loc_ver="/usr/bin/$ver"




#ftp_file loc_file
update_list="/update/update_list.ini"
down_status="/update/status"
net_status="/update/net_status"
log="/update/log"
root_folder="/update/down"
mkdir -p $root_folder


#下载状态
#如果网络ok 0
#如果网络fail 1
#文件校验失败 2
file_value1="/update/value1"
check_fail_times="3"






#判断当前状态
#如果当前状态 检测中 0
#如果当前状态 下载中 1
#如果当前状态 校验中 2
#如果当前状态 拷贝中 3


#
fun_init_system()
{
echo "0" > down_status
echo "0" > net_status
echo "0" > file_value1
rm -rf $root_folder
rm $update_list
rm $sev_list
rm $sev_list_bak
}


# ftp_src loc_dest 
fun_ftp_get()
{
mkdir -p `dirname $2`
#wget -c --retry-connrefused -t 0 -T 5 -O /home/jerry/1234.ini  ftp://90.0.17.250:21/list.ini
#wget -c --user=$ftp_name --password=$ftp_passwd --retry-connrefused -t 0 -T 5 -O $2 $1
ret=`wget -c -T 30 -O $2 $1`
return ret


}


#下载服务器文件列表
fun_down_sev_file_list()
{
rm -rf $sev_list
fun_ftp_get $ftp_list $sev_list
# md51='md5sum' $sev_list
# rm -rf $sev_list_bak
# cp $sev_list $sev_list_bak
}
#获取本地文件列表
fun_down_loc_file_list()
{
rm -rf $loc_list
# md5sum /bin_jerry/* >> $loc_list
md5sum /usr/bin/* >> $loc_list
md5sum /usr/lib/* >> $loc_list
md5sum /lib/modules/2.6.33/* >> $loc_list
}
#比较是否需要升级
#检测列表是否有更新 1 有升级 0 没有升级
# src dest md5 mode
fun_compare_list()
{
#生成需要下载的文件列表
echo "0" > $file_value1
rm -rf $update_list
cat $sev_list | while read line
do
set word1 word2 word3 word4
set $line
src=/blog_article/$1_br/index.html> dest=$2
md5=$3
mode=$4
new_file="$src $root_folder$dest $md5 $mode"
cat $loc_list | while read line
do
# md5 app
set word5 word6
set $line
if [ $2 == $dest -a  $1 == $md5 ]
then
echo "1" > $file_value1
break 
fi
done
tmp=`cat $file_value1`
if [ $tmp == 0 ]
then
echo $new_file >> $update_list
fi
echo "0" > $file_value1
done
ls $update_list
if [ "$?" -eq "0" ]
then
echo "********************compare_result_update***************************"
return 1
fi
return 0
}


#拷贝文件
# src dest md5 mode
fun_copy_file()
{
cat $1 | while read line
do
set word1 word2 word3 word4
set $line
echo $2
echo $root_folder
# a=${a:0:32}
full_path=$2
dest_path=${full_path#$root_folder}
rm -rf $dest_path
cp -rf $2 $dest_path
done
rm -rf $root_folder
echo "0" > $down_status
echo "______________________reboot_system______________________"
reboot
}
#md5校验
#file_name value
#0:ok 1:fail
fun_md5sum()
{
md5=`md5sum $1`
md5=${md5:0:32}
if [ $md5 == $2 ]
then
return 0
fi
return 1
}
#校验文件
# src dest md5 mode
fun_check_file()
{
echo "____________fun_check_file = $1 __________________________"
cat $1 | while read line
do
set word1 word2 word3 word4
set $line
times=0
while true;
do
fun_md5sum $2 $3
if [ "$?" == "0" ]
then
echo "check ok"
break
fi
rm -rf $2
fun_ftp_get $ftp_url$1 $2
#网络校验fail
echo "1" > $net_status
times=$((times+1))
if [ $times == $check_fail_times ]
then
fun_init_system
echo "check fail 3 return "
return 0
fi


done
done
status=`cat $net_status`
echo "netstatus = $status"
if [ $status == "0" ]
# if [ $status == "0" -o $status == "2" ]
then
echo "3" > $down_status
echo "start copy file..."
fun_copy_file $update_list
fi
}


#开始下载文件
# src dest md5 mode
fun_down_file()
{
echo "1" > $down_status
cat $1 | while read line
do
set word1 word2 word3 word4
set $line
fun_ftp_get $ftp_url$1 $2
chmod  $4 $2
done
echo "2" > $down_status
fun_check_file $update_list
}


#检测是否有需要升级的文件
fun_check_update()
{


#0:ok 1:fail
#fun_md5sum()
#ftp_ver="$ftp_url$ver"
#loc_ver="/usr/bin/$ver"






fun_down_sev_file_list
fun_down_loc_file_list
fun_compare_list
if [ "$?" -eq "1" ]
then
fun_down_file $update_list
fi
}








#
fun_go_on_down_file()
{
echo "_________________go_on_down_file_____________________"
ls $sev_list_bak > /dev/null
if [ $? != 0 ]
then
echo "" > $sev_list_bak
fi


ls $sev_lis > /dev/null
if [ $? != 0 ]
then
echo "1" > $sev_list
fi
rm -rf $sev_list
fun_ftp_get $ftp_list $sev_list
a=`md5sum $sev_list`
a=${a:0:32}
b=`md5sum $sev_list_bak`
b=${b:0:32}
if [ "$a" == "$b" ]
then
ls $update_list > /dev/null
if [ $? != 0 ]
then
fun_compare_list
fi
fun_down_file $update_list
echo "_________________go_on_down_file_end_____________________"
return 0
fi
echo "_________________go_on_down_file_find_new_file__________________"
fun_check_update
cp $sev_list $sev_list_bak
echo "_________________go_on_down_file_find_new_file_end__________________"
}


#"状态检测"
#如果当前状态 检测中 0
#如果当前状态 下载中 1
#如果当前状态 校验中 2
#如果当前状态 拷贝中 3


fun_check_stauts()
{
echo "_______________fun_check_stauts____________________"
status=`cat $1`
echo "down_status:$status"
case $status in
0) fun_check_update ;;
1) fun_go_on_down_file ;;
2) fun_check_file $update_list ;;
3) fun_copy_file $update_list ;;
*) fun_check_update;;
esac
echo "_______________fun_check_status_complete____________________"
}






#如果网络ok 0
#如果网络fial 1
#如果网络 check fail 2


fun_net_ok()
{
fun_check_stauts $down_status
sleep 86400
}
fun_net_error()
{
sleep 86400
fun_check_stauts $down_status
}
fun_check_fail()
{
sleep 86400
fun_check_stauts $down_status
}


#入口函数
fun_main()
{
echo "0" > $net_status
while true;
do
#查看网络状态
status=`cat $net_status`
echo "net_status : $status"
case $status in
0) fun_net_ok ;;
1) fun_net_error ;;
2) fun_check_fail ;;
*) fun_net_ok;;
esac
done
}
fun_main


    
[2] 【3月17日下海】邀您参加游戏与移动领域前沿精英论坛
    来源: 互联网  发布时间: 2014-02-18
【3月17日上海】邀您参加游戏与移动领域前沿精英论坛
随着Adobe游戏开发工具集的发布,给页游开发带来新的可能性。客户端C/C++开发者加入页游开发队伍中来。移动游戏市场日趋成熟,越来越多的企业/个人在移动端取得了成功。如何降低开发成本,顺利的跨平台开发,是企业负责人、游戏开发者一直在思考的问题。

由9RIA开发者社区主办,Adobe、Cocos2D、Unity、Flash开发者大会共同协办的”9RIA天地行城市精英论坛·上海站“将为大家带来时下最流行的页游3D引擎介绍,游戏开发者在创作之初如何冲破牢笼,选择适合的引擎开发技术,活动现场将一一解答。

【大会信息】
活动主题:Webgame 3D开发及移动跨平台开发
活动时间:2013年3月17日 9:00-18:00
活动地点:上海宝丰联大酒店(上海逸仙路270号,地铁3号线江湾镇站下车,步行800米)查看地图
大会官网:http://tiandixing.9ria.com/shanghai2013/

【讲师介绍】 >>>>更多详情

黄竣

英文名Peter,Adobe平台技术推广经理。Rich Interactive Entertainment(RIE)创始人,国内最早一批Flash开发者之一。从事近10年的互联网互动应用及Flash游戏及应用的开发,对Flash游戏、视频及移动应用开发具有丰富的经验。目前是Adobe平台技术传教士。



郭振平              演讲主题: UNITY在移动平台上的应用

自2011年初加入Unity Technologies并开始为Unity的亚洲客户提供技术支持服务。此前,作为资深软件工程师和技术经理人,他曾经为Emergent Game Technologies服务五年。主要职责是为Emergent的亚洲客户提供技术支持。自获得应用科学硕士学位后,他已从事三维软件和游戏引擎开发工作20年。




吴将                  演讲主题: FLASH次时代技术发展历程

国内最早涉足stage3d的开发者之一,Flash3D全球技术高手,上海松果(SngoGame)创始人。 2000年到2009年,专注于大型网络游戏的开发。 2010年,涉足网页游戏的开发,将大型网络游戏的开发经验与flash 11相结合,擅长次世代渲染技术在flash 3D游戏中的应用。 其正在研发中的3D页游作品《格斗高手》(The Top Fighter),代表了stage3D渲染技术的世界最高水准。



赵戈                 演讲主题: NUI(自然用户界面)在Flash平台中的应用

十余年致力于FLASH平台的教学研究、设计开发、认证培训和宣传推广;瑞丰互动首席技术官;Adobe社区版主,FLASH专家咨询委员会、创意大学专家委员会委员,运维/认证管理中心教育专家,荣获ACP、MVP等全球认证的荣誉称号。



邵永超             演讲主题:使用Citrus-Engine引擎进行移动开发

AS3程序员,两年FLASH游戏开发经验,专注于AS3领域的研究。



杨雍                演讲主题: COCOS2D跨平台开发

COCOS2D-X 核心开发者、中国最大COCOS2D-X 中文教程网站泰然网站长。



【日程安排】



【报名流程】
1、访问http://tiandixing.9ria.com/shanghai2013/进行报名。
2、1-2个工作日,邮件或短信收到报名成功的提醒。

3、大会开始前2天,我们会发送手机短信和邮件邀请函。




【大会签到】

凭借您登记的手机号码进行签到。


注:如果您对本次大会有任何疑问,欢迎邮件反馈给我们:webmaster@9ria.com



    
[3] ubuntu 删除顶部任务栏下固定的快速启动程序按钮
    来源: 互联网  发布时间: 2014-02-18
ubuntu 删除顶部任务栏上固定的快速启动程序按钮

按住alt键并点击鼠标邮件即可。。。


很神奇吧。。。

呵呵。分享了。


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3