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

안녕하세요! 오랜만에 질문을 올리게 되네요! ㅎ
S3C6410 보드를 사용하고 있고, Kernel은 2.6.28을 사용하고 있습니다.
 
SMSC LAN9215 LAN chip을 사용하고 있는데, 다소 문제가 있어,
smsc911x driver를 아래 사이트에서 하라는데로 대치를 하였습니다.

-------------------
MAINTAINERS | 6 +
 drivers/net/Kconfig      |   14 +
 drivers/net/Makefile     |    1 +
 drivers/net/phy/smsc.c   |   28 +
 drivers/net/smsc911x.c   | 2091 ++++++++++++++++++++++++++++++++++++++++++++++
 drivers/net/smsc911x.h   |  394 +++++++++
 include/linux/smsc911x.h |   42 + 7 files changed, 2576 insertions(+), 0 deletions(-)
 create mode 100644 drivers/net/smsc911x.c
 create mode 100644 drivers/net/smsc911x.h
 create mode 100644 include/linux/smsc911x.h
---------------------
 
즉 Kconfig, Makefile와 smsc.c 파일을 수정하고,
smsc911x.c, smsc911x.h와 include/linux/smsc911x.h 파일을 만들었습니다.
또한 make menuconfig 에서 기존 메뉴를 uncheck 하고 새로 추가된 메뉴에 check를 하였습니다.

그런데 smsc911x.c 파일에서 smsc911x_init_module 펑선은 지나가는데,
바로 다음에 불려져야 할 smsc911x_drv_probe 펑선이 불려지지 않습니다.
printk 문장을 위의 각 펑션 첫머리에 넣어서 확인을 하였습니다.
결국 드라이버가 제대로 올라 오지 못하는 것 같습니다. ㅠㅠㅠㅠㅠ;;
사이트에서 하라는거는 다 한것 같은데... 무얼 더 해야 되는지 모르겠네요~ㅠㅠ;;
 
고수님들의 행복한 조언을 부탁 드립니다.
꾸뻑~ㅎ
 
ps) 위의 create mode 100644는 무슨 뜻인가요? chmod 할때 주는거 같은데... 값이 너무 큰데...ㅜㅜ;;


죠니주니

2012.04.19 19:05:36
*.196.81.226

아키텍처단에

   platform_device_register(&smc91x_device);
이런식으로 추가를 해주신부분이 없으신게 아니신지요???

저런식으로 디바이스를 추가해주시고 네임을 맞춰주시면..

해당드라이버의 프로브 함수가 타는걸로 알고있는데요..

아키텍처부분을 살펴보시는게 좋을듯합니다..

프로브함수 안타는것은 아키텍처에서 디바이스를 등록해주지 않으셨을 확률이 있네요...

스페셜

2012.04.19 20:49:41
*.149.14.247

아하~ !! 그렇겠네요... 그걸 잊구 있었네요!

감사합니다. 당장 해 봐야겠습니다.

꾸뻑~~~^^*

스페셜

2012.04.19 23:10:14
*.149.14.247

그런데, 이미 test가 다 된 code 인것으로 알고 있는데,
아래의 serial debug message에 보면, memory allocation error가 발생하고 있습니다.

 

smsc911x: Driver version 2008-10-21.
JCHA, smsc911x_drv_probe(),step 01 !!!!!
vmap allocation failed: use vmalloc=<size> to increase size.
JCHA, smsc911x_drv_probe(),step 02 !!!!!
smsc911x: probe of smsc911x failed with error -12

 

그 위치의 소스를 보면,,

1957     printk("JCHA, smsc911x_drv_probe(),step 01 !!!!!\n");
1958     SET_NETDEV_DEV(dev, &pdev->dev);
1959
1960     pdata = netdev_priv(dev);
1961
1962     dev->irq = platform_get_irq(pdev, 0);
1963     pdata->ioaddr = ioremap_nocache(res->start, res_size);
1964
1965     printk("JCHA, smsc911x_drv_probe(),step 02 !!!!!\n");

 

이부분의 ioremap_nocache() function에서 발생하고 있는것 같습니다.
특별히 이상한 code는 아니데, 조금 난감합니다.

도와 주시면 감사하겠습니다.

List of Articles
번호 제목 글쓴이 날짜 조회 수

사용자 로그인