Добавлен ключ -d для принудительной устновки типа прошивки

master
forth32 7 years ago
parent c1924a9379
commit 31f307b688

@ -2,7 +2,7 @@ CC = gcc
LIBS = -lz
#BUILDNO = `cat build`
BUILDNO=$(shell cat build)
CFLAGS = -O2 -Wunused -Wno-unused-result -D BUILDNO=$(BUILDNO) $(LIBS)
CFLAGS = -O2 -Wunused -Wno-unused-result -D BUILDNO=$(BUILDNO) $(LIBS)
.PHONY: all clean
all: balong_flash

@ -29,9 +29,11 @@ unsigned int errflag=0;
// флаг цифровой подписи
int gflag=0;
// флаг типа прошивки
int dflag=0;
// тип прошивки из заголовка файла
int dload_id;
int dload_id=-1;
//***********************************************
//* Таблица разделов
@ -52,7 +54,7 @@ unsigned int mflag=0,eflag=0,rflag=0,sflag=0,nflag=0,kflag=0,fflag=0;
unsigned char fdir[40]; // каталог для мультифайловой прошивки
// разбор командной строки
while ((opt = getopt(argc, argv, "hp:mersng:kf")) != -1) {
while ((opt = getopt(argc, argv, "d:hp:mersng:kf")) != -1) {
switch (opt) {
case 'h':
@ -74,6 +76,7 @@ printf("\n Утилита предназначена для прошивки м
-k - не перезагружать модем по окончании прошивки\n\
-r - принудительно перезагрузить модем без прошивки разделов\n\
-f - прошить даже при наличии ошибок CRC в исходном файле\n\
-d# - установка типа прошивки (DLOAD_ID, 0..7), -dl - список типов\n\
\n",argv[0]);
return 0;
@ -113,6 +116,10 @@ printf("\n Утилита предназначена для прошивки м
gparm(optarg);
break;
case 'd':
dparm(optarg);
break;
case '?':
case ':':
return -1;

@ -1 +1 @@
231
237

@ -247,6 +247,7 @@ int findparts(FILE* in) {
// буфер префикса BIN-файла
uint8_t prefix[0x5c];
int32_t signsize;
int32_t hd_dload_id;
// Маркер начала заголовка раздела
const unsigned int dpattern=0xa55aaa55;
@ -270,12 +271,14 @@ fseek(in,-0x60,SEEK_CUR); // отъезжаем на начало BIN-файла
// вынимаем префикс
fread(prefix,0x5c,1,in);
dload_id=*((uint32_t*)&prefix[0]);
hd_dload_id=*((uint32_t*)&prefix[0]);
// если принудительно dload_id не установлен - выбираем его из заголовка
if (dload_id == -1) dload_id=hd_dload_id;
if (dload_id > 0xf) {
printf("\n Неверный код типа прошивки (dload_id) в заголовке - %x",dload_id);
exit(0);
}
printf("\n Код файла прошивки: %x (%s)",dload_id,fw_description(dload_id));
printf("\n Код файла прошивки: %x (%s)",hd_dload_id,fw_description(hd_dload_id));
// поиск остальных разделов

@ -63,6 +63,9 @@ uint8_t signver[200];
// Флаг режима цифровой подписи
extern int gflag;
// Флаг типа прошивки
extern int dflag;
// Параметры текущей цифровой подписи
uint32_t signtype; // тип прошивки
uint32_t signlen; // длина подписи
@ -77,6 +80,44 @@ char* fw_description(uint8_t code) {
return fwtypes[code&0x7];
}
//****************************************************
//* Получение списка типов прошивок
//****************************************************
void dlist() {
int i;
printf("\n # Описание\n--------------------------------------");
for(i=1;i<8;i++) {
printf("\n %i %s",i,fw_description(i));
}
printf("\n\n");
exit(0);
}
//***************************************************
//* Обработка параметров ключа -d
//***************************************************
void dparm(char* sparm) {
if (dflag != 0) {
printf("\n Дублирующийся ключ -d\n\n");
exit(-1);
}
if (sparm[0] == 'l') {
dlist();
exit(0);
}
sscanf(sparm,"%x",&dload_id);
if ((dload_id == 0) || (dload_id >7)) {
printf("\n Неправильное значение ключа -d\n\n");
exit(-1);
}
dflag=1;
}
//****************************************************
//* Получение списка параметров ключа -g
//****************************************************

@ -1,5 +1,6 @@
void glist();
void gparm(char* sparm);
void dparm(char* sparm);
void send_signver();
char* fw_description(uint8_t code);
int32_t serach_sign();

Loading…
Cancel
Save