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; }
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); } }
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(); }