2009年11月23日 星期一

Moschip linux driver for EMT PCI Express to port RS232 (serial)

Driver:
Moschip download
(need to register)

Patch for 2.6.28:
starex_2.6.28.patch.gz
(source:http://forums.linuxmint.com/viewtopic.php?f=49&t=29576/MCS9901_Linux/version1.6)

Usage:
@Drivers/MCS9901_Linux/version1.6 $ gzip -d starex_2.6.28.patch.gz
@Drivers/MCS9901_Linux/version1.6 $ ls
MCS9901_Linux_UM_Ver0.4.pdf starex starex_2.6.28.patch starex.tar.gz
@Drivers/MCS9901_Linux/version1.6 $ patch -p0 <>make
->sudo make install
->ls /dev/ttyD*
->lspci -v (After install)
03:00.0 Serial controller: NetMos Technology PCIe 9901 Multi-I/O Controller (prog-if 02)
Subsystem: Device a000:1000
Flags: bus master, fast devsel, latency 0, IRQ 17
I/O ports at ec00 [size=8]
Memory at febff000 (32-bit, non-prefetchable) [size=4K]
Memory at febfe000 (32-bit, non-prefetchable) [size=4K]
Capabilities: [80] Power Management version 3
Capabilities: [88] Message Signalled Interrupts: Mask- 64bit+ Queue=0/5 Enable-
Capabilities: [c0] Express Legacy Endpoint, MSI 00
Capabilities: [100] Power Budgeting
Capabilities: [200] Device Serial Number aa-bb-cc-dd-ee-ff-99-88
Kernel driver in use: starex-serial
Kernel modules: 9900-isa


You may need to modify Makefile before calling "make install":
(My OS is Ubuntu 9.04)
#ln -s /etc/init.d/mcs9900 /etc/rc.d/rc3.d/Smcs9900 || true
#ln -s /etc/init.d/mcs9900 /etc/rc.d/rc5.d/Smcs9900 || true
ln -s /etc/init.d/mcs9900 /etc/rc2.d/Smcs9900 || true
ln -s /etc/init.d/mcs9900 /etc/rc3.d/Smcs9900 || true
ln -s /etc/init.d/mcs9900 /etc/rc5.d/Smcs9900 || true

so that the driver is loaded when OS starts.

2009年11月17日 星期二

使用 od 觀察(dump) binary file

od -x -j 5 -N 10 file
->0000005 5478 1245 4eae 0842 4082
->0000017

-x: 以16進位印出, 兩個bytes為單位 (因此此例由小位址起dump值為 78 54 45 12 ae 4e ... 82 40)
-j: 跳過幾個bytes
-N: 輸出幾個bytes
file: 檔名

2009年11月10日 星期二

file nodes in /proc (relevant to driver)

看Major number
robert@robert-desktop ~/Test $ cat /proc/devices
Character devices:
1 mem
4 /dev/vc/0
4 tty
4 ttyS
...

看device node, Major number, minor number range
robert@robert-desktop ~/Test $ cat /proc/tty/drivers

/dev/tty /dev/tty 5 0 system:/dev/tty
/dev/console /dev/console 5 1 system:console
/dev/ptmx /dev/ptmx 5 2 system
/dev/vc/0 /dev/vc/0 4 0 system:vtmaster
rfcomm /dev/rfcomm 216 0-255 serial
serial /dev/ttyS 4 64-111 serial
...

看IO port
robert@robert-desktop ~/Test $ cat /proc/ioports
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-0060 : keyboard
0064-0064 : keyboard
...

看Memory Map IO
robert@robert-desktop ~/Test $ cat /proc/iomem
00000000-0000ffff : reserved
00010000-0009fbff : System RAM
0009fc00-0009ffff : reserved
000a0000-000bffff : Video RAM area
000c0000-000c7fff : Video ROM
000cc800-000cd7ff : Adapter ROM
...

看serial port tty* 的 IO port 和 IRQ
robert@robert-desktop ~/Test $ setserial -g /dev/tty*
/dev/ttyD0, UART: 16550A, Port: 0xec00, IRQ: 17
/dev/ttyS0, UART: unknown, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: unknown, Port: 0x02f8, IRQ: 3
/dev/ttyS2, UART: unknown, Port: 0x03e8, IRQ: 4
/dev/ttyS3, UART: unknown, Port: 0x02e8, IRQ: 3

看 IRQ 次數
robert@robert-desktop ~/Test $ cat /proc/interrupts
CPU0 CPU1 CPU2 CPU3
0: 3855694 3885186 3836114 3824345 IO-APIC-edge timer
1: 0 1 0 1 IO-APIC-edge i8042
...