내 응용 프로그램 중 하나의 경우 SATA 장치 드라이버 프로세스를 이해해야 합니다. 제가 이해한 바에 따르면 SATA 장치 드라이버는 Linux 커널 트리에 존재해야 합니다. 나는 이미 언급했다Linux에서 장치와 관련된 드라이버 모듈을 찾는 방법SATA 장치용 장치 드라이버를 찾으십시오.
$ readlink /sys/block/sda/device/driver ../../../../../../../bus/scsi/d
위 위치로 가봤지만 장치 드라이버 파일을 찾을 수 없습니다.
usr@usr:/sys/bus/scsi/drivers/sd$ ll
total 0
drwxr-xr-x 2 root root 0 Dec 9 17:00 ./
drwxr-xr-x 4 root root 0 Dec 9 17:00 ../
lrwxrwxrwx 1 root root 0 Dec 9 17:47 2:0:1:0 -> ../../../../devices/pci0000:00/0000:00:1f.2/ata3/host2/target2:0:1/2:0:1:0/
--w------- 1 root root 4096 Dec 9 17:47 bind
--w------- 1 root root 4096 Dec 9 17:47 uevent
--w------- 1 root root 4096 Dec 9 17:47 unbind
usr@usr:/sys/bus/scsi/drivers/sd$
SATA 하드 드라이브용 시스템에 로드된 실제 장치 드라이버를 확인하는 방법을 제안해 주세요.
답변1
udevadm info
언급한 링크의 다른 답변에 설명된 대로 사용하십시오. 다음은 /sys
트리를 뒤로 탐색하는 동안 출력을 줄이기 위해 다양한 grep 변형을 사용하는 예입니다 .
$ udevadm info -a -n /dev/sda | egrep 'looking|DRIVER'
looking at device '/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda':
DRIVER==""
looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0':
DRIVERS=="sd"
looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0':
DRIVERS==""
looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata1/host0':
DRIVERS==""
looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata1':
DRIVERS==""
looking at parent device '/devices/pci0000:00/0000:00:1f.2':
DRIVERS=="ahci"
looking at parent device '/devices/pci0000:00':
DRIVERS==""
/dev/sda
따라서 SCSI 장치에 매핑된 내 시스템이 PCI 장치 (호스트 어댑터) 0:0:0:0
에 연결되어 있음 을 알 수 있습니다.ata1
0:00:1f.2
드라이버는 sd
블록 장치 처리를 담당하고, 드라이버는 ahci
SATA 호스트 어댑터 처리를 담당합니다.
답변2
이것은 커널 드라이버 코드를 찾는 방법에 대한 질문의 일부에만 대답하려고 시도합니다. 댓글로 추가하려고 했는데 너무 길어졌네요.
먼저 데비안 커널 소스 패키지를 설치하세요.
apt-get install linux-source-3.16
또는 해당 커널 버전이 무엇이든 상관없습니다. 그런 다음 소스를 /usr/src/linux-source-3.16.tar.xz
.
이제 /usr/local/src/linux
디렉토리를 생성하고 거기에 소스 코드를 복사하십시오. 지금 바로:
mkdir /usr/local/src/linux
이어서
cp -ar /usr/src/linux-source-3.16.tar.xz /usr/local/src/linux
이제 tar를 사용하여 압축을 풀 수 있습니다.
tar xvf linux-source-3.16.tar.xz
cd linux-source-3.16
그런 다음 원하는 장치 드라이버를 실행합니다 find
. 예:
/usr/local/src/linux/linux-source-3.16$ find . -name 'sg.c'
./drivers/scsi/sg.c
그럼 문제의 운전자는
/usr/local/src/linux/linux-source-3.16/drivers/scsi/sg.c
에 나열된 모든 모듈은 목록에 나타나는 이름과 같은 형식 lsmod
으로 소스 트리에 위치해야 합니다 .modname.c
modname
lsmod