您当前的位置:五五电子网电子知识单片机-工控设备ARM单片机详细讲解 移植Uboot到ARMer9开发系统上 正文
详细讲解 移植Uboot到ARMer9开发系统上

详细讲解 移植Uboot到ARMer9开发系统上

点击数:7136 次   录入时间:03-04 11:59:12   整理:http://www.55dianzi.com   ARM单片机
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 &= ~(1<<11);

break;


case NFCE_HIGH:

nand->NFCONF |= (1<<11);

break;

}

}


static inline void NF_WaitRB(void)

{

S3C2410_NAND * const nand = S3C2410_GetBase_NAND();


while (!(nand->NFSTAT & (1<<0)));

}


static inline void NF_Write(u8 data)

{

S3C2410_NAND * const nand = S3C2410_GetBase_NAND();


nand->NFDATA = 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 |= (1<<12);

}


static inline u32 NF_Read_ECC(void)

{

S3C2410_NAND * const nand = S3C2410_GetBase_NAND();


return(nand->NFECC);

}


#endif


再将include/configs/vcma.9中下面代码拷贝到include/configs/smdk2410.h中来。


/*-----------------------------------------------------------------------

* 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开关放开。


/***********************************************************

* 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源代码目录结构介绍


board:和一些已有开发板有关的文件,比如Makefile和u-boot.lds等都和具体开发板的硬件和地址分配有关。

common:与体系结构无关的文件,实现各种命令的C文件。

cpu: CPU相关文件,其中的子目录都是以U-BOOT所支持的CPU为名,比如有子目录arm926ejs、mips、mpc8260和nios等,每个特定的子目录中都包括cpu.c和interrupt.c,start.S。其中cpu.c初始化CPU、设置指令Cache和数据Cache等; interrupt.c设置系统的各种中断和异常,比如快速中断、开关中断、时钟中断、软件中断、预取中止和未定义指令等;start.S是U-BOOT 启动时执行的第一个文件,它主要是设置系统堆栈和工作方式,为进入C程序奠定基础。

disk:disk驱动的分区处理代码。

doc:uboot移植的技术支持文档。

drivers:通用设备驱动程序,比如各种网卡、支持CFI的Flash、串口和USB总线等。

fs:支持文件系统的文件,U-BOOT现在支持cramfs、fat、fdos、jffs2和registerfs。

include:头文件,还有对各种硬件平台支持的汇编文件,系统的配置文件和对文件系统支持的文件。

net:与网络有关的代码,BOOTP协议、TFTP协议、RARP协议和NFS文件系统的实现。

lib_arm:与ARM体系结构相关的代码。

lib_generic:与体系结构无关的通用例程的代码。

tools:创建S-Record格式文件 和U-BOOT images的工具的源代码。


U-BOOT的特点


U-BOOT支持SCC/FEC以太网、OOTP/TFTP引导、IP和MAC的预置功能, 这方面可能和其它BootLoader(如BLOB、RedBoot、vivi等)类似。但U-BOOT还具有一些特有的功能。


◆ 在线读写Flash、DOC、IDE、IIC、EEROM、RTC,其它的BootLoader根本不支持IDE和DOC的在线读写。

◆ 支持串行口kermit和S-record下载代码,U-BOOT本身的工具可以把ELF32格式的可执行文件转换成为 S-record格式,直接从串口下载并执行。

◆ 识别二进制、ELF32、uImage格式的Image,对Linux引导有特别的支持。U-BOOT对Linux 内核进一步封装为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内核镜像vmLinux前添加了一个0x40个字节的特殊头,这个头在include/image.h中定义,包括目标操作系统的种类(比如 Linux,VxWorks等)、目标CPU的体系机构(比如ARM、PowerPC等)、映像文件压缩类型(比如gzip、bzip2等)、加载地址、入口地址、映像名称和映像的生成时间。当系统引导时,U-BOOT会对这个文件头进行CRC校验,如果正确,才会跳到内核执行。如下所示:

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

◆ 单任务软件运行环境。U-BOOT可以动态加载和运行独立的应用程序,这些独立的应用程序可以利用U-BOOT控制台的I/O函数、内存申请和中断服务等。这些应用程序还可以在没有操作系统的情况下运行,是测试硬件系统很好的工具。

◆ 监控(minitor)命令集:读写I/O,内存,寄存器、内存、外设测试功能等。

◆ 脚本语言支持(类似BASH脚本)。利用U-BOOT中的autoscr命令,可以在U-BOOT中运行“脚本”。首先在文本文件中输入需要执行的命令,然后用tools/mkimage封装,然后下载到开发板上,用autoscr执行就可以了。

① 编辑如下的脚本example.script。

echo

echo Network Configuration:

echo ----------------------

echo Target:

printenv ipaddr hostname

echo

echo Server:

printenv serverip rootpath

echo


② 用tools/mkimage对脚本进行封装。

# 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中加载并执行这个脚本。


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:

上一页  [1] [2] [3]  下一页


本文关键字:开发  ARM单片机单片机-工控设备 - ARM单片机

《详细讲解 移植Uboot到ARMer9开发系统上》相关文章>>>