'임베디드/7202'에 해당되는 글 5건

  1. 2006.10.26 [커널] mtd 관련 sst
  2. 2006.10.17 [u-boot] 랜덤 mac 주소와 dhcp - 061017
  3. 2006.10.13 [u-boot]아싸~ 성공 1.1.4 - 061013
  4. 2006.10.12 [U-Boot] 아~ 결국 1.1.4는 포기 - 061012
  5. 2006.10.11 [U-BOOT] 실패! flash 가 8bit.... - 061011

[커널] mtd 관련 sst

제목: mtd가 안되요

글쓴이: 초보왕
글쓴날: 2002년 09월 25일 오전 11:42
URL : http://kelp.or.kr/korweblog/?story=02/09/25/1740122


안녕하세요
mtd에 대해서 너무 모르는것이 많아서 질문을 올림니다.
우선 지금 제 앞에 있는 보드는
MPC850 cpu에 SST39VF040 128K를 부트롬으로 쓰고요
SST39VF160 2M를 두개부처서 4M를 커널 이미지와 루트파일을
initrd형태로 넣어 사용합니다. 램디스크로 부팅하고요
4M에서 남는 여분을 mtd를 써서 사용하고 싶은데요
제가 이쪽으로는 아는게 아무것도 없어서 많은 가르침 부탁드립니다.

소스를 쭉보니까 drivers/mtd 에 관련된것들이 있는거 같은데요
physmap.c 와 tqm8xxl.c 를 많이 쓰는거 같은데 뭐가 다른건지
모르겠어요
그리고 CFI와 JEDEC의 차이점도 모르겠거던요 어떤걸 쎠야하느지도
감이 안잡히고요 jedec.c와 jedec_probe.c에 칩 정보가 없길래
자료를 보면서 넣어보긴 했거던요.. 흠..
그리고 menuconfig할때 mtd설정을 모르겠어요
호스트 pc는 86계열이고 타겟은 ppc니까 빅엔디안 으로 하는게 맞는지..
2M짜리 칩을 두개써서 32bit 4M로 만들었는데 buswidth와 interleave는 어떻게 잡아야하는지..
SST칩에대한 옵션은 하나도 없는데 AMD껄로 해도 되는지..
주소가 부트롬이 E0000000이고 bank2가 E1000000으로 시작하는데 CFI Flash
physical memory map에다가 어떻게 써넣어야 하는지..
전혀 모르겠어요..
그래서 SST39VF160과 mtd로 검색한 결과.. 이런 말이 있더라고요

Add the device ID and Size info to jedec_probe.c
That code should handle the 55/aa bits already
- dwmw2

그래도 감이 안잡혀요.. 답변좀 해주새요~~~~
글쓴이: 초보왕
글쓴날: 2002년 10월 01일 오전 09:34

답변 감사드립니다.
지금 저의 상태는

jedec_probe.c 에

mfr_id: MANUFACTURER_SST,
dev_id: SST39VF160,
name: "SST 39VF160",
DevSize: SIZE_2MiB,
CmdSet: P_ID_AMD_STD,
NumEraseRegions: 1,
regions: {ERASEINFO(0x1000,512),
//ERASEINFO(0x10000,32),}
이부분을 추가했고요
drivers/mtd/chips/에있는 jedec_probe.c과 cfi_cmdset_0002.c를
수정하며 결과를 보고 있습니다.
unlock에 관한것은 잘은 모르지만..
unlock1 에 0x5555를, unlock2에 0x2aaa를 넣어주면 동작은 되는것
같던데요..

jedec_probe.c에서는

//cfi_send_gen_cmd(0xaa, cfi->addr_unlock1, base, map, cfi, CFI_DEVICETYPE_X8, NULL);
//cfi_send_gen_cmd(0x55, cfi->addr_unlock2, base, map, cfi, CFI_DEVICETYPE_X8, NULL);
cfi_send_gen_cmd(0xaa, cfi->addr_unlock1, base, map, cfi, CFI_DEVICETYPE_X16, NULL);
cfi_send_gen_cmd(0x55, cfi->addr_unlock2, base, map, cfi, CFI_DEVICETYPE_X16, NULL);

이렇게 8을 16으로 바꾸니까 잡히더군요.. 왜그런지는 모름니다.. 우선 잡히는게 급했지요.

그래서 나온 커널 메시지는

MTD Sharp chip driver <ds@lineo.com>
physmap flash device: 400000 at e1000000
Search for id:(bf 56) interleave(2) type(1)
Probe at addr_unlock1(0x00000000 + 0x00555555) past the end of the map(0x003fffff)
Search for id:(bf 2782) interleave(2) type(2)
Found: SST 39VF160
Physically mapped flash: Found 2 x16 devices at 0x0 in 16-bit mode
number of JEDEC chips: 1
mtd: Giving out device 0 to Physically mapped flash
Using physmap partition definition
Creating 3 MTD partitions on "Physically mapped flash":
0x00000000-0x000c0000 : "kernel"
mtd: Giving out device 1 to kernel
0x000c0000-0x003c0000 : "initrd"
mtd: Giving out device 2 to initrd
0x003c0000-0x003f0000 : "User FS"
mtd: Giving out device 3 to User FS

이렇게 나오더군요 Giving out device라는 메시지의 뜻이 뭔지 궁금합니다.

cat /proc/mtd 하면
[root@WHITE_STONE admin]# cat /proc/mtd
dev: size erasesize name
mtd0: 00400000 00002000 "Physically mapped flash"
mtd1: 000c0000 00002000 "kernel"
mtd2: 00300000 00002000 "initrd"
mtd3: 00030000 00002000 "User FS"

이렇게 나오고요
파일 시스템을 minix로 쓰려고 하는데 명령을 내리면..
[root@WHITE_STONE admin]# mkfs.minix /dev/mtdblock3
64 inodes
192 blocks
Firstdatazone=6 (6)
Zonesize=1024
Maxsize=268966912

이렇게 나오면서 프롬프트로 빠져 나갑니다. 하지만 파일시스템은 안잡히네요
[root@WHITE_STONE admin]# mount -t minix /dev/mtdblock3 /mnt
VFS: Can't find a Minix or Minix V2 filesystem on device 1f:03.
mount: wrong fs type, bad option, bad superblock on /dev/mtdblock3,
or too many mounted file systems

아래에 있는것은 mkfs.minix와 mount를 할때 커널 메시지 입니다.
mtdblock_open
ok
mtdblock_release
ok
mtdblock_open
ok
mtdblock: read on "User FS" at 0x1000, size 0x1000
mtdblock: read on "User FS" at 0x0, size 0x1000
mtdblock: write on "User FS" at 0x0, size 0x1000
mtdblock: write on "User FS" at 0x1000, size 0x1000
mtdblock_release
mtdblock: writing cached data for "User FS" at 0x0, size 0x2000
ok
mtdblock_open
ok
mtdblock: read on "User FS" at 0x400, size 0x400
VFS: Can't find a Minix or Minix V2 filesystem on device 1f:03.
mtdblock_release
ok
mtdblock_open
ok
mtdblock_release
ok

지금 여기까지 왔는데요 잘 가고 있는것인지도 잘 모르겠습니다.
어떻게 하면 파일시스템을 사용할수 있을까요?


글쓴이: 즐거운이
글쓴날: 2002년 09월 27일 오후 04:42

안녕하세요? 저와 같은 플래시를 사용하시는 군요..
일단.. 저와는 사용하는 CPU가 다르군요.. 저는 arm720T 계열입니다.
아마 많은 점이 다르겠지요?
일단 저는 kernel 버전 2.4.18를 사용했습니다.
저는 구형의 AMD_flash.c를 고쳐서 사용했습니다.
SST_flash.c로 ^ ^,
일단 님이 사용하고 계시는 flash는 많은 부분에서 AMD와
비슷합니다. AMD는 Block단위로만 다루고 있는데.. SST는
Block과 sector를 다 다룰 수 있습니다.
명령을 주는 주소와 명령만 약간 차이가 있습니다.
이점 알고 계시구요.. 아 그리고 칩을 전체를 지우는 명령어도
SST는 가지고 있네요.. 이거 편하던데.. 저에겐요.. ^ ^
block단위이면 32개의 Block으로 크지만.. sector면 약 512개을
사용할 수 있어서 좋습니다. 머 지우는데..조금 시간은 걸리죠..
참 저는 unlock에 대한 부분은 찾질 못했습니다. 혹시
님이 아니면 알려주시면 감사..
mtd_info *amd_flash_probe에서 적당하게..
amd_flash_info table을 만들어 주세요..
sector로 한다면..

mfr_id: MANUFACTURER_SST,
dev_id: SST39LF160,
name: "SST AM29LV160DB",
size: 0x00200000,
numeraseregions: 1,
regions: {
{ offset: 0x000000, erasesize: 0x01000, numblocks: 512 }

이렇게 되겠네요...

아참 만드실 때 주의 이건 chip 하나에
대한 겁니다. size는 0x00200000이 되겠죠? 2M인깐요..
32bit니.. buswidth는 4입니다. 8bit가 1이죠..





[u-boot] 랜덤 mac 주소와 dhcp - 061017

훗~ 드뎌, 랜덤 mac주소 설정과 설정값 flash & eeprom 저장을 끝냈다.
일단 첫번째 작업은 난수를 발생 시켜서, 리셋할 때 마다 새로운 mac주소를 생성하고, 저장할 수 있도록 해야한다
mac.c
***********************************************************************************

static unsigned long next = 1;

int s_rand(void)
{
    // 난수 생성 함수, 반환값 : 난수
    next = next * 1103515245 + 12345;
    return((unsigned)(next/65536) % 32768);
}

void s_srand(unsigned seed)
{
    // 난수 발생을 위한 seed값 설정
    next = seed;
}

int rand_mac(char *buf)
{
    // buf에 랜덤 mac주소를 복사한다.
   
    uchar mac1,mac2,mac3;       // mac random값 생성

    s_srand(get_timer(0));
    mac1 = (uchar)s_rand();
    mac2 = (uchar)s_rand();
    mac3 = (uchar)s_rand();

    sprintf(buf, "%02X:%02X:%02X:%02X:%02X:%02X", 00,05,169, mac1, mac2,mac3);

    // debug
    printf("Random Mac = %s\n",buf);
   
    return 1;
}

void save_mac(void)
{
    // mac값을 랜덤으로 할당해서, 이값을 ram & flash에 쓰고,
    // cs8900의 eeprom에도 쓴다.
    char ethaddr[20];

    rand_mac(ethaddr);
    setenv("ethaddr", ethaddr);

    do_saveenv(find_cmd("saveenv"),0,1,ethaddr);
   
    // save to cs8900 eeprom
    cs8900_e2prom_write("ethaddr", ethaddr);
}
***********************************************************************************

여기서 save_mac()함수를 board.c 에 main_loop()전에 보드 초기화 마지막에 하도록 해준다.
여기까지 랜덤 mac 작업이 끝났다.

* cs8900 eeprom에 mac값쓰기
driver/cs8900.c에 관련 함수들이 나와 있다.(cs8900_e2prom_write("ethaddr", ethaddr);

다음 dhcp설정은
#define CONFIG_COMMANDS 에 CFG_CMD_DHCP 설정을 추가하면 된다.
dhcp관련 함수들은 common/cmd_net.c & net/bootp.c 에 나와 있다.
dhcp()함수는 DhcpRequest()와 연결되어 있고, DhcpRequest()함수는 BootpRequest()함수와 같다.

'임베디드 > 7202' 카테고리의 다른 글

[커널] mtd 관련 sst  (0) 2006.10.26
[u-boot]아싸~ 성공 1.1.4 - 061013  (0) 2006.10.13
[U-Boot] 아~ 결국 1.1.4는 포기 - 061012  (0) 2006.10.12
[U-BOOT] 실패! flash 가 8bit.... - 061011  (0) 2006.10.11

[u-boot]아싸~ 성공 1.1.4 - 061013

일단 성공....(글 다 써서 올리는데, 이 망할 이글루는 이상한 에러를 뿌리다 말다 한다. 망할..)
점퍼 셋팅에 문제가 있어서 16bit로 부트로더가 못 돌았다.
점퍼 셋팅은 2개를 가지고 해야한다.
8bit : sw2(1,5,9), jp1(4)
16bit : sw2(2,4,9), jp2(2)
로 설정하면 제대로 부트된다.
* 단, 16bit로 부팅할 때는 콘솔 연결은 직렬포트로 해야한다. 이넘이 cpu I/O랑 직접연결 되어 있어서 그렇다.

1.1.4 부트로더에서 lcd, key초기화까지는 프롬프트 뜨기전에 끝내도록 구현했다.
단, key 초기화에 좀 문제가 있는 거 같다. 예전에 standalone app할 때 구한 KBVR1이랑 지금 나오는 KBVR1값
이 서로 다르다. (삽질 좀 해야겠다.)

*추가*
숨어 있는 sram에 contact하는 방법
+> sram은 cs2에 연결되어 있다. cs2 주소는 0x08000000 당(다운 받은 부트로더가 제대로 동작하더군...)
 


[U-Boot] 아~ 결국 1.1.4는 포기 - 061012

결국~ 1.1.4는 포기했다.(역시 꽁수는 안 통한다.)
but~, 윤대리님이 맹근 1.1.4에서 어느정도 희망이 보인다.
도대체 board에 low_~.S가 어디에 있는 건지 몰겠네...(내가 패치를 잘못했나? 내가 패치한 1.1.4에는 없었다.)
하지만, 역시 불안정...(에러가 나오긴 하는데, 대충 봐서 몰겠다. mac관련해서 에러가 나오는 거 같다.)
일단 1.0에 대충 프롬프트 뜨기 전까지의 동작을 구성한 후에 다시 옮겨 보던지 해야겠다.

헷갈렸던건....소켓에 박혀 있는 넘이 bank 1번으로 8bit flash 512kbyte란다...에공~~
그리고, onboard 되어 있는 넘이 16bit flash로 4mbyte고
점퍼 셋팅은 bank 1이 1,5,9고
bank 2가 2,4,9다.
아~ 짜증


'임베디드 > 7202' 카테고리의 다른 글

[커널] mtd 관련 sst  (0) 2006.10.26
[u-boot] 랜덤 mac 주소와 dhcp - 061017  (0) 2006.10.17
[u-boot]아싸~ 성공 1.1.4 - 061013  (0) 2006.10.13
[U-BOOT] 실패! flash 가 8bit.... - 061011  (0) 2006.10.11

[U-BOOT] 실패! flash 가 8bit.... - 061011

열라 삽질해도 안되는 이유가 역시 있었어...oTL
bank 1은 16비트 flash고, bank 2는 8비트 flash고.....
u-boot start.S에는 16비트로 Reset_Handler이 코딩 되어 있고,
될리가 있나...아~놔...
어셈은 봐봤자.. 눈 뜬 장님이고,
내일은 5520L에 있는 start.S를 고대로 복사 해다가 1.1.4에 넣어서 컴파일하고 때려 넣어 봐야겠다.
(1.0과 1.4 짬뽕...)
안되면 말고...




'임베디드 > 7202' 카테고리의 다른 글

[커널] mtd 관련 sst  (0) 2006.10.26
[u-boot] 랜덤 mac 주소와 dhcp - 061017  (0) 2006.10.17
[u-boot]아싸~ 성공 1.1.4 - 061013  (0) 2006.10.13
[U-Boot] 아~ 결국 1.1.4는 포기 - 061012  (0) 2006.10.12
Posted by shellbt
prev 1 next

openclose