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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? img2srec.c

?? ARM的bootloader代碼.rar
?? 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在线porny国产在线看| 最新久久zyz资源站| 欧美日韩成人在线一区| 国产99久久久精品| 日本欧美在线观看| 2020国产精品自拍| 欧美日韩精品二区第二页| 国产99久久久国产精品潘金 | 91久久精品午夜一区二区| 蜜臀99久久精品久久久久久软件| 综合欧美亚洲日本| 精品日韩在线观看| 成人自拍视频在线| 午夜天堂影视香蕉久久| 精品精品欲导航| 欧美日韩国产免费| 99久久综合99久久综合网站| 理论电影国产精品| 日日夜夜一区二区| 亚洲在线成人精品| 日韩伦理电影网| 国产欧美日韩在线看| 久久久综合视频| 91精品国产全国免费观看| 欧美亚洲动漫精品| 色视频成人在线观看免| 成人免费黄色在线| 懂色av一区二区三区免费观看| 韩国精品在线观看| 久草精品在线观看| 青青草97国产精品免费观看无弹窗版| 悠悠色在线精品| 日韩一区有码在线| 亚洲色图丝袜美腿| 亚洲女女做受ⅹxx高潮| 亚洲精品日韩一| 亚洲日本在线看| 538在线一区二区精品国产| 亚洲国产另类精品专区| 亚洲精品福利视频网站| 中文字幕亚洲欧美在线不卡| 国产欧美精品日韩区二区麻豆天美 | 亚洲乱码国产乱码精品精98午夜| 欧美激情资源网| 国产精品久久久久久久裸模| 国产精品久久网站| 亚洲欧美一区二区不卡| 亚洲激情一二三区| 日韩国产在线观看一区| 丝袜美腿成人在线| 久久精品国产免费看久久精品| 韩国欧美国产1区| 国产精品一区二区91| 国产**成人网毛片九色| 99久久久久久99| 欧美午夜精品久久久久久孕妇 | 久久aⅴ国产欧美74aaa| 亚洲激情综合网| 久久一夜天堂av一区二区三区| 日韩一区二区三区在线视频| 7777精品久久久大香线蕉| 欧美一级欧美三级| 久久视频一区二区| 国产精品国产三级国产普通话99| 亚洲欧美另类图片小说| 日本大胆欧美人术艺术动态| 韩国视频一区二区| 成人开心网精品视频| 欧美日韩一区二区欧美激情 | 26uuu国产一区二区三区| 国产欧美日韩三级| 一区二区三区四区精品在线视频| 日本aⅴ亚洲精品中文乱码| 国产精品一卡二卡| 91黄色激情网站| 久久免费午夜影院| 亚洲一区二区免费视频| 蜜臀av一级做a爰片久久| aaa欧美大片| 欧美一级片在线| 国产精品乱人伦| 亚洲成人av一区| 国产午夜精品久久久久久免费视| 久久九九久久九九| 国产成人综合视频| 美女一区二区视频| 99re这里都是精品| 555www色欧美视频| 国产精品久久福利| 美女网站在线免费欧美精品| 91在线精品一区二区三区| 欧美一区二区三区白人| 国产精品三级视频| 日韩黄色在线观看| 成人免费看黄yyy456| 欧美α欧美αv大片| 亚洲一区二区三区四区在线观看 | 国产在线视视频有精品| 欧美在线视频全部完| 亚洲国产精品传媒在线观看| 日本亚洲一区二区| 91女神在线视频| 久久精品视频一区| 免费成人美女在线观看.| 在线观看av一区| 中文字幕在线观看不卡视频| 亚洲免费视频成人| 国产成人高清视频| 国产区在线观看成人精品| 一区二区三区丝袜| 国产一区二区三区黄视频 | 色婷婷激情久久| 国产女人18毛片水真多成人如厕| 蜜桃传媒麻豆第一区在线观看| 色8久久人人97超碰香蕉987| 国产精品三级视频| 国产一区二区在线观看免费| 91精品婷婷国产综合久久性色 | 久久久不卡影院| 六月丁香婷婷久久| 日韩欧美国产综合| 五月天激情综合| 欧美日韩夫妻久久| 亚洲国产日产av| 久草精品在线观看| 亚洲欧美aⅴ...| 久久精品二区亚洲w码| 99精品久久免费看蜜臀剧情介绍 | 欧美激情中文字幕| 国产一区二区美女| 欧美岛国在线观看| 麻豆久久久久久久| 欧美v亚洲v综合ⅴ国产v| 青椒成人免费视频| 日韩欧美国产电影| 狠狠色丁香久久婷婷综合_中 | 亚洲精品中文在线影院| 99国产一区二区三精品乱码| 国产精品萝li| 色欧美片视频在线观看| 亚洲另类一区二区| 在线亚洲人成电影网站色www| 一区二区三区影院| 欧美日韩色一区| 日韩**一区毛片| 亚洲精品一区二区三区影院| 国产成人午夜高潮毛片| 国产精品乱码一区二区三区软件 | 日韩电影网1区2区| 91精品国产综合久久久久久久 | 国产成人在线视频网站| 国产精品欧美一区二区三区| 成人av中文字幕| 亚洲精品美国一| 欧美人成免费网站| 蜜桃精品视频在线| 欧美国产精品v| 91久久精品国产91性色tv| 亚洲一本大道在线| 欧美成va人片在线观看| 成人丝袜18视频在线观看| 亚洲精品国产精华液| 4438亚洲最大| 丰满少妇在线播放bd日韩电影| 中文字幕在线观看一区| 欧美日韩电影一区| 国产精品18久久久久| 最新中文字幕一区二区三区| 91久久精品一区二区三区| 久久国产综合精品| 国产精品久久久久9999吃药| 欧美日韩欧美一区二区| 国产一区二区三区在线看麻豆| 亚洲男女毛片无遮挡| 欧美白人最猛性xxxxx69交| proumb性欧美在线观看| 午夜精品久久一牛影视| 国产欧美日韩另类视频免费观看| 精品婷婷伊人一区三区三| 久久精品国产一区二区三| 1区2区3区国产精品| 日韩午夜中文字幕| 成年人午夜久久久| 日韩电影在线观看电影| 一区精品在线播放| 欧美一级片在线看| 色爱区综合激月婷婷| 狠狠色狠狠色综合日日91app| 亚洲激情图片一区| 久久人人超碰精品| 欧美剧在线免费观看网站| 高清在线不卡av| 美女一区二区三区| 亚洲午夜一二三区视频| 国产拍揄自揄精品视频麻豆| 欧美一区二区三级| 在线免费观看日本一区| 国产99久久久国产精品免费看| 美日韩一级片在线观看|