mirror of
https://git.zaage.it/robert/balong-flash
synced 2024-11-16 06:15:21 +00:00
Реструктуризация кода
This commit is contained in:
parent
ba6fd2bee0
commit
c91a7001e5
5
Makefile
5
Makefile
@ -16,5 +16,8 @@ clean:
|
|||||||
hdlcio.o: hdlcio.c
|
hdlcio.o: hdlcio.c
|
||||||
$(CC) -c hdlcio.c
|
$(CC) -c hdlcio.c
|
||||||
|
|
||||||
balong_flash: balong_flash.o hdlcio.o
|
ptable.o: ptable.c
|
||||||
|
$(CC) -c ptable.c
|
||||||
|
|
||||||
|
balong_flash: balong_flash.o hdlcio.o ptable.o
|
||||||
@gcc $^ -o $@ $(LIBS)
|
@gcc $^ -o $@ $(LIBS)
|
||||||
|
@ -10,64 +10,11 @@
|
|||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
|
|
||||||
#include "hdlcio.h"
|
#include "hdlcio.h"
|
||||||
|
#include "ptable.h"
|
||||||
|
|
||||||
unsigned char replybuf[4096];
|
unsigned char replybuf[4096];
|
||||||
|
|
||||||
|
|
||||||
//******************************************************
|
|
||||||
//* поиск символического имени раздела по его коду
|
|
||||||
//******************************************************
|
|
||||||
|
|
||||||
void find_pname(unsigned int id,unsigned char* pname) {
|
|
||||||
|
|
||||||
unsigned int j;
|
|
||||||
struct {
|
|
||||||
char name[20];
|
|
||||||
int code;
|
|
||||||
} pcodes[]={
|
|
||||||
{"M3Boot",0x20000},
|
|
||||||
{"M3Boot-ptable",0x10000},
|
|
||||||
{"M3Boot_R11",0x200000},
|
|
||||||
{"Ptable",0x10000},
|
|
||||||
{"Fastboot",0x110000},
|
|
||||||
{"Logo",0x130000},
|
|
||||||
{"Kernel",0x30000},
|
|
||||||
{"Kernel_R11",0x90000},
|
|
||||||
{"VxWorks",0x40000},
|
|
||||||
{"VxWorks_R11",0x220000},
|
|
||||||
{"M3Image",0x50000},
|
|
||||||
{"M3Image_R11",0x230000},
|
|
||||||
{"DSP",0x60000},
|
|
||||||
{"DSP_R11",0x240000},
|
|
||||||
{"Nvdload",0x70000},
|
|
||||||
{"Nvdload_R11",0x250000},
|
|
||||||
{"Nvimg",0x80000},
|
|
||||||
{"System",0x590000},
|
|
||||||
{"System",0x100000},
|
|
||||||
{"APP",0x570000},
|
|
||||||
{"APP",0x5a0000},
|
|
||||||
{"Oeminfo",0xa0000},
|
|
||||||
{"CDROMISO",0xb0000},
|
|
||||||
{"Oeminfo",0x550000},
|
|
||||||
{"Oeminfo",0x510000},
|
|
||||||
{"Oeminfo",0x1a0000},
|
|
||||||
{"WEBUI",0x560000},
|
|
||||||
{"WEBUI",0x5b0000},
|
|
||||||
{"Wimaxcfg",0x170000},
|
|
||||||
{"Wimaxcrf",0x180000},
|
|
||||||
{"Userdata",0x190000},
|
|
||||||
{"Online",0x1b0000},
|
|
||||||
{"Online",0x5d0000},
|
|
||||||
{"Online",0x5e0000},
|
|
||||||
{0,0}
|
|
||||||
};
|
|
||||||
|
|
||||||
for(j=0;pcodes[j].code != 0;j++) {
|
|
||||||
if(pcodes[j].code == id) break;
|
|
||||||
}
|
|
||||||
if (pcodes[j].code != 0) strcpy(pname,pcodes[j].name); // имя найдено - копируем его в структуру
|
|
||||||
else sprintf(pname,"U%08x",id); // имя не найдено - подставляем псевдоимя Uxxxxxxxx в тупоконечном формате
|
|
||||||
}
|
|
||||||
|
|
||||||
//****************************************************
|
//****************************************************
|
||||||
//* Определение версии прошивальщика
|
//* Определение версии прошивальщика
|
||||||
@ -101,15 +48,7 @@ int res;
|
|||||||
FILE* in;
|
FILE* in;
|
||||||
FILE* out;
|
FILE* out;
|
||||||
|
|
||||||
struct {
|
struct ptb_t ptable[100];
|
||||||
unsigned int offset; // позиция образа раздела
|
|
||||||
unsigned int hdoffset; // позиция заголовка раздела
|
|
||||||
unsigned int size; // размер образа раздела
|
|
||||||
unsigned int hdsize; // размер заголовка раздела
|
|
||||||
unsigned int code; // ID раздела
|
|
||||||
unsigned char pname[20]; // буквенное имя раздела
|
|
||||||
unsigned char filename[50]; // имя файла, соответствующее разделу
|
|
||||||
}ptable[100];
|
|
||||||
|
|
||||||
unsigned char buf[40960];
|
unsigned char buf[40960];
|
||||||
unsigned char devname[50]="/dev/ttyUSB0";
|
unsigned char devname[50]="/dev/ttyUSB0";
|
||||||
@ -233,22 +172,7 @@ if (in == 0) {
|
|||||||
|
|
||||||
if (!nflag) {
|
if (!nflag) {
|
||||||
printf("\n Разбираем файл прошвки...");
|
printf("\n Разбираем файл прошвки...");
|
||||||
while (fread(&i,1,4,in) == 4) {
|
npart=findparts(in,ptable);
|
||||||
if (i != dpattern) continue; // ищем разделитель
|
|
||||||
|
|
||||||
// Выделяем параметры раздела
|
|
||||||
ptable[npart].hdoffset=ftell(in); // позиция начала заголовка раздела
|
|
||||||
fread(buf,1,96,in); // заголовок
|
|
||||||
ptable[npart].hdsize=*((unsigned int*)&buf[0])-4; // размер заголовка
|
|
||||||
ptable[npart].offset=ptable[npart].hdoffset+ptable[npart].hdsize; // смещение до тела раздела
|
|
||||||
ptable[npart].size=*((unsigned int*)&buf[20]); // размер раздела
|
|
||||||
ptable[npart].code=*((unsigned int*)&buf[16]); // тип раздела
|
|
||||||
|
|
||||||
// Ищем символическое имя раздела по таблице
|
|
||||||
find_pname(ptable[npart].code,ptable[npart].pname);
|
|
||||||
// увеличиваем счетчик разделов
|
|
||||||
npart++;
|
|
||||||
}
|
|
||||||
if (npart == 0) {
|
if (npart == 0) {
|
||||||
printf("\nРазделы не найдены!");
|
printf("\nРазделы не найдены!");
|
||||||
return ;
|
return ;
|
||||||
|
90
ptable.c
Normal file
90
ptable.c
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
// Процедуры работы с таблицей разделов
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "ptable.h"
|
||||||
|
//******************************************************
|
||||||
|
//* поиск символического имени раздела по его коду
|
||||||
|
//******************************************************
|
||||||
|
|
||||||
|
void find_pname(unsigned int id,unsigned char* pname) {
|
||||||
|
|
||||||
|
unsigned int j;
|
||||||
|
struct {
|
||||||
|
char name[20];
|
||||||
|
int code;
|
||||||
|
} pcodes[]={
|
||||||
|
{"M3Boot",0x20000},
|
||||||
|
{"M3Boot-ptable",0x10000},
|
||||||
|
{"M3Boot_R11",0x200000},
|
||||||
|
{"Ptable",0x10000},
|
||||||
|
{"Fastboot",0x110000},
|
||||||
|
{"Logo",0x130000},
|
||||||
|
{"Kernel",0x30000},
|
||||||
|
{"Kernel_R11",0x90000},
|
||||||
|
{"VxWorks",0x40000},
|
||||||
|
{"VxWorks_R11",0x220000},
|
||||||
|
{"M3Image",0x50000},
|
||||||
|
{"M3Image_R11",0x230000},
|
||||||
|
{"DSP",0x60000},
|
||||||
|
{"DSP_R11",0x240000},
|
||||||
|
{"Nvdload",0x70000},
|
||||||
|
{"Nvdload_R11",0x250000},
|
||||||
|
{"Nvimg",0x80000},
|
||||||
|
{"System",0x590000},
|
||||||
|
{"System",0x100000},
|
||||||
|
{"APP",0x570000},
|
||||||
|
{"APP",0x5a0000},
|
||||||
|
{"Oeminfo",0xa0000},
|
||||||
|
{"CDROMISO",0xb0000},
|
||||||
|
{"Oeminfo",0x550000},
|
||||||
|
{"Oeminfo",0x510000},
|
||||||
|
{"Oeminfo",0x1a0000},
|
||||||
|
{"WEBUI",0x560000},
|
||||||
|
{"WEBUI",0x5b0000},
|
||||||
|
{"Wimaxcfg",0x170000},
|
||||||
|
{"Wimaxcrf",0x180000},
|
||||||
|
{"Userdata",0x190000},
|
||||||
|
{"Online",0x1b0000},
|
||||||
|
{"Online",0x5d0000},
|
||||||
|
{"Online",0x5e0000},
|
||||||
|
{0,0}
|
||||||
|
};
|
||||||
|
|
||||||
|
for(j=0;pcodes[j].code != 0;j++) {
|
||||||
|
if(pcodes[j].code == id) break;
|
||||||
|
}
|
||||||
|
if (pcodes[j].code != 0) strcpy(pname,pcodes[j].name); // имя найдено - копируем его в структуру
|
||||||
|
else sprintf(pname,"U%08x",id); // имя не найдено - подставляем псевдоимя Uxxxxxxxx в тупоконечном формате
|
||||||
|
}
|
||||||
|
|
||||||
|
//*******************************************************
|
||||||
|
//* Поиск разделов в файле прошивки
|
||||||
|
//*
|
||||||
|
//* возвращает число найденных разделов
|
||||||
|
//*******************************************************
|
||||||
|
int findparts(FILE* in, struct ptb_t* ptable) {
|
||||||
|
|
||||||
|
// Маркер начала заголовка раздела
|
||||||
|
const unsigned int dpattern=0xa55aaa55;
|
||||||
|
unsigned int i,npart=0;
|
||||||
|
char buf[200];
|
||||||
|
|
||||||
|
while (fread(&i,1,4,in) == 4) {
|
||||||
|
if (i != dpattern) continue; // ищем разделитель
|
||||||
|
|
||||||
|
// Выделяем параметры раздела
|
||||||
|
ptable[npart].hdoffset=ftell(in); // позиция начала заголовка раздела
|
||||||
|
fread(buf,1,96,in); // заголовок
|
||||||
|
ptable[npart].hdsize=*((unsigned int*)&buf[0])-4; // размер заголовка
|
||||||
|
ptable[npart].offset=ptable[npart].hdoffset+ptable[npart].hdsize; // смещение до тела раздела
|
||||||
|
ptable[npart].size=*((unsigned int*)&buf[20]); // размер раздела
|
||||||
|
ptable[npart].code=*((unsigned int*)&buf[16]); // тип раздела
|
||||||
|
|
||||||
|
// Ищем символическое имя раздела по таблице
|
||||||
|
find_pname(ptable[npart].code,ptable[npart].pname);
|
||||||
|
// увеличиваем счетчик разделов
|
||||||
|
npart++;
|
||||||
|
}
|
||||||
|
return npart;
|
||||||
|
}
|
14
ptable.h
Normal file
14
ptable.h
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
// Структура описания таблицы разделов
|
||||||
|
|
||||||
|
struct ptb_t{
|
||||||
|
unsigned int offset; // позиция образа раздела
|
||||||
|
unsigned int hdoffset; // позиция заголовка раздела
|
||||||
|
unsigned int size; // размер образа раздела
|
||||||
|
unsigned int hdsize; // размер заголовка раздела
|
||||||
|
unsigned int code; // ID раздела
|
||||||
|
unsigned char pname[20]; // буквенное имя раздела
|
||||||
|
unsigned char filename[50]; // имя файла, соответствующее разделу
|
||||||
|
};
|
||||||
|
|
||||||
|
int findparts(FILE* in, struct ptb_t* ptable);
|
||||||
|
void find_pname(unsigned int id,unsigned char* pname);
|
Loading…
Reference in New Issue
Block a user