当前位置:七道奇文章资讯系统安全Linux安全
日期:2012-05-05 23:56:00  来源:本站整理

QQ2440开辟板在Ubuntu下下载内核[Linux安全]

赞助商链接



  本文“QQ2440开辟板在Ubuntu下下载内核[Linux安全]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

  在位的好友的指导下,我的Ubuntu终于能通过USB下载东西了!在这里说一下步骤,便利自己也但愿对大家有好处!

  1、下载usb驱动: apt-get install libusb-dev

  2、编译DNW2,gcc -o dnw2 -lusb

  呵呵,DNW2就会在当前目录下生成!

  文件下载:

  ./dnw2 file

  code:

  #include

  #include

  #include

  #include

  #include

  #include

  #define QQ2440_SECBULK_IDVENDOR 0x5345

  #define QQ2440_SECBULK_IDPRODUCT 0x1234

  struct usb_dev_handle * open_port()

  {

  struct usb_bus *busses, *bus;

  usb_init();

  usb_find_busses();

  usb_find_devices();

  busses = usb_get_busses();

  for(bus=busses;bus;bus=bus->next)

  {

  struct usb_device *dev;

  for(dev=bus->devices;dev;dev=dev->next)

  {

  if( QQ2440_SECBULK_IDVENDOR==dev->descriptor.idVendor

  && QQ2440_SECBULK_IDPRODUCT==dev->descriptor.idProduct)

  {

  printf("Target usb device found!\n");

  struct usb_dev_handle *hdev = usb_open(dev);

  if(!hdev)

  {

  perror("Cannot open device");

  }

  else

  {

  if(0!=usb_claim_interface(hdev, 0))

  {

  perror("Cannot claim interface");

  usb_close(hdev);

  hdev = NULL;

  }

  }

  return hdev;

  }

  }

  }

  printf("Target usb device not found!\n");

  return NULL;

  }

  void usage()

  {

  printf("Usage: dnw2 \n\n");

  }

  unsigned char* prepare_write_buf(char *filename, unsigned int *len)

  {

  unsigned char *write_buf = NULL;

  struct stat fs;

  int fd = open(filename, O_RDONLY);

  if(-1==fd)

  {

  perror("Cannot open file");

  return NULL;

  }

  if(-1==fstat(fd, &fs))

  {

  perror("Cannot get file size");

  goto error;

  }

  write_buf = (unsigned char*)malloc(fs.st_size+10);

  if(NULL==write_buf)

  {

  perror("malloc failed");

  goto error;

  }

  if(fs.st_size != read(fd, write_buf+8, fs.st_size))

  {

  perror("Reading file failed");

  goto error;

  }

  printf("Filename : %s\n", filename);

  printf("Filesize : %d bytes\n", fs.st_size);

  *((u_int32_t*)write_buf) = 0x30000000; //download address

  *((u_int32_t*)write_buf+1) = fs.st_size + 10; //download size;

  *len = fs.st_size + 10;

  return write_buf;

  error:

  if(fd!=-1) close(fd);

  if(NULL!=write_buf) free(write_buf);

  fs.st_size = 0;

  return NULL;

  }

  int main(int argc, char *argv[])

  {

  if(2!=argc)

  {

  usage();

  return 1;

  }

  struct usb_dev_handle *hdev = open_port();

  if(!hdev)

  {

  return 1;

  }

  unsigned int len = 0;

  unsigned char* write_buf = prepare_write_buf(argv[1], &len);

  if(NULL==write_buf) return 1;

  unsigned int remain = len;

  unsigned int towrite;

  printf("Writing data ...\n");

  while(remain)

  {

  towrite = remain>512 ? 512 : remain;

  if(towrite != usb_bulk_write(hdev, 0x03, write_buf+(len-remain), towrite, 3000))

  {

  perror("usb_bulk_write failed");

  break;

  }

  remain-=towrite;

  printf("\r%d%\t %d bytes ", (len-remain)*100/len, len-remain);

  fflush(stdout);

  }

  if(0==remain) printf("Done!\n");

  return 0;

  }

  本代码从网上下载,别恶意!

  以上是“QQ2440开辟板在Ubuntu下下载内核[Linux安全]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • QQ2440开辟板在Ubuntu下下载内核
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .