開發闆與PC機之間可以進行連接配接的接口通常有四個:序列槽、JTAG、USB、網絡接口。而如今在PC端是沒有JTAG或者接口的,是以可以使用轉接闆轉換為并口或者USB口與PC段相連。
JTAG最初是用來對晶片進行測試的,JTAG測試允許多個器件通過JTAG接口串聯在一起,形成一個JTAG鍊,能實作對各個器件分别測試。如今,JTAG接口還常用于實作ISP(In-System Programmer,在系統程式設計),對FLASH等器件進行程式設計。在2440中,當需要對NOR Flash進行燒寫時,就需要用到JTAG接口進行燒錄軟體,而當軟體是要燒錄到NAND Flash時,使用序列槽與USB接口就可以操作。這裡介紹NOR Flash、NAND Flah與SDRAAM的差別。
ROM和RAM指的都是半導體存儲器,ROM是Read Only Memory的縮寫,RAM是Random Access Memory的縮寫。ROM在系統停止供電的時候仍然可以保持資料,而RAM通常都是在掉電之後就丢失資料,典型的RAM就是計算機的記憶體。
晶片
特點
靜态RAM(Static RAM/SRAM),是目前讀寫最快的儲存設備,但是它也非常昂貴;
RAM
動态RAM(Dynamic RAM/DRAM),DRAM保留資料的時間很短,速度也比SRAM慢,但從價格上來說DRAM相比SRAM要便宜很多;
DDR RAM(Date-Rate RAM)也稱作DDR SDRAM(Synchronous Dynamic RAM),可以在一個時鐘讀寫兩次資料,這樣就使得資料傳輸速度加倍。
目前Flash主要有兩種NOR Flash和NADN Flash。NOR Flash的讀取和SDRAM的讀取是一樣,使用者可以直接運作裝載在NOR FLASH裡面的代碼,這樣可以減少SRAM的容量進而節約了成本。NAND Flash沒有采取記憶體的随機讀取技術,它的讀取是以一次讀取一塊的形式來進行的,通常是一次讀取512個位元組,采用這種技術的Flash比較廉價。使用者不能直接運作NAND Flash上的代碼,是以衆多NAND Flash的開發闆除了使用NAND Flah以外,還有一塊小的NOR Flash來運作啟動代碼。
在2440開發闆中,通常将uboot燒寫在nor flash上作為引導程式,而linux kernel與根檔案系統燒錄在nand flash上,而這些代碼會加載到SDRAM中運作。
一個linux檔案系統的構成可分為硬體、bootloader、核心、根檔案系統四個層次。首先要想硬體可以工作工作,需要有bootloader引導程式,它設定硬體相關參數以及軟體變量,如設定中斷變量、關閉看門狗、初始化序列槽、時鐘等硬體參數,設定堆棧等。要完成這些操作,那麼UBOOT代碼就必須上電就能自動運作,通常将這些代碼燒錄在NOR Flash中,因為NAND Flash無法運作代碼,而linux kernel、 root filesystem則燒錄到nand flash中等待bootloader引導完成加載到SDRAM中運作。
1. 使用J-link燒寫u-boot到Nor Flash
編譯uboot具體操作步驟為:
1、解壓u-boot1.1.6,進入解壓後的目錄
2、打更新檔
3、使用arm-linux-gcc3.4.5編譯器編譯
燒寫uboot:
1、JLink 的 USB 口接到電腦上,JTAG 口用排線和開發闆的 JTAG 口相連, 開發闆設為 Nor Flash 啟動并上電。
2、啟動 J-Flash, 它在“Windows 開始菜單->所有程式->SEGGER”裡面。
3、選擇菜單“File -> Open -> Open Project…”,打開CD光牒裡的 s3c2440.jflash。
4、選擇菜單“Target -> Connect”

5、選擇菜單“File -> Open”,打開要燒寫的二進制檔案,比如 u-boot.bin,并且在“Start address”裡輸入 0。
6、選擇菜單“Target -> Auto”即可自動燒寫。
7、重新開機開發闆,啟動uboot。
2. 使用DNW和序列槽工具CRT燒寫Linux核心和根檔案系統
編譯Linux核心的步驟為:
1、解壓linux2.6.22,進入解壓後的目錄
4、這裡我是用的是TQ2440開發闆,是以韋老師的linux核心源碼不能直接使用在TQ2440開發闆上,需要對LCD和DM9000兩個驅動程式進行修改。
将TQ2440源碼\drivers_and_test\17th_dm9000c\修改好的\dm9dev9000c.c複制到linux-2.6.22.6/drivers/net目錄下;
修改其Makefile:obj-$(CONFIG_DM9000) += dm9dev9000c.o #dm9000.o
将TQ2440源碼drivers_and_test\10th_lcd\4th\lcd.c複制到linux-2.6.22.6/drivers/video目錄下,并修改其Makefile:obj-$(CONFIG_FB_S3C2410) += lcd.o #s3c2410fb.o
5、修改config_ok為.config
<code>book/home/test/1_bare_metal/1_test/linux-2.6.22.6$ cp config_ok .config</code>
6、編譯make uImage,此事可能出現錯誤:
根據提示修改這兩行Makefile:
在makefile中将416行代碼:config %config: scripts_basic outputmakefile FORCE
改為:%config: scripts_basic outputmakefile FORCE
在makefile中将1449行代碼:/ %/: prepare scripts FORCE
改為:%/: prepare scripts FORCE
再次編譯,編譯成功。
7、在序列槽界面輸入k指令下載下傳uImage,使用dnw下載下傳資料。
8、在序列槽界面輸入y指令下載下傳根檔案系統,使用dnw下載下傳資料。
9、啟動開發闆,檢視效果。
3. 使用tftp網絡燒寫Linux核心和根檔案系統
當開發闆中安裝好uboot後,還可以使用網絡tftf下載下傳linux核心與根檔案系統,此時當tftp伺服器為win7時,要保證開發闆與PC機之間可以ping通。這裡我采用開發闆與PC機直接使用網線相連,PC機有線IP為192.168.2.20;開發闆IP為192.168.2.10。
1、PC機tftp端設定,将需要下載下傳的核心與根檔案系統放在伺服器目錄下。
2、開發闆進入uboot指令行界面下載下傳kernel:
tftp 30000000 uImage
mtdpart 檢視分區資訊
nand erase kernel
nand write.jffs2 30000000 kernel
3、下載下傳根檔案系統
tftp 30000000 fs_qtopia.yaffs2
nand erase root
nand write.yaffs 30000000 260000(root分區位址) 2fb6b40(大小)
4、開發闆啟動效果:
4. 使用NFS伺服器挂載核心和根檔案系統
使用NFS下載下傳方法與tftp下載下傳方式,大緻相同,此時要確定開發闆可以和虛拟機ubuntu能ping通。同時要設定虛拟機已經開啟了nfs服務,并設定了挂載點:
1、下載下傳核心
nfs 30000000 192.168.1.123:/work/nfs_root/uImage
2、下載下傳根檔案系統
nfs 30000000 192.168.1.123:/work/nfs_root/fs_qtopia.yaffs2
nand write.yaffs 30000000 26000 2f76b40
本文轉自 夢想成大牛 51CTO部落格,原文連結:http://blog.51cto.com/yinsuifeng/2055965,如需轉載請自行聯系原作者