2010-06-22 6 views
3

필자는 동일한 장치 드라이버를 사용하여 여러 유사한 장치에 액세스해야하는 여러 Linux 환경에서 프로세스를 사용하고 있습니다. 내 문제는 하나의 프로세스 instantiate 장치 (인스턴스화하여, mknod 뜻) 파일, 그리고 부 번호를 사용하는 경우 0과 1 두 장치에 대한 말. 그렇다면 동일한 프로세스를 수행하는 동안 다른 프로세스가 사용할 부 번호를 어떻게 알 수 있습니까?리눅스 장치 드라이버의 부 번호를 얻는 방법은 무엇입니까?

요약하면 응용 프로그램 공간에서 동일한 드라이버를 사용하는 장치 파일 수를 찾을 수 있습니까?

+1

연설 에서처럼 무료로 또는 맥주에서 무료로 사용하거나 미사용에서 무료로 제공합니까? ;) –

+0

@Mark and criss, 제목은 "사용하지 않은 미성년자를 얻는 방법 ..."을 읽어야합니다! –

답변

1

작성중인 드라이버 또는 적어도 소스를 가지고 있다고 가정 할 때 0으로 시작하는 숫자 순서대로 (간략히) 작은 번호를 사용해보십시오. 드라이버가 인스턴스화 된 부 번호/장치의 수를 추적하고 sysfs의 항목을 통해 해당 개수를 노출하게하십시오. 새 장치를 인스턴스화하려면 새 장치의 부 번호에 현재 변수 값을 사용하고 변수를 증가 시키십시오 (드라이버 내부).

3

내 문제는 하나 개의 프로세스가 장치를 instantaiates 경우 (인스턴스화에 의해, 내가 mknod에 의미) 일반적으로 정적 주/번호 할당하고 커널의 내부 * NIX 세계 장치에서

파일이다. 정적으로이라는 의미에서, 현재 리눅스 아래에있는 대부분의 장치는 동적 인 major/minor를 가지며/dev (또는/proc 또는/sys) 아래의 장치 노드를 통해 액세스됩니다.

IOW, 사용자 공간 응용 프로그램은 드라이버 (또는 장치)와 통신하기 위해 이미 메이저/마이너가 드라이버에 액세스 할 수있는 방법을 알아야하기 때문에이를 수행 할 수 없습니다.

자세한 내용은 the 3rd chapter of LDD을 참조하십시오. 여기에서 주/부 지정에 대한 설명이 논의됩니다.

/dev /에 자동으로 생성되는 장치는 일반적으로 udev으로 처리됩니다.이 장치는 익숙하지 않습니다.

+1

예, 장치 번호가 자동으로 할당됩니다. 드라이버가 원하는만큼의 번호를 가질 수 있으며, 하드웨어가 물리적으로 사용 가능 해지면 (즉, 핫 플러그 ​​이벤트에 응답하거나 초기화 할 때) 할당됩니다. – MarkR

0

드라이버가 등록한 장치가 사용하는 부 번호는 /sys 가상 파일 시스템의 응용 프로그램에서 볼 수 있어야합니다. 장치와 연결된 /sys/class/... 디렉토리/디렉토리에있는 dev 파일에는 major : minor가 포함되어 있습니다.

아마도 드라이버는 /sys/class/misc/.../을 사용하고 있습니다.

관련 문제