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

오랜만에 글 올립니다.

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
번호 제목 글쓴이 날짜sort 조회 수
368 [IRQ] IRQ 관련 질문 드립니다.[완료] [2] 김유석 2007-01-14 958
367 [답변]김의호씨의 SDL 관련입니다. 최현진 2007-01-13 996
366 [질문] SDL 관련 질문입니다. [완료] [3] 김의호 2007-01-13 963
365 [질문] 아래에 대한 보충입니다.[완료] [5] 양용현 2007-01-12 680
364 [질문] 아래의 질문 내용을 바꿔야 할것같습니다. [3] 양용현 2007-01-12 551
363 [질문] nand에 packaging을 한 후에는 타겟보드에 파일을 전송할 수... [3] 양용현 2007-01-12 749
362 이솝에 에뮬 게임 포팅 해 보신분.? [1] 유태경 2007-01-12 749
361 LCD를 24bpp로 쓰려면? [1] 이수 2007-01-12 718
360 [완료] bzip2를 스크래치박스에서 컴파일 해 보신분 계신가요?? [3] 문관경 2007-01-12 793
359 framebuffer에서 fb/0 을 사용하는것은 어떤 이유때문인가요?[완료] [2] 성진호 2007-01-11 828
358 ramdisk부트시 bootargs설정관련 질문. [완료] [1] 박기호 2007-01-11 1036
357 이솝 3차 보드 개발 환경 구축 120206.doc 에서 약간의 오타입니다... [2] 성진호 2007-01-11 752
356 aesop 3차 보드의 부팅 시간은 어느 정도인가요? [1] 성진호 2007-01-11 642
355 IRQ 핸들러 추가하기 질문 드립니다. [3] 김유석 2007-01-11 967
354 Compile 질문 드릴께요.[완료] [7] 김재우 2007-01-11 882
353 I2C GPIO 제어관련 [3] 이재훈 2007-01-11 926
352 DIY자료중 없는것이 있어서요..[완료] [2] 박기호 2007-01-11 676
351 이솝보드에서 xDSL 접속 [2] 이재훈 2007-01-11 681
350 시간이 늦게 흐릅니다. [완료] [2] 김영곤 2007-01-10 707
349 [완료] 아래 질문 드렸던 uc/os 자료 부탁드립니다^^ [5] 최정수 2007-01-10 631

사용자 로그인