/* * _assert ile ilgili uniq/kernel.h'deki tanimlanan macroya bakildiginda * kullanimi hakkinda daha c*k bilgiye sahip olabilirsiniz. * * @param err : hata mesaji */ void _assert(const char *err,const char *file,uint32_t line_no){ debug_print(KERN_EMERG,"Kernel Assert Fault : %s",err); debug_print(KERN_DUMP,"file name : %s, line : %u",file,line_no); disable_irq(); halt_system(); }
/* * die,kendisine verilen formatli yada formatsiz karakter * dizisini hata mesaji olarak ekrana yazdirir ve debug_print'i * direk kullanirken sistem calismaya devam ederken 'die' ile * sistem durdurulur. * * @param fmt : format * @param ... : argumanlar */ void die(const char *fmt, ...){ char err_msg[4096]; va_list arg_list; va_start(arg_list,fmt); vsnprintf(err_msg,sizeof(err_msg)-1,fmt,arg_list); debug_print(KERN_EMERG,"%s",err_msg); va_end(arg_list); disable_irq(); halt_system(); }
int main(int argc, char *argv[]) { struct sigaction act; int rc, rc1, rc2, readonly, clobbercfg; clobbercfg = readonly = 0; openlog("flatfsd", LOG_PERROR, LOG_DAEMON); while ((rc = getopt(argc, argv, "vcnribwH123hs?")) != EOF) { switch (rc) { case 'w': clobbercfg++; readonly++; break; case 'r': readonly++; break; case 'n': nowrite = 1; break; case 'c': #if !defined(USING_FLASH_FILESYSTEM) rc = flat_check(); if (rc < 0) { #ifdef LOGGING char ecmd[64]; sprintf(ecmd, "/bin/logd chksum-bad %d", -rc); system(ecmd); #endif printf("Flash filesystem is invalid %d - check syslog\n", rc); } else { printf("Flash filesystem is valid\n"); #ifdef LOGGING system("/bin/logd chksum-good"); #endif } exit(rc); #else exit(0); #endif break; case 'v': version(); exit(0); break; case 's': log_caller("/bin/logd flatfsd-s"); exit(saveconfig()); break; case 'b': log_caller("/bin/logd flatfsd-b"); exit(reboot_system()); break; case 'H': log_caller("/bin/logd flatfsd-h"); exit(halt_system()); break; case 'i': log_caller("/bin/logd flatfsd-i"); exit(reset_config()); break; case '1': fsver = 1; break; case '2': fsver = 2; break; case '3': fsver = 3; break; case 'h': case '?': usage(0); break; default: usage(1); break; } } if (readonly) { rc1 = rc2 = 0; if (clobbercfg || #if !defined(USING_FLASH_FILESYSTEM) ((rc = flat_restorefs()) < 0) || #endif (rc1 = flat_filecount()) <= 0 || (rc2 = flat_needinit()) ) { #ifdef LOGGING char ecmd[64]; /* log the reason we have for killing the flatfs */ if (clobbercfg) sprintf(ecmd, "/bin/logd newflatfs clobbered"); else if (rc < 0) sprintf(ecmd, "/bin/logd newflatfs recreate=%d", rc); else if (rc1 <= 0) sprintf(ecmd, "/bin/logd newflatfs filecount=%d", rc1); else if (rc2) sprintf(ecmd, "/bin/logd newflatfs needinit"); else sprintf(ecmd, "/bin/logd newflatfs unknown"); system(ecmd); #endif syslog(LOG_ERR, "Nonexistent or bad flatfs (%d), creating new one...", rc); flat_clean(1); if ((rc = flat_new(DEFAULTDIR)) < 0) { syslog(LOG_ERR, "Failed to create new flatfs, err=%d errno=%d", rc, errno); exit(1); } save_config_to_flash(); } syslog(LOG_INFO, "Created %d configuration files (%d bytes)", numfiles, numbytes); exit(0); } creatpidfile(); act.sa_handler = sighup; memset(&act.sa_mask, 0, sizeof(act.sa_mask)); act.sa_flags = SA_RESTART; act.sa_restorer = 0; sigaction(SIGHUP, &act, NULL); act.sa_handler = sigusr1; memset(&act.sa_mask, 0, sizeof(act.sa_mask)); act.sa_flags = SA_RESTART; act.sa_restorer = 0; sigaction(SIGUSR1, &act, NULL); act.sa_handler = sigusr2; memset(&act.sa_mask, 0, sizeof(act.sa_mask)); act.sa_flags = SA_RESTART; act.sa_restorer = 0; sigaction(SIGUSR2, &act, NULL); act.sa_handler = sigpwr; memset(&act.sa_mask, 0, sizeof(act.sa_mask)); act.sa_flags = SA_RESTART; act.sa_restorer = 0; sigaction(SIGPWR, &act, NULL); /* Make sure we don't suddenly exit while we are writing */ act.sa_handler = sigexit; memset(&act.sa_mask, 0, sizeof(act.sa_mask)); act.sa_flags = SA_RESTART; act.sa_restorer = 0; sigaction(SIGINT, &act, NULL); sigaction(SIGTERM, &act, NULL); sigaction(SIGQUIT, &act, NULL); register_resetpid(); /* * Spin forever, waiting for a signal to write... */ for (;;) { if (recv_usr1) { struct stat st_buf; recv_usr1 = 0; /* Don't write out config if temp file exists. */ if (stat(IGNORE_FLASH_WRITE_FILE, &st_buf) == 0) { syslog(LOG_INFO, "Not writing to flash " "because %s exists", IGNORE_FLASH_WRITE_FILE); continue; } save_config_to_flash(); continue; } if (recv_hup) { /* * Make sure we do the check above first so that we * commit to flash before rebooting. */ recv_hup = 0; reboot_now(); /*notreached*/ exit(1); } if (recv_pwr) { /* * Ditto for halt */ recv_pwr = 0; halt_now(); /*notreached*/ exit(1); } if (recv_usr2) { #ifdef LOGGING system("/bin/logd button"); #endif recv_usr2 = 0; current_cmd++; if (cmd_list[current_cmd].action == NULL) /* wrap */ current_cmd = 0; } if (exit_flatfsd) break; if (current_cmd) led_pause(); else if (!recv_hup && !recv_usr1 && !recv_usr2 && !recv_pwr) pause(); } return 0; }