일단 한 걸음..

산 넘어 산의 연속이지만… 암튼 일단 한 걸음 전진…

처음에는 consistent_alloc() 대신 consistent_sync()를 써서 작동하도록 dsplink 소스를

고쳐 볼려고 했다.

흠.. 근데 이게 만만치가 않네… consistent_sync()를 쓸경우, 해당 메모리에서 읽고 쓸 때마다,

함수를 호출 해줘야 하는데… 이게.. 따라 가다 보니 영..-_-a

그래서 일단 consistent_sync()를 쓰는 부분을 그냥 메모리를 할당하도록 하고 함 돌려 봤다.

일단 모듈은 무사히 올라가는데… 허걱… loadandrun을 실행하니까 먼가 엄청난 메시지를

뱉으면서 죽어 버린다..-_-; 커널에 디버깅 옵션을 켜놔서 레지스트리랑 메모리 내용을

출력해주는 거 같다. 대충 paging 요구를 처리하지 못했다는 내용이네…

움… 결국 고쳐야 하나… 아님 2.4 소스에서 consistent_alloc()을 가져다가 넣어 버릴까?-_-

역시 가장 쉬운 해결 방법은….

커널 2.4로 하는건데;;;;;

쩝.. 일단은 좀더 해 보자 싶어서 소스를 여기 저기 뒤적이다가…

계속 들던 의문… consistent_alloc()이 왜 2.6에 와서 사라졌느냐는 거다.

거기다 더 이상한건 저 함수들이 보이는 아키텍쳐는 arm, ppc(?PowerPC), sh(?SuperH)뿐이라는 것…

일단은 우리의 친구 구글에서 consistent_alloc을 쳐 봤다.

오호.. 재수가 좋은 건가.. 첫번째 질문이 나랑 비슷한 처지인거 같았다.

이더넷 디바이스 드라이버를 2.4에서 2.6으로 포팅하는데 consistent_alloc() 땜에 곤란해

하고 있는 듯 했다(아마도-_-)

그에 대한 답변중에 Russell King이라는 사람(아마 ARM쪽 리눅스 담당자(?) 쯤 되는 사람인거

같다. 이름도 들어본거 같고..)이 쓴 글이 있는데…

대충 consistent_alloc()은 잘못된 인터페이스를 가지고 있어서 제거할 것이며,

2.6에서는 dma_alloc_cohernt()를 쓰라는 것이다.

아! 이거다 싶더군.

그래서 당장 커널 소스를 뒤져봤다. 오… consistent_alloc()하고 약간 다르긴 한데

거의 유사하다. 파라메터 순서가 좀 다르고, struct device 타입의 파라메터가 하나 더 있다.

이걸 적당히 셋팅해서 넘겨주기만 하면 되겠군… 이라고 생각했는데… 이게.. 꽤 복잡한

스트럭쳐다-_-;

그래서 일단은 NULL을 넘겨 주기로 했다;;;(저거 가지고 하는 것도 별로 없어 보이더라고-_-)

일단 예의 그 부분을 고치고… 컴파일, insmod, 그리고…

젠장… 상태가 아까 보다 더 심각하다… 아예 다운 되버리는군-_-;;;

끙… 좀더 수련이 필요할 듯 하다;;;

(아님 진짜 2.4로 하던가-_-)

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다