Part1前言
最近在研究OK6410開發板;但windows下的rvds真是不好用,燒寫程序到開發板還需要dnw,而這各種軟件都要在win下搞,很是憋屈,而且64位的win7還出各種問題。我要移植的是Linux系統呢,咋的就不能在linux完成所有步驟呢?
昨晚到處查找資料,總算找到了dnw可在linux成功運行的消息;
又遇到了linux下的串口連接終端minicom和kermit; 不斷折騰和測試,總算搞定了dnw和usb下載的問題;后面的路就開闊多了!記下各種資源和心得,和大家分享。
Part2工具准備
2.1 串口終端kermit
這個直接命令安裝就可以了,另外需要簡單熟悉一下他的配置和兩種模式;
2.1.1 安裝kermit
sudo apt-get install ckermit
2.1.2 配置kermit
建立配置文件 ~/.kermrc, 內容如下:
#USB轉串口,所以設備為/dev/ttyUSB0 SET LINE /dev/ttyUSB0 #設置波特率 #set speed 115200 #關閉通信監視,必須關閉才能看到開發板返回的信息 set carrier-watch off
2.1.3 使用kermit連接開發板
在連接好USB轉串口后,該USB能夠被Linux直接識別,對應設備文件為:/dev/ttyUSB0 ;
這里需要注意的是: 先連接好USB串口和開發板,然后再打開配置好的kermit終端;否則kermit會讀取配置文件先占用和鎖定了/dev/ttyUSB0, 那么再插上USB串口后,該設備分配的設備文件就成了/dev/ttyUSB1, 從事出現不匹配,在終端中無法控制開發板的情況;(不過這種情況也很好處理,就是在kermit中設置新的連接對象,如下:)
set line /dev/ttyUSB1 #這個根據實際情況設置,可以通過 ls /dev/ttyUSB* 的方式查找到名字
2.1.4 kermit的兩種模式
進入后默認進入命令模式,可以執行很多命令,包括連接開發板的connect命令:
C-Kermit 9.0.302 OPEN SOURCE:, 20 Aug 2011, for Linux+SSL+KRB5 Copyright (C) 1985, 2011, Trustees of Columbia University in the City of New York. Type ? or HELP for help. (/media/GoldenResources/arm/src/dnw4linux/) C-Kermit>? Command, one of the following: add check disable getc learn mmove push return statistics type answer chmod do getok LICENSE move pwd rlogin status undeclare apc clear echo goto lineout msend quit rmdir stop undefine array close edit grep log msleep read run SUPPORT version ask connect enable head login open receive screen suspend void askq copy end hangup logout orientation redial script switch wait assign date evaluate HELP lookup output redirect send tail where associate debug exit http mail pause redo server take while authenticate decrement file if manual pdial reget set telnet who back define finish increment message pipe remote shift touch write browse delete for input minput print remove show trace xecho bye dial ftp INTRO mget pty rename space translate xmessage cd directory get kcd mkdir purge resend ssh transmit or a macro name ("do ?" for a list) or one of the tokens: ! # ( . ; : < @ ^ {
隨時出入 問號 ? 可以獲得幫助和代碼補全; 在輸入connect命令連接開發板后(在這之前需要配置連接對象,可以用命令 set line /dev/ttyUSB0 的方式完成),進入到連接后的開發板模式,顯示的為開發板反饋回來的信息,可以控制整個開發板,要返回原來的命令模式使用快捷鍵 Ctrl+ \ , 然后 按C 字母返回;
2.2 DNW和USB驅動准備
2.2.1 下載源碼
可以網上搜索dnw4linux,下載QQ2440版本的源碼,或者直接下載我整理后的,可以適用於OK6410及類似開發板的dnw源碼和驅動包;
詳情查看: https://github.com/Qunero/dnw4linux 該頁面的說明,或者直接下載壓縮包:
https://github.com/Qunero/dnw4linux/downloads
2.2.2 編譯安裝和使用
直接查看該軟件包的README,按步執行即可:
1、源碼說明: 本源代碼收集自網絡,經過整理和加入宏定義,使其適用於OK6410開發板;對 源碼進行了適當的注釋和錯誤糾正;同樣以GPL協議發布; 2、使用說明: 2.1 編譯 直接在解壓后的目錄中make即可;然后在對應的子目錄中可以找到編譯好的文件; 更方便的做法:make install 會直接將相關文件編譯好,然后放到當前目錄下, 編譯好的文件為: dnw --- 用於傳輸數據的軟件,用法: dnw filename secbulk.ko --- 識別下載用USB的驅動; 用法: sudo insmod secbulk.ko 2.2 自動化 在編譯成功后,完成下列步驟方面以后使用: 2.2.1 將dnw放到系統路徑: sudo cp dnw /usr/sbin/ 2.2.2 將secbulk.ko驅動設為自動加載: 先在住目錄建立mydriver目錄:mkdir ~/mydriver 將驅動放入自定義mydriver中:cp secbulk.ko ~/mydriver/ 修改/etc/rc.d/rc.local文件,末尾加入: sudo insmod $HOME/secbulk.ko 注意: 將上面的$HOME替換成實際的絕對路徑,比如: /home/qulory 2.3 清理 直接執行make clean, 讓你的源碼目錄干干凈凈; 2.4 使用 注意,當前編譯好的dnw在32位linux可用,但是secbulk.ko驅動文件需要自己編譯 必須同當前使用的內核的版本一致,內核版本升級后也需要重新編譯; 3、移植幫助: 要成功移植到類似的開發板,需要以下2步: 3.1 驅動處理: 進入secbulk_driver子目錄,修改文件secbulk.c中的關於DOWNLOAD_USB_ID_MAJOR 和DOWNLOAD_USB_ID_MINOR的宏定義,讓其與你的usb對應,可以通過lsusb命令查看 獲得該id的信息; 3.2 dnw下載地址的處理: 進入dnw_src目錄,修改dnw.c文件中DOWNLOAD_ADDR的定義,將其設為你的開發板 的下載地址; 3.3 有疑問可以聯系 Qulory<Quner612@qq.com>;
驅動安裝好后,在用kermit連接好開發板,然后重啟開發板,讓其停留在u-boot階段;然后在kermit中輸入dnw 50008000, 這個地址要和dnw軟件編譯時指定的下載地址一致,然后功過lsusb命令可以檢查到該usb線,如3.2 中所示;並且在正常執行了 : sudo insmod secbulk.ko 后,可以檢查到如下信息:
less /var/log/kern.log Nov 16 13:21:21 qunengrong-Studio-1450 kernel: [139476.958530] secbulk:secbulk probing... Nov 16 13:21:21 qunengrong-Studio-1450 kernel: [139476.958534] secbulk:bulk out endpoint found!
至此驅動安裝和dnw軟件准備就緒;
2.2.3 關於dnw2
dnw2使用libusb來實現對該USB的操控,但是不如dnw來的直接:/dev/secbulk0 ,前者更加系統但是使用傳輸數據的時候經常出現如下錯誤:
Target usb device found!
Cannot claim interface: Device or resource busy
后續有時間詳細分析以下在處理;
2.3 minicom終端的使用
minicom是基於字符菜單的,不太好用,而且經常快捷鍵不響應和出現亂碼;不過附加使用方法如下:
2.3.1 使用minicom -s 啟動並配置
使用sudo啟動:
sudo minicom -s
主要設置好串口,如下藍色部分:
+-----[configuration]------+
| Filenames and paths |
| File transfer protocols |
| Serial port setup |
| Modem and dialing |
| Screen and keyboard |
| Save setup as dfl |
| Save setup as.. |
| Exit |
| Exit from Minicom |
+--------------------------+
在該菜單中輸入A,修改串口設備為 /dev/ttyUSB0,如下:
+-----------------------------------------------------------------------+
| A - Serial Device : /dev/ttyUSB0 |
| B - Lockfile Location : /var/lock |
| C - Callin Program : |
| D - Callout Program : |
| E - Bps/Par/Bits : 115200 8N1 |
| F - Hardware Flow Control : Yes |
| G - Software Flow Control : No |
| |
| Change which setting? |
+-----------------------------------------------------------------------+
退出並保存,然后可以開始使用了:
Welcome to minicom 2.6.1 OPTIONS: I18n Compiled on May 1 2012, 10:55:27. Port /dev/ttyUSB0 Press CTRL-A Z for help on special keys exit not allowed from main input shell. SMDK6410 #
Part3燒寫測試
3.1 連接好USB串口並打開kermit終端
參考2.1.3 中的說明,連接好開發板, 啟動kermit后,輸入connect命令, 開始在kermit中控制開發板; 讓其停留在u-boot的命令行,選擇2 進行從USB燒寫系統的菜單,然后選擇1燒寫u-boot;
U-Boot 1.1.6 (Nov 16 2012 - 12:23:47) for SMDK6410 **************************************** ** u-boot 1.1.6 ** ** Updated for OK6410 TE6410 Board ** ** Version (2012-09-23) ** ** OEM: Forlinx Embedded ** ** Web: http://www.witech.com.cn ** **************************************** CPU: S3C6410 @532MHz Fclk = 532MHz, Hclk = 133MHz, Pclk = 66MHz, Serial = CLKUART (SYNC Mode) Board: SMDK6410 DRAM: 256 MB Flash: 0 kB NAND: 2048 MB In: serial Out: serial Err: serial Hit any key to stop autoboot: 0 ###################### User Menu for OK6410##################### [1] Format the nand flash [2] Burn image from USB [3] configure the lcd size [4] Boot the system [5] Reboot the u-boot [6] Exit to command line -----------------------------Select--------------------------------- Enter your Selection:2
##### Select the fuction ##### [1] Flash u-boot [2] Flash kernel [3] Flash system [4] Exit Enter your Selection:1 NAND erase: device 0 offset 0x0, size 0x200000 Erasing at 0x180000 -- 100% complete. OK Insert a OTG cable into the connector! OTG cable Connected! Now, Waiting for DNW to transmit data
3.2 連接好USB數據線並使用DWN傳數據
在開發板處於接收數據的狀態下,在該USB插到linux系統上就能夠識別出該USB的信息,也只有這個時候才能識別到,如下,注意藍色部分(該USB的設備ID,關系到第二部分的驅動程序的對應內容):
$lsusb Bus 001 Device 003: ID 0c45:6407 Microdia Bus 002 Device 041: ID 04e8:1234 Samsung Electronics Co., Ltd Bus 004 Device 002: ID 0a5c:4500 Broadcom Corp. BCM2046B1 USB 2.0 Hub (part of BCM2046 Bluetooth) Bus 008 Device 023: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 004 Device 003: ID 413c:8161 Dell Computer Corp. Integrated Keyboard Bus 004 Device 004: ID 413c:8162 Dell Computer Corp. Integrated Touchpad [Synaptics]
在另一個終端中用dnw寫數據,最后狀態提示傳輸成功:
$sudo dnw u-boot.bin file name : u-boot.bin file size : 212992 bytes Writing data... 100 213002 bytes !OK
在kermit中觀察狀態,成功寫入數據:
##### Select the fuction ##### [1] Flash u-boot [2] Flash kernel [3] Flash system [4] Exit Enter your Selection:1 NAND erase: device 0 offset 0x0, size 0x200000 Erasing at 0x180000 -- 100% complete. OK Insert a OTG cable into the connector! OTG cable Connected! Now, Waiting for DNW to transmit data Download Done!! Download Address: 0x50008000, Download Filesize:0x34000 Checksum is being calculated. Checksum O.K. NAND write: device 0 offset 0x0, size 0x200000 1032192 bytes written: OK ##### Select the fuction ##### [1] Flash u-boot [2] Flash kernel [3] Flash system [4] Exit Enter your Selection:
然后選擇4退出燒寫,然后重啟u-boot看是否可用:
##### Select the fuction ##### [1] Flash u-boot [2] Flash kernel [3] Flash system [4] Exit Enter your Selection:4 ###################### User Menu for OK6410##################### [1] Format the nand flash [2] Burn image from USB [3] configure the lcd size [4] Boot the system [5] Reboot the u-boot [6] Exit to command line -----------------------------Select--------------------------------- Enter your Selection:5 reset... KK U-Boot 1.1.6 (Nov 16 2012 - 12:23:47) for SMDK6410 **************************************** ** u-boot 1.1.6 ** ** Updated for OK6410 TE6410 Board ** ** Version (2012-09-23) ** ** OEM: Forlinx Embedded ** ** Web: http://www.witech.com.cn ** **************************************** CPU: S3C6410 @532MHz Fclk = 532MHz, Hclk = 133MHz, Pclk = 66MHz, Serial = CLKUART (SYNC Mode) Board: SMDK6410 DRAM: 256 MB Flash: 0 kB NAND: 2048 MB In: serial Out: serial Err: serial Hit any key to stop autoboot: 0 NAND read: device 0 offset 0x200000, size 0x500000 s3c-nand: 1 bit(s) error detected, corrected successfully 5242880 bytes read: OK Boot with zImage Starting kernel ...
至此,說明重啟進入u-boot已經成功,也就是剛剛我們的ubuntu下dnw傳輸數據和燒寫u-boot都已成功完成;
更多的測試,歡迎關注。
