参考博文:

u-boot-2011.03在mini2440/micro2440上的移植

移植(五)添加nand支持:

host@debian:~/soft/mini2440/u-boot-2011.03$  touch drivers/mtd/nand/s3c2440_nand.c
host@debian:~/soft/mini2440/u-boot-2011.03$ vim drivers/mtd/nand/s3c2440_nand.c
添加下面内容:
#include <common.h> #if 0
#define DEBUGN printf
#else
#define DEBUGN(x, args ...) {}
#endif #include <nand.h>
#include <asm/arch/s3c24x0_cpu.h>
#include <asm/io.h> #define __REGb(x) (*(volatile unsigned char *)(x))
#define __REGi(x) (*(volatile unsigned int *)(x)) #define NF_BASE 0x4e000000 //Nand配置寄存器基地址
#define NFCONF __REGi(NF_BASE + 0x0) //偏移后还是得到配置寄存器基地址
#define NFCONT __REGi(NF_BASE + 0x4) //偏移后得到Nand控制寄存器基地址
#define NFCMD __REGb(NF_BASE + 0x8) //偏移后得到Nand指令寄存器基地址
#define NFADDR __REGb(NF_BASE + 0xc) //偏移后得到Nand地址寄存器基地址
#define NFDATA __REGb(NF_BASE + 0x10) //偏移后得到Nand数据寄存器基地址
#define NFMECCD0 __REGi(NF_BASE + 0x14) //偏移后得到Nand主数据区域ECC0寄存器基地址
#define NFMECCD1 __REGi(NF_BASE + 0x18) //偏移后得到Nand主数据区域ECC1寄存器基地址
#define NFSECCD __REGi(NF_BASE + 0x1C) //偏移后得到Nand空闲区域ECC寄存器基地址
#define NFSTAT __REGb(NF_BASE + 0x20) //偏移后得到Nand状态寄存器基地址
#define NFSTAT0 __REGi(NF_BASE + 0x24) //偏移后得到Nand ECC0状态寄存器基地址
#define NFSTAT1 __REGi(NF_BASE + 0x28) //偏移后得到Nand ECC1状态寄存器基地址
#define NFMECC0 __REGi(NF_BASE + 0x2C) //偏移后得到Nand主数据区域ECC0状态寄存器基地址
#define NFMECC1 __REGi(NF_BASE + 0x30) //偏移后得到Nand主数据区域ECC1状态寄存器基地址
#define NFSECC __REGi(NF_BASE + 0x34) //偏移后得到Nand空闲区域ECC状态寄存器基地址
#define NFSBLK __REGi(NF_BASE + 0x38) //偏移后得到Nand块开始地址
#define NFEBLK __REGi(NF_BASE + 0x3c) //偏移后得到Nand块结束地址 #define S3C2440_NFCONT_nCE (1<<1)
#define S3C2440_ADDR_NALE 0x0c
#define S3C2440_ADDR_NCLE 0x08 ulong IO_ADDR_W = NF_BASE; static void s3c2440_hwcontrol(struct mtd_info *mtd, int cmd, unsigned int ctrl)
{
struct nand_chip *chip = mtd->priv; DEBUGN("hwcontrol(): 0x%02x 0x%02x/n", cmd, ctrl); if (ctrl & NAND_CTRL_CHANGE)
{
IO_ADDR_W = NF_BASE; if (!(ctrl & NAND_CLE)) //要写的是地址
IO_ADDR_W |= S3C2440_ADDR_NALE;
if (!(ctrl & NAND_ALE)) //要写的是命令
IO_ADDR_W |= S3C2440_ADDR_NCLE; if (ctrl & NAND_NCE)
NFCONT &= ~S3C2440_NFCONT_nCE; //使能nand flash
else
NFCONT |= S3C2440_NFCONT_nCE; //禁止nand flash
} if (cmd != NAND_CMD_NONE)
writeb(cmd,(void *)IO_ADDR_W);
} static int s3c2440_dev_ready(struct mtd_info *mtd)
{
DEBUGN("dev_ready/n");
return (NFSTAT & 0x01);
} int board_nand_init(struct nand_chip *nand)
{
u_int32_t cfg;
u_int8_t tacls, twrph0, twrph1;
struct s3c24x0_clock_power * const clk_power = s3c24x0_get_base_clock_power(); DEBUGN("board_nand_init()/n"); tacls = 1; twrph0 = 2; twrph1 = 1; cfg = (tacls<<12)|(twrph0<<8)|(twrph1<<4);
NFCONF = cfg; cfg = (1<<6)|(1<<4)|(0<<1)|(1<<0);
NFCONT = cfg; /* initialize nand_chip data structure */
nand->IO_ADDR_R = nand->IO_ADDR_W = (void *)0x4e000010; /* read_buf and write_buf are default */
/* read_byte and write_byte are default */ /* hwcontrol always must be implemented */
nand->cmd_ctrl = s3c2440_hwcontrol; nand->dev_ready = s3c2440_dev_ready; return 0;
}
host@debian:~/soft/mini2440/u-boot-2011.03$ vim drivers/mtd/nand/Makefile
添加一行:
COBJS-$(CONFIG_NAND_S3C2440) += s3c2440_nand.o
host@debian:~/soft/mini2440/u-boot-2011.03$ vim include/configs/mini2440.h
添加下面内容:

#define CONFIG_MTD_DEVICE
#define CONFIG_NAND_S3C2440
#define CONFIG_CMD_NAND
#if defined(CONFIG_CMD_NAND)
#define CONFIG_SYS_NAND_BASE            0x4E000000 //Nand配置寄存器基地址
#define CONFIG_SYS_MAX_NAND_DEVICE      1
#define CONFIG_MTD_NAND_VERIFY_WRITE    1

#endif

#define CONFIG_ENV_IS_IN_NAND  1
#define CONFIG_ENV_OFFSET      0x40000 //将环境变量保存到nand中的0x40000位置
#define CONFIG_ENV_SIZE        0x10000 /* Total Size of Environment Sector */

修改后,进行编译,却得到好几个编译错误:

env_nand.o: In function `env_get_char_spec':
/home/host/soft/mini2440/u-boot-2011.03/common/env_nand.c:: multiple definition of `env_get_char_spec'
env_flash.o:/home/host/soft/mini2440/u-boot-2011.03/common/env_flash.c:: first defined here
env_nand.o: In function `env_init':
/home/host/soft/mini2440/u-boot-2011.03/common/env_nand.c:: multiple definition of `env_init'
env_flash.o:/home/host/soft/mini2440/u-boot-2011.03/common/env_flash.c:: first defined here
env_nand.o: In function `env_relocate_spec':
/home/host/soft/mini2440/u-boot-2011.03/common/env_nand.c:: multiple definition of `env_relocate_spec'
env_flash.o:/home/host/soft/mini2440/u-boot-2011.03/common/env_flash.c:: first defined here
env_nand.o: In function `saveenv':
/home/host/soft/mini2440/u-boot-2011.03/common/env_nand.c:: multiple definition of `saveenv'
env_flash.o:/home/host/soft/mini2440/u-boot-2011.03/common/env_flash.c:: first defined here
env_nand.o:(.data+0x0): multiple definition of `env_name_spec'
env_flash.o:(.data+0x4): first defined here
env_nand.o: In function `env_get_char_spec':
/home/host/soft/mini2440/u-boot-2011.03/common/env_nand.c:: multiple definition of `env_ptr'
env_flash.o:(.data+0x0): first defined here
make[]: *** [libcommon.o] 错误
make[]: Leaving directory `/home/host/soft/mini2440/u-boot-2011.03/common'

这是因为include/configs/mini2440.h已经定义了CONFIG_ENV_IS_IN_FLASH,新加入的定义CONFIG_ENV_IS_IN_NAND与之冲突,可以将

CONFIG_ENV_IS_IN_FLASH宏定义屏蔽掉即可。

修改好后重新编译,按照《mini2440移植uboot 2011.03(上)》中的步骤将其加载到mini2440 内存,然后启动uboot,得到下面的输出信息:

U-Boot 2011.03--g18dedc3-dirty (Jun   - ::)

DRAM:   MiB
Flash: KiB
NAND: NAND_ECC_NONE selected by board driver. This is not recommended !!
MiB
*** Warning - bad CRC, using default environment In: serial
Out: serial
Err: serial
Net: dm9000
MINI2440 # nand
nand - NAND sub-system Usage:
nand info - show available NAND devices
nand device [dev] - show or set current device
nand read - addr off|partition size
nand write - addr off|partition size
read/write 'size' bytes starting at offset 'off'
to/from memory address 'addr', skipping bad blocks.
nand erase[.spread] [clean] [off [size]] - erase 'size' bytes from offset 'off'
With '.spread', erase enough for given file size, otherwise,
'size' includes skipped bad blocks.
nand erase.part [clean] partition - erase entire mtd partition'
nand erase.chip [clean] - erase entire chip'
nand bad - show bad blocks
nand dump[.oob] off - dump page
nand scrub off size | scrub.part partition | scrub.chip
really clean NAND erasing bad blocks (UNSAFE)
nand markbad off [...] - mark bad block(s) at offset (UNSAFE)
nand biterr off - make a bit error at offset (UNSAFE)

移植(六):添加nfs,命令补全的支持.

host@debian:~/soft/mini2440/u-boot-2011.03$ vim include/configs/mini2440.h 
添加下面内容:
#define CONFIG_CMDLINE_EDITING
#ifdef CONFIG_CMDLINE_EDITING
#undef CONFIG_AUTO_COMPLETE
#else
#define CONFIG_AUTO_COMPLETE
#endif
#define CONFIG_CMD_NFS

修改完后,重新进行编译并加载到mini2440内存中执行,得到下面的输出:

U-Boot 2011.03--g0e6506b-dirty (Jun   - ::)

DRAM:   MiB
Flash: KiB
NAND: NAND_ECC_NONE selected by board driver. This is not recommended !!
MiB
*** Warning - bad CRC, using default environment In: serial
Out: serial
Err: serial
Net: dm9000
MINI2440 # nfs 30007fc0 /home/host/nfs/mini2440/uImage
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in bit mode
MAC: ::3e::0a:5b
operating at unknown: mode
Using dm9000 device
File transfer via NFS from server 192.168.211.2; our IP address is 192.168.211.25
Filename '/home/host/nfs/mini2440/uImage'.
Load address: 0x30007fc0
Loading: *
Abort
MINI2440 # nfs 30007fc0 /home/host/nfs/mini2440/uImage
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in bit mode
MAC: ::3e::0a:5b
operating at unknown: mode
Using dm9000 device
File transfer via NFS from server 192.168.211.2; our IP address is 192.168.211.25
Filename '/home/host/nfs/mini2440/uImage'.
Load address: 0x30007fc0
Loading: #################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#####################################################
done
Bytes transferred = (22963c hex)

第一次调用nfs有可能不成功(跟前面的ping命令执行情况类似)。

后续移植过程我没有再继续下去了,因为我对yaffs兴趣不大,我希望能让它支持ubifs并且自己重新移植一遍。

整个代码(包含git历史记录)下载地址:http://pan.baidu.com/s/1dDipCqt

mini2440移植uboot 2011.03(下)的更多相关文章

  1. mini2440移植uboot 2011.03(上)

    参考博文: <u-boot-2011.03在mini2440/micro2440上的移植> 本来我想移植最新版的uboot,但是移植却不太成功,所以先模仿他人的例子重新执行一遍,对uboo ...

  2. mini2440移植uboot 2014.04(一)

    最新版的uboot添加了很多新功能,我决定在最新版代码基础上重新移植一遍加深理解. 我修改的代码已经上传到github上,地址:https://github.com/qiaoyuguo/u-boot- ...

  3. mini2440移植uboot 2014.04(三)

    我修改的代码已经上传到github上,地址:https://github.com/qiaoyuguo/u-boot-2014.04-mini2440.git 参考文档: s3c2440手册(下载地址) ...

  4. mini2440移植uboot 2014.04(四)

    我修改的代码已经上传到github上,地址:https://github.com/qiaoyuguo/u-boot-2014.04-mini2440.git 参考文章: <mini2440移植u ...

  5. mini2440移植uboot 2014.04(六)

    上一篇博文:<mini2440移植uboot 2014.04(五)> 代码已经上传到github上:https://github.com/qiaoyuguo/u-boot-2014.04- ...

  6. mini2440移植uboot 2014.04(五)

    代码上传到github上:https://github.com/qiaoyuguo/u-boot-2014.04-mini2440 前几篇博文: <mini2440移植uboot 2014.04 ...

  7. mini2440移植uboot 2014.04(二)

    我修改的代码已经上传到github上,地址:https://github.com/qiaoyuguo/u-boot-2014.04-mini2440.git 参考文章: <u-boot-2011 ...

  8. mini2440移植uboot 2014.04(七)

    上一篇博文:<mini2440移植uboot 2014.04(六)> 代码已经上传到github上: https://github.com/qiaoyuguo/u-boot-2014.04 ...

  9. uboot各种目录下的文件作用

    uboot下载地址:http://ftp.denx.de/pub/u-boot/ 1.目录分布 2.目录结构变化: u-boot-2010.03及以前版本├── api                ...

随机推荐

  1. HDU 5360 Hiking(优先队列)

    Hiking Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total S ...

  2. ADO.NET访问Access(文本数据库)数据操作(CRUD)

    1,ADO.NET访问Access(文本数据库)数据操作(CRUD) 2,DatabaseDesign 文本数据库Northwind.mdb 3,/App_Code 3.1,/App_Code/DBC ...

  3. 怎样找出自己定义标签的java类

    怎样找出自己定义标签的java类 这是一个逆推的过程(建立自己定义标签能够查看下面连接:http://blog.csdn.net/antoniochan/article/details/3810990 ...

  4. 2016.7.12 eclispe使用mybatis generator生成代码时提示project E is not exist

    运行mybatis-generator之后,出现错误:project E is not exist   错误原因:使用了项目的绝对路径. http://bbs.csdn.net/topics/3914 ...

  5. 移植opencv2.4.9到itop4412开发板

    OpenCV是眼下开源项目中最著名的基于机器视觉方向的图像处理的开发包,眼下已经有被移植到嵌入式Linux环境上. 本文介绍了OpenCV交叉编译的基本步骤. 在opencv交叉编译之前要先进行依赖库 ...

  6. 应该知道的Linux技巧(转载)

    这篇文章来源于Quroa的一个问答<What are some time-saving tips that every Linux user should know?>—— Linux用户 ...

  7. Odoo11 重大改变

    Table of Contents 新特性 Activity 项目子任务 组织架构 地址 域 widget 功能重构 Quant 份 procurement 补货 自动动作 动作绑定 去掉了stock ...

  8. sql 查询 一张表里面的数据 在另一张表中是否存在 和 比对两个集合中的差集和交集(原创)

    这两天在搞一个修复的小功能 需求: A表,B表,C表,日志文件 先筛选出A表和B表中都符合条件的数据,然后检查这些数据在C表中是否存在.如果不存在,就从日志中读取数据,存入C表中,如果存在,则不做操作 ...

  9. 转jmeter 性能测试 JDBC Request (查询数据库获取数据库数据) 的使用

    JDBC Request 这个Sampler可以向数据库发送一个jdbc请求(sql语句),并获取返回的数据库数据进行操作.它经常需要和JDBC Connection Configuration配置原 ...

  10. 36:字符串排序SortString

    题目描述:编写一个程序,将输入字符串中的字符按如下规则排序. 规则1:英文字母从A到Z排列,不区分大小写. 如,输入:Type 输出:epTy 规则2:同一个英文字母的大小写同时存在时,按照输入顺序排 ...