fat32형식에서 usb로 qt프로그램을 실행시키고 usb폴더에 저장을 하려고 합니다..그런데 40만바이트 이상 저장이 되면 에러가 발생하…
qt4 프로그램을 usb폴더에 옮겨 놓고 자동 마운트, 자동 실행까지 성공했습니다.
그런데 10만 2바이트를 현재 년, 시간 받아와서 파일 이름으로 만들고 저장을 하려고 합니다.
문제는 5번째 파일을 저장중에 임베디드 보드 커널 패닉이 납니다.ㅠㅠ 콘솔로 프로그램 해도 똑같이 안 되더라구요.ㅠㅠ
free 명령어를 보니
free 메모리 량이 계속 떨어지더라구요.. used는 증가하구요....
usleep으로 딜레이도 주고, 시스템 콜 함수를 사용하여 pdflush를 실행도 시키고 다 해봤는데 똑같은 현상이 발생합니다.ㅠㅠ
ps하니 pdflush 데몬이 47, 48번 이더라구요...ㅠㅠ
한달내 삽질하고 있는데 도저히 해결 방법을 못 찾겠습니다..ext2도 안 되더라구요..ㅠㅠ
void YouTubeD::SUFileSave()
{
QString fi = "/mnt/1203/select/acdata/S";
QString str= "";
QString ta = "";
char m[1025];
QDate dt = QDate::currentDate();
str = tr("%1").arg(dt.year());
str = str.mid(2, 2);
ta.sprintf("%#2.2d", dt.month());
str.append(ta);
ta.sprintf("%#2.2d", dt.day());
str.append(ta);
fi += str;
fi += "_";
QTime ti = QTime::currentTime();
QString tim="";
ta.sprintf("%#2.2d", ti.hour());
tim.append(ta);
ta.sprintf("%#2.2d", ti.minute());
tim.append(ta);
ta.sprintf("%#2.2d", ti.second());
tim.append(ta);
tim += ".bin";
fi += tim;
sprintf(m, "%s", fi.toAscii().data()); char m_test[2];
long lp;
m_test[0]=m_Relay;
m_test[1]=0xff;
int fp = open(m, O_WRONLY | O_CREAT | O_TRUNC | O_SYNC, 0777);
printf("file save start\n");
if(fp)
{
write(fp,m_sur, 10000);
fsync(fp);
}
::close(fp);
::sync();
lp = syscall(47);
lp = syscall(48);
}
int k;
for(k=1;k<10;k++)
{
fp=open(m, O_WRONLY | O_APPEND | O_SYNC);
if(fp)
{
printf("save index : %d\n",k);
write(fp, m_sur+(k*10000), 10000);
::close(fp);
lp = syscall(47);
lp = syscall(48);
}
}
fp=open(m, O_WRONLY | O_APPEND | O_SYNC);
write(fp,m_test, 2);
::close(fp);
lp = syscall(47);
lp = syscall(48);
printf("file save end\n");
}
제발..아시는분 답변 부탁드립니다.ㅠㅠ
커널 버그
커널 버그 같습니다.
O_TRUNC 사용을 하지않도록 다시 작성해서 시험해보세요.
OTL
콘솔로 테스트 하고 있는데 20번째 저장때 커널 패닉이 납니다.
현재 usb 파일 저장만 작년 12월부터 계속 하고 있습니다. 40만 2바이트를 저장하는데 콘솔 프로그램은 20번째 저장만 하면 커널 패닉이 나네요...ㅠㅠ
free하면 used 메모리 부분이 계속 감소하다가 커널 패닉이 납니다.
이 상황이면 커널 부분에서 어디 부분을 수정해야 할 까요? 거의 밤새 하다 시피하는데 혹시 아시는 분은 답변 부탁드립니다.
댓글 달기