u-boot-2014.10移植第23天----nand flash启动(一)

硬件平台:tq2440

开发环境:Ubuntu-3.11

u-boot版本:2014.10

本文允许转载,请注明出处:http://blog.csdn.net/fulinus

在Nand flash中保存环境变量

u-boot中的环境变量可以通过pri命令可以查看,可以通过set(setenv)命令设置一个参数,设置之后的参数仅仅是保存在SDRAM中,掉电后丢失,

使用save命令可以保存参数到Nor flash或Nand flash中去,但是u-boot默认是保存到Nor flash中去,下面修改u-boot,使其保存的环境变量保存到

Nand flash中去。

在include/configs/tq2440.h文件中修改:

+ #if NONE_FLAG
#define CONFIG_ENV_ADDR         (CONFIG_SYS_FLASH_BASE + 0x070000)
#define CONFIG_ENV_IS_IN_FLASH
#define CONFIG_ENV_SIZE         0x10000
+ #else
+ #define CONFIG_ENV_IS_IN_NAND
+ #define CONFIG_ENV_OFFSET       0x40000 /* 256K for u-boot */
+ #define CONFIG_ENV_SIZE         0x20000 /* 128K for environment */
+ #endif

编译、烧录到SDRAM中去,运行。演示:

*** Warning - bad CRC, using default environment

这条提示说明没有没有环境变量,使用默认的环境变量,使用pri查看有哪些环境变量:

[TQ2440 #] pri
baudrate=115200
bootdelay=5
ethact=dm9000
ipaddr=10.0.0.110
netmask=255.255.255.0
serverip=10.0.0.1
stderr=serial
stdin=serial
stdout=serial

使用save命令保存默认的环境变量:

[TQ2440 #] save
Saving Environment to NAND...
Erasing NAND...
Erasing at 0x5c000 -- 100% complete.
Writing to NAND... OK
[TQ2440 #] 
[TQ2440 #] nand dump 40000
Page 00040000 dump:
        fd 4a d7 7a 62 61 75 64  72 61 74 65 3d 31 31 35
        32 30 30 00 62 6f 6f 74  64 65 6c 61 79 3d 35 00
        65 74 68 61 63 74 3d 64  6d 39 30 30 30 00 69 70
        61 64 64 72 3d 31 30 2e  30 2e 30 2e 31 31 30 00
        6e 65 74 6d 61 73 6b 3d  32 35 35 2e 32 35 35 2e
        32 35 35 2e 30 00 73 65  72 76 65 72 69 70 3d 31
        30 2e 30 2e 30 2e 31 00  73 74 64 65 72 72 3d 73
        65 72 69 61 6c 00 73 74  64 69 6e 3d 73 65 72 69
        61 6c 00 73 74 64 6f 75  74 3d 73 65 72 69 61 6c
        00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00

再次烧录运行,就没有上面的警告了。在tq2440.h头文件中设置环境变量:

#define CONFIG_NETMASK      255.255.255.0
+ #define CONFIG_IPADDR       192.168.169.9
+ #define CONFIG_SERVERIP     192.168.169.8
+ #define CONFIG_ETHADDR      12:34:56:78:9A:BC

添加mtd分区命令

修改tq2440.h文件,使能该命令宏:

/*
 * File system
 */
+ #if NONE_FLAG
#define CONFIG_CMD_FAT
#define CONFIG_CMD_EXT2
#define CONFIG_CMD_UBI
#define CONFIG_CMD_UBIFS
#define CONFIG_CMD_MTDPARTS
#define CONFIG_MTD_DEVICE
#define CONFIG_MTD_PARTITIONS
#define CONFIG_YAFFS2
#define CONFIG_RBTREE
+ #else
+ #define CONFIG_CMD_MTDPARTS
+ define CONFIG_MTD_DEVICE
#endif

编译、烧录到SDRAM中去,运行。演示:

[TQ2440 #] mtd
mtdids not defined, no default present

上述提示位于common/cmd_mtdparts.c文件1751行

if (mtdids_default) {
            debug("mtdids variable not defined, using default\n");
            ids = mtdids_default;
            setenv("mtdids", (char *)ids);
        } else {
            printf("mtdids not defined, no default present\n");
            return 1;
        }

mtdids_default为假时错误打印该条信息,mtdids_default变量在该文件中定义如下:

/* default values for mtdids and mtdparts variables */
#if defined(MTDIDS_DEFAULT)
static const char *const mtdids_default = MTDIDS_DEFAULT;
#else
static const char *const mtdids_default = NULL;
#endif

#if defined(MTDPARTS_DEFAULT)
static const char *const mtdparts_default = MTDPARTS_DEFAULT;
#else
static const char *const mtdparts_default = NULL;
#endif

现在这里的mtdids_default=NULL,因为未定义MTDIDS_DEFAULT宏。下面定义MTDIDS_DEFAULT宏和MTDPARTS_DEFAULT宏,参考该文件中最上面注释部分内容:

* Examples:
 *
 * 1 NOR Flash, with 1 single writable partition:
 * mtdids=nor0=edb7312-nor
 * mtdparts=mtdparts=edb7312-nor:-
 *
 * 1 NOR Flash with 2 partitions, 1 NAND with one
 * mtdids=nor0=edb7312-nor,nand0=edb7312-nand
 * mtdparts=mtdparts=edb7312-nor:256k(ARMboot)ro,-(root);edb7312-nand:-(home)
 *
 */

在tq2440.h头文件中定义:

#else
#define CONFIG_CMD_MTDPARTS
#define CONFIG_MTD_DEVICE
+ #define MTDIDS_DEFAULT "nand0=tq2440-0"
+ #define MTDPARTS_DEFAULT "mtdparts=tq2440-0:1m(u-boot)," +     "4m(kernel)," +     "-(rootfs)"
#endif

编译、烧录到SDRAM中去,运行。演示:

[TQ2440 #] pri
baudrate=115200
bootdelay=5
ethact=dm9000
ethaddr=12:34:56:78:9A:BC
ipaddr=192.168.169.9
netmask=255.255.255.0
serverip=192.168.169.8
stderr=serial
stdin=serial
stdout=serial

[TQ2440 #] mtdparts
mtdparts variable not set, see ‘help mtdparts‘
no partitions defined

defaults:
mtdids  : nand0=tq2440-0
mtdparts: mtdparts=tq2440-0:1m(u-boot),4m(kernel),-(rootfs)
[TQ2440 #] mtdparts default
[TQ2440 #] save
[TQ2440 #] mtdparts

device nand0 <tq2440-0>, # parts = 3
 #: name                size            offset          mask_flags
 0: u-boot              0x00100000      0x00000000      0
 1: kernel              0x00400000      0x00100000      0
 2: rootfs              0x03b00000      0x00500000      0

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

时间: 2024-10-11 07:13:01

u-boot-2014.10移植第23天----nand flash启动(一)的相关文章

u-boot-2014.10移植第25天----nand flash启动(三)

硬件平台:tq2440 开发环境:Ubuntu-3.11 u-boot版本:2014.10 本文允许转载,请注明出处:http://blog.csdn.net/fulinus 在实现u-boot从nand flash启动之前,我们将前面asm_led程序放在nand flash第一个块的前4Kbit之中,因为asm_led没有系统初始化功能,所以还需要将bootstrap程序,放在nand flash的0地址处.bootstrap初始化完2440后,跳转到asm_led程序去执行.这对于掌握从n

u-boot-2014.10移植第24天----nand flash启动(二)

硬件平台:tq2440 开发环境:Ubuntu-3.11 u-boot版本:2014.10 本文允许转载,请注明出处:http://blog.csdn.net/fulinus nand flash启动 比较新的u-boot版本包括u-boot-2014版本的都是用重定向的机制,而且用到了代码位置无关的技术,在u-boot连接时使用了-pie选项: -pie : Produce a position independent executable on targets which support i

u-boot-2014.10移植第26天----nand flash启动(四)

硬件平台:tq2440 开发环境:Ubuntu-3.11 u-boot版本:2014.10 本文允许转载,请注明出处:http://blog.csdn.net/fulinus u-boot-2014不管你是从Nor flash还是Nand flash启动,它都会根据SDRAM的空间计算u-boot被重定向的位置,由于Nor flash可以像SDRAM那样操作.代码可以直接在Nor flash中运行,所以对于它而言重定向容易实现.但是Nand flash不能直接像SDRAM那样操作,那么,要实现从

u-boot-2014.10移植第29天----nand flash的SPL启动(一)

硬件平台:tq2440 开发环境:Ubuntu-3.11 u-boot版本:2014.10 本文允许转载,请注明出处:http://blog.csdn.net/fulinus 前面在移植nand flash启动时做了很多探索性的工作,但是后来发现在relocate.S文件中调用的函数中有调用大部分的库函数,牵扯到的文件较多,很难将它们一一包含到前面4K空间中去.正在想其他方法时,突然意识到SPL功能.我初步了解了一下SPL的功能,简而言之是一个将u-boot从nand flash拷贝到SDRAM

u-boot-2014.10移植第30天----nand flash的SPL启动(二)

硬件平台:tq2440 开发环境:Ubuntu-3.11 u-boot版本:2014.10 本文允许转载,请注明出处:http://blog.csdn.net/fulinus 在保存环境变量时,再次启动时错误,原来是环境参数保存的位置翻盖了u-boot,修改如下: #if NONE_FLAG #define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE + 0x070000) #define CONFIG_ENV_IS_IN_FLASH #define CONFI

u-boot-2014.10移植第16天----Nor flash启动

第15天时将u-boot.bin文件烧录到Norflash上没有正常启动,考虑到tq2440.h文件中的CONFIG_SYS_TEXT_BASE 值时0x33FC0000,我们将其修改为0,毕竟这个是绝对地址. #define CONFIG_SYS_TEXT_BASE 0 修改.编译.烧录后运行: 结果还是不能运行,这是什么原因呢? 将bootstrap.bin文件重新烧录到Norflash中,将u-boot.bin烧录到SDRAM的0x33fc0000位置,运行也不成功. 将CONFIG_SY

u-boot-2014.10移植第15天----nor flash操作

硬件平台:tq2440 开发环境:Ubuntu-3.11 u-boot版本:2014.10 本文允许转载,请注明出处:http://blog.csdn.net/fulinus 去除nor flash写保护 在已经运行起来的u-boot命令行去除nor flash写保护: TQ2440 # flinfo Bank # 1: EON EN29LV160AB flash (16 x 16) Size: 2 MB in 35 Sectors AMD Legacy command set, Manufac

u-boot-2014.10移植第19天----添加nand flash命令支持(一)

今天继续移植nand flash,对于很多情况而言,u-boot从nand flash启动是一个至关重要的功能,毕竟NOR flash成本太高,不是所有开发板都会添加NOR flash. u-boot中的SMDK2410模板是没有支持从nand flash启动的功能的,但是却有支持操作nand_flash的操作命令,2410和2440在nand flash支持上的区别有: 1.2410仅支持小块nandflash,2440则同时支持大块nandflash:2.为支持大块nandflash,244

2014年4月23日 10:22:08

step 1 : 做tcp网络编程,要解析一批批的数据,可是数据是通过Socket连接的InputStream一次次读取的,读取到的不是需要转换的对象,而是要直接根据字节流和协议来生成自己的数据对象. 按照之前的编程思维,总是请求然后响应,当然Socket也是请求和响应,不过与单纯的请求响应是不同的. 这里Socket连接往往是要保持住的,也就是长连接,然后设置一个缓冲区,网络流不断的追加到缓冲区.然后后台去解析缓冲区的字节流. http://cuisuqiang.iteye.com/blog/