六、uboot2010.09移植
2014-11-28 15:49
183 查看
根据前面的讲解,可参考uboot移植第二篇的最后,
总结:从以上过程可以看出,如果要在如果要在board目录下新建一个开发板<board_name> 的目录,或着在board目录的子目录下新建一个开发板<board_name> 的目录,需要在board.cfg配置文件中添加相应的信息,在#include/configs目录下也要建立一个文件<board_name.h>,里面存放的就是开发板board_name的配置信息。
那么我们开始移植uboot2010.09
1、cd uboot-2010.09
2、在board/samsung目录下建立目录:mkdir board/samsung/mini2440
3、cp board/samsung/smdk2410/*
board/samsung/mini2440/
4、mv board/samsung/mini2440/smdk2410.c board/samsung/mini2440/mini2440.c
5、cp include/configs/smdk2410.h include/configs/mini2440.h
6、gedit board/samsung/mini2440/Makefile:smdk2410.o->mini2440.o
7、gedit boards.cfg:添加一行: mini2440 arm arm920t - samsung s3c24x0
8、vim Makefile:在#set default to nothing for native builds这行的上面添加一句
CROSS_COMPILE=arm-lwm-linux-gnueabi- //这个根据自己的交叉编译链做相应的修改
9、vim /etc/profile 最后一行添加export PATH=$PATH:/home/lwm/software/mini2440/x-tools/arm-lwm-linux-gnueabi/bin
10、source /etc/profile
注:9,10主要是讲交叉编译链的路径添加到环境变量里面,根据自己的情况可以选择取舍
11、make distclean
12、make mini2440_config
13、make
14、将生成的uboot.bin通过vivi的d命令下到ram中去运行,效果如下:
再继续下去可以参照黄刚的博客或者Tekkaman Ninja的博客进行移植,当然,对于128M的nandflash代码要做如下修改:
对于128m的mini2440相关代码为
#include <config.h>
#define NF_BASE 0x4E000000 //Nand Flash配置寄存器基地址
#define __REGb(x) (*(volatile unsigned char *)(x))
#define __REGi(x) (*(volatile unsigned int *)(x))
#define NFCONF __REGi(NF_BASE + 0x0 ) //通过偏移量还是得到配置寄存器基地址
#define NFCONT __REGi(NF_BASE + 0x4 ) //通过偏移量得到控制寄存器基地址
#define NFCMD __REGb(NF_BASE + 0x8 ) //通过偏移量得到指令寄存器基地址
#define NFADDR __REGb(NF_BASE + 0xC ) //通过偏移量得到地址寄存器基地址
#define NFDATA __REGb(NF_BASE + 0x10) //通过偏移量得到数据寄存器基地址
#define NFSTAT __REGb(NF_BASE + 0x20) //通过偏移量得到状态寄存器基地址
#define NAND_CHIP_ENABLE (NFCONT &= ~(1<<1)) //Nand片选使能
#define NAND_CHIP_DISABLE (NFCONT |= (1<<1)) //取消Nand片选
#define NAND_CLEAR_RB (NFSTAT |= (1<<2))
#define NAND_DETECT_RB { while(! (NFSTAT&(1<<2)) );}
#define NAND_SECTOR_SIZE 2048
#define NAND_BLOCK_MASK (NAND_SECTOR_SIZE - 1)
/* low level nand read function */
int nand_read_ll(unsigned char *buf, unsigned long start_addr, int size)
{
int i, j,page;
if ((start_addr & NAND_BLOCK_MASK) || (size & NAND_BLOCK_MASK))
{
return -1; //地址或长度不对齐
}
NAND_CHIP_ENABLE; //选中Nand片选
for(i=start_addr; i < (start_addr + size);)
{
//发出READ0指令
NAND_CLEAR_RB;
NFCMD = 0x00;
//对Nand进行寻址
page=i>>11;
NFADDR = 0;
NFADDR = 0;
NFADDR = page & 0xFF;
NFADDR = (page>> 8) & 0xFF;
NFADDR = (page>> 16) & 0xFF;
NFCMD = 0x30;
NAND_DETECT_RB;
for(j=0; j < NAND_SECTOR_SIZE; j++, i++)
{
*buf = (NFDATA & 0xFF);
buf++;
/********************************************************************************************************/
if (*buf!=0)
{
#define GPBCON (*(volatile unsigned long *)0x56000010)
#define GPBDAT (*(volatile unsigned long *)0x56000014)
void led()
{
GPBCON = 0x154FD;
GPBDAT = 0x1C0;
}
}
/********************************************************************************************************/
}
}
NAND_CHIP_DISABLE; //取消片选信号
return 0;
}
下面的我就不继续移植了,因为下面准备自己尝试着去写一个bootloader,所以uboot2010.09的工作到此结束,下面把努力去自己实现一个bootloader!!!加油!!!
总结:从以上过程可以看出,如果要在如果要在board目录下新建一个开发板<board_name> 的目录,或着在board目录的子目录下新建一个开发板<board_name> 的目录,需要在board.cfg配置文件中添加相应的信息,在#include/configs目录下也要建立一个文件<board_name.h>,里面存放的就是开发板board_name的配置信息。
那么我们开始移植uboot2010.09
1、cd uboot-2010.09
2、在board/samsung目录下建立目录:mkdir board/samsung/mini2440
3、cp board/samsung/smdk2410/*
board/samsung/mini2440/
4、mv board/samsung/mini2440/smdk2410.c board/samsung/mini2440/mini2440.c
5、cp include/configs/smdk2410.h include/configs/mini2440.h
6、gedit board/samsung/mini2440/Makefile:smdk2410.o->mini2440.o
7、gedit boards.cfg:添加一行: mini2440 arm arm920t - samsung s3c24x0
8、vim Makefile:在#set default to nothing for native builds这行的上面添加一句
CROSS_COMPILE=arm-lwm-linux-gnueabi- //这个根据自己的交叉编译链做相应的修改
9、vim /etc/profile 最后一行添加export PATH=$PATH:/home/lwm/software/mini2440/x-tools/arm-lwm-linux-gnueabi/bin
10、source /etc/profile
注:9,10主要是讲交叉编译链的路径添加到环境变量里面,根据自己的情况可以选择取舍
11、make distclean
12、make mini2440_config
13、make
14、将生成的uboot.bin通过vivi的d命令下到ram中去运行,效果如下:
再继续下去可以参照黄刚的博客或者Tekkaman Ninja的博客进行移植,当然,对于128M的nandflash代码要做如下修改:
对于128m的mini2440相关代码为
#include <config.h>
#define NF_BASE 0x4E000000 //Nand Flash配置寄存器基地址
#define __REGb(x) (*(volatile unsigned char *)(x))
#define __REGi(x) (*(volatile unsigned int *)(x))
#define NFCONF __REGi(NF_BASE + 0x0 ) //通过偏移量还是得到配置寄存器基地址
#define NFCONT __REGi(NF_BASE + 0x4 ) //通过偏移量得到控制寄存器基地址
#define NFCMD __REGb(NF_BASE + 0x8 ) //通过偏移量得到指令寄存器基地址
#define NFADDR __REGb(NF_BASE + 0xC ) //通过偏移量得到地址寄存器基地址
#define NFDATA __REGb(NF_BASE + 0x10) //通过偏移量得到数据寄存器基地址
#define NFSTAT __REGb(NF_BASE + 0x20) //通过偏移量得到状态寄存器基地址
#define NAND_CHIP_ENABLE (NFCONT &= ~(1<<1)) //Nand片选使能
#define NAND_CHIP_DISABLE (NFCONT |= (1<<1)) //取消Nand片选
#define NAND_CLEAR_RB (NFSTAT |= (1<<2))
#define NAND_DETECT_RB { while(! (NFSTAT&(1<<2)) );}
#define NAND_SECTOR_SIZE 2048
#define NAND_BLOCK_MASK (NAND_SECTOR_SIZE - 1)
/* low level nand read function */
int nand_read_ll(unsigned char *buf, unsigned long start_addr, int size)
{
int i, j,page;
if ((start_addr & NAND_BLOCK_MASK) || (size & NAND_BLOCK_MASK))
{
return -1; //地址或长度不对齐
}
NAND_CHIP_ENABLE; //选中Nand片选
for(i=start_addr; i < (start_addr + size);)
{
//发出READ0指令
NAND_CLEAR_RB;
NFCMD = 0x00;
//对Nand进行寻址
page=i>>11;
NFADDR = 0;
NFADDR = 0;
NFADDR = page & 0xFF;
NFADDR = (page>> 8) & 0xFF;
NFADDR = (page>> 16) & 0xFF;
NFCMD = 0x30;
NAND_DETECT_RB;
for(j=0; j < NAND_SECTOR_SIZE; j++, i++)
{
*buf = (NFDATA & 0xFF);
buf++;
/********************************************************************************************************/
if (*buf!=0)
{
#define GPBCON (*(volatile unsigned long *)0x56000010)
#define GPBDAT (*(volatile unsigned long *)0x56000014)
void led()
{
GPBCON = 0x154FD;
GPBDAT = 0x1C0;
}
}
/********************************************************************************************************/
}
}
NAND_CHIP_DISABLE; //取消片选信号
return 0;
}
下面的我就不继续移植了,因为下面准备自己尝试着去写一个bootloader,所以uboot2010.09的工作到此结束,下面把努力去自己实现一个bootloader!!!加油!!!
相关文章推荐
- u-boot 2010.09 移植 (二)Makefile详解
- fl2440的U-boot-2010.09移植(六)NAND Flash启动支持
- 移植u-boot-2010.09到三星SC32442平台(二):nand读写和ax88180以太网支持
- <2012 12 05> FL2440开发板的U-boot-2010.09版本移植(四)Nor Flash启动支持
- <2012 12 06> FL2440开发板的U-boot-2010.09版本移植(九)NAND Flash启动支持的一种新型方法,利用U-Boot自带nand_spl/nand_boot.c
- 基于U-BOOT-2010.09移植OK6410开发版记录(一)
- fl2440的U-boot-2010.09移植(七)LCD的支持
- 移植u-boot-2010.09到三星SC32442平台(三):yaffs2文件系统写入支持
- <2012 12 05> FL2440开发板的U-boot-2010.09版本移植(五)支持DM9000网卡和板级相关LED等配置
- u-boot-2010.09移植(二)
- 移植u-boot-2010.09到S3C2440(二)——ARM汇编中的LDR及ADR的区别及其在U-BOOT中的应用 (SDRAM)
- 移植u-boot-2010.09到S3C2440(三)——判断NAND还是NOR启动的汇编代码
- u-boot 2010.09 移植 (三)工程移植与汇编修改
- <2012 12 05> FL2440开发板的U-boot-2010.09版本移植(六)uboot架构中NAND Flash驱动修改
- <2012 12 06> FL2440开发板的U-boot-2010.09版本移植(十)支持烧写YAFFS2文件系统
- u-boot-2010.09移植(一)
- fl2440的U-boot-2010.09移植(五)uboot架构中NAND Flash驱动修改
- <2012 12 05> FL2440开发板的U-boot-2010.09版本移植(七)NAND Flash启动支持
- 移植u-boot-2010.09到Tiny6410开发板
- 移植u-boot-2010.09到S3C2440(四)——通过BSS段和_start判断uboot大小