LINUX2.6内核中用户空间向驱动程序传递的内存大小最大为多少?

 LINUX2.6内核中用户空间向驱动程序传递的内存大小最大为多少?似乎是一个页的大小,怎么突破这一页大小呢?

i is 347
i is 348
i is 349
i is 350
i is 351
i is 352
i is 353
i is 354
i is 355
i is 356
i is 357
i is 358
i is 359
i is 360
i is 361
i is 362
i is 363
i is 364
i is 365
i is 366
i is 367
i is 368
i is 369
i is 370
i is 371
i is 372
i is 373
i is 374
i is 375
i is 376
i is 377
i is 378
i is 379
i is 380
i is 381
i is 382
i is 383
i is 384
i is 385
i is 386
i is 387
i is 388
i is 389
i is 390
i is 391
i is 392
i is 393
i is 394
i is 395
i is 396
i is 397
i is 398
i is 399
i is 400
i is 401
i is 402
i is 403
i is 404
i is 405
i is 406
i is 407
i is 408
i is 409
i is 410
i is 411
i is 412
i is 413
i is 414
i is 415
i is 416
i is 417
i is 418
i is 419
i is 420
i is 421
i is 422
i is 423
i is 424
i is 425
i is 426
i is 427
i is 428
i is 429
i is 430
i is 431
i is 432
i is 433
i is 434
i is 435
i is 436
i is 437
i is 438
i is 439
i is 440
i is 441
i is 442
i is 443
i is 444
i is 445
i is 446
i is 447
i is 448
i is 449
i is 450
i is 451
i is 452
i is 453
i is 454
i is 455
i is 456
i is 457
i is 458
i is 459
i is 460
i is 461
i is 462
i is 463
i is 464
i is 465
i is 466
i is 467
i is 468
i is 469
i is 470
i is 471
i is 472
i is 473
i is 474
i is 475
i is 476
i is 477
i is 478
i is 479
i is 480
i is 481
i is 482
i is 483
i is 484
i is 485
i is 486
i is 487
i is 488
i is 489
i is 490
i is 491
i is 492
i is 493
i is 494
i is 495
i is 496
i is 497
i is 498
i is 499
i is 500
i is 501
i is 502
i is 503
i is 504
i is 505
i is 506
i is 507
i is 508
i is 509
i is 510
i is 511
Unable to handle kernel paging request at virtual address c48b3000
pgd = c3e90000
[c48b3000] *pgd=23c18011, *pte=00000000, *ppte=00000000
Internal error: Oops: 807 [#2] PREEMPT
Modules linked in: dram_driver [last unloaded: dram_driver]
CPU: 0    Tainted: G      D    (2.6.26.6 #9)
PC is at dram_write+0x60/0x1a0 [dram_driver]
LR is at vprintk+0x370/0x3d8
pc : [<bf000098>]    lr : [<c003a7f0>]    psr: 80000013
sp : c3e1ff30  ip : 00014fe7  fp : c3e1ff4c
r10: 00000000  r9 : c3e1e000  r8 : c0021ca8
r7 : 00000271  r6 : 00000201  r5 : 00014fe6  r4 : c48b3000
r3 : 00000222  r2 : 00000002  r1 : 00000200  r0 : bf0003a8
Flags: Nzcv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
Control: c000717f  Table: 23e90000  DAC: 00000015
Process dram_test (pid: 870, stack limit = 0xc3e1e268)
Stack: (0xc3e1ff30 to 0xc3e20000)
ff20:                                     c3e05700 00011fe6 c3e1ff78 00001d4c
ff40: c3e1ff74 c3e1ff50 c0086fc0 bf000048 00000001 00000001 00000000 00000000
ff60: c3e05700 00000004 c3e1ffa4 c3e1ff78 c00875e0 c0086f14 00000000 00000000
ff80: c3e1ffac 00000000 c0021058 00000000 00000000 0000844c 00000000 c3e1ffa8
ffa0: c0021b00 c00875a4 00000000 00000000 00000003 00011fe6 00001d4c 00001d4c
ffc0: 00000000 00000000 0000844c 00000004 00000000 00000000 40024000 bea84d44
ffe0: 00000000 bea84d28 00008800 400d60ac 60000010 00000003 cc33cc33 cc33cc33
Backtrace:
[<bf000038>] (dram_write+0x0/0x1a0 [dram_driver]) from [<c0086fc0>] (vfs_write+0
xbc/0x14c)
 r7:00001d4c r6:c3e1ff78 r5:00011fe6 r4:c3e05700
[<c0086f04>] (vfs_write+0x0/0x14c) from [<c00875e0>] (sys_write+0x4c/0x7c)
 r7:00000004 r6:c3e05700 r5:00000000 r4:00000000
[<c0087594>] (sys_write+0x0/0x7c) from [<c0021b00>] (ret_fast_syscall+0x0/0x2c)
 r6:0000844c r5:00000000 r4:00000000
Code: e89da8f0 e4dc3001 e5d52001 e1833402 (e1c430b0)
---[ end trace dddf31d6bbf6387b ]---
Segmentation fault

 

12日解决了此问题,原因是双口RAM按16位组织,而LINUX内核中按字节操作,所以进行ioremap()时必须按字节来算不能按字来算。同时调用了writew()之后指针应该加2.之前的原因就在于writew()中的指针超过了ioremap()定义的长度。

你可能感兴趣的:(LINUX2.6内核中用户空间向驱动程序传递的内存大小最大为多少?)