[Suzaku:01948] Re: Kernel エラー

Nobuaki Sugishima email@hidden
2010年 9月 3日 (金) 15:34:27 JST


$B9B^<MM(B

$B!!?WB.BP1~$"$j$,$H$&$4$6$$$^$9!#(B

$B!!0lHL#I!?#O$K4X$7$F(Bioctl()$B$N;HMQ$,%*!<%=%I%C%/%9$G$"$k$3$H$O>5CN$7$F$$$^$9!#(B 


$B!!@h$r5^$.$?$+$C$?$N$G$H$j$"$($:(Bwrite()$B$G$d$C$F$7$^$$$^$7$?!#;XE&$7$F$$$?$@$$$?LdBjE@$O:Y$+$/2~NI$$$?$7$^$9!#(B

$B!!;d$NL\2<$N4X?4;v$O3d$j9~$_$email@hidden>o$K<B9T$5$l$J$$$3$H$G$9!#(B

    __raw_writel(slvReg1[i], addrAut);

$B$email@hidden>o$K<B9T$5$l$J$$$H$-!"$$$+$J$k%I%i%$%P$N%"%i!<%`$bH/@8$7$^$;$s!#email@hidden>o$K3d$j9~$_$O=hM}$5$l$^$9!#$7$+$7$3$N(B1$B9T$K$h$C$F=PNO$5$l$k$Y$-%Q%k%9$,%O!<%IB&$G4QB,$5$l$^$;$s!#(B

FPGA$B!!#u#s#e#r!2#l#o#g#i#c!%#v#h#dCf$N(Bslv_write_ack_1$B$email@hidden>o$G$"$l$P3d$j9~$_(B1$B2s$K#42sH/9T$5$l$^$9$,!"$3$l$email@hidden$l4|BT$5$l$?%Q%k%9$b=PNO$5$l$^$;$s!#$"$kNc$G$O3d$j9~$_#1!$#3#0#02s$[$I$GFMA3$3$N>c32$,H/@8$7$^$9!#(B
$B$$$C$?$s5/$-$k$HEE8;EjCG0J30$KI|5l$NO)$O$"$j$^$;$s!#(B

$B$H$$$&D6FqLd$G$9!#(B

$B?dDj860x$N0l$D$O%?%$%^!<3d$j9~$_0J30$N3d$j9~$_$G$9!#(B

$B%?%$%^!<3d$j9~$_$O#i#n#i#t!J!KCf$G!"(B

static int __init my_init_module(void)
{
 int ret;
 u32 my_addr_isr_offset;

 pr_info(DEV_NAME" ("DEV_VER") : MY Driver of MY I/O Board\n");

 sema_init(&sem, 1);

 myAddrOrg = XPAR_MY_CNTLR_BASEADDR;
 addOrg = (u32 *)ioremap_nocache(XPAR_MY_CNTLR_BASEADDR, 
XPAR_MY_CNTLR_REMAP_SIZE);
 if (addOrg == NULL) {
  printk(KERN_ERR "ioremap failed\n");
  return -EIO;
 }
 ret = register_chrdev(DEV_MAJOR, DEV_NAME, &my_fops);  // Driver info. 
registered to kurnel table
 if (ret < 0) {
  iounmap(addOrg);
  return ret;
 }
 addMan = (u32 *)ioremap_nocache(myAddrOrg + OFFSET_MAN, sizeof(unsigned 
long)); // Aut Out
 addAut = (u32 *)ioremap_nocache(myAddrOrg + OFFSET_AUT, sizeof(unsigned 
long)); // Man Out
 addInp = (u32 *)ioremap_nocache(myAddrOrg + OFFSET_INP, sizeof(unsigned 
long)); // Inp

 // $B3d$j9~$email@hidden%P%C%U%!!"(BSDRAM$B$K3NJ](B         PAGESIZE=0x1000
 pageBuf0 = (u32 *) kmalloc(sizeof(u32) * PAGESIZE, GFP_KERNEL); // kmalloc$B$N>e8B!'(B128KB

 // $B3d$j9~$_MW5a$NEPO?!!!!(Btimer_interrupt : $B3d$j9~$_%O%s%I%i!!(BIRQF_DISABLED 
: $BB?=E3d$j9~$_6X;_!)(B
 ret = request_irq(irq_timer, timer_interrupt, IRQF_DISABLED, DEV_NAME, 
dev_id);
 if (ret)
  printk(KERN_ERR "timer_interrupt failed\n");

 // IntrStatus $B3JG<%"%I%l%9$r<hF@!'(B0xF0FFD000 + 0x00000100 + 0x00000020 = 
0xF0FFD00120
 #define XPS_MY00_INTR_CNTRL_SPACE_OFFSET (0x00000100)
 #define XPS_MY00_INTR_IPISR_OFFSET (XPS_MY00_INTR_CNTRL_SPACE_OFFSET + 
0x00000020)
 my_addr_isr_offset = XPAR_MY_CNTLR_BASEADDR + XPS_MY00_INTR_IPISR_OFFSET;
 my_addr_isr = (u32 *)ioremap_nocache(my_addr_isr_offset, sizeof(unsigned 
long)); // Linux$B%"%I%l%9$KJQ49(B

 addMaskOffset = (u32 *)ioremap_nocache(XPAR_INTC_SYSTEM_BASEADDR + 
XPAR_MY_CNTLR_IP2INTC_IRPT_MASK, sizeof(unsigned long));

 ptRead = 0;                // $B!!(Bread Pointer
 ptWrite = 0;                // $BJ'$$=P$7%]%$%s%?$r=i4|2=(B
 autoRegNo = 0;               // clockNo x 4
 runFlag = false;              // $B%I%i%$%PB&$G(BReset$B$7$F$*$/(B

// spin_lock_init(&sync_spinlock);

 return ret;
}

$B$N$h$&$KEPO?$5$l$?(Btimer_interrupt()$B$G$9$+$i!"%?%$%^!<%/%m%C%/0J30$N(BEvent$B$G$3$l$,5/F0$9$k$3$H$O9M$($K$/$/!"2>$K%H%j%,!<$,$+$+$C$F$bB?=E3d$j9~$_$O6X;_!"$=$N$H$-$7$+$+$C$F$$$?3d$j9~$_=hM}$,AK32$5$l$k$3$H$O$J$$$H9M$($i$l$^$9!#$=$N!I3d$j9~$_!I$O<!$N%/%m%C%/$G=hM}$5$l$k$+$b$7$l$^$;$s!#(B

$B!!$7$+$7J'=P$7=*N;8e!"(BEthernet$B%"%/%;%9$r$9$k$H(Btimer_interrupt()$B$KF~$C$F$/$k$3$H$,$"$j$^$9!#$3$N$H$-$O(BrunFlag=false$B$J$N$G(B

 timer_interrupt(int irq_timer, void *dev_id, struct pt_regs *regs)
 {

$B!&!&!&!&!&!&!&!&!&!&!&!&!&!&!&!&!&!&!&!&!&!&!&!&!&!&!&!&!&(B
 if (runFlag == true){

$B!&!&!&!&!&!&!&!&!&!&!&!&!&!&!&(B
    __raw_writel(slvReg1[i], addrAut);        // $BJ'=P!!%O!<%I$K=PNO(B $B-!!!IT(B
 $B!!!!(BptWrite++;                                    // $email@hidden;;J'$$=P$7%]%$%s%?(B
  }
 else if (ptWrite == regNo){
   cmdDev &= ~(1 << CMDBIT_AUT);
   __raw_writel(cmdDev, addrMan);          // $B%/%m%C%/Dd;_(BCommand
   ptWrite = 0;                // Pointer Clear
   runFlag = false;            // $B0J9_$NJ'=P$r6X;_$9$k(BFlag
  }
  else{
$B"M(B  cmdDev &= ~(1 << CMDBIT_AUT);
  __raw_writel(cmdDev, addrMan);           // $B%/%m%C%/Dd;_(BCommand
 }
$B!&!&!&!&!&!&!&!&!&!&!&!&!&!&!&!&!&(B

     return IRQ_HANDLED;
 }

$B0lEY(BRUN$BF0:n$r9T$o$;!"(BEthernet$B$rA`:n$9$k$H"M$N0LCV$K3d$j9~$_$,F~$C$F$/$k$3$H$,$"$j$^$9!#(B
$BM}M3$O$o$+$j$^$;$s!#(B

$B!!$=$3$G(Btimer_interrput()$B=hM}Cf$O$9$Y$F$N3d$j9~$_$r%^%9%/$G6X;_$7$?$$$N$G$9$,!"(BPowePC$B$N3d$j9~$_%^%9%/$N%F!<%V%k$,H/8+$G$-$^$;$s!#(B

$B!!(BENABLEMASK    : 0xb
  DIABKEMASK    : 0x7

$B$H$7$F!"%?%$%^!<3d$j9~$_%/%m%C%/$r6/@)H/?6$5$;!">e5-%^%9%/$email@hidden$jBX$($k$3$H$G%?%$%^!<3d$j9~$_$O(BON/OFF$B$G$-$^$9!#(B
$B!!$3$l$r#E#t#h#e#r#n#e#t!"#R#S#2(B32C$B3d$j9~$_$KJ,3d$7$F@)8f$7$?$$$N$G$9$email@hidden$7$F$$$^$;$s!#(B

$B%^%9%/$N%S%C%H%"%5%$%s$r$*65$(4j$($^$9$+!)(B

$B!!$7$+$7(B $B#K#e#r#n#e#l$G<B9T$5$l$kC1=c$J#1L?Na(B
        __raw_writel(slvReg1[i], addrAut);
$B$,ESCf$G#F#a#i#t#a#l>c32$K$J$kM}M3$O$*$=$i$/JL$N$H$3$m$K$"$k$N$G$7$g$&!#(B

$B!!2r7h$N%R%s%H$O$J$$$G$7$g$&$+!)!#(B



$B!!(B
----- Original Message ----- 
From: "mizo" <email@hidden>
To: "SUZAKU general discussion list" <email@hidden>
Sent: Thursday, September 02, 2010 8:55 PM
Subject: [Suzaku:01942] Re: Kernel $B%(%i!<(B


> $B9B^<$G$9!#(B
>
> Nobuaki Sugishima wrote:
>> $B!!(Bmain$B$H%I%i%$%P$H$N$d$j<h$j$G$9$,!"%7%9%F%`%3!<%k$r;H$&J}K!$O%I%i%$%P$N(B
>> $B%b%8%e!<%k$r0lHL#I!?#O$H3d$j9~$_$KJ,3d$7$J$1$l$P$J$i$J$$$h$&$J$N$G!"(B
>> write$B$K(Bmain$B$+$i%I%i%$%P$X$N(BCommand$B$rDI2C$9$k$H$$$&4JJX$JJ}K!$G%H%i%$$7$F(B
>> $B$$$^$9!#!'(B
>
> command$B$rAw$k$N$G$"$l$P!"(Bioctl()$B$NJ}$,E,$7$F$$$k$H;W$$$^$9!#$b$A$m$s(Bwrite()
> $B$G$d$C$F$O$$$1$J$$$H$$$&$3$H$O$"$j$^$;$s$,!#(B
>
>> static ssize_t my_write(struct file *filp, const char __user *buf,
>>    size_t count, loff_t *offp)
>> {
>> $B!&!&!&!&!&!&(B
>> if (down_interruptible(&sem)) {
>>  retval = -ERESTARTSYS;
>>  goto err1;
>> }
>> if (buf == NULL) {
>>  retval = -EFAULT;
>>  goto err1;
>> }
>>
>> valbuf = (char *) kmalloc(sizeof(char) * 8 + 1, GFP_KERNEL); // buf size
>> $B$O(Bprogram$BB&$G(B8bit$B$K8GDj$NLsB+(B
>
> $B8GDj$G$"$l$P!"(Bkmalloc()$B$7$J$$$G!"4X?tFb$G!"(B
> char valbuf[9];
> $B$7$F$O$I$&$G$7$g$&!)(B
>
>> strcpy(valbuf, buf);             // $B3NJ]$7$?(Bkernel buffer$B$K;XDjCM$r%3%T!<(B
>
> kmalloc()$B$NLa$jCM%A%'%C%/L5$7$G!"(Bvalbuf$B$r(Bstrcpy()$B$G;H$C$F$$$^$9$,Bg>fIW$G$9$+!)(B
>
>> if (valbuf == NULL) {
>>  retval = -EFAULT;
>>  goto err1;
>> }
>> if (copy_from_user(valbuf, buf, count)) {
>
> count$B$,!"(Bvalbuf$B$N%5%$%:$r1[$($k$3$H$OK\Ev$K$"$j$^$;$s$+!)$$$A$*$&%A%'%C%/$rF~$l$F(B
> $B$_$k$H$I$&$J$j$^$9$+!)(B
>
>>  retval = -EFAULT;
>>  goto err2;
>> }
>>
>> if (dev->minor == 0) {            // Minor$B$O;HMQ$7$J$$(B
>>  inval = simple_strtoul(valbuf, &endp, 16);     // $BJ8;zNs$r?tCM$KJQ49(B
>
> endp$B$NCM$r%A%'%C%/$7$J$$$N$G$"$l$P(BNULL$B$GNI$$$H;W$$$^$9!#$A$J$_$K!"(Bendp$B$N%5%$%:$O(B
> $B$$$/$D$G$9$+!):G0-$N>l9g$r9MN8$9$k$H!"(Bvalbuf$B$HF1$8$@$1$N%5%$%:$,L5$1$l$P$J$j$^$;$s!#(B
>
> $B0J9_(Bwrite()$B$KEO$7$?J8;z?t$GJ,4t$7$F$$$k$h$&$G$9!#(BOFFSET_MAN, DEVOUT_PB0$B$J$I$NCM$O2?$G$9$+!)(B
>
>>  if (count == OFFSET_MAN){
>>   __raw_writel(inval, addrMan);       // $B%O!<%I$K=PNO(B( Little Endian ) $B-!(B
>> $B!!DL>o$N%O!<%I$X$N%I%i%$%P=PNO(B
>>
>>  }
>>  else if (count ==
>> DEVOUT_PB0){                                                $B-"!!%I%i%$%P(B
>> $BFb%P%C%U%!$K%G!<%?$rE>Aw(B
>>   memcpy(pageBuf0 + ptReadPage, &inval, sizeof(inval));
>
> $B$3$3$G!"(BpageBuf0$B$NHO0O$r1[$($F%3%T!<$5$l$k$3$H$O$"$j$^$;$s$+!)(B
>
>>   ptRead++;
>>  }
>>  else if (count == DEVOUT_PNO){         $B!!(B                $B-#!!(B1$B2s$N(BRUN$B$K(B
>> $B$*$1$k(Btimer$B!!(BClock$B$NAm?t(B
>>   regNo = inval * sizeof(unsigned long);    // clkNo x 4
>>  }
>>  else if (count == DEVOUT_BIT){         // Bit Command     $B-$!!%S%C%HC10L(B
>> $B$N(BCommand
>>   printk("DEVOUT_BIT %x\n", inval);
>>   // RUN$B;XNa(B
>>   if ( inval & (1 << DEVBIT_RUN))
>>    runFlag = true;            // Reset$B$O%I%i%$%PCf$G9T$&(B
>>   // $B=i4|2=;XNa(B
>>   if ( inval & (1 << DEVBIT_CLR)){       // main$BB&$K$h$k6/@)=i4|2=(B
>>    ptRead = 0;                                $B!!(B// $email@hidden;;(Bread$B%]%$%s%?(BClear
>>    ptWrite = 0;                                 // $email@hidden;;J'$$=P$7%]%$%s%?(B
>> Clear
>>   }
>>  }
>> $B!&!&!&!&!&!&!&!&!&!&!&!&!&!&!&!&!&!&!&!&!&!&!&(B
>> err2:
>> kfree(valbuf);
>> err1:
>> up(&sem);
>> return retval;
>> }
>>
>> $B%I%i%$%P$NDL>o5!G=-!$K%I%i%$%P$@$1$KEA$($k%l%8%9%?CM-"!$-#!"%S%C%HC10L$N(B
>> Command$B-$$J$I$rDI2C$7$F$$$^$9!#(Bmain$BB&$OBP1~$7$?CM$r%I%i%$%P$KAw=P$7$^$9!#(B
>> $B%3!<%I$O>JN,!#(B
>>
>> $B!!$3$NAuCV$NL\E*$O%I%i%$%PB&$email@hidden$1$i$l$?%P%C%U%!#1#2#8(BKB$B$K%G!<%?$rAw$j9~(B
>> $B$_!"%?%$%^!<%/%m%C%/$K1~$8$FFbMF$r=g<!J'$$=P$7$F$$$/$3$H$G$9!#(B
>>
>> $B!!%I%i%$%PB&$email@hidden$1$i$l$?3d$j9~$_%O%s%I%i$O35MW$O0J2<$N$h$&$J$b$N$G$9!'(B
>>
>> // timerClk$B3d$j9~$_%O%s%I%i(B
>> static irqreturn_t
>> timer_interrupt(int irq_timer, void *dev_id, struct pt_regs *regs)
>> {
>> int i;
>> long slvReg1[8];
>>
>>
>> IntrStatus = __raw_readl(my_addr_isr);      // isr$B$rFI$_=P$9(B
>>
>> if (runFlag == true){                // RUN$B>uBV0J30$N3d$j9~$_$rL5;k$9$k(B
>> $B%U%i%0(B
>>  if ((ptWrite < regNo){
>>   for ( i = 0; i < 4; i++){
>>     slvReg1[i] = *(pageBuf0 + ptWrite);   // PageBuf 0 Data
>>
>>    __raw_writel(slvReg1[i], addrAut);        // $BJ'=P!!%O!<%I$K=PNO(B $B-!!!IT(B
>> $B0BDj(B
>>
>>    ptWrite++;                                    // $email@hidden;;J'$$=P$7%]%$%s%?(B
>> Increment
>>   }
>>  }
>>  // $BJ'=P$7(B(RUN)$B=*N;!"<!$N%/%m%C%/(B
>>  else if (ptWrite == regNo){
>>   cmdDev &= ~(1 << CMDBIT_AUT);
>>   __raw_writel(cmdDev, addrMan);          // $B%/%m%C%/Dd;_(BCommand
>>
>>   ptWrite = 0;                // Pointer Clear
>>   runFlag = false;            // $B0J9_$NJ'=P$r6X;_$9$k(BFlag
>>  }
>> }
>>  else{
>> //  $B2<5-$N%@%a2!$7$,I,MW$JM}M3$OL$2rL@!#(B
>>  cmdDev &= ~(1 << CMDBIT_AUT);
>>  __raw_writel(cmdDev, addrMan);           // $B%/%m%C%/Dd;_(BCommand
>> }
>>
>> __raw_writel(IntrStatus, my_addr_isr);       //$B!!(Bisr$B$r=q$-La$7(B
>>
>> return IRQ_HANDLED;
>> }
>>
>> $B!!JdB-$G$9$,!"J'=P$7(BptWrite$B!"%P%C%U%!$X$NFI9~$_(BptRead$B$N%]%$%s%?$O%I%i%$(B
>> $B%PB&$,4IM}!"(Bmain$BB&$O(BClear$B$9$k$3$H$,$G$-$^$9!#(B
>>
>> $B!!>e5-$O#4$D$N(BLong$B%G!<%?$r(BregNo$B$KDj$a$k?t!"J'$$=P$9%W%m%0%i%`$G$9$,!"F0(B
>> $B:n$NOHAH$_$OLdBj$"$j$^$;$s!#(B
>> $B=jDj$N?t(BClock$B$H%G!<%?$,=PNO$5$l!"Dd;_$7$^$9!#(B
>
> $B!VDd;_!W$H$$$&$3$H$O!"0JA0Aw$C$F$b$i$C$?%(%i!<%a%C%;!<%8(B
>
> Oops: kernel access of bad area, sig: 11 [#1]
>
> $B$H$O0[$J$k5sF0$K$J$C$F$$$^$9$+!)$=$l$H$b$3$N%a%C%;!<%8$,=P$FDd;_$9$k$H$$$&$3$H$G$7$g$&$+!)(B
>
>> $BLdBj$J$N$O-!$N%9%F%C%W$G$9!#!!%O!<%I$K=PNO$9$k(B
>>    __raw_writel(slvReg1[i], addrAut);
>> $B$,Hs>o$KIT0BDj$J$N$G$9!#(B1,000$B%/%m%C%/$rD6$($k$H$3$m$G5!G=$7$J$/$J$j$^(B
>> $B$9!#%/%m%C%/?t$OITDj$G$9!#(B
>
> $B!VIT0BDj!W$K$J$k$N$O2?$G$7$g$&$+!)$I$N$h$&$J5sF0$K$J$k$+65$($F$$$?$@$1$^$9$+!)(B
>
>> $B!!$$$C$?$sDd;_$9$k$HEE8;EjCG0J30$KI|5l$G$-$J$/$J$j$^$9!#(B
>>
>> $B!!(Bmain$BB&$OL58B%k!<%W$r2s$C$F$$$^$9!#$3$NCf$KAK32MW0x$H;W$o$l$k(Bprintf$B$J$I(B
>> $B$O$9$Y$F=|30$7$^$7$?!#$7$+$73d$j9~$_<+BN$email@hidden>o$K5!G=$7$F$$$k$N$G4X78$J$$(B
>> $B$h$&$K;W$$$^$9!#(B
>>
>> $B!!=email@hidden$O(BFPGA$B$N2sO)$J$N$GLdBj$"$k$H;W$($^$;$s!#(B
>>
>> $B!!$O$K$+%R%s%H$,$"$l$P$*65$($/$@$5$$!#(B
>
>


--------------------------------------------------------------------------------


> _______________________________________________
> suzaku mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/suzaku
> 




suzaku メーリングリストの案内