static void env_init(void)
{
	int ret, i;
	int checksum = 0;
	
	if (env_init_done) {
		return;
	}

	pr_notice("[%s]ENV initialize\n", MODULE_NAME);

	env_buffer = (char *)kzalloc(CFG_ENV_SIZE, GFP_KERNEL);
	if (!env_buffer) {
		pr_err("[%s]malloc env buffer fail\n", MODULE_NAME);
		return;
	}
	
	g_env.env_data = env_buffer + CFG_ENV_DATA_OFFSET;
	ret = read_env_area(env_buffer);
	if (ret < 0) {
		pr_err("[%s]read_env_area fail\n", MODULE_NAME);
		goto end_read_fail;
	}

	memcpy(g_env.sig_head, env_buffer, sizeof(g_env.sig_head));
	memcpy(g_env.sig_tail, env_buffer + CFG_ENV_SIG_1_OFFSET, sizeof(g_env.sig_tail));
	
	if (!strcmp(g_env.sig_head,ENV_SIG) && !strcmp(g_env.sig_tail,ENV_SIG)) {		
		g_env.checksum = *((int *)env_buffer + CFG_ENV_CHECKSUM_OFFSET/4);
		for (i = 0; i < CFG_ENV_DATA_SIZE; i++) {
			checksum += g_env.env_data[i];
		}
		if (checksum != g_env.checksum) {
			pr_err("[%s]checksum mismatch\n", MODULE_NAME);
			env_valid = 0;
			goto end;
		} else {
			pr_notice("[%s]ENV initialize sucess\n", 
				  MODULE_NAME);
			env_valid = 1;
		}
	} else {
		pr_err("[%s]ENV SIG Wrong\n", MODULE_NAME);
		env_valid = 0;
		goto end;
	}
end:
	if (!env_valid) 
	{
		memset(env_buffer, 0x00, CFG_ENV_SIZE);
	}
	env_init_done = 1;
	return;
end_read_fail:
	env_init_done = 0;
}
Exemple #2
0
void env_init(void)
{
	int ret,i;
	env_buffer = (char *)malloc(CFG_ENV_SIZE);
	memset(env_buffer,0x00,CFG_ENV_SIZE);	
	g_env.env_data = env_buffer + CFG_ENV_DATA_OFFSET;
	ret = read_env_area(env_buffer);
	int checksum = 0;
	if(ret<0)
	{
		printf("[%s]read_env_area fail, ret = %x\n",MODULE_NAME,ret);
		env_valid = 0;
		goto end;
	}

	memcpy(g_env.sig,env_buffer,sizeof(g_env.sig));
	memcpy(g_env.sig_1,env_buffer+CFG_ENV_SIG_1_OFFSET,sizeof(g_env.sig_1));
	
	if(!strcmp(g_env.sig,ENV_SIG) && !strcmp(g_env.sig_1,ENV_SIG)){		
		g_env.checksum = *((int *)env_buffer+CFG_ENV_CHECKSUM_OFFSET/4);
		for(i=0;i<(int)(CFG_ENV_DATA_SIZE);i++){
			checksum += g_env.env_data[i];
		}
		if(checksum != g_env.checksum){
			printf("[%s]checksum mismatch s %d d %d!\n",MODULE_NAME,g_env.checksum,checksum);
			env_valid = 0;
			goto end;
		}else{
			printf("[%s]ENV initialize sucess\n",MODULE_NAME);
			env_valid = 1;
		}
		
	}else{
		printf("[%s]ENV SIG Wrong\n",MODULE_NAME);
		env_valid = 0;
		goto end;
	}
end:
	if(!env_valid){
		memset(env_buffer,0x00,CFG_ENV_SIZE);
	}
	
}
Exemple #3
0
void env_init(loff_t env_part_addr)
{
	int ret,i;
	int checksum = 0;
	struct proc_dir_entry *env_proc;
	printk("[%s]ENV initialize env_part_addr %llx\n",MODULE_NAME,env_part_addr);

	if(!env_part_addr){
		printk("env_part_addr is 0, env_init fail\n");
		return;	
	}
	
	env_addr = env_part_addr + CFG_ENV_OFFSET;
	
	env_buffer = (char *)kmalloc(CFG_ENV_SIZE,GFP_KERNEL);
	if(!env_buffer){
		printk("malloc env buffer fail\n");
		return;
	}
	memset(env_buffer,0x00,CFG_ENV_SIZE);	
	g_env.env_data = env_buffer + CFG_ENV_DATA_OFFSET;

    env_proc = proc_create("lk_env", 0600, NULL, &env_proc_fops);
    if (env_proc == NULL) {
        printk("create /proc/lk_env fail\n");
        return;
    }

	ret = read_env_area(env_buffer);
	
	if(ret<0)
	{
		printk("[%s]read_env_area fail, ret = %x\n",MODULE_NAME,ret);
		env_valid = 0;
		goto end;
	}

	memcpy(g_env.sig,env_buffer,sizeof(g_env.sig));
	memcpy(g_env.sig_1,env_buffer+CFG_ENV_SIG_1_OFFSET,sizeof(g_env.sig_1));
	
	if(!strcmp(g_env.sig,ENV_SIG) && !strcmp(g_env.sig_1,ENV_SIG)){		
		g_env.checksum = *((int *)env_buffer+CFG_ENV_CHECKSUM_OFFSET/4);
		for(i=0;i<CFG_ENV_DATA_SIZE;i++){
			checksum += g_env.env_data[i];
		}
		if(checksum != g_env.checksum){
			printk("[%s]checksum mismatch s %d d %d!\n",MODULE_NAME,g_env.checksum,checksum);
			env_valid = 0;
			goto end;
		}else{
			printk("[%s]ENV initialize sucess\n",MODULE_NAME);
			env_valid = 1;
		}
		
	}else{
		printk("[%s]ENV SIG Wrong\n",MODULE_NAME);
		env_valid = 0;
		goto end;
	}

end:
	if(!env_valid){
		memset(env_buffer,0x00,CFG_ENV_SIZE);
	}
	load_default_env();
}