歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux技術

arm9+linux fl2440 第一次開機燒錄

一、燒錄相關軟件下載

USB轉串口相關芯片驅動 : CH341SER.ZIP

J-link驅動 : Setup_JLinkARM_V410i.exe

windows下tftp服務器工具: tftpd32.exe

注意:

1, 只有在bootloader階段才能使用j-link下載調試,一旦Linux運行起來後,j-link就不能再使用了。

2, 如果開發板上沒有出廠時的wince系統,就可以跳過前面的擦除出廠系統自帶bootloader的過程,直接使用j-link下載bootstrap程序並燒錄u-boot

3,所有的flash都只能由1 write成0,不能由0 write成1; 如果要從0變為1,只能erase; 所以在往flash寫數據之前,必須先擦除要寫的地址空間;

燒錄文件說明:

--------------------

bootstrap-s3c2440.bin

bootstrap文件是郭工用匯編寫的一段代碼,主要用來初始化CPU外部的SDRAM;在燒錄時,該程序需要使用j-link下載到0x0(CPU內部SRAM)地址上去運行,另外此程序不需要燒錄到Nandflash上。

u-boot-s3c2440.bin

--------------------

u-boot就相當於電腦的BIOS程序,該程序用來燒錄/啟動Linux系統等。在運行完bootstrap後,我們需要使用j-link將它加載到0x33f80000(CPU外部SDRAM)中去運行,當他在內存中運行起來後,再使用nand write命令將他燒錄到nandflash的0地址上去;

linuxrom-s3c2440.bin

--------------------

linuxrom是linux系統文件,我們需要在u-boot運行時,使用tftp命令下載到SDRAM的0x30008000地址上,然後再使用nand write命令將其燒錄到nandflash的0x100000地址上,記得flash再寫之前一定要先使用nand erase命令擦除。

二、連接串口和用j-link燒寫程序

1,在安裝完USB轉串口驅動後,然後右擊我的電腦,打開設備管理器,在端口的地方可以看到USB轉串口的串口號(我的是COM8)

2,然後secureCRT如下設置,點擊連接

然後就可以看到select Menu,接下來選擇6,再選擇0,然後y,這樣就干掉了開發板的出場設置,接下來用jlink燒寫我們自己的程序。

3,如果成功安裝了jlink 工具的話,我們就能夠運行這個j-link commander,然後按如下步驟來燒寫

j-link加載u-boot命令:(j-link是可以直接操作CPU以及CPU內部的SRAM)

--------------------

h 停止CPU中正在執行的程序,如果沒有停下,可以多按幾次h

speed 12000 設置J-link調試速度為12M

loadbin loadbin E:\bootfile\bootstrap-s3c2440.bin 0 加載bootstrap程序到CPU內部的4K SRAM中運行

setpc 0 讓PC寄存器指向SRAM的起始地址,該地址放的是剛才下載的bootstrap程序

g 開始執行bootstrap程序,該程序用來初始化外部擴展的64M SDRAM,地址空間為0x3000 0000~(0x3000 0000+64M)

h 停止bootstrap程序的執行,如果沒有停下,可以多按幾次h

loadbin E:\fl2440_bin\u-boot-s3c2440.bin 0x33f80000 將u-boot加載到SDRAM的0x33f80000

setpc 0x33f80000 使PC寄存器指向0x33f80000,即u-boot程序的第一條代碼

g 開始執行u-boot程序

4,燒寫完之後,會出現下面的運行界面,

U-Boot 2010.09 (Jan 26 2016 - 10:34:01)

DRAM: 64 MiB

NAND: 256 MiB

In: serial

Out: serial

Err: serial

Net: dm9000

Hit any key to stop autoboot: 0

[fl2440@shaocongshuai]#

[fl2440@shaocongshuai]#

三、u-boot模式下將程序燒寫進nandflash

此時u-boot就在內存中運行起來了,然後要讓u-boot.bin 文件燒到nandflash上,讓其能夠直接啟動, 在這之前的刪除之前nandflash上的數據,相當於格式化系統盤。

[fl2440@shaocongshuai]# nand scrub

然後運行tftpd32.exe通過網絡將文件下載到u-boot上

[fl2440@shaocongshuai]# set ipaddr 192.168.1.244

[fl2440@shaocongshuai]# set serverip 192.168.1.93

I. 設置u-boot環境變量:

-----

set ethaddr 設置fl2440開發板上的u-boot程序中的MAC地址

set ipaddr 設置fl2440開發板上的u-boot程序中的IP地址

set serverip 指定tftp下載時使用的tftp服務器的IP地址

save 保存所設置的環境變量

reset u-boot環境下的重啟

注意:

不管怎麼樣,serverip和ipaddr 必須處在同一網段內.

1.如果是網線連接的是無線路由器的LAN口,則serverip是linux下搭建的tftp服務器的ip

2.如果是用的本地連接,則serverip是本地連接手動設置的ipv4的ip(只要是私有ip),網關、dns可以不設置(處在同一局域網內)。本地連接時ipv4的ip(也就是serverip)設置必須是手動設置,不能dhcp,防止與pc的無線網路發生沖突。而且本地連接的網卡默認是關閉的,只有下載是才會使能。windows下的tftpd的server interface只有在下載是才會顯示serverip.

II. 下載並燒錄u-boot程序:

-----

tftp 30008000 u-boot-s3c2440.bin 將u-boot臨時下載到SDRAM的30008000地址

nand erase 0 100000  將nandflash的0~1M的分區擦除,該分區是用來存放u-boot程序的;

nand write 30008000 0 ${filesize} 將剛下載到SDRAM 30008000地址上的u-boot寫到nandflash的0地址偏移處,大小為下載的U-boot文件大小;

III. 下載並燒錄linux系統:

-----

tftp 300008000 linuxrom-s3c2440.bin 將linux系統程序臨時下載到SDRAM的30008000地址

nand erase 100000 F00000  將nandflash的1M~16M的分區(總共15M)擦除,該分區是用來存放linux系統的;

nand write 30008000 100000 ${filesize} 將剛下載到SDRAM 30008000地址上的linux系統寫到nandflash的1M地址偏移處,大小為下載的linux系統文件大小;

四、設置環境變量讓系統一上電後自動加載Linux內核

[fl2440@shaocongshuai]# set bootargs 'console=ttyS0,115200 mem=64M rw loglevel=7'

[fl2440@shaocongshuai]# set bootcmd 'nand read 30008000 100000 f00000;bootm 30008000'.

[fl2440@shaocongshuai]# pri

baudrate=115200

ethaddr=08:00:3e:93:0a:5b

ipaddr=192.168.1.244

serverip=192.168.1.93

netmask=255.255.255.0

ethact=dm9000

bkr=tftp 30008000 linuxrom-s3c2440.bin;bootm 30008000

bootdelay=3

stdin=serial

stdout=serial

stderr=serial

bootargs=console=ttyS0,115200 mem=64M rw loglevel=7

bootcmd=nand read 30008000 100000 f00000;bootm 30008000

Environment size: 336/131068 bytes

附上:

ARM CPU: Samsung S3C2440(ARM920T, ARMv4t)

RAM:

SRAM (CPU片內的SRAM,只有4K) --NGCS0(0x0000 0000~+4K)

SDRAM (外擴的32M*2=64M SDRAM, Samsung K4S561632C-TC75) --NGCS6(0x3000 0000~+64M)

DDRAM (NC)

Flash:

Nandflash (Samsung 256MB*1 K9F2G08)

Norflash (NGCS0 --)

內存32MB/4個Bank = 一個bank 8MB

K4S561632C 總共有13行,9列

訪問時,先通過addr0~addr12給行地址,選定相應行;

再通過addr0~addr8 給列地址

SDRAM單片是16位的數據線(DQ0~DQ15)

+-+-+-+-+

+-+-+-+-+

+-+-+-+-+

+-+-+-+-+

13*9=2^22=4MB 一次是讀16個位(即2個字節),總共尋址8MB

L(Lower)DQM和U(Upper)DQM負責選擇低字節還是高字節給CPU

BA0~BA1這兩個線是用來控制究竟選中SDRAM裡的哪一個Bank

CPU是否選中SDRAM工作,是由SDRAM的NSCS這個引腳決定的,原理圖

上他接到了CPU的NGCS6上,所以SDRAM的地址線空間是從0x3000 0000開始

在開發板中,SDRAM連接到內存控制器的Bank6中,它的開始內存地址是0x30000000,大小為64M,即0x20000000。 ARM Linux kernel將SDRAM的開始地址定義為PHYS_OFFSET。經bootloader加載kernel並由自解壓部分代碼運行後,最終kernel被放置到KERNEL_RAM_PADDR(=PHYS_OFFSET

+ TEXT_OFFSET,即0x30008000)地址上的一段內存,經此放置後,kernel代碼以後均不會被移動。

在board/samsung/smdk2410/config.mk文件中

TEXT_BASE = 0x33F80000

Copyright © Linux教程網 All Rights Reserved