DNW for CentOS7

原文轉自 http://blog.csdn.net/david_xtd/article/details/26088299


最近跟着國嵌的課程玩OK6410,國嵌用的是紅帽企業版6,我自己硬盤裝的CentOS7,發現國嵌的dnw用不了,在網上找到這個,可以用。



1. dnw由兩部分構成:USB驅動和下載工具,USB驅動便是secbulk文件夾,下載工具是DNW文件夾

    下載地址:http://files.cnblogs.com/lixiaoming90/dnw_linux.rar

     文件名:DnwLinux.rar

   

2.  安裝dnw

     解壓縮,之後會看到dnw_linux文件夾,進入該文件夾

     $ cd dnw_linux

     $ ls

     $ /dnw   /secbulk

 

     2.1  首先修改、編譯和安裝驅動

     進入secbulk文件夾,輸入編譯命令,編譯成模塊。(我自己修改了Makefile,因此大家只需make就可編譯,make clean 就可清除編譯。修改後的Makefile如下:

obj-m := secbulk.o
KDIR := /lib/modules/`uname -r`/build
PWD  := $(shell pwd)

default:
	$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
clean:
	$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean
	rm -rf *.order *.symvers

     在修改secbulk.c中代碼,將0x5432改爲0x04e8(不同的flash要在那個表單中加入一些設備相關的信息類似ID號,在程序加載的時候自動讀取芯片內部ID和這個相比較,沒有註冊的設備是不會被系統支持的,可以通過lsusb獲得idProduct和idVendor,需要在插上板子,並準備下載時此時設備連上時lsusb,0x04e8:0x1234),代碼如下:

static struct usb_device_id secbulk_table[]= {
	{ USB_DEVICE(0x04e8, 0x1234)},
	{ }
};


    至此,代碼修改完畢!

     $ make

之後在文件夾中會有secbulk.ko模塊文件

加載該模塊到內核(注意:需要root權限)

     $ sudo insmod secbulk.ko

     加載後用dmesg命令可以看到模塊已經成功加載
     [  238.007970] secbulk:secbulk loaded
     [  238.009101] usbcore: registered new interface driver secbulk

     常見問題: can not open /dev/secbulk0,  則表示該模塊沒有加載成功或者dnw沒有root權限

     通過lsmod可以看看加載成功沒。

     $ lsmod | grep secbulk

     2.2 編譯和安裝dnw(這裏在原博文章基礎上做了點修改)

     進入dnw文件夾

    $ cd dnw

     修改dnw.c,找到如下代碼處:

   printf("Writing data...\n");
   size_t remain_size = file_stat.st_size+10;

     在其前面加上下面兩句:

/*****************************/
file_buffer [file_stat.st_size + 8] = sum & 0xff;
file_buffer [file_stat.st_size + 9] = sum >> 8;
/*****************************/

	int target_addr;
	if( 3 != argc )
	{
		printf("Usage: dwn <filename> <address>\n");
		return 1;
	}
	target_addr=strtol(argv[2],NULL,0);

*((unsigned long*)file_buffer) = target_addr; 	//load address 用target_addr替換原來的固定的地址,這樣方便在命令行更改地址    

      代碼修改完畢,像一般的程序一樣編程爲可執行性文件

    $ gcc –o dnw dnw.c

    可能會有一些警告,不過可以忽略。在dnw下生成dnw工具

    將dnw複製到/bin目錄下,這樣就可以在任意文件目錄下調用dnw命令。

   

    溫馨技巧: 因爲要用dnw的話,要確保secbulk驅動加載到內核,爲了避免每次都要手動加載,因此修改/etc/init.d/rc.local文件(root權限),在後面加上下面一句:

     insmod /….你的secbulk.ko文件目錄/secbulk.ko

     保存退出完事。

3. dnw運用

    我用dnw的主要目的是用來下載裸機程序,dnw的用法也很簡單。

當開發板等待USB傳輸數據是 

dnw <filename> <tartet_addr>



發佈了34 篇原創文章 · 獲贊 7 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章