안녕하세여 ~. 지난번에 이와 같은 디바이스 드라이버에 대해서 커널 패닉이 있었는데... 아직도 못잡고 있네여 에휴 ㅠ.ㅠ
이와 관련 해서 몇가지 여쭈어보고자 합니다.
1. SMC91111과 SMC91c113의 데이터 시트를 분석해 봤는데, 버스 엑세스가 16bit 방식에서 32bit 방식이 추가된거 말고는 없더군여. 해서 고현철님께서 제공하신 SMC91C113의 소스를 바탕으로 32bit data bus 방식으로 사용하게끔 소스를 수정했습니다. 물론 BWSON의 설정 또한 UB/LB를 사용하고, no wait, 32bit 방식으로 수정을 하였고, BANKCON 부분 또한 HCLK이 100Mhz일 때 각각을 맞추었습다. 아래가 제가 펌웨어로 테스트 했을 때, 설정 방식이였습니다.
HCLK 기준 (at 100MHz)
Tacs : Address set-up time before nGCSn
0x0 : 0 clock
Tcos : Chip selection set-up time before nOE
0x1 : 1 clock
Tacc : Access cycle
0x2 : 3 clock
Tcoh : Chip selection hold time after nOE
0x0 : 0 clock
Tcah : Address hold time after nGCSn
0x0 : 0 clock
Tacp : Page mode access cycle @ Page mode
0x0 : 2 clock
PMC : Page Mode Configuration
0x0 : normal (1 data)
위와 같은 설정을 다 맞추고 smc91x.h의 s3c2440의 세팅에서 ioctl 함수 부분을 8/16/32bit에 맞게 다 수정하고 올렸더니...커널패닉..ㅡㅡ;;; 정말 이걸로 한달 정도 고생하는거 같네여...제가 가지고 있는 리눅스 책 다 디집어 봤지만, 내공이 부족한듯합니다. 부디 따가운 조언 부탁드립니다.
2. 혹시 아래와 같이 nfs 부팅을 할 때, 정말 몰라서 묻는건데...저 방법이 가장 좋은 방법인가여? 램디스크 부터 해야할지...네트워크 디바이스 드라이버를 초기화하지 않고 다른 방법은 없는건가여? 개발 순서를 어떻게 잡아야할지 모르겠습니다....저도 팽귄을 띄우고 싶습니다..ㅡㅡ;; 고수님들의 개발 순서를 알려주셨으면 좋겠습다.
3. 이 글을 읽어주셔서 고맙습니다...잘되면 밥이라도 쏠께여, 술도 좋고..;;; 부디 읽어주셨으면, 아무거라도 좋으니 질책 부탁드리겠습니다. 아래는 제 커널 패닉 메시지 입니다.
******************************************************
U-Boot 1.1.2 (May 1 2007 - 12:31:39)
U-Boot code: 33C00000 -> 33CA3874 BSS: -> 33CD8260
RAM Configuration:
Bank #0: 30000000 64 MB
Flash: 32 MB
NAND:*** Warning - bad CRC, using default environment
In: serial
Out: serial
Err: serial
clk = 98784000
pixclk 25200000, divisor is 3
CLKVAL = 0
Hit any key to stop autoboot: 0
Using MAC Address 08:00:3E:26:0A:5B
TFTP from server 128.134.63.188; our IP address is 128.134.63.100
Filename 'vapk'.
Load address: 0x32000000
Loading: #################################################################
#################################################################
#########################################
done
Bytes transferred = 872742 (d5126 hex)
## Booting image at 32000000 ...
Image Name: Visual Agent Platform Linux(ARM)
Created: 2007-05-18 7:32:38 UTC
Image Type: ARM Linux Kernel Image (gzip compressed)
Data Size: 872678 Bytes = 852.2 kB
Load Address: 30008000
Entry Point: 30008000
Verifying Checksum ... OK
Uncompressing Kernel Image ... OK
Starting kernel ...
Linux version 2.4.20_elfin (root@arm408) (gcc version 3.3.4) #191 2007. 05. 18. (湲? 16:21:45 KTCPU: ARM/CIRRUS Arm920Tid(wb) revision 0
Machine: Visual Agent Platform(S3C2440A)-2007/5/01
<4>Ignoring unrecognised tag 0x00000000
On node 0 totalpages: 16128
zone(0): 16128 pages.
zone(1): 0 pages.
zone(2): 0 pages.
Kernel command line: root=/dev/nfs rw nfsroot=128.134.63.188:/nfsmount/rootfs-vap ip=128.134.63b<7>Relocating machine vectors to 0xffff0000
Console: colour dummy device 80x30
Linux version 2.4.20_elfin (root@arm408) (gcc version 3.3.4) #191 2007. 05. 18. (湲? 16:21:45 KTCPU: ARM/CIRRUS Arm920Tid(wb) revision 0
Machine: Visual Agent Platform(S3C2440A)-2007/5/01
Ignoring unrecognised tag 0x00000000
On node 0 totalpages: 16128
zone(0): 16128 pages.
zone(1): 0 pages.
zone(2): 0 pages.
Kernel command line: root=/dev/nfs rw nfsroot=128.134.63.188:/nfsmount/rootfs-vap ip=128.134.63bConsole: colour dummy device 80x30
Calibrating delay loop... Calibrating delay loop... 147.86 BogoMIPS
147.86 BogoMIPS
Use CONFIG_INSTANT_ON_LPJ=739328 for Instant On.
Use CONFIG_INSTANT_ON_LPJ=739328 for Instant On.
<6>Memory:Memory: 63MB 63MB = 63MB total
= 63MB total
<5>Memory: 61684KB available (1326K code, 386K data, 376K init)
Memory: 61684KB available (1326K code, 386K data, 376K init)
<6>Dentry cache hash table entries: 8192 (order: 4, 65536 bytes)
Dentry cache hash table entries: 8192 (order: 4, 65536 bytes)
<6>Inode cache hash table entries: 4096 (order: 3, 32768 bytes)
Inode cache hash table entries: 4096 (order: 3, 32768 bytes)
Mount-cache hash table entries: 1024 (order: 1, 8192 bytes)
Mount-cache hash table entries: 1024 (order: 1, 8192 bytes)
Buffer-cache hash table entries: 1024 (order: 0, 4096 bytes)
Buffer-cache hash table entries: 1024 (order: 0, 4096 bytes)
Page-cache hash table entries: 16384 (order: 4, 65536 bytes)
Page-cache hash table entries: 16384 (order: 4, 65536 bytes)
POSIX conformance testing by UNIFIX
POSIX conformance testing by UNIFIX
smp_processor_id() = 0
smp_processor_id() = 0
<6>Linux NET4.0 for Linux 2.4
Linux NET4.0 for Linux 2.4
<6>Based upon Swansea University Computer Society NET3.039
Based upon Swansea University Computer Society NET3.039
Initializing RT netlink socket
Initializing RT netlink socket
<6>CPU clock = 296.352000 Mhz,CPU clock = 296.352000 Mhz, HCLK = 98.784000 Mhz, PCLK = 49.39200z HCLK = 98.784000 Mhz, PCLK = 49.392000 Mhz
PWM-Timers Management Module Loaded.
PWM-Timers Management Module Loaded.
Disabling the Out Of Memory Killer
Disabling the Out Of Memory Killer
Starting kswapd
Starting kswapd
<5>VFS: Diskquotas version dquot_6.5.0 initialized
VFS: Diskquotas version dquot_6.5.0 initialized
<6>devfs: v1.12c (20020818) Richard Gooch (
[email protected])
devfs: v1.12c (20020818) Richard Gooch (
[email protected])
<6>devfs: boot_options: 0x1
devfs: boot_options: 0x1
<6>i2c-core.o: i2c core module version 2.6.2 (20011118)
i2c-core.o: i2c core module version 2.6.2 (20011118)
<6>i2c-dev.o: i2c /dev entries driver module version 2.6.2 (20011118)
i2c-dev.o: i2c /dev entries driver module version 2.6.2 (20011118)
<6>i2c-proc.o version 2.6.2 (20011118)
i2c-proc.o version 2.6.2 (20011118)
Console: switching Console: switching to colour frame buffer device 80x60
to colour frame buffer device 80x60
Installed S3C2440 frame buffer #0
Installed S3C2440 frame buffer #0
pty: 2048 Unix98 ptys configured
pty: 2048 Unix98 ptys configured
s3c2440-ts initialized
s3c2440-ts initialized
RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize
RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize
<6>loop: loaded (max 8 devices)
loop: loaded (max 8 devices)
LAN91x: smc_init
LAN91x: smc_init
smc_init 1
smc_init 1
smc_init 2
smc_init 2
smc_init 3
smc_init 3
LAN91x: smc_probe
LAN91x: smc_probe
LAN91x: bank signature probe returned 0x1880
LAN91x: bank signature probe returned 0x1880
smc_init 4
smc_init 4
LAN91x: not found. ret=-19
LAN91x: not found. ret=-19
<1>Unable to handle kernel NULL pointer dereference at virtual address 00000000
Unable to handle kernel NULL pointer dereference at virtual address 00000000
<1>pgd = c0004000
pgd = c0004000
<1>*pgd = 00000000*pgd = 00000000, *pmd = 00000000, *pmd = 00000000
Internal error: Oops: ffffffff
Internal error: Oops: ffffffff
CPU: 0
CPU: 0
pc : [<c008eb04>] lr : [<c008eae0>] Not tainted
sp : c02f5f48 ip : c02f5f64 fp : c02f5f60
pc : [<c008eb04>] lr : [<c008eae0>] Not tainted
sp : c02f5f48 ip : c02f5f64 fp : c02f5f60
r10: 300170d0 r9 : 41129200 r8 : c3ec5360
r10: 300170d0 r9 : 41129200 r8 : c3ec5360
r7 : c3ec5360 r6 : c3ec5360 r5 : c02fd38c r4 : c02134c0
r7 : c3ec5360 r6 : c3ec5360 r5 : c02fd38c r4 : c02134c0
r3 : 00000000 r2 : c3ec5000 r1 : 00000200 r0 : 00000001
r3 : 00000000 r2 : c3ec5000 r1 : 00000200 r0 : 00000001
Flags: nzCvFlags: nzCv IRQs off FIQs on Mode SVC_32 Segment kernel
IRQs off FIQs on Mode SVC_32 Segment kernel
Control: C000317F Table: 30004000 DAC: 0000001D
Control: C000317F Table: 30004000 DAC: 0000001D
Process swapper (pid: 1, stack limit = 0xc02f4380)
Process swapper (pid: 1, stack limit = 0xc02f4380)
Stack: (0xc02f5f48 to 0xc02f6000)
Stack: (0xc02f5f48 to 0xc02f6000)
5f40: 5f40: 00000200 00000200 c02fd38c c02fd38c c02134c0 c0
5f60: 5f60: c008eac8 c008eac8 00000001 00000001 c3ec5360 c3ec5360 008ec9dc 008ec9dc c01d9474 c0
5f80: 5f80: c008ed84 c008ed84 c008f5cc c008f5cc c020a7f8 c020a7f8 c01d9468 c01d9468 ffffffed ff
5fa0: 5fa0: c02f5fac c02f5fac c0011ad0 c0011ad0 c008eccc c008eccc c00654bc c00654bc c01d9468 c0
5fc0: 5fc0: c02f5fcc c02f5fcc c00087c8 c00087c8 c001199c c001199c 00000000 00000000 c02f5ff4 c0
5fe0: 5fe0: c00660e0 c00660e0 00000000 00000000 00000000 00000000 c02f5ff8 c02f5ff8 c00699e0 c0
Backtrace:
Backtrace:
Function entered at [<c008eab8>] from [<c008f718>]
Function entered at [<c008eab8>] from [<c008f718>]
r6 = C02134C0 r6 = C02134C0 r5 = C02FD38C r5 = C02FD38C r4 = 00000200 r4 = 00000200
Function entered at [<c008f5bc>] from [<c008ed84>]
Function entered at [<c008f5bc>] from [<c008ed84>]
r8 = A0000013 r8 = A0000013 r7 = C01D9474 r7 = C01D9474 r6 = 008EC9DC r6 = 008EC9DC r5 =0 r5 = C3EC5360
r4 = 00000001 r4 = 00000001
Function entered at [<c008ecbc>] from [<c0011ad0>]
Function entered at [<c008ecbc>] from [<c0011ad0>]
r8 = C01BF61C r8 = C01BF61C r7 = C020A7F8 r7 = C020A7F8 r6 = FFFFFFED r6 = FFFFFFED r5 =8 r5 = C01D9468
r4 = C020A7F8 r4 = C020A7F8
Function entered at [<c001198c>] from [<c00087c8>]
Function entered at [<c001198c>] from [<c00087c8>]
r7 = C01D0084 r7 = C01D0084 r6 = C020A688 r6 = C020A688 r5 = C01D9468 r5 = C01D9468 r4 =C r4 = C00654BC
Function entered at [<c00087b0>] from [<c00660f4>]
Function entered at [<c00087b0>] from [<c00660f4>]
r4 = 00000000 r4 = 00000000
Function entered at [<c00660e0>] from [<c00699e0>]
Function entered at [<c00660e0>] from [<c00699e0>]
r4 = 00000000 r4 = 00000000
Code: Code: e595200c e595200c e0232390 e0232390 e1560003 e1560003 13a03000 13a03000 (15833000)
<0>Kernel panic: Attempted to kill init!
Kernel panic: Attempted to kill init!
*********** 행복이 가득하시길... ****************************
network를 테스트할 경우는
1. ramdisk 사용해서 드라이버를 나중에 올린다.
2. NFS로 직접 테스트해본다...
2번의 경우는 한번에 잡는 케이스인데, 보통은 1번부터 하는겁니다.
hw를 32비트로 하신 모양이네요. 91c111의 문제는 비트수보다는
내부 버퍼의 양의 문제인듯 싶습니다.
system.map 파일에서 LR 레지스터에 해당하는 번지를 찾으신 후
어느 함수에서 crash가 났는지 파악하시기 바랍니다.