3.6 SATA
3.6.1 Introduction
SATA AHCI 드라이버는 Linux 커널 블록 디바이스 인프라의 LIBATA 레이어를 기반으로 한다. SATA의 자세한 하드웨어 작동은 Synopsys DesignWare Cores SATA AHCI 문서, SATA_Data_Book.pdf에 자세히 설명되어 있다.
3.6.2 Board Configuration Options
전원이 꺼진 상태에서 SATA 케이블과 하드 드라이브를 설치한다.
3.6.3 Software Operation
libata API에 대한 자세한 내용은, libATA Developer's Guide를 참조한다.
SATA AHCI 드라이버는 Linux 커널 블록 디바이스 인프라의 LIBATA 레이어를 기반으로 한다. i.MX에 통합된 AHCI Linux 드라이버는 표준 AHCI 드라이버를 결합하여 통합된 i.MX SATA AHCI 컨트롤러의 세부 사항을 처리하는 반면, LIBATA 레이어는 SATA 프로토콜을 이해하고 실행한다. 하드 디스크와 같은 SATA 디바이스는 /dev/sda* 인터페이스로 사용자 공간 애플리케이션에 노출된다. 파일 시스템은 블록 디바이스로 구축된다. AHCI는 DMA 전송 모드에서 SATA 컨트롤러 하드웨어를 지원하는 통합된 DMA 엔진을 지정한다.
3.6.4 Source Code Structure
i.MX AHCI SATA 드라이버의 소스 코드는 drivers/ata에 있다. 표준 AHCI와 AHCI 플랫폼 드라이버는 실제 SATA 작업을 수행하는 데 사용된다.
Table 30. SATA Driver Files
File | Description |
---|---|
drivers/ata/ahci_imx.c | i.MX AHCI SATA Driver |
drivers/ata/ahci.c | Standard AHCI 드라이버 |
drivers/ata/ahci-platform.c | Standard AHCI 플랫폼 드라이버 |
3.6.5 Menu Configuration Options
아래 Linux 커널 구성은 SATA 드라이버를 위해 제공된다:
Symbol: AHCI_IMX [=y]
Type : tristate
Prompt: Freescale i.MX AHCI SATA support
Location:
-> Device Drivers
-> Serial ATA and Parallel ATA drivers (ATA [=y])
-> Platform AHCI SATA support (SATA_AHCI_PLATFORM [=y])
busybox에서 "Linux System Utilities" 아래 "fdisk"를 활성화한다.
3.6.6 Programming Interface
SATA 드라이버에 대한 애플리케이션 인터페이스는 /dev/sda*에 대한 표준 POSIX 디바이스 인터페이스(예: open, close, read, write, ioctl 등)이다.
3.6.7 Usage Example
참고: 다음과 같은 몇 가지 종류의 SATA 디스크는 초기화될 때, 알려진 오류 메세지가 있을 수 있다:
- ata1.00: serial number mismatch '090311PB0300QKG3TB1A' != ''
- ata1.00: revalidation failed (errno=-19)
이것은 무시해야 한다.
- 커널과 SATA AHCI 드라이버를 빌드하고 배포한 후, 대상을 부팅하고 루트로 로그인한다.
- AHCI와 AHCI 플랫폼 드라이버가 커널에 내장되어 있거나 커널에 로드되었는지 확인한다.
다음과 유사한 메시지가 표시되어야 한다:
ahci: SSS flag set, parallel bus scan disabled
ahci ahci: AHCI 0001.0300 32 slots 1 ports 3 Gbps 0x1 impl
platform mode
ahci ahci: flags: ncq sntf stag pm led clo only pmp pio slum
part ccc apst
scsi0 : ahci_platform
ata1: SATA max UDMA/133 mmio [mem 0x02200000-0x02203fff] port
0x100 irq 71
ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
ata1.00: ATA-8: SAMSUNG HM100UI, 2AM10001, max UDMA/133
ata1.00: 1953525168 sectors, multi 0: LBA48 NCQ (depth 31/32)
ata1.00: configured for UDMA/133
scsi 0:0:0:0: Direct-Access ATA SAMSUNG HM100UI 2AM1
PQ: 0 ANSI: 5
sd 0:0:0:0: [sda] 1953525168 512-byte logical blocks: (1.00
TB/931 GiB)
sd 0:0:0:0: [sda] 4096-byte physical blocks
sd 0:0:0:0: [sda] Write Protect is off
sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled,
doesn't support DPO or FUA
sda: sda1
sd 0:0:0:0: [sda] Attached SCSI disk
애플리케이션에서 마운트하고 사용하려는 드라이브에 파티션하고 파일 시스템을 생성하기(예: fdisk와 mke2fs) 위해 표준 Linux 유틸리티를 사용할 수 있다.
드라이브와 해당 파티션의 디바이스 노드는 /dev/sda* 아래에 나타난다. 예를 들어, 드라이브의 기본 커널 설정을 확인하려면, hdparm /dev/sda를 실행한다.
3.6.8 Usage Example
Create Partitons
아래 커맨드를 사용하여 하드 디스크의 용량을 확인할 수 있다. 하드 디스크가 미리 포맷된 경우, 이 명령은 하드 디스크의 크기, 파티션과 파일 시스템 타입을 보여준다:
$fdisk -l /dev/sda
하드 디스크가 포맷되지 않은 경우, 아래 커맨드를 사용하여 하드 디스크에 파티션을 만든다:
$fdisk /dev/sda
파티션 실행 후, 생성된 파일은 /dev/sda[1-4]와 유사하다.
Block Read/Write Test
커맨드 DD는 블록 읽기/쓰기에 사용된다. 이 커맨드는 하드 디스크의 파티션과 파일 시스템을 손상시킬 수 있다.
카드의 처음 5KB를 지우려면, 다음을 수행한다:
$dd if=/dev/zero of=/dev/sda1 bs=1024 count=5
응답은 다음과 같아야 한다:
5+0 records in
5+0 records out
아래 텍스트를 입력하여 카드에 파일 내용을 쓰려면, file_name을 저장할 파일 이름으로 대체하고 다음을 수행한다:
$dd if=file_name of=/dev/sda1
아래 텍스트를 입력하여 카드에서 1KB의 데이터를 읽으려면, output_file을 작성할 파일 이름으로 대체하고 다음을 수행한다:
$dd if=/dev/sda1 of=output_file bs=1024 count=1
Files System Tests
파일 시스템에 따라 mkfs.vfat나 mkfs.ext2를 사용하여 하드 디스크 파티션을 포맷한다:
$mkfs.ext2 /dev/sda1
$mkfs.vfat /dev/sda1
아래와 같이 파일 시스템을 마운트한다:
$mkdir /mnt/sda1
$mount -t ext2 /dev/sda1 /mnt/sda1
마운트 후, file/directory 작업은 /mnt/sda1에서 수행할 수 있다.
아래와 같이 파일 시스템을 언마운트 한다:
$umount /mnt/sda1