U-boot-2014.04移植到MINI2440(10) 移植nand flash保存环境变量、添加分区

发布者:哈哈哈33最新更新时间:2022-06-21 来源: eefocus关键字:U-boot  移植  MINI2440  nand  flash  环境变量 手机看文章 扫描二维码
随时随地手机看文章

一.保存环境变量到nand flash


第一步:修改mini2440.h


由于我们执行saveenv这个命令,然后保存环境变量,u-boot的命令都是在common下实现的,切进去执行gerp “saveenv” –nr ./*.c,查找出如下结果:

这里出现了很多,打开Makefile:


# environment


obj-y += env_attr.o


obj-y += env_callback.o


obj-y += env_flags.o


obj-$(CONFIG_ENV_IS_IN_DATAFLASH) +=env_dataflash.o


obj-$(CONFIG_ENV_IS_IN_EEPROM) +=env_eeprom.o


extra-$(CONFIG_ENV_IS_EMBEDDED) +=env_embedded.o


obj-$(CONFIG_ENV_IS_IN_EEPROM) +=env_embedded.o


extra-$(CONFIG_ENV_IS_IN_FLASH) +=env_embedded.o


obj-$(CONFIG_ENV_IS_IN_NVRAM) +=env_embedded.o


obj-$(CONFIG_ENV_IS_IN_FLASH) +=env_flash.o


obj-$(CONFIG_ENV_IS_IN_MMC) += env_mmc.o


obj-$(CONFIG_ENV_IS_IN_FAT) += env_fat.o


obj-$(CONFIG_ENV_IS_IN_NAND) +=env_nand.o


obj-$(CONFIG_ENV_IS_IN_NVRAM) +=env_nvram.o


obj-$(CONFIG_ENV_IS_IN_ONENAND) +=env_onenand.o


obj-$(CONFIG_ENV_IS_IN_SPI_FLASH) +=env_sf.o


obj-$(CONFIG_ENV_IS_IN_REMOTE) +=env_remote.o


obj-$(CONFIG_ENV_IS_IN_UBI) += env_ubi.o


obj-$(CONFIG_ENV_IS_NOWHERE) +=env_nowhere.o


查找会发现,env_flash.c和env_nand.c是分别保存nor和nand的命令函数。


  打开/include/configs/mini2440.h,第172行,注释掉为nor保存环境变量的宏,定义保存到nand,修改如下:


#if 0


#define CONFIG_ENV_ADDR                 (CONFIG_SYS_FLASH_BASE +0x070000)


#define CONFIG_ENV_IS_IN_FLASH


#define CONFIG_ENV_SIZE                    0x10000


#endif


#define CONFIG_ENV_IS_IN_NAND


#define CONFIG_ENV_OFFSET0X40000//256k for u-boot


#define CONFIG_ENV_SIZE 0x20000//128k for env


/* allow to overwrite serial and ethaddr */


#define CONFIG_ENV_OVERWRITE


      


第二步:编译测试


从nor 启动,下载到nand,再从nand启动,输入saveenv,出现如下信息:


MINI2440 Deep_l_zh # saveenv


Saving Environment to NAND...


Erasing NAND...


Erasing at 0x40000 -- 100% complete.


Writing to NAND... OK


MINI2440 Deep_l_zh #


       说明我们的环境变量保存进去了。。。


 


       二.添加mtd分区


       修改mini2440.h


       主要是打开被注释掉的配置,第222行添加:


#define CONFIG_CMD_MTDPARTS


#define CONFIG_MTD_DEVICE


#define MTDIDS_DEFAULT"nand0=mini2440-0"


#define MTDPARTS_DEFAULT"mtdparts=mini2440-0:1m(u-boot),"


                                                                                     "1m(params),"


                                                                                     "3m(kernel),"


                                                                                     "-(rootfs)"


       再修改下默认的环境变量,根据自己的开发板和虚拟机做设置,我这里修改如下:


#define CONFIG_NETMASK             255.255.255.0


#define CONFIG_IPADDR          192.168.1.226


#define CONFIG_SERVERIP             192.168.1.122


#define CONFIG_ETHADDR      08:08:11:18:12:27


#define CONFIG_BOOTARGS"console=ttySAC0 root=/dev/nfs nfsroot=192.168.1.122:/opt/rootfsip=192.168.1.111:192.168.1.122:192.168.1.122:255.255.255.0:SMDK2440A.arm9.net:eth0:off"


#define CONFIG_BOOTCOMMAND"nand read 0x30008000 kernel;bootm 0x30008000"


 


       编译下载,从nor 启动:


       nand erase 0 0x40000


       tftp 0x30008000 u-boot.bin


       nand write 0x30008000 0 0x40000


       然后关闭开发板,从nand启动,输入:


       mtdparts default


       save


       mtdparts


       这时候输出如下信息:


MINI2440 Deep_l_zh # mtdparts default


MINI2440 Deep_l_zh # save


Saving Environment to NAND...


Erasing NAND...


Erasing at 0x40000 -- 100% complete.


Writing to NAND... OK


MINI2440 Deep_l_zh # mtdparts


 


device nand0 , # parts =4


 #:name                size            offset          mask_flags


 0:u-boot              0x00100000      0x00000000      0


 1:params              0x00100000      0x00100000      0


 2:kernel              0x00300000      0x00200000      0


 3:rootfs              0x0fb00000      0x00500000      0


 


active partition: nand0,0 - (u-boot)0x00100000 @ 0x00000000


 


defaults:


mtdids : nand0=mini2440-0


mtdparts: mtdparts=mini2440-0:1m(u-boot),1m(params),3m(kernel),-(rootfs)


MINI2440 Deep_l_zh #


       说明我们的分区已经成功了,这时候打印环境变量:printenv,输出如下信息:


baudrate=115200


bootargs=console=tty0 console=ttySAC0root=/dev/nfs nfsroot=192.168.1.122:/opt/rootfsip=192.168.1.111:192.168.1.122:192.168.1.122:255.255.255.0:SMDK2440A.arm9.net:eth0:off


bootcmd=nand read 0x30008000 60000500000;bootm 0x30008000


bootdelay=3


embedclub=bmp d 70000


ethact=dm9000


ethaddr=08:08:11:18:12:27


gatewayip=192.168.1.1


ipaddr=192.168.1.226


lcdtype=w


mtddevname=u-boot


mtddevnum=0


mtdids=nand0=mini2440-0


mtdparts=mtdparts=mini2440-0:1m(u-boot),1m(params),3m(kernel),-(rootfs)


netmask=255.255.255.0


partition=nand0,0


serverip=192.168.1.122


stderr=serial


stdin=serial


stdout=serial


       说明刚才更改的环境变量也已经生效了。。。


       这里我们并没有定义很多环境变量,却出现了,我猜测是因为我之前的u-boot保存的环境变量,这里我我们执行nand scrub,将nand清理一下。然后再把u-boot烧写进去。看看:


       nand scrub


       nand erase 0 0x4000


       tftp 0x30008000 u-boot.bin


       nand write 0x30008000 0 0x40000


       从nand启动:


       saveenv


       printenv


MINI2440 Deep_l_zh # printenv


baudrate=115200


bootargs=console=ttySAC0 root=/dev/nfsnfsroot=192.168.1.122:/opt/rootfsip=192.168.1.111:192.168.1.122:192.168.1.122:255.255.255.0:SMDK2440A.arm9.net:eth0:off


bootcmd=nand read 0x30008000 kernel;bootm0x30008000


bootdelay=5


ethact=dm9000


ethaddr=08:08:11:18:12:27


ipaddr=192.168.1.226


netmask=255.255.255.0


serverip=192.168.1.122


stderr=serial


stdin=serial


stdout=serial


 


Environment size: 413/131068 bytes


MINI2440 Deep_l_zh #


       这里就是我们的环境变凉了,自己添加进去的。再看看分区:


       mtdparts default


       save


       mtdparts


       输出信息正常,移植结束。

关键字:U-boot  移植  MINI2440  nand  flash  环境变量 引用地址:U-boot-2014.04移植到MINI2440(10) 移植nand flash保存环境变量、添加分区

上一篇:U-boot-2014.04移植到MINI2440(11) 第二启动阶段分析
下一篇:U-boot-2014.04移植到MINI2440(8) nand flash 读写支持移植

推荐阅读最新更新时间:2024-11-11 10:17

STM32之LWIP网络协议栈移植步骤与方案
1.LWIP介绍 lwip是瑞典计算机科学院网络嵌入式系统小组(SICS)的Adam Dunkels(亚当·邓克尔) 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持 TCP 协议主要功能的基础上减少对RAM的占用。 LwIP是Light Weight(轻型)IP 协议,有无操作系统的支持都可以运行。LwIP 实现的重点是在保持TCP协议 主要功能的基础上减少对RAM的占用,它只需十几KB的RAM和 40K左右的ROM就可以运行,这使LwIP协议栈适合在低端的嵌入式系统中使用。lwip提供三种API: RAW API (NETCONN)lwip API BSD API 2.LWIP源码下载 源码下载地址:LWIP
[单片机]
STM32之LWIP网络协议栈<font color='red'>移植</font>步骤与方案
2017年中国将推自主生产3D NAND闪存
由于智能手机、SSD市场需求强烈,闪存、内存等存储芯片最近都在涨价,这也给了中国公司介入存储芯片市场的机遇。在中国发展半导体产业的规划中,存储芯片是最优先的,也是全国各地都争着上马的项目,其中国家级的存储芯片基地在武汉,投资超过240亿美元,之前是新芯科技主导,现在已经变成了紫光公司主导,预计2017年正式推出自主生产的3D NAND闪存,而且是32层堆栈的,起点不算低。 2015年中,国家级存储芯片基地确定落户武汉市,由武汉新芯科技公司负责建设,今年3月份12寸晶圆厂正式动工,整个项目预计投资240亿美元,分为三期建设,现在启动的是第一期,主要目标是生产3D NAND闪存,2018年将启动第二期建设,规划是上DRAM内存
[嵌入式]
2017年中国将推自主生产3D <font color='red'>NAND</font>闪存
NAND Flash供货吃紧 Intel将持续两季以供应企业级SSD硬盘为主
  根据科技网站 ZDNet 的报导指出,半导体龙头英特尔正透过管道向合作伙伴发出通知,预计 2017 年全年  SSD  硬盘因为供应吃紧,这也迫使得英特尔未来将优先以供应数据中心级 SSD  硬盘为主,而其搭低成本的消费级  SSD  硬盘则暂时退到供货的第二线上。下面就随嵌入式小编一起来了解一下相关内容吧。   报导指出,日前英特尔向合作伙伴发出了一份 “英特尔 SSD 硬盘供应健康资讯” 的备忘录,其中说明 SSD 硬盘和 NAND Flash 快闪存储器产业目前正处于市场的需求供货吃紧的状态。因此,预计 2017 年全年 SSD 硬盘供应仍然十分竞争的情况下,将迫使英特尔专注于优先生产并供应数据中心级 SSD硬盘的需求
[嵌入式]
NOR FLASH驱动程序
// // 参考 drivers\mtd\maps\physmap.c // #include linux/module.h #include linux/types.h #include linux/kernel.h #include linux/init.h #include linux/slab.h #include linux/device.h #include linux/platform_device.h #include linux/mtd/mtd.h #include linux/mtd/map.h #include linux/mtd/partitions.h #include asm/
[单片机]
u-boot在s3c2410开发板上移植过程
1)u-boot版本1.1.3,gcc version 3.3.3 (DENX ELDK 3.1.1 3.3.3-9) 2)在Makefile中加入 bks2410_config : unconfig @./mkconfig $(@:_config=) arm arm920t bks2410 NULL s3c24x0 我把我的板子起名叫bks2410,可以依自己的喜好修改 3)建立board/bks2410目录,拷贝board/smdk2410下的文件到board/bks2410目录,将smdk2410.c更名为bks2410.c 4)cp include/configs/smdk2410.h include/configs/
[单片机]
晶豪科可望成为大陆OLED面板主要NOR Flash供应商
  受惠于智能手机市场传统旺季到来,行动式DRAM需求畅旺,第四季价格估涨10~15%,预期将带动存储器多芯片模组(MCP)价格同步上涨,再者,京东方等面板厂开始量产 OLED 面板,将带动NOR Flash需求提升。晶豪科受惠于Mobile DRAM及NOR Flash出货畅旺,9月营收明显成长,第四季营运表现可望旺上加旺。下面就随网络通信小编一起来了解一下相关内容吧。   晶豪科受惠于利基型及行动式DRAM、MCP、NOR Flash等出货畅旺及价格上涨,9月合并营收月增31.9%,达新台币9.77亿元,较去年同期成长20.9%,表现十分亮眼。晶豪科第三季合并营收季增1.3%达新台币25.45亿元,与去年同期相较成长3.7
[网络通信]
如何优雅地解决STM32的Flash写保护的问题
本文介绍了如何解决 STM32 芯片 Flash 写保护导致无法下载程序,无法在线调试的问题;如果您遇到相同的问题,希望本文可以带来一些帮助; 1 FLASH 的写保护 如果对 Flash 设置了写保护,那就无法对 Flash 进行编程和擦除。 在开发 STM32 的时候,如果出现这种情况,通常仿真器都支持对 Flash 进行解锁,像 jlink,stlink 等仿真器都支持这个功能。 2 错误提示 在使用 MDK 进行调试的时候,出现报错 ==Flash Timeout.Reset Target and try it again==,具体如下图所示; 折腾了一番之后,并没有解决问题,因为使用的仿真器是 stlink,因此
[单片机]
在ARMSYS上进行uClinux内核移植的总结
1。简述 针对“如何在以S3C44B0X为核心的ARMSYS开发板上建立uClinux内核移植”的一个总结,其内容包括对Bootloader的功能分析和uClinux2。4。24发行版内核基础上针对S3C44B0X开发板进行修改的重点内容的逐一列举。 2。Bootloader 2。1Bootloader概述 BootLoader就是在操作系统内核运行之前运行的一段程序。通过这段程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。因此,正确建立uClinux的移植的前提条件是具备一个与uClinux配套、易于使用的Bootloade
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved