VIVI中私有数据的管理
时间:2010-05-21 来源:charming2440
linux_cmd | 16K |
parameter_tlb | 16K |
MTD_partition | 16K |
int init_priv_data(void) |
static inline int |
int get_default_param_tlb(void) |
vivi_parameter_t default_vivi_parameters[] = { |
typedef struct parameter { |
int default_nb_params = ARRAY_SIZE(default_vivi_parameters); |
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) |
然后就是拷贝vivi参数的魔数,我的理解魔数的作用其实就是一个简单检测的作用,在读取的时候先读取魔数,是否于我们设定的魔数相同,相同则继续,不相同说明失败。 这里的魔数是vivipara
const char vivi_param_magic[8] = {'V', 'I', 'V', 'I', 'P', 'A', 'R', 'A'}; |
下面来分析第二部分:
int get_default_linux_cmd(void) |
char linux_cmd[] = "noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0"; |
const char linux_cmd_magic[8] = {'V', 'I', 'V', 'I', 'C', 'M', 'D', 'L'}; |
下面就是最后一部分了,MTD_partition_tlb 还是先来看看他的函数源代码:
int get_default_mtd_partition(void) |
typedef struct mtd_partiton { |
#ifdef CONFIG_S3C2440_NAND_BOOT |
int |
来看if语句调用的函数:read_saved_priv_data_blk();
int //从vivi数据存放在nand flash中的地址,读取48K数据到buf缓存区中 //#define VIVI_PRIV_ROM_BASE 0x00fc0000 //#define VIVI_PRIV_SIZE 48K
char *src = (char *)(VIVI_PRIV_ROM_BASE); // size: 0x00010000, // flag: 0 // },
mtd_partition_t *part = get_mtd_partition("param"); |
mtd_partition_t *get_mtd_partition(const char *name) |
mtd_partition_t *mtd_parts = \ //下面的变量我是真没看懂,按理说(VIVI_PRIV_RAM_BASE + MTD_PART_OFFSET + 8)根本 //没定义,在之前的8个字节则是定义了mtd partition的魔数(VIVIMTDP),后面的8个字节 //没有赋值,然后在再是存放vivi partition的参数 //在这里我的理解是,他应该是希望把在MTD partition所定义分区的个数保存在此地址,这样才解释的通。但是我没找到,如果有知道的麻烦相告,[email protected] /*********************************************** * 后来看到了,这部分已经解决,看到了一个函数 /vivi/drivers/mtd/mtdpart.c * +--------------------------------+ * | magic (4 bytes) | * +--------------------------------+ * | number of partitions (4 bytes) | * +--------------------------------+ * | | * | partition table | * | | * +--------------------------------+ * */* * add mtd partitions */ int add_mtd_partition(mtd_partition_t *new_part) { int num = *nb_mtd_parts; mtd_partition_t *parts = mtd_parts;
memcpy((parts + num), new_part, sizeof(mtd_partition_t)); num++; *(nb_mtd_parts) = num; return 0; } 可以看出,每次增加一个mtd_partition分区,则加一,说明我前面的推断是正确的:)
************************************************/ |
read_mem(char *dst, char *src, size_t size) |