您的位置:首页 > 其它

六、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!!!加油!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐