U-Boot移植——Nor Flash
来源:互联网 发布:java程序员 图书 编辑:程序博客网 时间:2024/04/29 04:53
0 开发环境
宿主机:Ubuntu14.04
开发板:Mini2440
U-Boot:u-boot-1.1.6
编译器:arm-linux-gcc
1 Nor Flash型号
根据《U-Boot移植——添加新开发板》的方法添加Mini2440的配置文件,并且通过《U-Boot移植——设置系统时钟》设置系统时钟后,可以将U-Boot编译并且下载到Mini2440开发板的Nor Flash上运行。然而,虽然这时候可以从Nor Flash启动U-Boot,但是还不能通过U-Boot对Nor Flash进行擦写操作,因为相关参数还没有设置好[1]p272。为了使得U-Boot可以操作Nor Flash,需要进一步修改其Nor Flash型号信息。
根据参考资料[1]p272的提示,smdk2410使用的Nor Flash型号为AM29LV400。而参考资料[2]p26则说明,Mini2440使用的Nor Flash型号为SST39VF1601,大小为16Mbit(2MB)。
2 include/configs/mini2440.h
smdk2410.h中默认提供了AM29LV400和AM29LV800两个型号的Nor Flash供选择:
/*-----------------------------------------------------------------------* FLASH and environment organization*/ #define CONFIG_AMD_LV400 1 /* uncomment this if you have a LV400 flash */#if 0#define CONFIG_AMD_LV800 1 /* uncomment this if you have a LV800 flash */#endif #define CFG_MAX_FLASH_BANKS 1 /* max number of memory banks */#ifdef CONFIG_AMD_LV800#define PHYS_FLASH_SIZE 0x00100000 /* 1MB */#define CFG_MAX_FLASH_SECT (19) /* max number of sectors on one chip */#define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x0F0000) /* addr of environment */#endif#ifdef CONFIG_AMD_LV400#define PHYS_FLASH_SIZE 0x00080000 /* 512KB */#define CFG_MAX_FLASH_SECT (11) /* max number of sectors on one chip */#define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x070000) /* addr of environment */#endif
可以根据上述信息添加SST39VF1601型号Nor Flash的配置信息。先将上面CONFIG_AMD_LV400和CONFIG_AMD_LV800的宏定义都注释,然后在其下面添加:
#define CONFIG_SST_xF1601 1 /* Added for SST39VF1601 Flash */仿照前面AMD_LV800的配置信息添加:
#ifdef CONFIG_SST_xF1601#define PHYS_FLASH_SIZE 0x00200000 /* 2MB */#define CFG_MAX_FLASH_SECT (19) /* max number of sectors on one chip */#define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x0F0000) /* addr of environment */#endif
3 board/mini2440/flash.c
经过上述修改,配置并且编译时提示错误:
定位到错误的行:
由上图可见,条件编译只是对CONFIG_AMD_LV400宏定义和CONFIG_AMD_LV800宏定义进行了判断,由于本文在第2章中将这两个宏都注释了,取而代之添加了CONFIG_SST_xF1601,因此可以添加一个条件判断分枝即可解决上述错误:
上图红色方框的内容为新添的AMD_MANUFACT、SST_MANUFACT、SST_ID_xF1601在已经在include/fash.h中预定义了。
4 flinfo命令测试
经过上述修改之后U-Boot可以成功编译,将其下载到开发板中运行,可以正确显示Nor Flash的大小为2MB:
输入flinfo命令查看For Flash的信息,结果提示Unknown Vendor Unknown Chip Type:
在U-Boot源码中搜索关键字Unknow Vendor可以定位到board/mini2440/flash.c的flash_print_info()函数:
由上图可见,在输出Nor Flash信息时通过switch分枝判断生产商和芯片型号,由于只做了AMD Nor Flash的判断,而没有判断是否存在SST Nor Flash,因此导致flinfo命令无法找到生存厂商和芯片型号信息。
根据上图已有的信息,添加SST Nor Flash的判断分枝即可解决上述问题:
上图红色框内的代码是新添的。重新编译U-Boot并下载到开发板上运行,然后执行flinfo命令结果如下:
参考资料
[1]韦东山. 嵌入式Linux应用开发完全手册,人民邮电出版社,2012
[2]MINI2440用户手册
- U-Boot移植——Nor Flash
- 【Linux 移植 】——5、移植 u-boot-2012.04.01 之 支持Nor Flash
- U-boot(NOR Flash)
- u-boot移植--2、EN29LV160AB Nor Flash移植
- U-Boot移植FL2440--2--支持从Nor FLASH启动
- TQ2440 u-boot-2012.04.01移植三支持NOR Flash
- u-boot-2014.10移植第15天----nor flash操作
- u-boot-2014.10移植第16天----Nor flash启动
- U-boot-2009.08移植(三)支持Nor FLASH
- u-boot-2016.05移植:(3)、识别NOR FLASH
- U-boot-2009.08移植(三)支持Nor FLASH
- U-Boot移植——Nand Flash
- u-boot-2009.08在mini2440上的移植(二)---增加nor flash功能 ——心得体会
- u-boot-2009.08在飞凌OK2440/FL2440上的移植(二)——让u-boot支持从nor flash 启动
- U-boot移植 (v2012.04.1 S3C2440平台) (三) Nor flash Nand flash 驱动支持
- u-boot:从NOR FLASH启动并支持NAND FLASH读写的移植
- 基于TQ2440的u-boot 1.1.6移植(二)(支持nor flash nand flash )
- U-boot-2014.04移植到MINI2440(9) nor flash启动和nand flash 启动
- AutoCompleteTextView
- Java面试题及答案(一)
- 第7周项目2-友元类
- 多态性和虚函数
- 3——PHP 简单运算符的使用
- U-Boot移植——Nor Flash
- Java——CLASSPATH环境变量深度解析
- UVA10635Prince and Princess(变形的LIS)
- C++ 文件输入输出 (一)
- CI 框架 如何实现多文件入口 ?
- leetcode 字符串的所有的真子集
- ImportError: No module named 'xxx'的另外一种原因
- 快速排序
- ISaveAs 保存Grid格式数据