기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.

오랜만에 글 올립니다.

Pollux에 2.6.24커널에 1GB MLC 사용하다가 이번에 2GB MLC를 사용하기 위해

소스를 수정 했습니다.  

기존 소스를 바로 적용했을때 낸드 아이디와 사이즈 정보를 제대로 얻어와서

mtd 포멧 및 UBI 이미지 라이팅을 하려고 하니 여러 에러가 나타나서 아래 부분 소스를

데이터 시트 내용으로 하드코딩을 했습니다. (페이지사이즈, OOB 사이즈, 블럭사이즈)

소스대로 결과를 출력해 보면 위의 항목들이 * 2(2배) 로 입력 되네요..

static struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd,
                                                  struct nand_chip *chip,
                                                  int busw, int *maf_id)
{
        struct nand_flash_dev *type = NULL;
        int i, dev_id, maf_idx;

        /* Select the device */
        chip->select_chip(mtd, 0);

        /* Send the command for reading device ID */
        chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);

        /* Read manufacturer and device IDs */
        *maf_id = chip->read_byte(mtd);
        dev_id = chip->read_byte(mtd);

        /* Lookup the flash id */
        for (i = 0; nand_flash_ids[i].name != NULL; i++) {
                if (dev_id == nand_flash_ids[i].id) {
                        type =  &nand_flash_ids[i];
                        break;
                }
        }

        if (!type)
                return ERR_PTR(-ENODEV);

        if (!mtd->name)
                mtd->name = type->name;

        chip->chipsize = type->chipsize << 20;
        
        printk(KERN_INFO ">> %ul type->chipsize << 20 n", chip->chipsize );                                

        /* Newer devices have all the information in additional id bytes */
        if (!type->pagesize) {
                int extid;
                /* The 3rd id byte holds MLC / multichip data */
                chip->cellinfo = chip->read_byte(mtd);
                /* The 4th id byte is the important one */
                extid = chip->read_byte(mtd);
                /* Calc pagesize */
                mtd->writesize = 1024 << (extid & 0x3);

                extid >>= 2;
                /* Calc oobsize */
                mtd->oobsize = (8 << (extid & 0x01)) * (mtd->writesize >> 9);

                extid >>= 2;
                /* Calc blocksize. Blocksize is multiples of 64KiB */
                mtd->erasesize = (64 * 1024) << (extid & 0x03);
                
                extid >>= 2;
                /* Get buswidth information */
                busw = (extid & 0x01) ? NAND_BUSWIDTH_16 : 0;
/*hard cording by bnjang [20081205]*/                        

                mtd->writesize = 2048;   //하드코딩!
                mtd->oobsize = 64;       //하드코딩!
                mtd->erasesize = 262144; //하드코딩!

수정한 이후에는 정상적으로 mtd 포멧 및 UBI 이미지 라이팅(Root 파일시스템)이 수행 되는데,

재부팅을 하게 되면 아래와 같은 결과 입니다. ㅠㅠ

UBI warning: io_init: EC and VID headers are in the same minimal I/O unit, switch to read-only mode
UBI error: ubi_read_volume_table: the layout volume was not found
UBI error: ubi_init: cannot attach mtd1
UBI error: ubi_init: UBI error: cannot initialize UBI, error -22
UBIFS error (pid 1): ubifs_get_sb: cannot open "ubi0:rootfs", error -19
VFS: Cannot open root device "ubi0:rootfs" or unknown-block(0,0)
Please append a correct "root=" boot option; here are the available partitions:
1f00       4096 mtdblock0 (driver?)
1f01     131072 mtdblock1 (driver?)
1f02    1961984 mtdblock2 (driver?)
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

몇일째 헤메고 있는데 아직 방법을 찾지 못해 도움을 요청 드립니다.

감사 합니다~


장병남

2008.12.09 06:09:06
*.90.134.115

위에 나와 있는 루틴은 데이터시트를 찾아보면 위 소스대로 커맨드를 줘서 읽어온 값으로 페이지 사이즈, OOB 사이즈, 블럭사이즈를 구할수 있는데, 데이터시트에 나온 값은 페이지 2KByte, OOB 64Byte, 블럭사이즈 256KByte 인데 반해 구한 값은 4KB, 128B, 512KB의 값이 반환 됩니다.. 그래서 아래와 같이 하드코딩한 것이고요,, 위의 루틴으로 구한값으로 Ubiformat시 에러발생 합니다.

고현철

2008.12.09 12:13:04
*.111.183.138

datasheet를 봐야하는 문제네요...

계산을 일단 함 해보시기 바랍니다. block개수와 블럭 사이즈로요.
MLC nand는 datasheet를 보기전에는 답하기가 힘든 문제라서요

김종걸

2010.07.03 09:52:55
*.88.187.31

2GBytes MLC NAND Flash이면 Block size: 512KB, page size: 4096, OOB: 128 bytes 일겁니다.

linux-2.6.29까지는 (30버전 이상은 확실치 않아서..) 2048page 까지만 지원이 될 겁니다.

다음과 같이 하면 2GB MLC Nand 사용할 수 있습니다. (S3C6410 2.6.28 버전에서 저는 잘 사용하고 있습니다.)

 

1. MLC OOB ecclayout 변경

 

===> 2048 Page인 경우 아래와 같이 되고

static struct nand_ecclayout s3c_nand_oob_mlc_64 = {
 .eccbytes = 32,
 .eccpos = {
     32, 33, 34, 35, 36, 37, 38, 39,
     40, 41, 42, 43, 44, 45, 46, 47,
      48, 49, 50, 51, 52, 53, 54, 55,
        56, 57, 58, 59, 60, 61, 62, 63},
 .oobfree = {
  {.offset = 2,
   .length = 28}}
};

 

 

==> 4096 Page인 경우 두배로 늘려야 하므로 아래와 같이 (64번째부터 사용했는데.. 0번째만 아니면 됩니다.)

==> 물론 u-boot에서 ecclayout이 같아야 합니다.
static struct nand_ecclayout s3c_nand_oob_mlc_128 = {
 .eccbytes = 64,
 .eccpos = {
      64,  65,  66,  67,  68,  69,  70,  71,
      72,  73,  74,  75,  76,  77,  78,  79,
      80,  81,  82,  83,  84,  85,  86,  87,
            88,  89,  90,  91,  92,  93,  94,  95,
            96,  97,  98,  99, 100, 101, 102, 103,
           104, 105, 106, 107, 108, 109, 110, 111,
           112, 113, 114, 115, 116, 117, 118, 119,
           120, 121, 122, 123, 124, 125, 126, 127},
 .oobfree = {
  {.offset = 2,
   .length = 28+32}}
};

 

2. MAX OOB SIZE, MAX PAGESIZE 를 각각, 128, 4096으로 변경

 

저는 위와같이 u-boot와 커널을 수정하여 잘 사용하고 있습니다.

 

- [email protected] -

List of Articles
번호 제목 글쓴이 날짜 조회 수
368 일반 질답란입니다. 리눅스, wince, BSD, RTOS등등의.... 고도리 2007-10-16 2224
367 yaffs iozone 테스트 [1] 박지훈 2009-01-22 1175
366 aesop2440보드에 qt-embedded-4.4 올릴 때 문제 아시는 분 [4] 류경훈 2009-01-20 932
365 Angstrom compile후 진행사항 문의 [3] 박종석 2009-01-16 1064
364 6410 보드 양산시 메모리 인식 문제 [4] 성인제 2009-01-07 1191
363 mplayer의 실행 좌표 질문입니다. [1] 박선종 2009-01-05 797
362 Angstrom이 무엇인가요? [1] 박종석 2009-01-04 828
361 RVDS 2.2 설치 [6] 한영민 2008-12-31 6535
360 aesop커널에 crmafs올릴려면..(질문 조금 수정했습니다.) [2] 배신규 2008-12-31 938
359 고도리님께 질문 [3] 박선종 2008-12-30 822
358 U-boot에서 usb storage 인식하기. 최종환 2008-12-30 1509
357 nand flash 설정 문의 [1] 정대현 2008-12-24 917
356 [완료]uboot 1.0.0에 aesop kernel 2.6버전을 올려도 되나요? [2] 배신규 2008-12-19 693
355 u-boot에서 flash관련... [2] 김경식 2008-12-15 939
354 QT에서 tslib를 사용하지 않고 touch 사용? [1] 정원 2008-12-13 1273
353 [질문] 임베디드 개발자 분들에게 질문드려요(parallel 카드) [4] 고태현 2008-12-12 714
352 u-boot1.1.6 nand read 에러문의 [3] 정대현 2008-12-09 1033
» [질문]POLLUX에서 2GB MLC(K9GAG08U0M) 에러 관련... [3] 장병남 2008-12-09 1584
350 nand read 에러문의 [3] 정대현 2008-12-09 1012
349 flash제어에 관한 문의입니다. [2] 강용근 2008-12-08 815

사용자 로그인