기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.
안녕하세요.
요즘 회사에서 판매중인 제품의 칩 SDK가
업데이트 되면서 리눅스 커널도 2.6.37로 업데이트작업을
하고 있습니다. 업데이트 후 이상 증상이 보이는데
궁금한게 있어서 이렇게 질문 드립니다.
이전 버젼에서 커널 부팅 시 파라미터에 bigphysarea=5000을 주고 사용중이었습니다.
원래는 기본값이 2000인데 어떤 문제때문에 5000으로 바꼈다고 하더라구요.
그래서 커널과 SDK를 업데이트 하면서 어플리케이션 실행 시 fork 함수와
system() 함수(c언어 라이브러리에 있는) 호출이 안되더군요.
perror 로 찍어보면 cannot allocate memory 라고 나옵니다.
bigphysarea=2000으로 바꾸면 잘 되구요. 5000으로 할 때 메모리가 모자르거나 하지는 않습니다.
이 bigphysarea의 역할을 찾아보니 드라이버단에서 쓸 수 있는 메모리? 정도로 이해했는데요.
가용 메모리가 충분한 상황인데 왜 이 bigphysarea의 값에 따라 fork 나 system 함수에 호출에
문제가 생기는지 궁금합니다. 혹시 힌트 될 만한 것이라도 있으면 가르쳐주십시오.
감사합니다.
1. bigphysarea는 공식 커널에는 없는 것으로 알고 있습니다.
==> 패치하신 듯 하고요.
2. 2000-->5000 이면 3000x4k 만큼 메모리를 할당받는 것으로 보여집니다. 대략 bootmem쪽에 미리 allocation하는 듯 하고요.
3. 정상적인 방법은 아니라고 보여집니다만, 많은 메모리를 DMA로 쓰기 위해서 2000-->5000으로 변경을 한 듯 한데, 값을 적절히 줄여보시기 바랍니다.
4. 가장 좋은 방법은 DMA 메카니즘을 다른 방법으로 사용하시는 것입니다.
5. 위 증상은 실제 가용 메모리가 없어서 그렇습니다.