Python VIL Service Bin
#!/usr/bin/python
#coding:UTF-8 import sys
import re
import getopt
import md5
import os
import subprocess
import shutil
import xlrd
import xlwt
from xlutils.copy import copy #from subprocess import call g_bAllBin = 0
g_bAllBinbyId = 0
g_bDecrypt = 0
g_binDir = "./decryptDir"
g_strBinPath="./"
g_BinSplitext=[".BIN", ".bin"]
g_listBoard = ["VR01A", "VR01AX", "VR01B"]
g_listUI = ["videocon", "sansui", "philips"]
g_listMode = [] mapModeCode = {}
g_headerLen = 16*1024
g_listBin=[] '''
解密当前目录BIN文件到 decryptDir文件夹
运行命令:
python gen_codebin.py -d VIL 服务软件:
运行命令: 编译全部modeCode
python gen_codebin.py -a 编译EXCEL文档包含的MODELCODE
python gen_codebin.py -i [./] 将当前目录所有的BIN打包为“VIL_SER.BIN”
python gen_codebin.py [-p] 打包格式为:HEAD长度+BIN总数+BIN_1名字+BIN_1长度+....BIN_N名字+BIN_N长度+版本号+BIN内容
步骤:
先读取“Design Data.xls”得到需要的打包ModeID,然后根据ModeID逐个进行编译。再将编译完成的BIN打包
''' def fun_get_head_info():
try:
raise Exception
except:
f = sys.exc_info()[2].tb_frame.f_back
print("[debug]function :%s, line :%s"%(f.f_code.co_name, str(f.f_lineno))) def usage():
print'''param error.''' def fun_parse_InputParam():
global g_bAllBin
global g_bDecrypt
global g_strBinPath
global g_bAllBinbyId
try:
opts, args = getopt.getopt(sys.argv[1:], 'hi:dpa')
except getopt.GetoptError, err:
print str(err)
usage()
sys.exit() for op, value in opts:
if op == "-i":
g_bAllBin = 1
g_strBinPath = value
elif op == "-p":
g_bAllBin = 0
elif op == "-a":
g_bAllBinbyId = 1
elif op == "-d":
g_bDecrypt = 1
elif op == "-h":
usage()
sys.exit()
else:
print("unhandled option")
sys.exit() #==生成BIN LIST==#
def fun_getBinList(Path):
for item in os.listdir(Path):
abs_item=os.path.join(Path, item)
if os.path.isdir(abs_item):
fun_getBinList(abs_item)
elif os.path.isfile(abs_item):
if os.path.splitext(abs_item)[1] in g_BinSplitext:
g_listBin.append(abs_item)
#print abs_item
else:
pass
else:
pass
return def fun_decryptBinFile(listBin):
os.mkdir(g_binDir)
os.system('gcc -m32 -o decrypt decrypt.c')
for line in listBin:
outfile = ""
strCmd = "./decrypt %s" %line
os.system(strCmd)
outfile = "./decrypt_%s" %(line[2:])
shutil.move(outfile,g_binDir) def fun_genCombinationbin(binCombinFile, str_BinTable, str_BinData):
print str_BinTable
with open(str_BinTable) as binTable_op:
#print binTable_op
for line in binTable_op:
binCombinFile.write(line)
binCombinFile.seek(g_headerLen) with open(str_BinData) as bindata1_op:
for line in bindata1_op:
binCombinFile.write(line) return def fun_GetBinTableandBin(list_binpath, binTable_op, binData_op):
strTable=""
for binpath in list_binpath:
with open(binpath,"r+") as binFile:
binFile.truncate(4*1024*1024)#(0x3e083c) FLASH编译大小
for line in binFile:
binData_op.write(line) binname = os.path.basename(binpath)
binsize = os.path.getsize(binpath)
#删除每个文件的扩展名.bin
binname = binname[:-4]
strTable=binname+","+str(binsize)+","
print strTable
binTable_op.write(strTable)
#os.remove(binpath)
#写默认版本号为1
binTable_op.write("1,") def fun_getBinCountToProject():
with open("../aps/application/radisson/videocon/sys_common_guiobj/app_guiobj_setup.c", "r") as project_op:
temStr = '#define CONFIG_FLASH_BIN_COUNT ' + str(len(g_listBin))
print temStr
content = project_op.read() pos = content.find('#define CONFIG_FLASH_BIN_COUNT')
if pos != -1:
pos_end = content[pos:].find('\n')
print '======================================='
print 'pos = %d, pos_end = %d' %(pos, pos_end)
content = content[:pos] + temStr + content[pos + pos_end:]
with open("../aps/application/radisson/videocon/sys_common_guiobj/app_guiobj_setup.c", "w") as project_op:
project_op.write(content) def fun_getMapModeCode():
#读EXCEL到映射表
book = xlrd.open_workbook(r'Design Data.xls')
sheet = book.sheet_by_index(0) for row in range(sheet.nrows):
bFindModeId = False
for col in range(sheet.ncols):
cellStr = str(sheet.cell(row,col).value)
cellStr.rstrip()
if cellStr == "MODEL ID":
bFindModeId = True
break
if bFindModeId:
break for id in range(row+1,sheet.nrows):
listValue = []
strMode = sheet.cell(id,col).value
if len(strMode) <= 8:
continue
listValue.append(strMode)
if sheet.cell(id,col-3).value != "":
strBoard = sheet.cell(id,col-3).value
listValue.append(strBoard)
listValue.append("videocon" if sheet.cell(id,col-4).value == "V" else "sansui")
mapModeCode[id-row] = listValue def fun_modifyCommonPatchFile(strMode):
modeId = ""
for board in g_listBoard:
for line in open("../aps/customer/radisson/%s/adaptable/model_data.c" %board,"r"):
if strMode in line and re.search(".*?(\d+).*\{.*",line):
modeId = re.search(".*?(\d+).*\{.*",line).group(1)
with open("../aps/include/common_patch.h","r") as file:
tempStr = "#define DEFAULT_MODE_ID " + modeId
content = file.read()
pos = content.find("#define DEFAULT_MODE_ID")
if pos != -1:
pos_end = content[pos:].find('\n')
content = content[:pos] + tempStr + content[pos + pos_end:]
with open("../aps/include/common_patch.h", "w") as project_op:
project_op.write(content)
return True
return False def fun_genAllSerBin():
listSave = []
fun_getMapModeCode()
with open("../mconfig.config", "r") as mFile:
list = mFile.readlines()
for (k,v) in mapModeCode.items():
strMode = v[0]
board = v[1]
ui = v[2]
if fun_modifyCommonPatchFile(strMode) == False:
continue
os.system('cd ..; make clean')
for line in list:
if "#" in line:
continue
elif line.find("CONFIG_BOARD_") != -1 :
line = "CONFIG_BOARD_%s__RADISSON__RADISSON__RADISSON=y\n" %(board)
listSave.append(line)
elif line.find("CONFIG_MODEL_BOARD_NAME") != -1:
line = "CONFIG_MODEL_BOARD_NAME=\"%s\"\n" %(board)
listSave.append(line)
elif line.find("CONFIG_PROJECT_NAME") != -1 :
line = "CONFIG_PROJECT_NAME=\"%s___%s___ATV\"\n" %(board,ui)
listSave.append(line)
elif line.find("CONFIG_APP_FOLDER_NAME") != -1:
line = "CONFIG_APP_FOLDER_NAME=\"%s\"\n" %(ui)
listSave.append(line)
elif re.search("CONFIG_.*___ATV__RADISSON__RADISSON__RADISSON",line):
line = "CONFIG_%s_%s___ATV__RADISSON__RADISSON__RADISSON=y\n" %(board,ui.upper())
listSave.append(line)
else:
listSave.append(line)
with open("../mconfig.config", "w") as mFile:
mFile.writelines(listSave)
listSave = [] shutil.copy("../aps/customer/radisson/sub_customer/radisson/radisson/project/%s___%s___ATV.config" %(board,ui), "../menuconfig.config")
os.system('cd ..; make clean; make -j') if ui == "videocon" and os.path.exists("../mergedir/VIDEOCON.code.bin"):
shutil.copy("../mergedir/VIDEOCON.code.bin","../kitking/%s.bin" %strMode)
elif ui == "philips" and os.path.exists("../mergedir/PHILIPS.code.bin"):
shutil.copy("../mergedir/PHILIPS.code.bin","../kitking/%s.bin" %strMode)
elif ui == "sansui" and os.path.exists("../mergedir/SANSUI.code.bin"):
shutil.copy("../mergedir/SANSUI.code.bin","../kitking/%s.bin" %strMode) #print k,strMode,board,ui
#var = raw_input("debug pause:") def fun_searchModeCode(board):
global g_listMode
global mapModeCode
g_listMode = []
mapModeCode = {}
modeId = ""
for line in open("../aps/customer/radisson/%s/adaptable/model_data.c" %board,"r"):
if re.search(".*?(\d+).*\{.*\"(.*)\".*",line):
modeId = re.search(".*?(\d+).*\{.*",line).group(1)
strMode = re.search(".*?(\d+).*\{.*\"(.*)\".*",line).group(2)
mapModeCode[modeId] = strMode
g_listMode.append(strMode)
return modeId def fun_genCommonPatchFilebyId(modeId):
with open("../aps/include/common_patch.h","r") as file:
tempStr = "#define DEFAULT_MODE_ID " + modeId
content = file.read()
pos = content.find("#define DEFAULT_MODE_ID")
if pos != -1:
pos_end = content[pos:].find('\n')
content = content[:pos] + tempStr + content[pos + pos_end:]
with open("../aps/include/common_patch.h", "w") as project_op:
project_op.write(content) def fun_genAllSerBinbyId():
listSave = []
with open("../mconfig.config", "r") as mFile:
list = mFile.readlines() for board in g_listBoard:
fun_searchModeCode(board)
for ui in g_listUI:
os.system('cd ..; make clean')
for line in list:
if "#" in line:
continue
elif line.find("CONFIG_BOARD_") != -1 :
line = "CONFIG_BOARD_%s__RADISSON__RADISSON__RADISSON=y\n" %(board)
listSave.append(line)
elif line.find("CONFIG_MODEL_BOARD_NAME") != -1:
line = "CONFIG_MODEL_BOARD_NAME=\"%s\"\n" %(board)
listSave.append(line)
elif line.find("CONFIG_PROJECT_NAME") != -1 :
line = "CONFIG_PROJECT_NAME=\"%s___%s___ATV\"\n" %(board,ui)
listSave.append(line)
elif line.find("CONFIG_APP_FOLDER_NAME") != -1:
line = "CONFIG_APP_FOLDER_NAME=\"%s\"\n" %(ui)
listSave.append(line)
elif re.search("CONFIG_.*___ATV__RADISSON__RADISSON__RADISSON",line):
line = "CONFIG_%s_%s___ATV__RADISSON__RADISSON__RADISSON=y\n" %(board,ui.upper())
listSave.append(line)
else:
listSave.append(line)
with open("../mconfig.config", "w") as mFile:
mFile.writelines(listSave)
listSave = [] for (k,v) in mapModeCode.items():
fun_genCommonPatchFilebyId(k)
shutil.copy("../aps/customer/radisson/sub_customer/radisson/radisson/project/%s___%s___ATV.config" %(board,ui), "../menuconfig.config")
os.system('make -j') if ui == "videocon" and os.path.exists("../mergedir/VIDEOCON.code.bin"):
shutil.copy("../mergedir/VIDEOCON.code.bin","../kitking/%s_%s_%s.bin" %(board,ui.upper(),v))
elif ui == "philips" and os.path.exists("../mergedir/PHILIPS.code.bin"):
shutil.copy("../mergedir/PHILIPS.code.bin","../kitking/%s_%s_%s.bin" %(board,ui.upper(),v))
elif ui == "sansui" and os.path.exists("../mergedir/SANSUI.code.bin"):
shutil.copy("../mergedir/SANSUI.code.bin","../kitking/%s_%s_%s.bin" %(board,ui.upper(),v)) print board,ui
#var = raw_input("debug pause:") def main(): str_BinTable="bintable.txt"
str_BinData="bindata.txt"
str_CombinationBin="VIL_SER.BIN" str_temp=""
int_tablesize=0 #get bin path
fun_parse_InputParam() if os.path.exists(str_CombinationBin):
os.remove(str_CombinationBin) if os.path.exists(g_binDir):
shutil.rmtree(g_binDir) #gen all service bin file
if g_bAllBinbyId:
fun_genAllSerBinbyId()
return
elif g_bAllBin:
fun_genAllSerBin()
return
else:
print "\nThis mode don't compile all modeCode!"
print "python gen_codebin.py -i complie all modeCode\n" #get bin name
fun_getBinList(g_strBinPath)
g_listBin.sort() #decrypt bin file
if g_bDecrypt:
fun_decryptBinFile(g_listBin)
print "Decrypt finish"
return binTable_op = open(str_BinTable, "w+")
binData_op = open(str_BinData, "wb+") fun_GetBinTableandBin(g_listBin, binTable_op, binData_op)
#binTable_op.truncate(1024)
binTable_op.close()
binData_op.close() #gen header bin
binCombinFile = open(str_CombinationBin, "wb+")
int_tablesize=os.path.getsize(str_BinTable)
str_temp=str(int_tablesize)+","+str(len(g_listBin))+","
int_tablesize+=len(str_temp)
binCombinFile.write(str(g_headerLen) + ","+ str(len(g_listBin))+",") #gen combin bin
fun_genCombinationbin(binCombinFile, str_BinTable, str_BinData) binCombinFile.close()
#subprocess.call(["mv", str_CombinationBin, g_strBinPath])
os.remove(str_BinTable)
os.remove(str_BinData) if __name__ == '__main__':
main()
Python VIL Service Bin的更多相关文章
- #!/usr/bin/env python与#!/usr/bin/python的区别
[摘自:http://blog.csdn.net/wh_19910525/article/details/8040494] 一般的python文件的开头都有#!/usr/bin/python.这是什么 ...
- Python 头部 #!/usr/bin/python 和 #!/usr/bin/env 的区别
这个网址 https://www.cnblogs.com/scofi/p/4867851.html 讲述了Python 头部 #!/usr/bin/python 和 #!/usr/bin/env 的区 ...
- !/usr/bin/env python和!/usr/bin/python的区别
脚本语言第一行 作用:文件中代码用指定可执行程序运行 #!/usr/bin/Python 执行脚本时,调用/usr/bin下python解释器 #!/usr/bin/env python 在环境设 ...
- 解决安装虚拟环境出现的问题(OSError: Command /home/python/.virtua...ngo3_web/bin/python3 - setuptools pkg_resources pip wheel failed with error code 2)
python3的报错解决: OSError: Command /home/python/.virtua...ngo3_web/bin/python3 - setuptools pkg_resource ...
- python中#!/usr/bin/env python与#!/usr/bin/python
通常在脚本语言的第一行会看到#!/usr/bin/env python 与 #!/usr/bin/python其中之一,这两句话的目的都是指出你的python文件用什么可执行程序去运行它. #!/us ...
- python中#!/usr/bin/python与#!/usr/bin/env python的区别
目的是在运行python脚本的时候告诉操作系统我们要用python解释器去运行py脚本 所以我们在第一句往往会写如下两句中的其中一句: #!/usr/bin/python 或 >#!/usr/b ...
- #!/usr/bin/python和#!/usr/bin/env 的区别
#!/usr/bin/python 通常在一个.py文件开头都会有这个语句 它只在Linux系统下生效,意思是当作为可执行文件运行时调用的解释器的位置上面代码的意思是调用/usr/bin/下的Pyth ...
- #!/usr/bin/python和#!/usr/bin/env 的区别(转)
#!/usr/bin/python和#!/usr/bin/env 的区别 #!/usr/bin/python 通常在一个.py文件开头都会有这个语句 它只在Linux系统下生效,意思是当作为可执行 ...
- python头部 #!/usr/bin/env python
*.py运行: python *.py OR ./*.py 对于*.py其首行应标明 #!/usr/bin/env python,定义python解释器调用路径,对比#!/usr/bin/python ...
随机推荐
- Cooperation.GTST团队第三周项目总结
项目进展 这周我们仍然在学习使用博客园的相关接口,页面的一个基本模块已经搭建出来了,但是页面整体效果还没有完全做出来.另外,我们在使用其他的APP时留意到许多APP都使用上拉加载和下拉刷新的效果,所以 ...
- AOP AspectJ注解
概念: 切面(aspect):用来切插业务方法的类.连接点(joinpoint):是切面类和业务类的连接点,其实就是封装了业务方法的一些基本属性,作为通知的参数来解析.通知(advice):在切面类中 ...
- ACM赛前准备——模板(排版篇)
ACM赛前准备--模板(排版篇) 更新 前言 效果演示 封面 目录页 模板页(不分栏) 模板页(分栏) 结果文件 快速使用 准备工作 安装TexLive (可选)安装minted包 创建模板 文件结构 ...
- 树上启发式合并(dsu on tree)学习笔记
有丶难,学到自闭 参考的文章: zcysky:[学习笔记]dsu on tree Arpa:[Tutorial] Sack (dsu on tree) 先康一康模板题吧:CF 600E($Lomsat ...
- 自动生成makefile
原文 http://www.laruence.com/2009/11/18/1154.html 作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实 ...
- 组学航母----OMICtools
OMICtools可谓是组学研究的航空母舰,其收集了基因组学.转录组学.蛋白质组学和代谢组学等分析研究常用的4400余个工具和数据库.它允许用户submit自己的工具/数据库,每一个上传的工具/数据库 ...
- Phpstorm Alt+Enter 自动导入类
很方便!!!能够自动提示哪些类没有自动加载!!!然后Alt+Enter进行安装!!!
- [POI2012]ROZ-Fibonacci Representation (数学)
大意:给定n, 求至少要多少个斐波那契数相加减后能得到n (可以重复, 重复的算多次) 假设$dp(x)$为$x$的最小划分, 有$dp(x)=dp(x-F_k)+1$, 其中$F_k$为最接近$x ...
- Docker环境准备-安装Ubuntu
***微信扫一扫,关注“python测试开发圈”,了解更多测试教程!***
- 2016 CCPC Hangzhou Onsite
A:题意:n个格子排成一排,每个a[i],要求重排成k个,每个人数相同,合并两个和划分成两个(可以不等)都是花费为1,问最小花费 题解:从前往后贪心即可,由于哪个地方忘开ll,wa了,全改成ll就过了 ...