歡迎您光臨本站 註冊首頁

ARM-Linux驅動移植--Linux下燒寫工具DNW和USB驅動安裝

←手機掃碼閱讀     火星人 @ 2014-03-03 , reply:0

ARM-Linux驅動移植--Linux下燒寫工具DNW和USB驅動安裝


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驅動




view plaincopyprint?01.make -C /lib/modules/`uname -r`/build M=`pwd` modules 然後insmod安裝驅動並dmesg查看如下




4、修改dnw.c文件並編譯

由於FL2440燒寫內核需要設置初始地址為0x30800000,修改後文件如下



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




《解決方案》

謝謝分享

[火星人 ] ARM-Linux驅動移植--Linux下燒寫工具DNW和USB驅動安裝已經有617次圍觀

http://coctec.com/docs/service/show-post-1061.html