1. 程式人生 > >arm9+linux fl2440 第一次開機燒錄

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
[[email protected]]#
[[email protected]]#

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

此時u-boot就在記憶體中執行起來了,然後要讓u-boot.bin 檔案燒到nandflash上,讓其能夠直接啟動, 在這之前的刪除之前nandflash上的資料,相當於格式化系統盤。

[[email protected]]# nand scrub

然後執行tftpd32.exe通過網路將檔案下載到u-boot上

[[email protected]]# set ipaddr 192.168.1.244

[[email protected]]# 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核心

[[email protected]]# set bootargs 'console=ttyS0,115200 mem=64M rw loglevel=7'
[[email protected]]# set bootcmd 'nand read 30008000 100000 f00000;bootm 30008000'.

[[email protected]]# 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開始

http://img.my.csdn.net/uploads/9425_130970411215O5.jpg

在開發板中,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

相關推薦

arm9+linux fl2440 第一開機

一、燒錄相關軟體下載 USB轉串列埠相關晶片驅動  :  CH341SER.ZIP J-link驅動             :  Setup_JLinkARM_V410i.exe windows下t

第一開機初始化指示燈

efi 一個 mage line 問題 復制 str image bytes 1.LK中讀寫oem分區中的特殊字符串 2.LK傳遞kernel cmdline參數firstboot, 3.kernel解析cmdline參數,通過判斷firstboot=來判斷是否是第一次開機

為什麽WIN7第一開機冷啟動QQ未響應?WIN10就沒事?

是什麽 真煩 聊天 service 筆記 pac 官網 bsp ros 為什麽WIN7第一次開機冷啟動QQ未響應?WIN10就沒事? http://bbs.wuyou.net/forum.php?mod=viewthread&tid=409516&extr

MTK功能機禁止第一開機屏幕校準和啟動藍牙

esc light efault defined data script 方便 class ram 參考文件: Bluetooth.res <CACHEDATA type="byte" id="NVRAM_BT_POWER_STATUS" restore_flag=

Android 原始碼配置MTK log的第一開機預設開啟

1. Android 原始碼配置MTK log的開啟 device\mediatek\common\mtklog mtklog-config-basic-eng.prop mtklog-config-

加入GMS包第一開機預設WiFi開啟

frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java --- a/alps/frameworks/base/services/core/java/com/an

Linux第一使用MySQL資料庫,關於密碼的設定

一、檢視資料庫是否執行     在終端下輸入:service mysqld status  檢視MySQL狀態,看看是否執行。      沒有執行的話就輸入:service mysqld start  

arm9+linux fl2440之按鍵驅動 plat_button.c

        if( result )         {             result = -EBUSY;             goto ERROR1;         }     }     return 0; ERROR1:      kfree((unsigned char *)pdev

arm9+linux fl2440 實現RT3070無線網絡卡AP模式並使開發板接入Wifi上網

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

arm9+linux fl2440 的編譯驅動時遇到的問題

出現的問題:      make -C /lib/modules/`uname -r`/build M=`pwd` modules      make: *** /lib/modules/2.6.32-573.el6.x86_64/build: No such file o

arm9+linux fl2440 GPS 資料採集和處理

=======================================================================                                            主機作業系統:centos 6.7    

android修改系統第一開機時間

在settings中有個系統時間,顯示是1970年1月1日 客戶要求改成2018年1月1日 修改了SystemServer的    private static final long EARLIEST_SUPPORTED_TIME = 1514736000000l;//86

樹莓派第一開機的使用

1、使用Win32DiskImager燒寫完系統到sd卡後,開啟sd卡,新建一個名為ssh空白檔案2、使用putty連線樹莓派    login as: pi        password : raspberry3、更新系統軟體sudo apt-get installsud

針對於谷歌開源串列埠專案(SerialDemo)第一開機不能收到資料解決方法

             最近一段時間一直在調串列埠,公司的要求是在後臺能一直監聽資料的變化,毫無疑問,首先想到的就是監聽開機廣播去啟動一個service,在service裡面去做串列埠的初始化工作以及接收處理資料,這樣做完了以後就發現一個比較嚴重的問題,在每次開機的時

Linux第一練習題

顯示 第一次 當前 日期 href com target 今天 lan 1、顯示當前時間,格式:2016-06-18 10:20:30 ? date +“%F %T” 2、顯示前天是星期幾 ? date +%A 或者 date +%w 3、設置當前日期

java web項目部署在linux系統出現第一高延遲的問題

inux 重要 系統 隨機 需要 .so lib 出現 初始化 今天記錄一下之前遇到的問題:項目部署在window登錄能很快完成,部署到linux後,第一次登錄過程變得很慢。通過查看系統日誌,發現時間主要消耗在了創建session,並且定位到是SecureRandom的初始

做一個“有思想的插排”--第一程式

前一段時間有點事i,所以沒有更新文章,今天再更新兩篇,把下載部分更新完成。 第一次下載程式 燒錄軟體 上一篇介紹了韌體檔案的編譯生成,現在大家資料夾裡就會有一個編譯完成的檔案,共本次下載。 開啟ESPFlashDownloadTool_v3.6.4軟體,選擇ESP8266下載

初學Jmeter的摘抄學習總結----------第一試水badboy制並用jmeter打開

結束 希望 log png 我只 直接 初學 查看 adb 哈哈哈哈哈,跟著我的初學者福音學習遇到了問題,蠢笨如我,badboy錄了個亂七八糟的腳本然後用jmeter打開跟博主的頁面怎麽也對不上,尷尬,然後重新百度了一下badboy怎麽錄制腳本,因為只想簡單掌握,所以bad

一周第一課(10月16日)安裝linux

一周第一次課(10月16日)安裝linux學習之初:學習課程的目的什麽 (提升自己拿高薪)學習完課程做什麽職位(系統運維)學習完課程在哪個城市發展(鄭州)1給自己設定目標:何時學完:(10月16日到2月16日)何時跳槽第一份薪酬多少一年後多少薪酬 兩年後多少薪酬2,學習方法要預習和復習課程做到當日事當日畢養

Linux命令行樹莓派鏡像至SD卡

mount 問題 而不是 使用 index fun pkill contain 一切都 首先下載鏡像壓縮包 驗證壓縮包的未被串改 1 sha1sum 2013-09-25-wheezy-raspbian.zip 對此命令的輸出結果和官網給出的