亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? img2srec.c

?? ARMboot is a firmware monitor/bootloader for embedded systems based on ARM or StrongARM CPUs
?? C
字號:
/*************************************************************************|  COPYRIGHT (c) 2000 BY ABATRON AG|*************************************************************************||  PROJECT NAME: Linux Image to S-record Conversion Utility|  FILENAME    : img2srec.c||  COMPILER    : GCC||  TARGET OS   : LINUX / UNIX|  TARGET HW   : -||  PROGRAMMER  : Abatron / RD|  CREATION    : 07.07.00||*************************************************************************||  DESCRIPTION :||  Utility to convert a Linux Boot Image to S-record:|  ==================================================||  This command line utility can be used to convert a Linux boot image|  (zimage.initrd) to S-Record format used for flash programming.|  This conversion takes care of the special sections "IMAGE" and INITRD".||  img2srec [-o offset] image > image.srec|||  Build the utility:|  ==================||  To build the utility use GCC as follows:||  gcc img2srec.c -o img2srec|||*************************************************************************|||  UPDATES     :||  DATE      NAME  CHANGES|  -----------------------------------------------------------|  Latest update||  07.07.00  aba   Initial release||*************************************************************************//*************************************************************************|  INCLUDES|*************************************************************************/#include <stddef.h>#include <stdio.h>#include <stdlib.h>#include <ctype.h>#include <string.h>#include <elf.h>#include <unistd.h>#include <errno.h>#if defined(__BEOS__) || defined(__NetBSD__)#include <inttypes.h>#endifextern int errno;/*************************************************************************|  DEFINES|*************************************************************************/#define FALSE           0#define TRUE            1/*************************************************************************|  MACROS|*************************************************************************//*************************************************************************|  TYPEDEFS|*************************************************************************/typedef uint8_t   CHAR;typedef uint8_t   BYTE;typedef uint16_t  WORD;typedef uint32_t  DWORD;typedef int       BOOL;/*************************************************************************|  LOCALS|*************************************************************************//*************************************************************************|  PROTOTYPES|*************************************************************************/static char *ExtractHex(DWORD *value, char *getPtr);static char *ExtractDecimal(DWORD *value, char *getPtr);static void ExtractNumber(DWORD *value, char *getPtr);static BYTE *ExtractWord(WORD *value, BYTE *buffer);static BYTE *ExtractLong(DWORD *value, BYTE *buffer);static BYTE *ExtractBlock(WORD count, BYTE *data, BYTE *buffer);static char *WriteHex(char *pa, BYTE value, WORD *pCheckSum);static char *BuildSRecord(char *pa, WORD sType, DWORD addr,			  const BYTE *data, int nCount);static void ConvertELF(char *fileName, DWORD loadOffset);int main(int argc, char *argv[]);/*************************************************************************|  FUNCTIONS|*************************************************************************/static char* ExtractHex (DWORD* value,  char* getPtr){  DWORD num;  DWORD digit;  BYTE  c;  while (*getPtr == ' ') getPtr++;  num = 0;  for (;;) {    c = *getPtr;    if      ((c >= '0') && (c <= '9')) digit = (DWORD)(c - '0');    else if ((c >= 'A') && (c <= 'F')) digit = (DWORD)(c - 'A' + 10);    else if ((c >= 'a') && (c <= 'f')) digit = (DWORD)(c - 'a' + 10);    else break;    num <<= 4;    num += digit;    getPtr++;  } /* for */  *value = num;  return getPtr;} /* ExtractHex */static char* ExtractDecimal (DWORD* value,  char* getPtr){  DWORD num;  DWORD digit;  BYTE  c;  while (*getPtr == ' ') getPtr++;  num = 0;  for (;;) {    c = *getPtr;    if      ((c >= '0') && (c <= '9')) digit = (DWORD)(c - '0');    else break;    num *= 10;    num += digit;    getPtr++;  } /* for */  *value = num;  return getPtr;} /* ExtractDecimal */static void ExtractNumber (DWORD* value,  char* getPtr){  BOOL  neg = FALSE;;  while (*getPtr == ' ') getPtr++;  if (*getPtr == '-') {    neg = TRUE;    getPtr++;  } /* if */  if ((*getPtr == '0') && ((*(getPtr+1) == 'x') || (*(getPtr+1) == 'X'))) {    getPtr +=2;    (void)ExtractHex(value, getPtr);  } /* if */  else {    (void)ExtractDecimal(value, getPtr);  } /* else */  if (neg) *value = -(*value);} /* ExtractNumber */static BYTE* ExtractWord(WORD* value, BYTE* buffer){  WORD x;  x = (WORD)*buffer++;  x = (x<<8) + (WORD)*buffer++;  *value = x;  return buffer;} /* ExtractWord */static BYTE* ExtractLong(DWORD* value, BYTE* buffer){  DWORD x;  x = (DWORD)*buffer++;  x = (x<<8) + (DWORD)*buffer++;  x = (x<<8) + (DWORD)*buffer++;  x = (x<<8) + (DWORD)*buffer++;  *value = x;  return buffer;} /* ExtractLong */static BYTE* ExtractBlock(WORD count, BYTE* data, BYTE* buffer){  while (count--) *data++ = *buffer++;  return buffer;} /* ExtractBlock */static char* WriteHex(char* pa, BYTE value, WORD* pCheckSum){  WORD  temp;  static  char ByteToHex[] = "0123456789ABCDEF";  *pCheckSum += value;  temp  = value / 16;  *pa++ = ByteToHex[temp];  temp  = value % 16;  *pa++ = ByteToHex[temp];  return pa;}static char* BuildSRecord(char* pa, WORD sType, DWORD addr,			  const BYTE* data, int nCount){  WORD  addrLen;  WORD  sRLen;  WORD  checkSum;  WORD  i;  switch (sType) {  case 0:  case 1:  case 9:    addrLen = 2;    break;  case 2:  case 8:    addrLen = 3;    break;  case 3:  case 7:    addrLen = 4;    break;  default:    return pa;  } /* switch */  *pa++ = 'S';  *pa++ = (char)(sType + '0');  sRLen = addrLen + nCount + 1;  checkSum = 0;  pa = WriteHex(pa, (BYTE)sRLen, &checkSum);  /* Write address field */  for (i = 1; i <= addrLen; i++) {    pa = WriteHex(pa, (BYTE)(addr >> (8 * (addrLen - i))), &checkSum);  } /* for */  /* Write code/data fields */  for (i = 0; i < nCount; i++) {    pa = WriteHex(pa, *data++, &checkSum);  } /* for */  /* Write checksum field */  checkSum = ~checkSum;  pa = WriteHex(pa, (BYTE)checkSum, &checkSum);  *pa++ = '\0';  return pa;}static void ConvertELF(char* fileName, DWORD loadOffset){  FILE*         file;  int           i;  int           rxCount;  BYTE          rxBlock[1024];  DWORD         loadSize;  DWORD         firstAddr;  DWORD         loadAddr;  DWORD         loadDiff = 0;  Elf32_Ehdr    elfHeader;  Elf32_Shdr    sectHeader[32];  BYTE*         getPtr;  char          srecLine[128];  char		*hdr_name;  /* open file */  if ((file = fopen(fileName,"rb")) == NULL) {    fprintf (stderr, "Can't open %s: %s\n", fileName, strerror(errno));    return;  } /* if */  /* read ELF header */  rxCount = fread(rxBlock, 1, sizeof elfHeader, file);  getPtr = ExtractBlock(sizeof elfHeader.e_ident, elfHeader.e_ident, rxBlock);  getPtr = ExtractWord(&elfHeader.e_type, getPtr);  getPtr = ExtractWord(&elfHeader.e_machine, getPtr);  getPtr = ExtractLong((DWORD *)&elfHeader.e_version, getPtr);  getPtr = ExtractLong((DWORD *)&elfHeader.e_entry, getPtr);  getPtr = ExtractLong((DWORD *)&elfHeader.e_phoff, getPtr);  getPtr = ExtractLong((DWORD *)&elfHeader.e_shoff, getPtr);  getPtr = ExtractLong((DWORD *)&elfHeader.e_flags, getPtr);  getPtr = ExtractWord(&elfHeader.e_ehsize, getPtr);  getPtr = ExtractWord(&elfHeader.e_phentsize, getPtr);  getPtr = ExtractWord(&elfHeader.e_phnum, getPtr);  getPtr = ExtractWord(&elfHeader.e_shentsize, getPtr);  getPtr = ExtractWord(&elfHeader.e_shnum, getPtr);  getPtr = ExtractWord(&elfHeader.e_shstrndx, getPtr);  if (    (rxCount              != sizeof elfHeader)       || (elfHeader.e_ident[0] != ELFMAG0)       || (elfHeader.e_ident[1] != ELFMAG1)       || (elfHeader.e_ident[2] != ELFMAG2)       || (elfHeader.e_ident[3] != ELFMAG3)       || (elfHeader.e_type     != ET_EXEC)     ) {    fclose(file);    fprintf (stderr, "*** illegal file format\n");    return;  } /* if */  /* read all section headers */  fseek(file, elfHeader.e_shoff, SEEK_SET);  for (i = 0; i < elfHeader.e_shnum; i++) {    rxCount = fread(rxBlock, 1, sizeof sectHeader[0], file);    getPtr = ExtractLong((DWORD *)&sectHeader[i].sh_name, rxBlock);    getPtr = ExtractLong((DWORD *)&sectHeader[i].sh_type, getPtr);    getPtr = ExtractLong((DWORD *)&sectHeader[i].sh_flags, getPtr);    getPtr = ExtractLong((DWORD *)&sectHeader[i].sh_addr, getPtr);    getPtr = ExtractLong((DWORD *)&sectHeader[i].sh_offset, getPtr);    getPtr = ExtractLong((DWORD *)&sectHeader[i].sh_size, getPtr);    getPtr = ExtractLong((DWORD *)&sectHeader[i].sh_link, getPtr);    getPtr = ExtractLong((DWORD *)&sectHeader[i].sh_info, getPtr);    getPtr = ExtractLong((DWORD *)&sectHeader[i].sh_addralign, getPtr);    getPtr = ExtractLong((DWORD *)&sectHeader[i].sh_entsize, getPtr);    if (rxCount != sizeof sectHeader[0]) {      fclose(file);      fprintf (stderr, "*** illegal file format\n");      return;    } /* if */  } /* for */  if ((hdr_name = strrchr(fileName, '/')) == NULL) {    hdr_name = fileName;  } else {    ++hdr_name;  }  /* write start record */  (void)BuildSRecord(srecLine, 0, 0, (BYTE *)hdr_name, strlen(hdr_name));  printf("%s\r\n",srecLine);  /* write data records */  firstAddr = ~0;  loadAddr  =  0;  for (i = 0; i < elfHeader.e_shnum; i++) {    if (    (sectHeader[i].sh_type == SHT_PROGBITS)         && (sectHeader[i].sh_size != 0)         ) {      loadSize = sectHeader[i].sh_size;      if (sectHeader[i].sh_flags != 0) {        loadAddr = sectHeader[i].sh_addr;        loadDiff = loadAddr - sectHeader[i].sh_offset;      } /* if */      else {        loadAddr = sectHeader[i].sh_offset + loadDiff;      } /* else */      if (loadAddr < firstAddr)        firstAddr = loadAddr;      /* build s-records */      loadSize = sectHeader[i].sh_size;      fseek(file, sectHeader[i].sh_offset, SEEK_SET);      while (loadSize) {        rxCount = fread(rxBlock, 1, (loadSize > 32) ? 32 : loadSize, file);        if (rxCount < 0) {          fclose(file);          fprintf (stderr, "*** illegal file format\n");        return;        } /* if */        (void)BuildSRecord(srecLine, 3, loadAddr + loadOffset, rxBlock, rxCount);        loadSize -= rxCount;        loadAddr += rxCount;        printf("%s\r\n",srecLine);      } /* while */    } /* if */  } /* for */  /* add end record */  (void)BuildSRecord(srecLine, 7, firstAddr + loadOffset, 0, 0);  printf("%s\r\n",srecLine);  fclose(file);} /* ConvertELF *//*************************************************************************|  MAIN|*************************************************************************/int main( int argc, char *argv[ ]){  DWORD offset;  if (argc == 2) {    ConvertELF(argv[1], 0);  } /* if */  else if ((argc == 4) && (strcmp(argv[1], "-o") == 0)) {    ExtractNumber(&offset, argv[2]);    ConvertELF(argv[3], offset);  } /* if */  else {    fprintf (stderr, "Usage: img2srec [-o offset] <image>\n");  } /* if */  return 0;} /* main */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91在线精品一区二区| 久久亚洲春色中文字幕久久久| 欧美一区二区三区性视频| 日本一区二区三区在线不卡| 午夜欧美一区二区三区在线播放| 国产精一品亚洲二区在线视频| 欧美日韩在线直播| 国产精品黄色在线观看| 精品综合久久久久久8888| 欧美亚洲日本一区| ...av二区三区久久精品| 久久精品国产免费| 欧美日韩成人综合| 亚洲日本va午夜在线影院| 国产福利电影一区二区三区| 欧美高清dvd| 亚洲国产综合视频在线观看| 99久久精品国产一区二区三区 | 精品处破学生在线二十三| 亚洲黄一区二区三区| 成人精品一区二区三区中文字幕| 日韩免费观看高清完整版| 午夜精品福利一区二区三区av| 91美女精品福利| 国产精品久久久一本精品| 国产成人在线网站| 久久久九九九九| 国产呦萝稀缺另类资源| 2020国产成人综合网| 久久精品免费看| 日韩免费视频线观看| 美女视频黄免费的久久| 日韩午夜精品视频| 美女免费视频一区| 欧美成人a在线| 久久狠狠亚洲综合| 久久麻豆一区二区| 国产精品中文欧美| 中文字幕av一区二区三区| 国产91清纯白嫩初高中在线观看| 国产亚洲欧洲997久久综合| 国产精品1024久久| 中文字幕一区二区三区四区| av不卡免费在线观看| 亚洲欧美福利一区二区| 欧洲一区二区三区在线| 日韩精品91亚洲二区在线观看| 欧美一区二区三区视频在线观看| 青青草国产成人av片免费| 精品国产青草久久久久福利| 韩国av一区二区三区| 国产欧美一区二区三区在线看蜜臀 | 欧美色老头old∨ideo| 亚洲第一成年网| 欧美不卡一区二区三区四区| 国产成人无遮挡在线视频| 中文字幕五月欧美| 欧美日韩久久久| 久久9热精品视频| 国产精品麻豆一区二区| 欧美午夜电影网| 久久精品久久综合| 国产精品成人免费在线| 欧美日韩亚洲综合一区| 久草在线在线精品观看| 亚洲图片另类小说| 91精品国产色综合久久ai换脸 | 91免费版pro下载短视频| 亚洲一二三级电影| 亚洲精品一区二区三区四区高清| 99精品一区二区| 日韩电影免费一区| 国产精品乱人伦| 欧美一区二区人人喊爽| eeuss鲁片一区二区三区在线看| 亚洲成人av在线电影| 亚洲精品在线一区二区| 欧美综合视频在线观看| 国产在线视频不卡二| 亚洲一区二区高清| 欧美国产日产图区| 欧美一级久久久久久久大片| 91亚洲男人天堂| 精品一区二区在线播放| 亚洲一区在线观看免费观看电影高清 | 蜜臀av性久久久久蜜臀aⅴ| 一区二区三区资源| 中文字幕久久午夜不卡| 欧美大度的电影原声| 欧美中文一区二区三区| 成人aa视频在线观看| 捆绑调教美女网站视频一区| 一区二区高清免费观看影视大全 | 91精品国产乱码| 91原创在线视频| 国产福利电影一区二区三区| 日韩avvvv在线播放| 亚洲日本成人在线观看| 在线精品亚洲一区二区不卡| 美洲天堂一区二卡三卡四卡视频| 亚洲精品久久久久久国产精华液| 久久久久久久久久久电影| 欧美精品第1页| 91精品福利视频| 99综合影院在线| 成人黄页毛片网站| 国产乱码精品1区2区3区| 青青草国产精品97视觉盛宴| 三级不卡在线观看| 亚洲午夜免费福利视频| 一卡二卡三卡日韩欧美| 亚洲九九爱视频| 亚洲欧美激情小说另类| 亚洲免费色视频| 一区二区三区日韩精品视频| 综合激情成人伊人| 亚洲欧洲成人精品av97| 亚洲欧洲色图综合| 日韩一区有码在线| 综合欧美亚洲日本| 亚洲欧洲国产日韩| 亚洲免费观看视频| 一区二区三区在线影院| 一区二区三区精品久久久| 亚洲在线观看免费视频| 亚洲国产欧美在线人成| 亚洲福中文字幕伊人影院| 天涯成人国产亚洲精品一区av| 午夜视频在线观看一区二区| 日韩黄色一级片| 麻豆高清免费国产一区| 国产一区二区三区在线看麻豆| 国产一区二区不卡| 不卡视频在线看| 在线观看免费一区| 欧美一二三在线| 精品国产露脸精彩对白| 国产欧美一二三区| 亚洲精品日韩一| 青青草91视频| 福利电影一区二区三区| 99久久国产综合色|国产精品| 91精彩视频在线观看| 欧美老女人第四色| 国产片一区二区三区| 一二三四社区欧美黄| 蜜臀久久久久久久| 福利一区在线观看| 国产午夜精品久久久久久久 | 国产资源在线一区| 成人动漫在线一区| 欧美日韩综合在线| 国产日韩欧美激情| 亚洲二区在线视频| 国产精品69久久久久水密桃| 在线看一区二区| 精品处破学生在线二十三| 亚洲乱码日产精品bd| 精品综合久久久久久8888| 91免费在线视频观看| 日韩午夜激情电影| 亚洲色图视频网站| 久久国产精品免费| 欧洲精品中文字幕| 久久一区二区视频| 婷婷丁香激情综合| 99国产麻豆精品| 久久先锋影音av鲁色资源 | 中文字幕亚洲欧美在线不卡| 日产国产欧美视频一区精品| 成人国产一区二区三区精品| 91精品国产综合久久精品图片 | 精品少妇一区二区三区免费观看 | 在线精品视频免费播放| 国产清纯在线一区二区www| 日本大胆欧美人术艺术动态| 一本色道久久综合亚洲aⅴ蜜桃| 久久亚洲综合av| 美女一区二区视频| 欧美日韩精品一区二区天天拍小说| 中文字幕中文字幕在线一区 | 国产天堂亚洲国产碰碰| 肉丝袜脚交视频一区二区| 色呦呦国产精品| 国产精品天美传媒| 国产乱人伦偷精品视频不卡 | 欧美中文字幕一区二区三区| 国产片一区二区三区| 国产一区二区三区四区五区入口 | 免费成人av在线播放| 欧美系列在线观看| 一区二区三区美女视频| 91免费国产在线观看| 国产精品护士白丝一区av| 盗摄精品av一区二区三区| 久久久久国产精品麻豆ai换脸| 日本大胆欧美人术艺术动态 | 中文字幕国产一区| 丰满亚洲少妇av| 欧美国产激情一区二区三区蜜月|