PCI에 달린 램드라이브하고 비슷한 모듈은 무엇일까요?
글쓴이: Fe.head / 작성시간: 목, 2004/04/15 - 12:58오전
일명 PCI 슬롯에 달린 램드라이브의 모듈을 포팅하고 있는데요.
[대충 Linux 커널 드라이버 내용 설명하자면 디스크 드라이버 구조체를 쓰고 (struct gendisk 맞나?) 그리고.. init, clanup, open, close, ioctl 함수를 가지고 있습니다.]
Linux --> Free Bsd 5.1 버전으로 하고 있습니다.
www.kr.freebsd.org 에 있는 kld 문서을 보면 char 디바이스 프로그램하고 proc 디바이스 프로그램 정도가 나와있더군요..
이정도의 내용으로는 드라이버 포팅을 못할것 같은데요..
무엇을 봐야할지 모르겠습니다. atapi-cd.c 파일을 봤는데.. 비슷한점이 보이더군요.. 하지만.. 잘 모르겠습니다.
bsd 커널 소스중 어느것이 비슷할까요? (아마도 램드라이브가 가장 비슷할것 같은데....)
커널 소스파일명좀 가르켜 주세요..
PS) 그리고 Linux소스중 spin_lock 을 대처할 bsd 커널 함수는 무엇인가요?( 뮤텍스 인가요?)
Forums:
FreeBSD 의 블록 디바이스 드라이버 하나를 정해서 불필요한 기능을
FreeBSD 의 블록 디바이스 드라이버 하나를 정해서 불필요한 기능을 전부 빼고, 필요한 부분만 수정하시면 될것 같습니다. dev/ida/ 에 있는 드라이버가 블록 디바이스 드라이버중 비교적 간단하게 보이더군요. 간단하다고는 하지만 포팅하기 위해선 리눅스와 BSD 를 다 알아야 하므로 머리가 꽤 아프시겠죠.
ATAPI-CD 는 이 경우에는 조금 부적절한데, read-only 인데다가 SCSI 인터페이스 관련 코드가 있기 때문에 불필요한 부분이 더 많아 보이는군요.
혹 회사 관련된 업무가 아니라면 kldp.net 에 프로젝트를 등록하고 오픈소스로 개발하면 재미있지 않을까요?
spinlock 대용으로 뮤텍스 쓰는것 맞는듯합니다. spl***() 과 splx() 등으로 사용한 드라이버도 있지만 기왕이면 각각의 디바이스 인스턴스에 lock을 하는것이 성능개선에 도움이 되겠죠.
참고로.. FreeBSD 버전 5에는 블록 디바이스라는 개념이 사라졌습니
참고로.. FreeBSD 버전 5에는 블록 디바이스라는 개념이 사라졌습니다.
확실히는 모르겠지만, 아마도 vm과 버퍼 캐시의 통합 덕분인 듯 합니다.
http://www.freebsd.org/doc/en_US.ISO8859-1/books/arch-handbook/driverbasics-block.html
그리고 커널의 synchronization을 위해서는, 5.X에서는 mutex(9)를 사용합니다.
spinlock은 mtx_lock_spin() 이 아닐까 싶네요~
커널 프로그래밍에 대해서는 아직 아는것이 거의 없지만.. da(4)를 지원하도록
만드는 것이 옳은 방향이 아닐까 싶습니다. 몇몇 스커지 디스크들이나, umass(4)
등이 지원하는 플래시 디스크들은 모두 /dev/da0 과 같은 식으로 나타나더군요.
----
Let's shut up and code.
답변 감사합니다.. hb_kim 님. 그리고 sangwoo 님..
답변 감사합니다.. hb_kim 님. 그리고 sangwoo 님..
회사 업무이기 때문에 힘들것 같습니다.. ㅠㅡㅠ..
아구. 이말씀은 잘 모르겠네요.. da라..
PCI에 달린 램디스크는 말 그대로 거의 하드 디스크 대용으로 초고속의 파일 입출력을 위해 쓸것인데.. 이것도 da에 해당 되는지?
근데.. 블록 디바이스가 사라졌다면 어떤 소스를 참고 해야 하나요?
(현재 집에 있어서.. 내일부터나 확인이 가능할것 같습니다.)
고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"
OS 에서 블록 디바이스 개념이 어떻게 없어질수가 있나요? :shock
OS 에서 블록 디바이스 개념이 어떻게 없어질수가 있나요? :shock:
단지 버퍼 캐시를 우회해서 직접 액세스 하지 못하도록 alias 를 없앴다는 이야기라고 생각되는군요.
sys/dev/ 에 가서 'grep strategy -r *' 해서 나오는 것들은 다 블록 디바이스 드라이버라고 보시면 됩니다.
da 는 SCSI direct access 디바이스인데, 이렇게 구현하시려면 SCSI 프로토콜을 어느 정도 아셔야 됩니다. 즉 블록 액세스 -> SCSI 명령으로 변환 -> SCSI 명령 decoding -> 메모리 카드 액세스의 순서를 거쳐야 되는데, 이중 SCSI 명령 decoding 과 메모리 카드 액세스를 드라이버에서 구현하셔야 됩니다. 굳이 이렇게 할 필요는 없겠지만, 커널 프로그래밍을 자유자재로 하면서 SCSI 프로토콜도 이해하고 있다면 경력에 엄청난 도움이 되시겠죠.
umass 가 da 로 보이는것은 USB mass storage 가 USB 전송 프로토콜위에 SBP2 를 이용해서 SCSI 논리 프로토콜을 구현하기 때문에 그렇습니다. 이 경우와는 상관이 없겠죠.
md 를 기본으로 포팅하기를 권해드리기도 꺼림찍한것은, md 는 로컬 메모리를 대상으로 한다는 가정하에 작성되었기 때문에 많은 레이어를 (특히 버퍼 캐시) 스킵하고 vnode 인터페이스를 직접 구현하고 있습니다. 따라서 로컬 메모리보다 느린 액세스 시간을 갖는 메모리 카드에 직접 적용하기에는 부적절하겠죠.
메모리 카드가 어떤식으로 동작하는지 궁금하군요.
댓글 달기