[問題] 使用print port做io輸出的問題

看板C_and_CPP作者 (距離...是妳經過我的時候)時間13年前 (2010/11/22 00:50), 編輯推噓3(3017)
留言20則, 4人參與, 最新討論串1/1
小弟在linux底下想控置print port輸出 因為使用筆電,所以外接了usb轉print port的裝置 我找到它的io輸出位置是1828~182f,程式編譯沒有問題,但是每次執行都會跑出 "Segmentation fault"的字樣 請問板上的高手,小弟的問題是在哪裡? 以下是我的程式: #include <stdio.h> #include <math.h> #include <iostream> #include <unistd.h> #include <stdlib.h> #include <sys/io.h> #define BASEPORT 0x1828 int main() { iopl(3); ioperm(BASEPORT, 8, 1); usleep(100000); outb(0, BASEPORT); usleep(100000); while(1); } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.124.201.62

11/22 09:57, , 1F
有試著用過 gdb 嗎(?) 編譯的時候多加個 -g 選項,然後打
11/22 09:57, 1F

11/22 09:58, , 2F
gdb a.out (假設輸出a.out的話) 然後進入指令視窗後打run
11/22 09:58, 2F

11/22 09:59, , 3F
運氣好可以看是在哪行發生 Segmentation Fault 如果看不
11/22 09:59, 3F

11/22 10:00, , 4F
到那就改下 start 然後按 next 逐行去跑 接著一直按 n 就
11/22 10:00, 4F

11/22 10:01, , 5F
持續往下跑... 雖然我猜是 outb 那行出問題 但是我不知道
11/22 10:01, 5F

11/22 10:01, , 6F
該怎麼改... 囧>
11/22 10:01, 6F

11/22 10:02, , 7F
ioperm那行註解掉看看?
11/22 10:02, 7F

11/22 10:46, , 8F
謝謝madoka82大,我使用BLOCKS編譯時有顯示outb這行發生
11/22 10:46, 8F

11/22 10:47, , 9F
問題... 而love大,我將ioperm註解掉之後,結果還是一樣><
11/22 10:47, 9F

11/22 10:51, , 10F
Win下不經過驅動直接IO輸出入一定報錯
11/22 10:51, 10F

11/22 10:52, , 11F
Linux可以直接對裝置輸出入IO嗎??
11/22 10:52, 11F

11/22 11:04, , 12F
windows的話,IO是特權指令,不過有些port可以用就是了
11/22 11:04, 12F

11/22 11:32, , 13F
話說... 如果改用 root 身分跑這程式看看(?)
11/22 11:32, 13F

11/22 11:36, , 14F
小弟打iopl(3);的指令,是把權力改成root的意思嗎?在網路
11/22 11:36, 14F

11/22 11:37, , 15F
上看到的說明好像是這樣做沒錯的樣子
11/22 11:37, 15F

11/22 11:40, , 16F
我是說你執行程式的時候改用 root 帳號或是sudo去執行XD
11/22 11:40, 16F

11/22 11:42, , 17F
如果你用的是怪怪 ubuntu 要變成 root 可以考慮 sudo su
11/22 11:42, 17F

11/22 11:44, , 18F
另外就是你的環境是 VM 嗎? 如果是 Virtual 的話可能有時
11/22 11:44, 18F

11/22 11:45, , 19F
候跟實體 I/O 還是會出問題...
11/22 11:45, 19F

11/22 11:49, , 20F
程式也要有root的權限
11/22 11:49, 20F
文章代碼(AID): #1CwKtXzF (C_and_CPP)