기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.
안녕하세요,
외부 spi칩과 연동하여 thread를 이용해서는 spi_sync()로 잘동작하는 프로그램인데요
이번에 Interrupt를 사용해야하는 문제가 있어 ISR내부에서 spi_async()를 사용하여 프로그램을 수정하였는데
아래와같은 panic문제가 발생하네요.
좀 도와주세요...
===================
프로그램은 간단합니다.
int spi_write(int len, u8 *data)
{
struct spi_message msg;
struct spi_transfer tf = {
.len = len,
.tx_buf = (__u64)data,
};
spi_message_init(&msg);
// call back function
msg.complete = prt_spi_callback;
msg.context = &TxSpiDataReq; //data you provide as the argument to complete().
spi_message_add_tail(&tf,&msg);
return spi_async(TxBuff->spi, &msg);
}
void spi_callback(void* arg)
{
return;
}
=========================================
Unable to handle kernel NULL pointer dereference at virtual address 00000000
pgd = c0004000
[00000000] *pgd=00000000
Internal error: Oops: 817 [#1] PREEMPT
last sysfs file: /sys/power/state
Modules linked in: s3c_bc s3c_lcd pvrsrvkm
CPU: 0 Not tainted (2.6.32.9 #1129)
PC is at s3c_spi_work+0x58/0x9c8
LR is at _spin_lock_irqsave+0x30/0x38
pc : [<c025382c>] lr : [<c03a8128>] psr: 40000093
sp : ef213f28 ip : ef213f10 fp : ef213f64
r10: ef1900f0 r9 : 00000000 r8 : cd4bfd08
r7 : cd4bfd28 r6 : c02537d4 r5 : ef212000 r4 : ef1900e0
r3 : c06623f0 r2 : 00000000 r1 : 60000013 r0 : ef190108
Flags: nZcv IRQs off FIQs on Mode SVC_32 ISA ARM Segment kernel
Control: 10c5387d Table: 2d4c0019 DAC: 00000017
올려주신 로그를 보면 s3c_spi_work+0x58근처에 NULL pointer exception이 발생된것입니다.
차근차근 들여다 보면 문제를 찾으실수 있을듯... 정 못찾으시겠으면 s3c_spi_work함수 시작부터
한줄 한줄 장인정식으로 printk를 찍어보시면.... ^^a