2012-02-21 75 views
2

mmap/dev/port可以嗎?當我嘗試時,我得到'沒有這樣的設備'。Python mmap/dev/port

Python 2.7.2+ (default, Oct 4 2011, 20:06:09) 
[GCC 4.6.1] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import os 
>>> import mmap 
>>> os.open('/dev/port', os.O_RDWR|os.O_NDELAY) 
3 
>>> mapfd = mmap.mmap(3, 0xfff) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
mmap.error: [Errno 19] No such device 
>>> 

我已經能夠使用相同的選項mmap常規文件。

+0

mmaping'/ dev/port'會有什麼意義? mmaping'/ dev/mem'是有意義的,'/ dev/port'不是。 – ninjalj 2012-02-21 20:52:25

+0

@ninjalj它只是讓我直接寫入一個ioport地址,而不必在每次讀/寫之前尋找。 – tMC 2012-02-21 23:03:00

+0

也許使用ctypes的pwrite? – sherpya 2012-02-22 00:43:30

回答

4

errno的19列爲 「沒有這樣的設備」(Linux)的,或 「操作不通過設備支持」(FreeBSD的)。

綜觀drivers/char/mem.c/dev/port的源代碼,尤其是struct file_operations,你會see

770 #ifdef CONFIG_DEVPORT 
771 static const struct file_operations port_fops = { 
772   .llseek   = memory_lseek, 
773   .read   = read_port, 
774   .write   = write_port, 
775   .open   = open_port, 
776 }; 
777 #endif 

此設備不支持MMAP。只有開放,尋求,閱讀和寫作。

+0

+1指向內核源代碼。我的kernel-fu不如真棒。 – tMC 2012-02-22 02:41:24

0

正如已經指出的那樣,/dev/portmmap -able。但看到你如何使用Python - 讓我們利用動態類型的真正力量!爲什麼不創建一個類似mmap的對象,它支持相同的接口,但在下面使用lseek