Q] sd card 용량 문제입니다.

nako의 이미지

au1200 cpu를 사용하는 EVM 보드에서 sd card를 테스트 중입니다.
(kernel 2.6.11)

목표는 4G 이상 시판 되는 SD card를 사용하는 것입니다.

sd card spec에는 >=2GB 는 sdhc spec으로 사용 가능하다고 되어 있더군요.

그런데 시판되는 SD card 중에는 4G, 8G도 있습니다. 물론 sdhc로 별도 표기 되지 않은 제품입니다.

혹자는 sd card의 2G용량 한계가 fat16에 따른 것이라고 하는데 정확한지도 잘 모르겠네요.

어쨌든 리눅스 상에서 sd card를 4G 이상 쓰려면 어떤 방법이 있는지 알고 싶습니다.

또는 sd card를 사용하는데서 kernel version 상의 차이가 있다면 어떤 것이 있는지도 알려주시면 고맙겠습니다.

bushi의 이미지

전용 SD 컨트롤러가 아니라면 사용하시는 SD카드리더에 더 영향을 많이 받습니다.
제가 파악하기론, 국내에서 애용되는 칩셋은 SDHC 를 검증을 받지 못했습니다. 언젠가 웹사이트를 돌아다니다 칩셋별로 테스트 결과를 적어놓은 것을 보긴 했는데... 기억이 나질 않네요.
다만, 중요한 것은, SDHC 를 지원하지 않는 칩셋을 사용한 SD카드리더라 해도 2G SD 카드를 읽고 쓰는덴 지장이 없다는 점입니다.

애석한 점은, 이것이 긍정적인 측면이 아니라 부정적인 측면의 중요한 점이라는 겁니다.
2G SD 는 tansfer block size 가 1024 byte 입니다.
4G SD 는 2048 byte 겠지요(없어서 확인 못했습니다)
FAT 에서 따지는 hard block size 즉 device sector size 가 됩니다.
removable media 는 파티션을 나누지 않는 것이 MS windows 의 관례이나 불가능한 것도 아닙니다.
파티션 테이블에는 각 파티션의 시작위치와 크기 정보가 담기게 되는데, 이는 전적으로 hard block size 로 계산된 block address 여야만 합니다.
왜냐하면 media 의 파티션 테이블을 분석하는 시점에서 OS 는 전적으로 h/w 가 보고하는 정보에만 의존해야 하기 때문입니다.
SDHC 를 지원하지 않는 칩셋을 사용한 카드리더들은 실제 media 가 제공하는 정보를 사용하지 않고 일률적으로 512byte 로 보고합니다.
이렇게 잘못된 정보를 기반으로 작성된 파티션 정보가 기록된 media 를 제대로 된 카드리더나 컨트롤러를 가지는 기기에 접속할 경우 파티션정보가 제대로 전달되지 않습니다.
더욱 더 불행한 것은, 이렇게 잘못된 카드리더가 이미 널리 퍼져있기 때문에... 그것들에 의해 사용된 카드를 제대로 읽어내기 위해 리눅스 커널 드라이버에서도 h/w 정보를 무시하고 hard block size 를 512 byte 로 고정시켜야 한다는 점이지요.
때문에, 현재 2.6 커널에 들어가 있는 몇몇 컨트롤러(주로 MPU 에 내장된)에 대한 드라이버(drivers/mmc/) 들은 2G 이상의 SD 카드를 사용하는데 애로사항이 많습니다. 드라이버가 원칙대로 작성되어 있기 때문입니다.

FAT16 의 한계가 있긴 하지만....
FAT 은 media 의 hard block size 말고 logical sector 를 따로 가져가며,
이보다도 sectors per cluser 라는 것을 통해 용량을 극복합니다.
FAT16 이라는 것은 관리할 수 있는 cluster 의 갯수가 최대 2^16-1 개라는 뜻입니다. 65535 개입니다.
리눅스의 mkdosfs 옵션을 살펴보시면 포맷 옵션에 sectors per cluser 갯수를 설정할 수 있는 옵션을 보실 수 있습니다.
기억이 정확지는 않지만 최대 127개까지 가능했던 것 같습니다.
logical sector size 가 512byte 라 해도 최대 512*127*65535=4261347840 까지 FAT16 으로 감당이 됩니다. 다만, 1byte 짜리 파일을 만들어도 단순 데이타만을 저장하기 위해 512*127=65024 byte 가 낭비된다는 단점이 있습니다.

bushi의 이미지

간추리면, 카드리더를 사용하실 것이라면 카드리더에 사용된 칩셋을 알아보고 그 칩셋이 검증을 받은 칩셋인지 미리 확인해보는 겁니다. 사실상... 직접 확인하시기가 거의 불가능에 가깝겠습니다. 주변의 소문이나 이름난 전문 커뮤니티(디지털카메라등...)를 뒤져보면 혹시 정보가 있을지도 모르겠습니다.

전용 컨트롤러를 선택해야 하신다면,
컨트롤러의 스펙도 보세요. 제가 직업이 직업인지라 경험이 일천합니다만,
인기있는 MPU 들 중에서 SD 컨트롤러를 내장한 예를 들면 PXA25x 는 최대 transfer block size 가 1024byte 이고, PXA27x 는 2048byte 까지입니다.
윗 글에서 말씀드린 여자저차한 이유로 이리저리 꼼수를 부려 512 로 사용해야 하지만, 스펙은 스펙이죠.

사실상 SDHC 스펙은 용량보다는 속도 향상에 그 가치가 있습니다.

nako의 이미지

제가 사용중인 cpu에 sd 컨트롤러가 내장되어 있습니다.

따로 card reader를 사용하지 않지요.

그렇다면 내장 sd 컨트롤러의 transfer block size가 sd card의 block size를 지원한다면 mmc 이하의 드라이버를 수정해서 4G까지도 사용할 수 있다는 것으로 보아도 될는지요?

sd 관련 linux-mips 쪽의 메일링 리스트에 이것에 관한 간단 패치가 올랐다가 native directory 쪽의 강한 반대에 부딛힌듯 하던데...

가능한지 어떤지 모르겠습니다. 가능하기만 하다면 mmc 디렉토리를 손봐서라도 써야 하겠는데 말입니다.

bushi의 이미지

커널 drivers/mmc/ 는 MMC protocol 을 사용하여 구현되어 있습니다.

read/write 커맨드의 아규먼트로 address 를 넘겨줘야 합니다.
행인지 불행인지 애매하지만,
이 address 는 tansfer block size 와는 상관없는 media offset 이며 단위(unit) 은 byte 입니다.
unsigned 32bit 이므로 4G 까지입니다.

2G 까지는 SD protocol 과 꼼수를 사용하여 PXA27x 에서 사용했는데 4G 는 잘 모르겠습니다.
실제로 해보기 전에는 누구도 뭐라 못 할 것 같네요.

8G SD 카드가 있다면, 아마도 SD memory 가 아니라 SDIO 로 만들어진 놈이 아닐까 조심스레 추측해봅니다.
하여간, 가난해서... 4G 8G 카드는 구경도 못 해봤습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.