亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問板塊 發(fā)新帖
查看: 859 | 回復(fù): 0
打印 上一主題 下一主題

移植uboot到ARMer9開發(fā)系統(tǒng)上 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2007-07-13 06:13 |只看該作者 |倒序?yàn)g覽

首先了解ARMer9開發(fā)系統(tǒng)硬件設(shè)計(jì)上和三星原裝SMDK2410之間的區(qū)別。讓uboot在ARMer9開發(fā)系統(tǒng)上跑起來(lái),目前只需要關(guān)注如下
的硬件區(qū)別,解決了下面這個(gè)問題,uboot就可以在ARMer9開發(fā)系統(tǒng)上正常地從串口輸出,進(jìn)入提示符。很多命令都可以使用,當(dāng)然有些命令需要做修
改。

SMDK2410 : nor flash 是AMD的1M的;
ARMer9: 是Intel E28F128J3A, 兩片并聯(lián),一共32M Bytes.
下載一個(gè)uboot-1.1.1.tar.bz2.;
tar jxvf uboot-1.1.1.tar.bz2;
在uboot
目錄board/smdk2410
下的flash.c需要修改。這個(gè)是Flash的驅(qū)動(dòng),如何寫,需要參考E28F128J3A的Datasheet.
這里我們提供一個(gè)我們修改好的flash.c文件,您只需要將這個(gè)文件覆蓋掉board/smdk2410 下的文件即可。
(注意:你要安裝了交叉編譯器才行哦)
修改uboot目錄下的Makefile,將
ifeq ($(ARCH),arm)
CROSS_COMPILE = arm-linux-
endif
修改成
ifeq ($(ARCH),arm)
CROSS_COMPILE = /opt/host/armv4l/bin/armv4l-unknown-linux-
endif
修改processor.h中:
union debug_insn
{
u32 arm;
u16 thumb;
}
修改成:
union debug_insn
{
u32 arm_mode;
u16 thumb_mode;
}
然后配置板子
make smdk2410_config
然后
make
在uboot目錄生成uboot.bin;
通過(guò)sjf2410w程序?qū)boot.bin下載到nor flash中, 地址為0的地方;
串口接在UART0上,uboot的啟動(dòng)信息將輸出。
你將發(fā)現(xiàn)很多命令都可以使用了。uboot果然強(qiáng)大。
關(guān)
于網(wǎng)絡(luò)部分,因?yàn)锳RMer9開發(fā)系統(tǒng)使用也是CS8900A,所以代碼部分幾乎不用做改動(dòng),只需要在
include/configs/smdk2410.h中看看,有沒有定義CONFIG_ETHADDR,CONFIG_IPADDR,
CONFIG_SERVERIP這些宏沒有,如果沒有,請(qǐng)定義好。

#define CONFIG_ETHADDR 00:00:e0:ff:cd:15
#define CONFIG_IPADDR 192.168.0.5
#define CONFIG_SERVERIP 192.168.0.100
就這樣修改一下,網(wǎng)絡(luò)部分功能就通了,哈哈。
可以使用tftpboot命令從tftp服務(wù)器下載程序到系統(tǒng)內(nèi)存中。
#tftpboot 0x33000000 zImage
#bootm 0x33000000
利用uboot引導(dǎo)可執(zhí)行映象的通用方法

uboot源代碼的tools/目錄下有mkimage工具,這個(gè)工具可以用來(lái)制作不壓縮或者壓縮的多種可啟動(dòng)映象文件。
mkimage在制作映象文件的時(shí)候,是在原來(lái)的可執(zhí)行映象文件的前面加上一個(gè)0x40字節(jié)的頭,記錄參數(shù)所指定的信息,這樣uboot才能識(shí)別這個(gè)映象是針對(duì)哪個(gè)CPU體系結(jié)構(gòu)的,哪個(gè)OS的,哪種類型,加載內(nèi)存中的哪個(gè)位置, 入口點(diǎn)在內(nèi)存的那個(gè)位置以及映象名是什么
root@Glym:/tftpboot# ./mkimage
Usage: ./mkimage -l image
-l ==> list image header information
./mkimage -A arch -O os -T type -C comp -a addr -e ep -n name -d data_file[:data_file...] image
-A ==> set architecture to 'arch'
-O ==> set operating system to 'os'
-T ==> set image type to 'type'
-C ==> set compression type 'comp'
-a ==> set load address to 'addr' (hex)
-e ==> set entry point to 'ep' (hex)
-n ==> set image name to 'name'
-d ==> use image data from 'datafile'
-x ==> set XIP (execute in place)
參數(shù)說(shuō)明:
-A 指定CPU的體系結(jié)構(gòu):
取值 表示的體系結(jié)構(gòu)
alpha Alpha
arm A RM
x86 Intel x86
ia64 IA64
mips MIPS
mips64 MIPS 64 Bit
ppc PowerPC
s390 IBM S390
sh SuperH
sparc SPARC
sparc64 SPARC 64 Bit
m68k MC68000
-O 指定操作系統(tǒng)類型,可以取以下值:
openbsd、netbsd、freebsd、4_4bsd、linux、svr4、esix、solaris、irix、sco、dell、ncr、lynxos、vxworks、psos、qnx、u-boot、rtems、artos
-T 指定映象類型,可以取以下值:
standalone、kernel、ramdisk、multi、firmware、script、filesystem
-C 指定映象壓縮方式,可以取以下值:
none 不壓縮
gzip 用gzip的壓縮方式
bzip2 用bzip2的壓縮方式
-a 指定映象在內(nèi)存中的加載地址,映象下載到內(nèi)存中時(shí),要按照用mkimage制作映象時(shí),這個(gè)參數(shù)所指定的地址值來(lái)下載
-e 指定映象運(yùn)行的入口點(diǎn)地址,這個(gè)地址就是-a參數(shù)指定的值加上0x40(因?yàn)榍懊嬗袀(gè)mkimage添加的0x40個(gè)字節(jié)的頭)
-n 指定映象名
-d 指定制作映象的源文件
常用U-BOOT命令介紹
1. ?或者h(yuǎn)elp,得到所有命令列表;
2. help: help usb, 列出USB功能的使用說(shuō)明
3. ping:注:通常只能運(yùn)行uboot的系統(tǒng)PING別的機(jī)器
4. setenv: 設(shè)置環(huán)境變量
setenv serverip 10.36.20.49,設(shè)置TFTP Server的IP地址;
setenv ipaddr 10.36.20.200,設(shè)置IP地址;
setenv bootcmd ‘tftp 32000000 vmlinux; kgo 32000000’,設(shè)置啟動(dòng)命令(實(shí)際上就是一個(gè)腳本);
5. saveenv:在設(shè)置好環(huán)境變量以后, 保存環(huán)境變量值到flash中間;
6. tftpboot:tftpboot 0x800000 vmlinux, 將TFTP Server(IP = 環(huán)境變量中設(shè)置的serverip)中/tftpdroot目錄 下的vmlinux通過(guò)TFTP協(xié)議下載到物理內(nèi)存0x800000開始的地方。
7. kgo:?jiǎn)?dòng)沒有壓縮的linux內(nèi)核,kgo 0x800000
8. bootm:?jiǎn)?dòng)通過(guò)UBOOT TOOLS—— mkimage制作的壓縮LINUX內(nèi)核, bootm 3200000;
9 flinfo:列出flash的信息
10. protect: 對(duì)FLASH進(jìn)行寫保護(hù)或取消寫保護(hù), protect on 1:0-3(就是對(duì)第一塊FLASH的0-3扇區(qū)進(jìn)行保護(hù)),protect off 1:0-3取消寫保護(hù)
11. erase: 刪除FLASH的扇區(qū), erase 1:0-2(就是對(duì)每一塊FLASH的0-2扇區(qū)進(jìn)行刪除)
12. cp: 將內(nèi)存中數(shù)據(jù)燒寫到Flash, cp 0x800000 0xc0000 0x40000(把內(nèi)存中0x800000開始的0x40000字節(jié)復(fù)制到0xc0000處);
13. mw: 對(duì)RAM中的內(nèi)容進(jìn)行寫操作, mw 32000000 ff 10000(把內(nèi)存0x32000000開始的0x10000字節(jié)設(shè)為0xFF);
14. md: 顯示RAM中的內(nèi)容, md 0x800000;
15. loadb: 準(zhǔn)備用 KERMIT協(xié)議接收來(lái)自kermit或超級(jí)終端傳送的文件。
16. nfs: nfs 32000000 192.168.0.2:aa.txt , 把192.168.0.2(LINUX 的NFS文件系統(tǒng))中的NFS文件系統(tǒng)中的aa.txt 讀入內(nèi)存0x32000000處。
17. fatls:列出DOS FAT文件系統(tǒng), 如:fatls usb 0列出第一塊U盤中的文件
18. fatload: 讀入FAT中的一個(gè)文件,如:fatload usb 0:0 32000000 aa.txt
19. usb相關(guān)的命令:
usb start: 起動(dòng)usb 功能
usb info: 列出設(shè)備
usb scan: 掃描usb storage(u 盤)設(shè)備
Uboot對(duì)SMDK2410板的NAND Flash初始化部分沒有寫,

即lib_arm/board.c中的start_armboot函數(shù)中有這么一句:
#if (CONFIG_COMMANDS & CFG_CMD_NAND)
puts ("NAND:");
nand_init(); /* go init the NAND */
#endif
但是在board/smdk2410目錄下任何源文件中都沒有定義nand_init這個(gè)函數(shù)。
所以需要我們補(bǔ)充這個(gè)函數(shù)以及這個(gè)函數(shù)涉及的底層操作。
我們可以仿照VCMA9板的nand_init函數(shù),VCMA9板是一款用S3C2410做CPU的DEMO Board,因此這部分操作和SMDK2410 Demo Board很相似。大部分代碼可以照搬。
首先將board/mpl/vcma9/vcma9.c中下面代碼拷貝到board/smdk2410/ smdk2410.c中來(lái)。
/*
* NAND flash initialization.
*/
#if (CONFIG_COMMANDS & CFG_CMD_NAND)
extern ulong
nand_probe(ulong physadr);
static inline void NF_Reset(void)
{
int i;
NF_SetCE(NFCE_LOW);
NF_Cmd(0xFF); /* reset command */
for(i = 0; i NFCONF
=
(1> 20);
}
#endif
再將board/mpl/vcma9/vcma9.h中下面代碼拷貝到board/smdk2410/ smdk2410.c中來(lái)。
#if (CONFIG_COMMANDS & CFG_CMD_NAND)
typedef enum {
NFCE_LOW,
NFCE_HIGH
} NFCE_STATE;

static inline void NF_Conf(u16 conf)
{
S3C2410_NAND * const nand = S3C2410_GetBase_NAND();
nand->NFCONF = conf;
}
static inline void NF_Cmd(u8 cmd)
{
S3C2410_NAND * const nand = S3C2410_GetBase_NAND();
nand->NFCMD = cmd;
}
static inline void NF_CmdW(u8 cmd)
{
NF_Cmd(cmd);
udelay(1);
}
static inline void NF_Addr(u8 addr)
{
S3C2410_NAND * const nand = S3C2410_GetBase_NAND();
nand->NFADDR = addr;
}
static inline void NF_SetCE(NFCE_STATE s)
{
S3C2410_NAND * const nand = S3C2410_GetBase_NAND();
switch (s) {
case NFCE_LOW:
nand->NFCONF &= ~(1NFCONF |= (1NFSTAT & (1NFDATA = data;
}
static inline u8 NF_Read(void)
{
S3C2410_NAND * const nand = S3C2410_GetBase_NAND();
return(nand->NFDATA);
}
static inline void NF_Init_ECC(void)
{
S3C2410_NAND * const nand = S3C2410_GetBase_NAND();
nand->NFCONF |= (1NFECC);
}
#endif
再將include/configs/vcma.9中下面代碼拷貝到include/configs/smdk2410.h中來(lái)。
/*-----------------------------------------------------------------------
* NAND flash settings
*/
#if (CONFIG_COMMANDS & CFG_CMD_NAND)
#define CFG_MAX_NAND_DEVICE 1 /* Max number of NAND devices */
#define SECTORSIZE 512
#define ADDR_COLUMN 1
#define ADDR_PAGE 2
#define ADDR_COLUMN_PAGE 3
#define NAND_ChipID_UNKNOWN 0x00
#define NAND_MAX_FLOORS 1
#define NAND_MAX_CHIPS 1
#define NAND_WAIT_READY(nand) NF_WaitRB()
#define NAND_DISABLE_CE(nand) NF_SetCE(NFCE_HIGH)
#define NAND_ENABLE_CE(nand) NF_SetCE(NFCE_LOW)
#define WRITE_NAND_COMMAND(d, adr) NF_Cmd(d)
#define WRITE_NAND_COMMANDW(d, adr) NF_CmdW(d)
#define WRITE_NAND_ADDRESS(d, adr) NF_Addr(d)
#define WRITE_NAND(d, adr) NF_Write(d)
#define READ_NAND(adr) NF_Read()
/* the following functions are NOP's because S3C24X0 handles this in hardware */
#define NAND_CTL_CLRALE(nandptr)
#define NAND_CTL_SETALE(nandptr)
#define NAND_CTL_CLRCLE(nandptr)
#define NAND_CTL_SETCLE(nandptr)
#define CONFIG_MTD_NAND_VERIFY_WRITE 1
#define CONFIG_MTD_NAND_ECC_JFFS2 1
#endif /* CONFIG_COMMANDS & CFG_CMD_NAND */
在include/configs/smdk2410.h中下面命令定義部分將CFG_CMD_NAND開關(guān)放開。
/***********************************************************
* Command definition
***********************************************************/
#define CONFIG_COMMANDS \
(CONFIG_CMD_DFL | \
CFG_CMD_CACHE | \
/*CFG_CMD_NAND |*/ \
/*CFG_CMD_EEPROM |*/ \
/*CFG_CMD_I2C |*/ \
/*CFG_CMD_USB |*/ \
CFG_CMD_REGINFO | \
CFG_CMD_DATE | \
CFG_CMD_ELF)
U-BOOT源代碼目錄結(jié)構(gòu)介紹

board:和一些已有開發(fā)板有關(guān)的文件,比如Makefile和u-boot.lds等都和具體開發(fā)板的硬件和地址分配有關(guān)。
common:與體系結(jié)構(gòu)無(wú)關(guān)的文件,實(shí)現(xiàn)各種命令的C文件。
cpu:
CPU相關(guān)文件,其中的子目錄都是以U-BOOT所支持的CPU為名,比如有子目錄arm926ejs、mips、mpc8260和nios等,每個(gè)特定
的子目錄中都包括cpu.c和interrupt.c,start.S。其中cpu.c初始化CPU、設(shè)置指令Cache和數(shù)據(jù)Cache等;
interrupt.c設(shè)置系統(tǒng)的各種中斷和異常,比如快速中斷、開關(guān)中斷、時(shí)鐘中斷、軟件中斷、預(yù)取中止和未定義指令等;start.S是U-BOOT
啟動(dòng)時(shí)執(zhí)行的第一個(gè)文件,它主要是設(shè)置系統(tǒng)堆棧和工作方式,為進(jìn)入C程序奠定基礎(chǔ)。
disk:disk驅(qū)動(dòng)的分區(qū)處理代碼。
doc:uboot移植的技術(shù)支持文檔。
drivers:通用設(shè)備驅(qū)動(dòng)程序,比如各種網(wǎng)卡、支持CFI的Flash、串口和USB總線等。
fs:支持文件系統(tǒng)的文件,U-BOOT現(xiàn)在支持cramfs、fat、fdos、jffs2和registerfs。
include:頭文件,還有對(duì)各種硬件平臺(tái)支持的匯編文件,系統(tǒng)的配置文件和對(duì)文件系統(tǒng)支持的文件。
net:與網(wǎng)絡(luò)有關(guān)的代碼,BOOTP協(xié)議、TFTP協(xié)議、RARP協(xié)議和NFS文件系統(tǒng)的實(shí)現(xiàn)。
lib_arm:與ARM體系結(jié)構(gòu)相關(guān)的代碼。
lib_generic:與體系結(jié)構(gòu)無(wú)關(guān)的通用例程的代碼。
tools:創(chuàng)建S-Record格式文件 和U-BOOT images的工具的源代碼。
U-BOOT的特點(diǎn)
U-BOOT支持SCC/FEC以太網(wǎng)、OOTP/TFTP引導(dǎo)、IP和MAC的預(yù)置功能, 這方面可能和其它BootLoader(如BLOB、RedBoot、vivi等)類似。但U-BOOT還具有一些特有的功能。
◆ 在線讀寫Flash、DOC、IDE、IIC、EEROM、RTC,其它的BootLoader根本不支持IDE和DOC的在線讀寫。
◆ 支持串行口kermit和S-record下載代碼,U-BOOT本身的工具可以把ELF32格式的可執(zhí)行文件轉(zhuǎn)換成為 S-record格式,直接從串口下載并執(zhí)行。
◆ 識(shí)別二進(jìn)制、ELF32、uImage格式的Image,對(duì)Linux引導(dǎo)有特別的支持。U-BOOT對(duì)Linux 內(nèi)核進(jìn)一步封裝為uImage。封裝如下:
#{CROSS_COMPILE}-objcopy -O binary -R.note -R.comment -S vmlinux \ linux.bin
#gzip -9 linux.bin
#tools/mkimage -A arm -O linux -T kernel -C gzip -a 0xc0008000 –e 0xc0008000 -n “Linux-2.4.20” -d linux.bin.gz /tftpboot/uImage

在Linux內(nèi)核鏡像vmLinux前添加了一個(gè)0x40個(gè)字節(jié)的特殊頭,這個(gè)頭在include/image.h中定義,包括目標(biāo)操作系統(tǒng)的種類(比如
Linux,VxWorks等)、目標(biāo)CPU的體系機(jī)構(gòu)(比如ARM、PowerPC等)、映像文件壓縮類型(比如gzip、bzip2等)、加載地址、
入口地址、映像名稱和映像的生成時(shí)間。當(dāng)系統(tǒng)引導(dǎo)時(shí),U-BOOT會(huì)對(duì)這個(gè)文件頭進(jìn)行CRC校驗(yàn),如果正確,才會(huì)跳到內(nèi)核執(zhí)行。如下所示:
ARMer9# bootm 0xc1000000
## Checking Image at 0xc100000 ...
Image Name: Linux-2.4.20
Created: 2004-07-02 22:10:11 UTC
Image Type: ARM Linux Kernel Image (gzip compressed)
Data Size: 550196 Bytes = 537 kB = 0.55MB
Load Address: 0xc0008000
Entry Point: 0xc0008000
Verifying Checksum ... OK
Uncompressing Kernel Image ……… OK
◆ 單任務(wù)軟件運(yùn)行環(huán)境。U-BOOT可以動(dòng)態(tài)加載和運(yùn)行獨(dú)立的應(yīng)用程序,這些獨(dú)立的應(yīng)用程序可以利用U-BOOT控制臺(tái)的I/O函數(shù)、內(nèi)存申請(qǐng)和中斷服務(wù)等。這些應(yīng)用程序還可以在沒有操作系統(tǒng)的情況下運(yùn)行,是測(cè)試硬件系統(tǒng)很好的工具。
◆ 監(jiān)控(minitor)命令集:讀寫I/O,內(nèi)存,寄存器、內(nèi)存、外設(shè)測(cè)試功能等。
◆ 腳本語(yǔ)言支持(類似BASH腳本)。利用U-BOOT中的autoscr命令,可以在U-BOOT中運(yùn)行“腳本”。首先在文本文件中輸入需要執(zhí)行的命令,然后用tools/mkimage封裝,然后下載到開發(fā)板上,用autoscr執(zhí)行就可以了。
① 編輯如下的腳本example.script。
echo
echo Network Configuration:
echo ----------------------
echo Target:
printenv ipaddr hostname
echo
echo Server:
printenv serverip rootpath
echo
② 用tools/mkimage對(duì)腳本進(jìn)行封裝。
# mkimage -A ARM -O linux -T script -C none -a 0 -e 0 -n "autoscr example script" -d example.script /tftpboot/example.img
Image Name: autoscr example script
Created: Wes Sep 8 01:15:02 2004
Image Type: ARM Linux Script (uncompressed)
Data Size: 157 Bytes = 0.15 kB = 0.00 MB
Load Address: 0x00000000
Entry Point: 0x00000000
Contents:
Image 0: 149 Bytes = 0 kB = 0 MB
③ 在U-BOOT中加載并執(zhí)行這個(gè)腳本。
ARMer9# tftp 100000 /tftpboot/example.img
ARP broadcast 1
TFTP from server 10.0.0.2; our IP address is 10.0.0.99
Filename '/tftpboot/TQM860L/example.img'.
Load address: 0x100000
Loading: #
done
Bytes transferred = 221 (dd hex)
ARMer9# autoscr 100000
## Executing script at 00100000
Network Configuration:
----------------------
Target:
ipaddr=10.0.0.99
hostname=arm
Server:
serverip=10.0.0.2
rootpath=/nfsroot
ARMer9#
◆ 支持WatchDog、LCD logo和狀態(tài)指示功能等。如果系統(tǒng)支持splash screen,U-BOOT啟動(dòng)時(shí),會(huì)把這個(gè)圖像顯示到LCD上,給用戶更友好的感覺。
◆ 支持MTD和文件系統(tǒng)。U-BOOT作為一種強(qiáng)大的BootLoader,它不僅支持MTD,而且可以在MTD基礎(chǔ)上實(shí)現(xiàn)多種文件系統(tǒng),比如cramfs、fat和jffs2等。
◆ 支持中斷。由于傳統(tǒng)的BootLoader都分為stage1和stage2,所以在stage2中添加中斷處理服務(wù)十分困難,比如BLOB;而U-BOOT是把兩個(gè)部分放到了一起,所以添加中斷服務(wù)程序就很方便。
◆ 詳細(xì)的開發(fā)文檔。由于大多數(shù)BootLoader都是開源項(xiàng)目,所以文檔都不是很充分。U-BOOT的維護(hù)人員意識(shí)到了這個(gè)問題,充分記錄了開發(fā)文檔,所以它的移植要比BLOB等缺少文檔的BootLoader方便。
編譯uboot的時(shí)候,在processor.h中出錯(cuò)
解決辦法:

修改processor.h中:
union debug_insn
{
u32 arm;
u16 thumb;
}
修改成:
union debug_insn
{
u32 arm_mode;
u16 thumb_mode;
}
原文地址:http://blog.csdn.net/andyzx/archive/2006/04/19/668826.aspx


本文來(lái)自ChinaUnix博客,如果查看原文請(qǐng)點(diǎn):http://blog.chinaunix.net/u/31996/showart_338900.html
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP