免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2773 | 回复: 1
打印 上一主题 下一主题

ARM-Linux驱动移植--Linux下烧写工具DNW和USB驱动安装 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-01-20 21:31 |只看该作者 |倒序浏览

ARM-Linux驱动移植--Linux下烧写工具DNW和USB驱动安装








主机平台:Gentoo Linux 11.2 with linux kernel 3.0.6

硬件平台:FL2440(S3C2440)with linux kernel 2.6.35

原创作品,转载请标明出处http://blog.csdn.net/yming0221/article/details/7211396

1、首先下载DNW for linux http://download.csdn.net/source/1011140

2、解压文件




3、编译主机的USB驱动




[cpp] view plaincopyprint?
  1. 01.make -C /lib/modules/`uname -r`/build M=`pwd` modules
复制代码
然后insmod安装驱动并dmesg查看如下




4、修改dnw.c文件并编译

由于FL2440烧写内核需要设置初始地址为0x30800000,修改后文件如下



[cpp] view plaincopyprint?
  1. 01.#include <stdio.h>  
  2. 02.#include <stdlib.h>  
  3. 03.#include <malloc.h>  
  4. 04.#include <sys/types.h>  
  5. 05.#include <sys/stat.h>  
  6. 06.#include <unistd.h>  
  7. 07.#include <fcntl.h>  
  8. 08.  
  9. 09.const char* dev = "/dev/secbulk0";  
  10. 10.  
  11. 11.  
  12. 12.int main(int argc, char* argv[])  
  13. 13.{  
  14. 14.    unsigned char* file_buffer = NULL;  
  15. 15.    if( 2 != argc )  
  16. 16.    {  
  17. 17.        printf("Usage: dwn <filename>\n");  
  18. 18.        return 1;  
  19. 19.    }  
  20. 20.  
  21. 21.    int fd = open(argv[1], O_RDONLY);  
  22. 22.    if(-1 == fd)  
  23. 23.    {  
  24. 24.        printf("Can not open file - %s\n", argv[1]);  
  25. 25.        return 1;  
  26. 26.    }  
  27. 27.  
  28. 28.    struct stat file_stat;  
  29. 29.    if( -1 == fstat(fd, &file_stat) )  
  30. 30.    {  
  31. 31.        printf("Get file size filed!\n");  
  32. 32.        return 1;  
  33. 33.    }     
  34. 34.      
  35. 35.    file_buffer = (char*)malloc(file_stat.st_size+10);  
  36. 36.    if(NULL == file_buffer)  
  37. 37.    {  
  38. 38.        printf("malloc failed!\n");  
  39. 39.        goto error;  
  40. 40.    }  
  41. 41.    if( file_stat.st_size !=  read(fd, file_buffer+8, file_stat.st_size))  
  42. 42.    {  
  43. 43.        printf("Read file failed!\n");  
  44. 44.        goto error;  
  45. 45.    }  
  46. 46.  
  47. 47.    printf("file name : %s\n", argv[1]);  
  48. 48.    printf("file size : %d bytes\n", file_stat.st_size);  
  49. 49.  
  50. 50.    int fd_dev = open(dev, O_WRONLY);  
  51. 51.    if( -1 == fd_dev)  
  52. 52.    {  
  53. 53.        printf("Can not open %s\n", dev);  
  54. 54.        goto error;  
  55. 55.    }  
  56. 56.      
  57. 57.    *((unsigned long*)file_buffer) = 0x30800000;    //load address  
  58. 58.    *((unsigned long*)file_buffer+1) = file_stat.st_size+10;    //file size  
  59. 59.    unsigned short sum = 0;  
  60. 60.    int i;  
  61. 61.    for(i=8; i<file_stat.st_size+8; i++)  
  62. 62.    {  
  63. 63.        sum += file_buffer[i];  
  64. 64.    }  
  65. 65.      
  66. 66.    printf("Writing data...\n");  
  67. 67.    size_t remain_size = file_stat.st_size+10;  
  68. 68.//  size_t block_size = remain_size / 100;  
  69. 69.        size_t block_size = 512;  
  70. 70.    size_t writed = 0;  
  71. 71.    while(remain_size>0)  
  72. 72.    {  
  73. 73.        size_t to_write = remain_size > block_size ? block_size:remain_size;  
  74. 74.        if( to_write != write(fd_dev, file_buffer+writed, to_write))  
  75. 75.        {  
  76. 76.            printf("failed!\n");  
  77. 77.            return 1;  
  78. 78.        }  
  79. 79.        remain_size -= to_write;  
  80. 80.        writed += to_write;  
  81. 81.        printf("\r%d%\t %d bytes     ", writed*100/(file_stat.st_size+10), writed);  
  82. 82.        fflush(stdout);  
  83. 83.         
  84. 84.    }     
  85. 85.  
  86. 86.    printf("OK\n");  
  87. 87.    return 0;  
  88. 88.  
  89. 89.error:  
  90. 90.    if(-1!=fd_dev) close(fd_dev);  
  91. 91.    if(fd != -1) close(fd);  
  92. 92.    if( NULL!=file_buffer )  
  93. 93.        free(file_buffer);  
  94. 94.    return -1;  
  95. 95.}  
复制代码
最后烧写内核




论坛徽章:
0
2 [报告]
发表于 2012-01-20 21:31 |只看该作者
谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP