因爲mini2440在WIN7上下載,USB驅動沒法兼容,老是出現藍屏重啓的現象,致使不得不想其餘方式來下載,首先就考慮了使用U-Boot來下載,由於它支持多種下載方式:php
1. 使用串口下載,它支持kermit/xmodem/ymodem等模式,可是下載速度比較慢。 html
2. 使用U盤/SD卡加載程序,須要先將程序拷貝到U盤/SD卡中,而後再經過相應的命令讀取到內存中。 linux
3. 使用TFTP/NFS網絡服務加載程序,配置好終端和服務器,使用起來比較方便,並且速度很快。 git
在這裏我講一下TFTP方式的配置過程,以及使用方式。首先須要將U-boot下載到Nand Flash中,可是因爲友善之臂提供的USB驅動在WIN7及其不穩定,因此我費了九牛二虎之力纔將其使用DNW下載進去。使用的是由Tekkaman Ninja移植的U-boot,能夠經過git來下載源代碼,下載方式是:git clone https://github.com/tekkamanninja/u-boot-2010.03-tekkaman.git。關於GIT的用法,參考http://www.arm9home.net/read.php?tid-5266.html。下載完成以後須要從新編譯,編譯步驟以下:github
$cd u-boot-2010.03-tekkaman
$export PATH=$PATH:/opt/FriendlyARM/toolschain/4.4.3/bin/
$make ARCH=arm CROSS_COMPILE=/opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux- mini2440_config
$make ARCH=arm CROSS_COMPILE=/opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux- allwindows
若是你在編譯的過程當中碰到了invalid option的問題,那是由於git下載的文件編碼格式不正確,應該使用utf-8的格式下載文件,或者使用在linux中經過git下載源代碼編譯,保證文件格式是正確的。最終生成的u-boot.bin能夠經過supervivi菜單項裏的"[a] Absolute User Application"選項 + DNW工具下載到NAND Flash中。服務器
將mini2440設置成nand flash啓動模式,連接串口和網線,網線分爲交叉網線和直連網線,mini2440贈送的是直連網線,不過網卡能夠自動識別。啓動串口以後就能夠看到如下內容:網絡
U-Boot 2010.03 (Dec 27 2012 - 06:32:26)app
modified by tekkamanninja (tekkamanninja@163.com)
Love Linux forever!!ideI2C: ready
DRAM: 64 MB
Flash: 2 MB
NAND: 256 MiB
Video: 240x320x16 20kHz 62Hz
In: serial
Out: serial
Err: serial
USB slave is enable!
Net: dm9000
U-Boot 2010.03 (Dec 27 2012 - 06:32:26)
modified by tekkamanninja
(tekkamanninja@163.com)
Love Linux forever!!
Hit any key to stop autoboot: 0
[u-boot@MINI2440]#
顯示出機器的一些基本信息,咱們可使用printenv命令顯示當前的環境變量:
[u-boot@MINI2440]# printenv
bootargs=noinitrd root=/dev/nfs rw nfsroot=192.168.0.1:/home/tekkaman/working/nfs/rootfs ip=192.168.0.2:192.168.0.1::255.255.255.0 console=ttySAC0,115200 init=/linuxrc mem=64M
baudrate=115200
ethaddr=08:08:11:18:12:27
netmask=255.255.255.0
tekkaman=bmp d 70000
stdin=serial
stdout=serial
stderr=serial
ethact=dm9000
ipaddr=192.168.3.8
gatewayip=192.168.3.1
serverip=192.168.3.5
bootcmd=tftp zImage_T35.img;bootm
bootdelay=3Environment size: 425/131068 bytes
這個時候首先須要配置IP,將PC本地鏈接的IP和mini2440的IP配置在同一網段,ipaddr是mini2440的IP,gatewayip是網關,serverip是PC的IP,須要在PC段設置靜態IP,設置完成以後必定要saveenv將設置寫入flash之中,不然下載啓動有得從新設置:
[u-boot@MINI2440]# setenv ipaddr 192.168.3.8
[u-boot@MINI2440]# setenv gatewayip 198.168.3.1
[u-boot@MINI2440]# setenv serverip 192.168.3.5
[u-boot@MINI2440]# saveenv
Saving Environment to NAND...
Erasing Nand...
Erasing at 0x6000000000002 -- 0% complete.
Writing to Nand... done
雖然mini2440與PC經過網線鏈接起來的,可是PC機上的本地鏈接仍舊是斷開的,這是由於咱們使用的是直連網線,只有等到ping的時候才能夠正常鏈接,而且只能經過mini2440 ping PC,沒法經過PC來ping mini2440。
接下來須要下載TFTP服務軟件,下載地址:http://tftpd32.jounin.net/tftpd32_download.html。請選擇合適的版本下載,安裝以後打開軟件配置,主要是配置Current Directory,這個路徑下主要是存放你須要下載的文件的。同時須要關閉防火牆和殺毒軟件,若是不想關閉它們能夠經過設置容許TFTP經過windows防火牆通訊來避免通訊被阻擋。
好比個人mini2440 IP爲192.168.3.8,PC機的本地鏈接IP爲192.168.3.5。能夠在uboot上經過ping 192.168.3.5來測試網絡是否鏈接好了。若是能夠ping通,那麼會出現:
[u-boot@MINI2440]# ping 192.168.3.5
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
Using dm9000 device
host 192.168.3.5 is alive
而後咱們把須要下載的文件發到剛剛設置的tftpboot目錄下,就可使用下面的方法來下載了,好比咱們要下載linux內核zImage_T35.img:
[u-boot@MINI2440]# tftp zImage_T35.img
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
Using dm9000 device
TFTP from server 192.168.3.5; our IP address is 192.168.3.8
Filename 'zImage_T35.img'.
Load address: 0x30008000
Loading: T #################################################################
#################################################################
#########################
done
Bytes transferred = 2266708 (229654 hex)
這樣就將linux內核鏡像加載到了起始地址爲0x30008000的內存中,而後經過bootm命令就能夠啓動linux,不過前提是你得安裝文件系統,不然會panic。可是若是bootm以後顯示kernel參數錯誤,那麼就是Image格式不對,須要使用下面的命令來轉化:
mkimage -n 'linux-2.6.14' -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008000 -d zImage_T35 zImage_T35.img
若是你須要將Image寫入到nand flash中須要以下的操做:
[u-boot@MINI2440]# nand erase 0x100000 300000
NAND erase: device 0 offs et 0x100000, size 0x300000
Erasing at 0x3e000001800000 -- 0% complete.
OK
[u-boot@MINI2440]# nand write 0x30008000 0x100000 300000
NAND write: device 0 offset 0x100000, size 0x300000
Writing at 0x3e000000020000 -- 100% is complete. 3145728 bytes written: OK
[u-boot@MINI2440]# nand device 0
Device 0: NAND 128MiB 3,3V 8-bit... is now current device
[u-boot@MINI2440]# nboot 30008000 0 0x100000
Loading from NAND 128MiB 3,3V 8-bit, offset 0x100000
Image Name: tekkaman
Created: 2010-03-29 12:59:51 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 2277476 Bytes = 2.2 MB
Load Address: 30008000
Entry Point: 30008040
[u-boot@MINI2440]# bootm 30008000
## Booting kernel from Legacy Image at 30008000 ...
Image Name: tekkaman
Created: 2010-03-29 12:59:51 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 2277476 Bytes = 2.2 MB
Load Address: 30008000
Entry Point: 30008040
Verifying Checksum ... OK
XIP Kernel Image ... OK
OK
Starting kernel ...
若是咱們須要調試的是通常程序,那麼經過tftp下載以後,可使用go 30008000來運行,注意因爲友善之臂提供的代碼入口地址都是0x30000000,因此不能運行,咱們本身編寫的程序入口地址應該設置爲0x30008000.
下面介紹一個簡單的調試方法,由於咱們每次調試代碼都須要不斷的下載新的編譯程序。
1. 首先設置tftp 的Current Directory爲工程生成bin文件的目錄。
2. 設置環境變量bootcmd和bootdelay:
[u-boot@MINI2440]# setenv bootdelay 1
[u-boot@MINI2440]# setenv bootcmd "tftp 2440test.bin;go 0x30008000"
[u-boot@MINI2440]# saveenv
Saving Environment to NAND...
Erasing Nand...
Erasing at 0x6000000000002 -- 0% complete.
Writing to Nand... done
注意2440test.bin爲項目最終生成的bin文件名字,你的項目生成的是什麼名字,這裏就填寫什麼名字。
之後每次你打開mini2440,它就會自動下載最新的bin文件,而且執行它,你就能夠當即看到結果,根本不須要你動手去下載,是否是很方便。
U-Boot 2010.03 (Dec 27 2012 - 06:32:26)
modified by tekkamanninja (tekkamanninja@163.com)
Love Linux forever!!I2C: ready
DRAM: 64 MB
Flash: 2 MB
NAND: 256 MiB
Video: 240x320x16 20kHz 62Hz
In: serial
Out: serial
Err: serial
USB slave is enable!
Net: dm9000
U-Boot 2010.03 (Dec 27 2012 - 06:32:26)
modified by tekkamanninja
(tekkamanninja@163.com)
Love Linux forever!!
Hit any key to stop autoboot: 0
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
Using dm9000 device
TFTP from server 192.168.3.5; our IP address is 192.168.3.8
Filename '2440test.bin'.
Load address: 0x30008000
Loading: T ##########################################
done
Bytes transferred = 613092 (95ae4 hex)
## Starting application at 0x30008000 ...<***********************************************>
SBC2440 Test Program VER1.0
www.arm9.net
Build time is: Jan 08 2013 23:05:30
Image$$RO$$Base = 0x30008000
Image$$RO$$Limit = 0x3003c4fc
Image$$RW$$Base = 0x3003c4fc
Image$$RW$$Limit = 0x300ea2b4
Image$$ZI$$Base = 0x3009dae4
Image$$ZI$$Limit = 0x300ea2b4
<***********************************************>Please select function :
0 : Please input 1-16 to select test
1 : Test PWM
2 : RTC time display
3 : Test ADC
4 : Test interrupt and key scan
5 : Test Touchpanel
6 : Test TFT-LCD or VGA1024x768 module
7 : Test IIC EEPROM, if use QQ2440, please remove the LCD
8 : UDA1341 play music
9 : Test SD Card
10 : Test CMOS Camera
下面提供一些參考連接,但願對你有幫助:
Tekkaman Ninja的博客:http://blog.chinaunix.net/space.php?uid=20543672&do=blog&id=94376
Tekkaman Ninja的Github:https://github.com/tekkamanninja/u-boot-2010.03-tekkaman
ARM9 之家論壇:http://www.arm9home.net/simple/index.php?t3539.html
U-boot官方網站:http://www.denx.de/wiki/U-Boot