http://qchfu2006.blog.163.com/blog/static/14153441020121120395443
编译好short之后,运行short_load会出现以下问题:
insmod: error inserting './short.ko': -1 No such device然后运行dmesg查看,有以下信息:
[ 3021.587443] short: can't get I/O port address 0x378
此句正是在模块初始化函数中打印的,如下:
if (! request_region(short_base, SHORT_NR_PORTS, "short")) {
printk(KERN_INFO "short: can't get I/O port address 0x%lx\n",short_base);
return -ENODEV;
}
即,该端口被占用-----猜测。下面验证:
root@ubuntu:/opt/LDD3/ldd3_examples/short# cat /proc/ioports | grep 378
0378-037a : parport0
root@ubuntu:/opt/LDD3/ldd3_examples/short# cat /proc/modules | grep par
parport_pc 25962 1 - Live 0xf8148000
parport 32635 3 lp,ppdev,parport_pc, Live 0xf813e000
root@ubuntu:/opt/LDD3/ldd3_examples/short#
可见被占用了。另外,验证一下模块的版本是否有问题:
root@ubuntu:/opt/LDD3/ldd3_examples/short# modinfo short.ko
filename: short.ko
license: Dual BSD/GPL
author: Alessandro Rubini
srcversion: E5677DDD5394F9013998F9E
depends:
vermagic: 2.6.32-21-generic SMP mod_unload modversions 586
parm: major:int
parm: use_mem:int
parm: base:long
parm: irq:int
parm: probe:int
parm: wq:int
parm: tasklet:int
parm: share:int
root@ubuntu:/opt/LDD3/ldd3_examples/short# uname -r
2.6.32-21-generic
root@ubuntu:/opt/LDD3/ldd3_examples/short#
可见,版本也是没有问题。
下面查看占用的模块:
root@ubuntu:/opt/LDD3/ldd3_examples/short# lsmod | grep par
parport_pc 25962 1
parport 32635 3 lp,ppdev,parport_pc
root@ubuntu:/opt/LDD3/ldd3_examples/short#
=====================================解决办法,逐步卸载相应模块,逐步测试。
首先卸载lp模块,卸载前,要查看其信息,确定其位置,以备以后再挂载
root@ubuntu:/opt/LDD3/ldd3_examples/short# modinfo lp
filename: /lib/modules/2.6.32-21-generic/kernel/drivers/char/lp.ko
下面卸载:rmmod lp
卸载后,还是不可以。接着卸载下一个。
root@ubuntu:/opt/LDD3/ldd3_examples/short# modinfo ppdev
filename: /lib/modules/2.6.32-21-generic/kernel/drivers/char/ppdev.ko
alias: char-major-99-*
license: GPL
srcversion: 72666B19847D704839BC900
depends: parport
vermagic: 2.6.32-21-generic SMP mod_unload modversions 586
root@ubuntu:/opt/LDD3/ldd3_examples/short# rmmod ppdev
root@ubuntu:/opt/LDD3/ldd3_examples/short# ./short_load
insmod: error inserting './short.ko': -1 No such device
root@ubuntu:/opt/LDD3/ldd3_examples/short#
还是不可以,再卸载!
root@ubuntu:/opt/LDD3/ldd3_examples/short# modinfo parport_pc
filename: /lib/modules/2.6.32-21-generic/kernel/drivers/parport/parport_pc.ko
root@ubuntu:/opt/LDD3/ldd3_examples/short# rmmod parport_pc
root@ubuntu:/opt/LDD3/ldd3_examples/short#
root@ubuntu:/opt/LDD3/ldd3_examples/short# ./short_load
root@ubuntu:/opt/LDD3/ldd3_examples/short#
可以啦!!!!!
root@ubuntu :/dev# ls -l | grep short
crw-rw-rw- 1 root staff 250, 0 2012-12-20 15:23 short0
crw-rw-rw- 1 root staff 250, 16 2012-12-20 15:23 short0p
crw-rw-rw- 1 root staff 250, 32 2012-12-20 15:23 short0s
crw-rw-rw- 1 root staff 250, 1 2012-12-20 15:23 short1
crw-rw-rw- 1 root staff 250, 17 2012-12-20 15:23 short1p
crw-rw-rw- 1 root staff 250, 33 2012-12-20 15:23 short1s
crw-rw-rw- 1 root staff 250, 2 2012-12-20 15:23 short2
crw-rw-rw- 1 root staff 250, 18 2012-12-20 15:23 short2p
crw-rw-rw- 1 root staff 250, 34 2012-12-20 15:23 short2s
crw-rw-rw- 1 root staff 250, 3 2012-12-20 15:23 short3
crw-rw-rw- 1 root staff 250, 19 2012-12-20 15:23 short3p
crw-rw-rw- 1 root staff 250, 35 2012-12-20 15:23 short3s
crw-rw-rw- 1 root staff 250, 4 2012-12-20 15:23 short4
crw-rw-rw- 1 root staff 250, 20 2012-12-20 15:23 short4p
crw-rw-rw- 1 root staff 250, 36 2012-12-20 15:23 short4s
crw-rw-rw- 1 root staff 250, 5 2012-12-20 15:23 short5
crw-rw-rw- 1 root staff 250, 21 2012-12-20 15:23 short5p
crw-rw-rw- 1 root staff 250, 37 2012-12-20 15:23 short5s
crw-rw-rw- 1 root staff 250, 6 2012-12-20 15:23 short6
crw-rw-rw- 1 root staff 250, 22 2012-12-20 15:23 short6p
crw-rw-rw- 1 root staff 250, 38 2012-12-20 15:23 short6s
crw-rw-rw- 1 root staff 250, 7 2012-12-20 15:23 short7
crw-rw-rw- 1 root staff 250, 23 2012-12-20 15:23 short7p
crw-rw-rw- 1 root staff 250, 39 2012-12-20 15:23 short7s
crw-rw-rw- 1 root staff 250, 128 2012-12-20 15:23 shortint
crw-r--r-- 1 root root 250, 129 2012-12-20 15:23 shortprint
root@ubuntu:/dev#
root@ubuntu:/opt/LDD3/ldd3_examples/short# more /proc/interrupts
CPU0 CPU1
0: 57 4 IO-APIC-edge timer
1: 2 2 IO-APIC-edge i8042
4: 3 3 IO-APIC-edge
7: 0 0 IO-APIC-edge short
8: 0 1 IO-APIC-edge rtc0
9: 0 0 IO-APIC-fasteoi acpi
12: 2 4 IO-APIC-edge i8042
14: 7006 7057 IO-APIC-edge ata_piix
15: 0 0 IO-APIC-edge ata_piix
16: 114700 920 IO-APIC-fasteoi uhci_hcd:usb5, HDA Intel, nouveau, HDA Intel
18: 0 0 IO-APIC-fasteoi uhci_hcd:usb4
19: 3 3 IO-APIC-fasteoi uhci_hcd:usb3
23: 1 2 IO-APIC-fasteoi ehci_hcd:usb1, uhci_hcd:usb2
27: 91 81571 PCI-MSI-edge eth0
NMI: 0 0 Non-maskable interrupts
LOC: 2511989 797757 Local timer interrupts
SPU: 0 0 Spurious interrupts
PMI: 0 0 Performance monitoring interrupts
PND: 0 0 Performance pending work
RES: 44437 29972 Rescheduling interrupts
CAL: 112 70 Function call interrupts
TLB: 6982 3961 TLB shootdowns
TRM: 0 0 Thermal event interrupts
THR: 0 0 Threshold APIC interrupts
MCE: 0 0 Machine check exceptions
MCP: 17 17 Machine check polls
ERR: 1
MIS: 0
root@ubuntu:/opt/LDD3/ldd3_examples/short#