2020-01-05 12:42:37 +03:00
|
|
|
Using PCI serial ports for debugging
|
|
|
|
====================================
|
|
|
|
|
|
|
|
Modern systems usually don't come with a built-in serial port anymore. This
|
|
|
|
is unconvenient for low level debugging, since the serial port allows access
|
|
|
|
to early boot log as well as kernel debugger, even when the display or keyboard
|
|
|
|
are not working.
|
|
|
|
|
|
|
|
It is fortunately possible to add a serial port over the PCI bus on machines
|
|
|
|
which have appropriate expansion ports. This can be done using expresscard,
|
|
|
|
mini-PCI, or PCI express ports.
|
|
|
|
|
|
|
|
Devices known to work
|
|
|
|
---------------------
|
|
|
|
|
|
|
|
Dexlan XMT01A (https://www.accessoires-informatiques.com/Prix/EXPRESSCARD-PCIE-POUR-PORTABLE-23842.html)
|
|
|
|
Uses MOSCHIP 9922 controller
|
|
|
|
|
|
|
|
Devices to be tested
|
|
|
|
--------------------
|
|
|
|
|
|
|
|
https://smile.amazon.com/Industrial-Desktop-Bracket-Moschip-MCS9922/dp/B003D3MFHM/
|
|
|
|
|
|
|
|
Configuring
|
|
|
|
-----------
|
|
|
|
|
|
|
|
- Install the card in your computer
|
|
|
|
- Boot Haiku and look in the syslog for the PCI bus scan for the device:
|
|
|
|
|
2021-08-24 18:45:36 +03:00
|
|
|
.. code-block:: text
|
|
|
|
|
|
|
|
KERN: PCI: [dom 0, bus 5] bus 5, device 0, function 0: vendor 9710, device 9922, revision 00
|
|
|
|
KERN: PCI: class_base 07, class_function 00, class_api 02
|
|
|
|
KERN: PCI: vendor 9710: MosChip Semiconductor Technology Ltd.
|
|
|
|
KERN: PCI: device 9922: MCS9922 PCIe Multi-I/O Controller
|
|
|
|
KERN: PCI: info: Communication controller (Serial controller, 16550)
|
|
|
|
KERN: PCI: line_size 10, latency 00, header_type 80, BIST 00
|
|
|
|
KERN: PCI: ROM base host 00000000, pci 00000000, size 00000000
|
|
|
|
KERN: PCI: cardbus_CIS 00000000, subsystem_id 1000, subsystem_vendor_id a000
|
|
|
|
KERN: PCI: interrupt_line 0b, interrupt_pin 01, min_grant 00, max_latency 00
|
|
|
|
KERN: PCI: base reg 0: host 00004000, pci 0000KERN: 4000, size 00000008, flags 01
|
|
|
|
KERN: PCI: base reg 1: host f1c01000, pci f1c01000, size 00001000, flags 00
|
|
|
|
KERN: PCI: base reg 2: host 00000000, pci 00000000, size 00000000, flags 00
|
|
|
|
KERN: PCI: base reg 3: host 00000000, pci 00000000, size 00000000, flags 00
|
|
|
|
KERN: PCI: base reg 4: host 00000000, pci 00000000, size 00000000, flags 00
|
|
|
|
KERN: PCI: base reg 5: host f1c00000, pci f1c00000, size 00001000, flags 00
|
|
|
|
KERN: PCI: Capabilities: MSI, PM, PCIe
|
|
|
|
KERN: PCI: Extended capabilities: Virtual Channel, Advanced Error Reporting
|
2020-01-05 12:42:37 +03:00
|
|
|
|
|
|
|
|
|
|
|
Write down the address of "base reg 0", this is where the serial port registers
|
|
|
|
are mapped (it is probably possible to get this information from lspci on Linux
|
|
|
|
as well?)
|
|
|
|
|
|
|
|
Configure serial debug in config/settings/kernel/drivers/kernel:
|
|
|
|
|
2021-08-24 18:45:36 +03:00
|
|
|
.. code-block:: text
|
|
|
|
|
|
|
|
serial_debug_output true
|
|
|
|
serial_debug_speed 115200
|
|
|
|
serial_debug_port 0x4000
|
2020-01-05 12:42:37 +03:00
|
|
|
|
|
|
|
Now your kernel is configured to send its output to the serial port. You can
|
|
|
|
connect another machine to it (using an USB to serial adapter and a NULL modem
|
|
|
|
cable, for example) and use SerialConnect or a similar tool to see the output
|
|
|
|
and access the KDL prompt.
|
|
|
|
|
|
|
|
Happy debugging!
|