|
在执行env_relocate_spec()
会依次调用nand_read(&nand_info[0], CFG_ENV_OFFSET, &total, (u_char*)env_ptr)
依次调用static int nand_read (struct mtd_info *mtd, loff_t from, size_t len, size_t * retlen, u_char * buf)
{
return nand_read_ecc (mtd, from, len, retlen, buf, NULL, NULL);
}
依次调用static int nand_read_ecc (struct mtd_info *mtd, loff_t from, size_t len,
size_t * retlen, u_char * buf, u_char * oob_buf, struct nand_oobinfo *oobsel)
{ 。。。。。。忽略部分代码
if (aligned)
data_poi = &buf[read];
else
data_poi = this->data_buf;
。。。。。。忽略部分代码
}
问题:data_poi = &buf[read]中的&buf[read]指向什么地方?首先buf[read]应该与实参数(u_char*)env_ptr对应,请问大虾们&buf[read]指向结构体struct environment_s
还是指向结构的成员data[ENV_SIZE]; 如果是指向data[ENV_SIZE];为什么不用env_ptr-〉data[read]的表示方法。对data_poi = &buf[read]这种表示方法很困惑!
在nand_read(&nand_info[0], CFG_ENV_OFFSET, &total, (u_char*)env_ptr) 中的实参
(u_char*)env_ptr在其他文件中定义为指向结构体的指针env_t *env_ptr = 0;
env_ptr = (env_t *)malloc (CFG_ENV_SIZE);
env_t 结构体的定义如下:
typedef struct environment_s {
unsigned long crc; /* CRC32 over data bytes */
#ifdef CFG_REDUNDAND_ENVIRONMENT
unsigned char flags; /* active/obsolete flags */
#endif
unsigned char data[ENV_SIZE]; /* Environment data */
} env_t;
|
|