Linux下燒寫工具DNW和USB驅動安裝(一)


轉:http://blog.csdn.net/zhengmeifu/article/details/8837930

Linux下編譯記錄:
編譯PC端USB驅動和寫入工具
dnw_linux.tgz壓縮包文件結構如下

dnw_linux/
dnw_linux/secbulk/
dnw_linux/secbulk/Makefile
dnw_linux/secbulk/secbulk.c
dnw_linux/dnw/
dnw_linux/dnw/dnw.c

其中secbulk.c是PC端USB驅動, dnw.c是寫入工具

編譯驅動之前先修改secbulk.c
找到#define BULKOUT_BUFFER_SIZE
修改為
#define BULKOUT_BUFFER_SIZE 512
找到
static struct usb_device_id secbulk_table[]= {
        { USB_DEVICE(0x04e8, 0x1234)},
        { }
};
修改為上面的樣子
接下來編譯
$cd secbulk
$make -C /lib/modules/`uname -r`/build M=`pwd` modules

加載編譯好的驅動
$sudo insmod ./secbulk.ko
注意,每次下載前都需要加載驅動,或者可以設置為開機自動加載
Ubuntu中,假設驅動文件在/opt/dnw_linux/secbulk/
則修改/etc/rc.d/rc.local文件,末尾加入
sudo insmod /opt/dnw_linux/secbulk/secbulk.ko
即完成開機自動加載驅動模塊

接下來編譯dnw寫入工具
先打開dnw.c修改
找到
printf("Writing data...\n");
size_t remain_size = file_stat.st_size+10;
size_t block_size = remain_size / 100;
size_t writed = 0;

在它前面加上2行代碼,如下:
file_buffer [file_stat.st_size + 8] = sum & 0xff;
file_buffer [file_stat.st_size + 9] = sum >> 8;

printf("Writing data...\n");
size_t remain_size = file_stat.st_size+10;
size_t block_size = remain_size / 100;
size_t writed = 0;

編譯dnw
$gcc -o dnw dnw.c
編譯成功后生成可執行dnw
使用DNW下載
啟動開發板,進入minicom,並將開發板和PC用USB電纜連接,此時用dmesg命令可以看到secbulk驅動加載:
[ 283.677772] usb 1-1: new full speed USB device using uhci_hcd and address 2
[ 284.084835] usb 1-1: configuration #1 chosen from 1 choice
[ 284.140430] secbulk:secbulk probing...
[ 284.140482] secbulk:bulk out endpoint found!
說明驅動可以使用


重起開發板,別進linux系統,按任意鍵進入uboot界面,
輸入
dnw 50008000
當出現“USB host is connected. Waiting a download.”時,
在PC端Linux上用dnw工具寫入要下載的文件,例如我要寫入/tmp/zImage
$./dnw /tmp/zImage


寫入完成后提示成功
100% 312349 bytes OK
至此,dnw在linux下使用一切正常

dnw下載地址:

https://github.com/Qunero/dnw4linux


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM