[완료]smsc911x 관련 커널 패닉 도와주세요.
리눅스 버전 2.6.37 에서 uImage 커널을 올리는데 커널 패닉이 발생합니다. 살펴보면 smsc911x 쪽 문제인거 같아서 디버그 열고 프린트 찍는걸 확인했는데,
smsc911x: Driver version 2008-10-21.
[ 1.578887] eth%d: smsc911x_init: Driver Parameters:
[ 1.584167] eth%d: smsc911x_init: LAN base: 0xD0884000
[ 1.589538] eth%d: smsc911x_init: IRQ: 289
[ 1.593902] eth%d: smsc911x_init: PHY will be autodetected.
[ 1.607116] eth%d: smsc911x_init: BYTE_TEST: 0xFFFFFFFF
[ 1.612640] eth%d: smsc911x_init: BYTE_TEST: 0xFFFFFFFF
[ 1.618164] eth%d: smsc911x_init: top 16 bits equal to bottom 16 bits
[ 1.624969] eth%d: smsc911x_init: This may mean the chip is set for 32 bit while the bus is reading 16 bit
.
.
.
.
[ 3.085205] IP-Config: Entered.
[ 75.780517] VFS: Unable to mount root fs via NFS, trying floppy.
[ 75.803253] VFS: Cannot open root device "nfs" or unknown-block(2,0)
[ 75.809967] Please append a correct "root=" boot option; here are the available partitions:
[ 75.818908] 1f00 512 mtdblock0 (driver?)
[ 75.824279] 1f01 1280 mtdblock1 (driver?)
[ 75.829650] 1f02 768 mtdblock2 (driver?)
[ 75.834960] 1f03 5120 mtdblock3 (driver?)
[ 75.840332] 1f04 516608 mtdblock4 (driver?)
[ 75.845703] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
결국엔 저렇게 커널 패닉이 발생합니다. dhcp로 사용하고 nfs 방식으로 연결하는데, dhcp 쪽 문제인지 아님 이더넷 관련 smsc911x 쪽이 문제인지 모르겠습니다 ㅠ
smsc911x 코드쪽 디버깅 열어서 프린트 찍고 LAN Base 주소 맵핑이 잘못된건지.. BYTE Test 값이 0x87654321 이 나와야 정상인데 F값으로만 찍는것이 이유인것 같고...
어디가 잘못되었는지 도무지 감이 오질 않습니다 ㅠㅠ 답변 부탁드립니다 ㅠ
커널 메세지를 보니 NFS 부팅에 관련된 커널
커널 메세지를 보니 NFS 부팅에 관련된 커널 파라메터가 부족해 보이기도 하니까, 꼭 smsc911x에 이상이 있어서 커널 패닉이 발생했다고 볼 수는 없을 것 같은데요?
루트 파일 시스템을 NFS상에다 놓지 말고 보드에 SD나 USB, MTD등 로컬 스토리지에 놓고 부팅해도 커널 패닉이 발생하나요?
또 만약 로컬 스토리지로 부팅된다면 그 때는 smsc911x가 네트웍 디바이스로서 제대로 동작하나요?
생산적인 댓글을 달자
로컬 스토리지도 안되네요...
evm 보드가 아니라 evm 보드에서 추출한 개발보드로 시험하고 있습니다. SD 하고 USB는 테스트 할 수가 없고요, nand 로 놓고 부팅해도 마찬가지입니다. ㅠ
NFS 가 아닌 다른쪽에 문제가 있는것 같은데요 ㅠ 바이트 테스트 값이 F 로 찍히는게 걸립니다 ㅠ
분명 0x87654321 로 값이 와야 하는데요 ㅠ
일단 커널 패닉과 랜 드라이버가 먹통인 건 별개의
일단 커널 패닉과 랜 드라이버가 먹통인 건 별개의 문제인 듯 하니까, 먼저 커널 패닉이 일어나지 않도록 NFS 이외의 방법으로 부팅을 성공시키는 게 좋을 듯 하네요.
실제 스토리지 디바이스로 부팅하는게 정 힘들면 busybox 같은걸 써서 꼭 필요한 것만 간추려 initramfs 를 구성해서 커널에 링크시켜서 올리는 방법도 있습니다.
어떻게든 로그인까지 끌어올려야지 랜 드라이버 디버깅도 편해질 겁니다.
생산적인 댓글을 달자
맵핑 문제인듯 하네요...
아직 초보자라 비지박스나 initfamfs 구성한 경험이 없어서 ^^;;
OMAP3_EVM # md 2c000000
2c000000: 00000000 00000000 00000000 00000000 ................
2c000010: 00000000 00000000 00000000 00000000 ................
2c000020: 00000000 00000000 00000000 00000000 ................
2c000030: 00000000 00000000 00000000 00000000 ................
2c000040: 00000000 00000000 00000000 00000000 ................
2c000050: 92210000 00000000 00004000 00000000 ..!......@......
2c000060: 00000000 87654321 48000000 00000000 ....!Ce....H....
2c000070: 00000000 01050000 00000000 00000000 ................
2c000080: 00001200 00000001 00000007 0000ffff ................
2c000090: 0000ffff 00000000 00000000 0cf65f1b ............._..
2c0000a0: 00000000 40000003 ffffffff 00000000 .......@........
2c0000b0: 00000000 00000000 00000000 00000000 ................
2c0000c0: 00000000 00000000 00000000 00000000 ................
2c0000d0: 00000000 00000000 00000000 00000000 ................
2c0000e0: 00000000 00000000 00000000 00000000 ................
2c0000f0: 00000000 00000000 00000000 00080a00 ................
md 명령어를 쳐서 2c000000 라는 주소값을 살펴보면 0x87654321 가 보입니다.
이 2c000000 값을 LAN Base 0xD0884000 라는 값에 맵핑 시키는데 이 맵핑이 잘 안되는것 같습니다...
맵핑이 잘 된다면 바이트테스트 값이 F 로 나오는 일이 없을것 같은데요... 이것도 어떻게 해결해야 하는지 난관이네요 ㅠ
그간 어떻게 되셨는지 모르겠지만 로그인 하셨네요???
그간 어떻게 되셨는지 모르겠지만 로그인 하셨네요??? 원래 로그인은 성공했던건가요???
암튼, md라는 명령어는 처음 들어보는거라 뭘 하고싶으신지 정확히 모르겠지만 짐작하기로 물리주소 0xD0884000부터 읽어서 값을 찍어주는 것 같은데 맞나요?
그 주소는 아마 LAN 컨트롤러의 레지스터가 존재하는 주소영역이겠죠?
레지스터는 메모리가 아니니까 의미없는 값이 읽힐 수도 있습니다.
LAN 컨트롤러 데이터시트를 보고 해당 레지스터가 R/W인지 Read only인지 Write only인지 확인해 보시죠.
생산적인 댓글을 달자
아 이건 말도안되는 건데요..
간혹 nand 쪽에 bad 한 영역이 발생해서 시스템 포팅할 때 문제를 겪은 적도 있습니다.
(혹시나 해서 1% 라도 ;; )
헉...
그럴수도 있겠지만...우선 그런 상황은 배제하고 살펴보고 있습니다. nand 배드영역 있는거 아니냐고 하드웨어 선임님한테
여쭤보다 욕먹을수 있거든요 ^^;;
....
저는 비슷한걸 최근 경험했는데요.
1. 회로도에서 LAN9115(인가요?)로 연결되는 라인을 일일이 점검해서 칩셀렉트를 이용해 mux 되어있나 확인하시고
2. 커널 초기화 과정중에서는 mux 된것들의 칩셀렉트를 false로 놔야 드라이버에서 알아서 껐다 켰다 하면서 쓰구요.
3. machine specific 한 코드들을 잘 찾아서 컨트롤러에 클럭은 들어가는지 확인하세요 (nand 컨트롤러, srom 컨트롤러)
u-boot 에서는 클럭이 기본적으로 켜져있고 커널 들어가서는 꺼져있는 경우일수 있습니다.
[완료] 원인을 찾았네요...
로그인까진 너무 심플한걸 헤맸네요.. smsc911x 함수 들어가기전 usb_ehci_init(&ehci_pdata); 이 함수를 먼저 호출하는데 이게 문제였네요..
이녀석을 막고 해보니 로그인까지 갑니다. 물리적으로 1포트를 사용하는데 0포트로 인식이 되어 있어서 수정하고 막은걸 풀고 하니 깔끔하게 넘어가네요..
왠만한건 다 막고 했다고 생각했는데 menuconfig 설정도 잘 보고 매치시켜서 포팅해야 할듯요..이번에 삽질하면서 많은걸 배우네요.
답변 주신분들 감사드립니다.
댓글 달기