编译正确,加载正常。用应用程序测试就报错了。
You may stop it w[ 101.485450] Unable to handle kernel NULL pointer dereference at virtual address 0000003c
[ 101.493484] pgd = db7d4000
[ 101.496163] [0000003c] *pgd=3b7b7831, *pte=00000000, *ppte=00000000
[ 101.502384] Internal error: Oops: 17 [#1] PREEMPT
[ 101.507060] Modules linked in: ds18b20 libertas_sdio libertas zd1211rw rt2800usb rt2800lib rt73usb rt2x00usb rt2x00lib ath9k_htc mac80211 ath9k_common ath9k_hw ath cfg80211 compat rtl8192cu tvp5150_tiny210 ov9650 goodix_touch ft5x06_ts snd_soc_mini210_wm8960 snd_soc_wm8960
[ 101.531154] CPU: 0 Not tainted (3.0.8-FriendlyARM #1)
[ 101.536533] PC is at __gpio_set_value+0x14/0x60
[ 101.541036] LR is at ds18b20_ioctl+0x24/0x90 [ds18b20]
[ 101.546145] pc : [<c03792f4>] lr : [<bf1e5044>] psr: 60000013
[ 101.546149] sp : db763ef8 ip : 00005452 fp : bea86cac
[ 101.557581] r10: dbb14000 r9 : db762000 r8 : c017f7e8
[ 101.562781] r7 : 00000003 r6 : 00000000 r5 : 000000fd r4 : 00000000
[ 101.569280] r3 : c0956680 r2 : c092445c r1 : 00000001 r0 : 000000fd
[ 101.575781] Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment user
[ 101.582886] Control: 10c5387d Table: 3b7d4019 DAC: 00000015
[ 101.588604]
[ 101.588606] PC: 0xc0379274:
[ 101.592849] 9274 e30071cf ea000002 e2844001 e1540007 0a00000d e7953184 e1a01006 e2530000
[ 101.600995] 9294 0afffff8 e12fff38 e3500000 0afffff5 e59f3030 e59f0028 e7934184 e1a0100a
[ 101.609140] 92b4 eb0c2e9d e1a00004 e8bd85f8 e3a04000 e59f000c e1a0100a eb0c2e97 e1a00004
[ 101.617286] 92d4 e8bd85f8 c08f6bb0 c0956680 e92d4030 e59f304c e24dd00c e7934180 e1a05000
[ 101.625432] 92f4 e5d4303c e1a02001 e3130001 1a000006 e5941030 e5943024 e1a00004 e0611005
[ 101.633577] 9314 e12fff33 e28dd00c e8bd8030 e59f0014 e300162c e58d2004 ebf892d3 e59d2004
[ 101.641723] 9334 eafffff2 c0956680 c082ae7c e92d4038 e59f3048 e1a05000 e7934180 e5d4303c
[ 101.649869] 9354 e3130001 1a000009 e5943018 e3530000 0a000004 e5941030 e1a00004 e0611005
[ 101.658016]
[ 101.658018] SP: 0xdb763e78:
[ 101.662261] 3e78 00000000 c03a60c4 60000013 c0684d3c 00000000 c03a7624 c03a7568 60000013
[ 101.670407] 3e98 ffffffff db763ee4 00000000 00000003 c017f7e8 c017f12c 000000fd 00000001
[ 101.678552] 3eb8 c092445c c0956680 00000000 000000fd 00000000 00000003 c017f7e8 db762000
[ 101.686698] 3ed8 dbb14000 bea86cac 00005452 db763ef8 bf1e5044 c03792f4 60000013 ffffffff
[ 101.694844] 3ef8 dbc9e540 00000000 00000000 dbc9e540 00000000 bf1e5044 bf1e5020 c0222720
[ 101.702989] 3f18 db763f30 00000002 00000001 dbc9e908 00000000 00000001 5194a0f7 00000000
[ 101.711135] 3f38 00000000 dbc9e908 00000028 00000000 db827870 00000002 db762000 00000000
[ 101.719281] 3f58 00008890 c02139fc 00000000 00000000 dbc9e540 00000000 00006b00 00000003
[ 101.727428]
[ 101.727430] R2: 0xc09243dc:
[ 101.731673] 43dc 00000000 00000000 00000000 000003c5 00000003 00000111 c08d6684 00000001
[ 101.739819] 43fc 00000001 00000000 00000000 000003c5 00000003 00000111 c08d6684 00000001
[ 101.747964] 441c 00000002 00000000 00000000 000003c5 00000003 00000111 c08d6684 00000001
[ 101.756110] 443c 00000003 00000000 00000000 000003c5 00000003 00000111 c08d6684 00000001
[ 101.764256] 445c c08f6c7c c08f6c7c c08f6c7c c08f6c7c c08f6c7c c08f6c7c c08f6c7c c08f6c7c
[ 101.772401] 447c 00000000 c08f6cf0 c08f6cf0 c08f6cf0 c08f6cf0 00000000 c08f6d64 c08f6d64
[ 101.780547] 449c c08f6d64 c08f6d64 c08f6d64 c08f6d64 c08f6d64 c08f6d64 00000000 c08f6dd8
[ 101.788693] 44bc c08f6dd8 c08f6dd8 c08f6dd8 c08f6dd8 00000000 c08f6e4c c08f6e4c c08f6e4c
[ 101.796839]
[ 101.796841] R3: 0xc0956600:
[ 101.801085] 6600 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[ 101.809230] 6620 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[ 101.817376] 6640 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[ 101.825522] 6660 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[ 101.833668] 6680 c08f6c7c 00000000 c08f6c7c 00000000 c08f6c7c 00000000 c08f6c7c 00000000
[ 101.841814] 66a0 c08f6c7c 00000000 c08f6c7c 00000000 c08f6c7c 00000000 c08f6c7c 00000000
[ 101.849959] 66c0 00000000 00000000 c08f6cf0 00000000 c08f6cf0 00000000 c08f6cf0 00000000
[ 101.858105] 66e0 c08f6cf0 00000000 00000000 00000000 c08f6d64 00000000 c08f6d64 00000003
[ 101.866252]
[ 101.866254] R8: 0xc017f768:
[ 101.870497] f768 e24fee13 3798f107 e28d1008 e3a08000 e357080f e2270000 2a000f5b ea00e2f4
[ 101.878642] f788 e1a02007 e28d1008 e3a00000 eb00082e e28fe014 e1a07000 e28d1008 e3570f5e
[ 101.886788] f7a8 3891000f 3798f107 eaffffef e5ad0008 e1a02007 e1a0100d e3a00001 eb000822
[ 101.894934] f7c8 eaffffb4 e320f000 e320f000 e320f000 e320f000 e320f000 c08d5e0c c017fe8c
[ 101.903080] f7e8 c01ac7d4 c01a1808 c017fdf0 c0213b74 c0213be4 c0212f7c c0211af8 c01b835c
[ 101.911225] f808 c0212fa4 c0220e18 c0220bd4 c017fe00 c0212900 c01b835c c0220a88 c0212bd0
[ 101.919371] f828 c01ca9f0 c01b835c c01b835c c02134f4 c01a99b0 c022f7c8 c01b835c c01caa60
[ 101.927517] f848 c01cadb0 c01b835c c01a8418 c01b835c c01b835c c01ad8fc c01b835c c01b835c
[ 101.935663]
[ 101.935665] R9: 0xdb761f80:
[ 101.939909] 1f80 00000000 00000000 000bc891 00000000 000bb98c 00000001 be941bf7 00000003
[ 101.948054] 1fa0 c017f7e8 c017f640 000bb98c 00000001 00000000 be941bf7 00000001 00000010
[ 101.956200] 1fc0 000bb98c 00000001 be941bf7 00000003 000b9764 00000000 4008f000 00000000
[ 101.964346] 1fe0 00000000 be941bc8 00012ea4 4025992c 60000010 00000000 ffffffff ffffffff
[ 101.972492] 2000 00000000 00000002 00000000 dbcfb0c0 c08e0adc 00000000 00000015 00000000
[ 101.980637] 2020 00000000 00000000 00000000 00000000 00000000 00000000 00000000 db763fb0
[ 101.988783] 2040 c017f6d0 00000000 00000000 00000000 00000000 00000000 01000000 00000000
[ 101.996929] 2060 400e84c0 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[ 102.005075]
[ 102.005078] R10: 0xdbb13f80:
[ 102.009407] 3f80 ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
[ 102.017553] 3fa0 ffffffff ffffffff ffffffff ffffffff bfffffff ffffffff ffffffff ffffffff
[ 102.025699] 3fc0 ffffffff ffffffbf ffffffff ffffffff ffffffff ffffffff ffffbfff ffffffff
[ 102.033845] 3fe0 6f2fffff 512f7470 69706f74 69622f61 75712f6e 6c6b6369 636e7561 00726568
[ 102.041990] 4000 000021b0 00000000 00000000 c094bec0 dbc8a000 00000001 dead4ead ffffffff
[ 102.050136] 4020 ffffffff 00000000 00000007 00000001 00000001 dead4ead ffffffff ffffffff
[ 102.058282] 4040 dbb14040 dbb14040 00000000 00000000 dbb1402c 00000000 00000000 00000000
[ 102.066428] 4060 dbb14060 dbb14060 dbb14068 dbb14068 dba19df0 dbc8a090 dbb13988 dbb13988
[ 102.074576] Process temp (pid: 1226, stack limit = 0xdb7622f0)
[ 102.080382] Stack: (0xdb763ef8 to 0xdb764000)
[ 102.084715] 3ee0: dbc9e540 00000000
[ 102.092863] 3f00: 00000000 dbc9e540 00000000 bf1e5044 bf1e5020 c0222720 db763f30 00000002
[ 102.101009] 3f20: 00000001 dbc9e908 00000000 00000001 5194a0f7 00000000 00000000 dbc9e908
[ 102.109155] 3f40: 00000028 00000000 db827870 00000002 db762000 00000000 00008890 c02139fc
[ 102.117300] 3f60: 00000000 00000000 dbc9e540 00000000 00006b00 00000003 c017f7e8 db762000
[ 102.125446] 3f80: 00000000 c0222c90 00001000 00000000 00000028 00000000 00000000 00000000
[ 102.133592] 3fa0: 00000036 c017f640 00000000 00000000 00000003 00006b00 00000000 00000003
[ 102.141737] 3fc0: 00000000 00000000 00000000 00000036 00000000 00000000 4002b000 bea86cac
[ 102.149883] 3fe0: 00000000 bea86ca0 0000858c 402254ec 60000010 00000003 ffffffff ffffffff
[ 102.158040] [<c03792f4>] (__gpio_set_value+0x14/0x60) from [<bf1e5044>] (ds18b20_ioctl+0x24/0x90 [ds18b20])
[ 102.167753] [<bf1e5044>] (ds18b20_ioctl+0x24/0x90 [ds18b20]) from [<c0222720>] (do_vfs_ioctl+0x80/0x5b8)
[ 102.177184] [<c0222720>] (do_vfs_ioctl+0x80/0x5b8) from [<c0222c90>] (sys_ioctl+0x38/0x60)
[ 102.185417] [<c0222c90>] (sys_ioctl+0x38/0x60) from [<c017f640>] (ret_fast_syscall+0x0/0x30)
[ 102.193819] Code: e59f304c e24dd00c e7934180 e1a05000 (e5d4303c)
[ 102.200961] ---[ end trace 7bf43d8c136699fa ]---
ith pushing Ctrl + C.
Segmentation fault
有说是内存映射问题,可是我有映射啊
static ssize_t ds18b20_write(struct file *filp, const char __user *buff, size_t count, loff_t *offp)
{
volatile int i, size=count;
char ddat=0;
if (size > 2)
size = 1;
if (copy_from_user(&ddat, buff, size))
{
printk("write data error\n");
return -1;
}
s3c_gpio_cfgpin(DSDATA, DATAOUTP);
for (i=0; i<8; i++)
{
gpio_set_value(DSDATA, 0);
udelay(5); //5us
if (ddat & 0x01)
{
gpio_set_value(DSDATA, 1);
}
udelay(80); // >70us
gpio_set_value(DSDATA, 1);
udelay(3); // >1us
ddat >>= 1;//准备下一位传送
}
s3c_gpio_cfgpin(DSDATA, DATAINP);
return size;
}
static ssize_t ds18b20_read(struct file *filp, char __user *buff, size_t count, loff_t *offp)
{
volatile int i, size=count;
char ddat;
if (size > 2)
size = 1;
for (i=0; i<8; i++)
{
ddat >>= 1;
s3c_gpio_cfgpin(DSDATA, DATAOUTP);
gpio_set_value(DSDATA, 0);
udelay(4); //4us
gpio_set_value(DSDATA, 1);
s3c_gpio_cfgpin(DSDATA, DATAINP);
if ( s3c_gpio_getcfg(DSDATA) )
{
ddat |= 0x80;
}
udelay(80); // >70us
s3c_gpio_cfgpin(DSDATA, DATAOUTP);
gpio_set_value(DSDATA, 1);
udelay(3); // >1us
}
s3c_gpio_cfgpin(DSDATA, DATAINP);
if(copy_to_user(buff, &ddat, size))
{
return -1;
}
return size;
}