강좌
클라우드/리눅스에 관한 강좌입니다.
자격증 분류

리눅스마스터1급 : 하드웨어관리, USB

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

리눅스마스터1: 하드웨어관리, USB

 

 

대부분의 USB를 지원하고 Hotplug를 지원하여 USB 장치를 꽂으면 자동으로 해당 USB를 인식하여 연결한다.

 

 

 

갤럭시 S의 경우에도 저장장치로 자동으로 인식한다.

 

 

 

USB 2.0를 지원함은 물론이고, USB 3.0도 리눅스 커널 2.6.31 버전부터 지원한다.

 

 

 

 

리눅스 커널은 이외에도 IEEE 1394 FireWire, V4L-DVB 등의 드라이버를 지원한다.

 

 

 

 

 

 

 

 

I/O 어드레스, IRQ DMA 채널

I/O 어드레스 등 PC에는 3개의 어드레스 공간(I/O, 메인 메모리, 설정)이 있다.

 

 

 

여기에서 설정은 PCI 버스에 한정된다.

 

 

 

이들 3종류의 어드레스는 PC 내부에서는 같은 버스를 공유하고 있다.

 

 

 

그러나 어떤 어드레스가 어느 공간(I/O, 메인 메모리, 설정)의 것인지는 PC의 버스상에 있는 전용의 배선의 전압을 사용해 전해진다.

 

 

 

최초의 디바이스는 I/O 어드레스 공간에 배치되고 있었지만, 현재는 메인 메모리 내의 공간을 사용하는 것도 있다.

 

 

 

I/O 어드레스는 단순히 “I/O”, “IO”, “i/o”, “io”라고 부르는 것도 있다.

 

 

 

I/O 포트라고 말하는 것도 사용된다.

 

 

 

I/O 어드레스(또는 인터럽트 등의 다른 패스 자원)는 이하의 2개의 주요한 스텝에 의해 나누어진다.

 

 

 

 

- I/O 어드레스 등을 카드(레지스터의 1)에 설정한다.

 

 

 

- I/O 어드레스 등을 디바이스 드라이버에 알린다.

 

 

 

 

위의 2개 스텝 처리는 길에서 누군가의 집의 번지를 찾아내는 문제를 2개로 나눈 것과 유사하다.

 

 

 

번지를 찾아내지 않으면(그리고 write down) 안 되고, 이 집의 소유자는 찾아낼 수 있도록 집 앞에 번지를 표시하지 않으면 안 된다.

 

 

 

컴퓨터의 경우에 디바이스 드라이버는 어드레스를 취득하지 않으면 안 되고, 디바이스 하드웨어는 같은 어드레스를 특정 레지스터에 설정하지 않으면 안 된다.

 

 

 

이 작업은 양쪽 모두 하지 않으면 안 되기 때문에, 사용자는 한쪽만 설정하는 실수를 할 수 있다.

 

 

 

이러한 경우에 컴퓨터는 디바이스를 검출할 수 없어 곤란해 진다.

 

 

 

예를 들면, 시리얼 포토에 어드레스를 할당할 목적으로 “setserial”을 사용해도, “setserial”은 드라이버에만 어드레스를 알려주지 않는다.

 

 

 

setserial은 시리얼 포트 자체의 어드레스는 설정하지 않는다.

 

 

 

실제로 시리얼 포트가 어드레스와 차이가 나면(혹은 완전히 설정되어 있지 않으면), 잘못된 어드레스를 드라이버에 설정하고 있는 것에 문제가 일어난다.

 

 

 

 

이 외에도 분명히 필요한 것으로 어떤 어드레스를 디바이스 드라이버가 사용하기 전에는 그 어드레스가 카드에 설정되고 있지 않으면 안 된다.

 

 

 

디바이스 드라이버는 컴퓨터가 시작된 직후에 동작을 시작하는 것이 많기 때문에 PnP 설정 프로그램이 카드 어드레스 설정을 행하기 전에 디바이스 드라이버가(카드가 있을지 어떨지를 조사하는 등을 위해서) 카드에 액세스하려고 하는 것도 때로는 있다.

 

 

 

이러한 경우에는 비록 카드가 있어도(아직 어드레스를 가지고 있지 않은), 카드가 발견되지 않는다는 에러 메시지가 표시된다.

 

 

 

 

IRQ

어드레스 외에도 취급하지 않으면 안 되는 인터럽트 번호(IRQ 5 )도 있다.

 

 

 

이것은 IRQ(Interrupt ReQuest, 인터럽트 요구) 번호라고 부른다.

 

 

 

디바이스 드라이버가 통신을 하기 위해서는 카드의 어드레스를 알 필요가 있는 것은 이미 기술했다.

 

 

 

그러나 역방향의 통신에 대해서는 어떨까? , 디바이스가 디바이스 드라이버에 즉시 전하지 않으면 안 되는 것이 있다면? 예를 들면 디바이스는 메인 메모리에 보내지 않으면 안 되는 대량의 바이트 열을 받았을지도 모른다.

 

 

 

이러한 경우에 디바이스는 즉시 이 바이트를 가져오기 위하여 그것의 드라이버를 호출하고, 주기억 장치에 디바이스에서 가까운 전체 버퍼로부터 그들을 옮기는 것이 필요하다.

 

 

 

 

디바이스는 어떻게 해서 도움을 요청하여야만 하는가? 메인 데이터 버스는 이미 사용되고 있는 것이므로 이것을 사용하는 것은 할 수 없다.

 

 

 

그 대신에 디바이스는 전용 인터럽트 선(버스의 일부)에 전압을 설정한다.

 

 

 

이 선은 많은 경우, 그 디바이스를 위해서만 예약된다.

 

 

 

이 신호는 인터럽트라고 부른다.

 

 

 

인터럽트 선에는 등가인 선이 16개 있고, 이것들은 각자(간접적으로) 특정 디바이스 드라이버에 연결되어 있다.

 

 

 

각자의 선에는 고유의 IRQ (Interrupt ReQuest) 번호가 붙어있다.

 

 

 

디바이스는 인터럽트를 정확한 선으로 보내지 않으면 안 되고, 디바이스 드라이버는 정확한 선에서 인터럽트를 기다리지 않으면 안 된다.

 

 

 

어느 선에서 인터럽트가 일어나는 지는 디바이스에 저장되고 있는 IRQ 번호에 의해 결정된다.

 

 

 

감시하는 IRQ가 디바이스 드라이브에게 알려주는 것과 같이 디바이스 드라이버에는 이것과 같은 IRQ 번호를 설정하지 않으면 안 된다.

 

 

 

 

디바이스 드라이버가 인터럽트(도움 요구)를 받으면, 디바이스 드라이버는 인터럽트가 발생된 이유를 조사하고, 인터럽트를 처리하는 적절한 동작을 하지 않으면 안된다.

 

 

 

ISA 버스의 경우에는 각각 디바이스에 고유의 IRQ 번호가 필요하다.

 

 

 

PCI 버스와(ISA 에서도) 특별한 경우에는 IRQ를 공유하는 것도 할 수 있다.

 

 

 

 

DMA 채널

DMADirect Memory Access(직접 메모리 액세스)라는 의미이다.

 

 

 

이것은 디바이스가 CPU로부터 컴퓨터 메인 버스를 계승하고, 바이트 열을 메인 메모리에 직접 전송을 하는 것이 허가되는 장소이다.

 

 

 

보통의 CPU는 이러한 전송을 2 스텝으로 처리한다.

 

 

 

 

- 디바이스의 I/O 메모리 공간으로부터 읽은 바이트 열을 CPU에 송신한다.

 

 

 

- 이 바이트 열을 CPU로부터 메인 메모리에 보낸다.

 

 

 

 

DMA를 사용하면 이 처리는 디바이스로부터 메모리로 직접 바이트열을 보내는 1 개의 스텝이 된다.

 

 

 

그러나 디바이스의 하드웨어에 이 기능이 있지 않으면 안 되기 때문에 반드시 모든 디바이스에서 DMA를 사용할 수 있는 것은 아니다.

 

 

 

또 메인 버스가 DMA 전송에 사용되고 있기 때문에 DMA가 동작하고 있을 때에는 CPU의 동작이 제한된다.

 

 

 

 

실제로 PCI 버스에는 DMA가 없지만, 그 대신에 DMA보다도 좀 더 좋은 기능이 있다.

 

 

 

그것은 bus mastering이다.

 

 

 

bus mastering의 동작은 DMA와 유사하여 DMA라고 부르는 것도 있다(“UltraDMA” 로 부르는 하드 디스크 드라이브). 이 기능을 사용하면, 디바이스는 일시적으로 버스의 소유자(bus master)가 되고, bus masterCPU에 있는 것같이 바이트 열을 전송할 수 있다.

 

 

 

bus mastering은 채널 번호를 전부 사용하지는 않는다.

 

 

 

왜냐하면 PCI 버스의 구조에서 PCI의 하드웨어는 현재의 bus masterbus master가 되려고 요구를 하고 있는 디바이스를 알 수 있기 때문이다.

 

 

 

따라서 PCI 버스에 대한 DMA 채널 할당은 없다.

 

 

 

 

DMA는 인터럽트를 이용해 처리하는 것도 할 수 있지만, 지연되기 때문에 DMA 요구라고 부르는 특별한 타입의 인터럽트를 사용하는 편이 빠르다.

 

 

 

인터럽트와 같이, DMA 요구에는 번호가 붙여져 있고, 요구를 한 디바이스를 식별할 수 있다.

 

 

 

이 번호는 DMA 채널이라고 부른다.

 

 

 

DMA 채널은 메인 버스를 모두 사용(또 동시에 1개 밖에 동작할 수 없다)하기 때문에 실제로는 이것들 모두가 같은 채널을 사용하는 의미이지만 DMA 채널번호를 사용하면 채널을 사용하고 있는 디바이스를 식별할 수 있다.

 

 

 

채널의 현재 상태를 저장하고 있는 하드웨어 레지스터가 마더보드상에 있다.

 

 

 

이와 같이 DMA 요구를 하기 위해서는 디바이스는 물리 디바이스의 레지스터에 저장되고 있는 DMA 채널 번호를 알고 있어야 한다.

 

 

 

 

메모리 영역

일부의 디바이스에는 메인 메모리 내의 어드레스 공간이 할당되어 있다.

 

 

 

이것은 많은 경우 공유 메모리(shared memory)또는 메모리 맵 I/O(memory map ped I/O)이다.

 

 

 

디바이스상의 ROM에 있는 것도 있다.

 

 

 

bus-resources를 논할 때에는 이것은 단순히 메모리라고 부른다.

 

 

 

이같은 디바이스도 I/O 어드레스 공간을 사용한다.

 

 

 

 

이러한 카드를 꽂았을 때는 실제로는(I/O 메모리가 아닌) 메인 메모리에 대한 메모리 모듈을 꽂는 것이 된다.

 

 

 

이것은 ROM(Read Only Memory)과 공유 메모리의 어느 쪽에서도 상관하지 않는다.

 

 

 

이 메모리는 디바이스와 메인 메모리 간의 직접 데이터 전송의 수단으로 사용된다.

 

 

 

그러나 이것은 실제로는 전송이 아니다.

 

 

 

디바이스는 자신 자신의 메모리에 데이터를 쓰고, 그것이 메인 메모리에도 쓰여지기 때문이다.

 

 

 

카드와 디바이스 드라이버의 어느 것도 이 영역이 어디에 있을지를 의식할 필요는 없다.

 

 

 

메모리 어드레스는 아마 매우 높은 위치에 놓여져 낮은 위치에 있는 컴퓨터의 메모리 칩 어드레스와 겹쳐질 일은 없다.

 

 

 

 

ROM의 취급은 다르다.

 

 

 

이것은 프로그램(아마 디바이스 드라이버)으로 있는 것이 많아 디바이스와 함께 사용된다.

 

 

 

아마 이것은 Windows상 뿐만 아니라 Linux상에서도 동작한다.

 

 

 

이것은 shadowed화 할 필요가 있을 지도 모른다.

 

 

 

shadowed화라는 것은 고속 동작을 하게 하기 위해서 ROM의 내용을 메인 메모리에 복사하는 것이다.

 

 

 

일단 shadowed화를 하면, 이 영역은 이제 읽기 전용에서는 없어진다.

 

 

 

 

디바이스와 드라이버의 양쪽에 있어서의 “resources”

디바이스 드라이버는 자신이 제어하는 하드웨어에 대해 할당되지 않으면 안 된다.

 

 

 

이것은 bus resourse(I/O, 메모리, IRQ, DMA)를 물리적인 디바이스와 디바이스 드라이버의 소프트웨어 양쪽에 공급하는 것에 의해 행해진다.

 

 

 

예를 들면 시리얼 포트는(4개 중) 2개의 자원, IRQI/O 어드레스만을 사용한다.

 

 

 

이 값은 양쪽 모두의 디바이스 드라이버와 물리적 디바이스에 공급하지 않으면 안 된다.

 

 

 

드라이버와 그 디바이스는 /dev 디렉토리 내에도 이름을 공급한다(ttyS1 ). 어드레스와 IRQ 번호는 물리적 디바이스 카드 레지스터 내(또는 마더보드상의 칩 내)에 저장된다.

 

 

 

점퍼의 경우에 이 정보는 반드시 디바이스의 하드웨어(카드 등)에 저장된다.

 

 

 

그러나 PnP의 경우에는 보통 PC의 전원을 끄면 레지스터의 데이터는 없어지게 되므로 resource dataPC의 전원을 넣을 때마다 매회, 각 디바이스에 대해 새롭게 공급하여야 한다.

 

 

 

 

 

 

 

 

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,037 명
  • 현재 강좌수 :  35,810 개
  • 현재 접속자 :  96 명