Menemukan informasi perangkat keras di linux tanpa lspci


15

Saya memiliki perangkat ARM yang menjalankan ArchLinux. Perangkat tampaknya tidak memiliki bus PCI, meskipun memiliki USB.

[root@alarm ~]# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 002: ID 05e3:0608 Genesys Logic, Inc. USB-2.0 4-Port HUB
[root@alarm ~]# lspci
pcilib: Cannot open /proc/bus/pci
lspci: Cannot find any working access method.
[root@alarm ~]# 

Saya ingin mencari chipset apa lagi yang ada. Misalnya, saya tahu ada kartu suara dan kartu video yang mampu HDMI. Chip seperti itu tidak akan diletakkan pada jalur USB.

Saya melihat konfigurasi kernel yang saat ini bekerja pada perangkat di /proc/config.gz, ia mencantumkan ini:

#
# Bus support
#
CONFIG_ARM_AMBA=y
# CONFIG_PCI_SYSCALL is not set
# CONFIG_ARCH_SUPPORTS_MSI is not set
# CONFIG_PCCARD is not set

Saya tidak tahu apa itu AMBA. Pencarian menyeluruh dari google akan mengembalikan entri ini dalam basis data kernel tetapi tanpa penjelasan yang sebenarnya, selain tidak menggunakannya jika Anda tidak tahu apa yang Anda lakukan.

Menggunakan lshw juga tidak menunjukkan lebih banyak:

[root@alarm ~]# lshw
alarm                     
    description: Computer
    width: 32 bits
  *-core
       description: Motherboard
       physical id: 0
     *-memory
          description: System memory
          physical id: 0
          size: 307MiB
     *-cpu
          physical id: 1
          bus info: cpu@0
          size: 1008MHz
          capacity: 1008MHz
          capabilities: cpufreq
  *-network
       description: Ethernet interface
       physical id: 1
       logical name: eth0
       serial: 00:01:02:03:04:05
       size: 10Mbit/s
       capacity: 100Mbit/s
       capabilities: ethernet physical tp mii 10bt 10bt-fd 100bt 100bt-fd autonegotiation
       configuration: autonegotiation=off broadcast=yes driver=wemac driverversion=1.01 duplex=half ip=192.168.1.1 link=yes multicast=yes port=MII speed=10Mbit/s
[root@alarm ~]# 

Tampaknya tidak ada modul dalam kernel ini dimuat:

[root@alarm ~]# lsmod
Module                  Size  Used by
[root@alarm ~]# 

Terlebih lagi, hwinfo sepertinya tidak tersedia:

[root@alarm ~]# pacman -Syu
:: Synchronizing package databases...
 core is up to date
 extra is up to date
 community is up to date
 alarm is up to date
 aur is up to date
:: Starting full system upgrade...
 there is nothing to do
[root@alarm ~]# pacman -S hwinfo
error: target not found: hwinfo
[root@alarm ~]# hwinfo
-bash: hwinfo: command not found
[root@alarm ~]# 

Saya perlu tahu chip apa yang digunakan pada sistem ini sehingga saya dapat mengkompilasi dalam modul driver video yang tepat, bagaimana cara mencari tahu apa yang ada pada sistem tanpa lspci yang berfungsi?


Banyak SOC ARM memang tidak memiliki bus PCI. Tidak yakin apa nama bus internal pada SOC tersebut, atau jika standar. Anda dapat lsmoddan melihat modul yang ada. Juga jika Anda memiliki kernel yang berfungsi dengan sebuah configfile, Anda dapat menggunakannya untuk mulai dengan - dan mencari-cari, karena modul yang benar sudah dipilih. Berguna bagi saya dalam membuat kernel khusus untuk Guruplug.
LawrenceC

Telah menambahkan hasil lsmod, yang pada dasarnya tidak ada. Ini adalah kernel ARM generik, jadi tidak ada modul khusus yang dibuat. Saya mencoba mencari tahu modul apa yang harus saya buat agar saya tidak membanjiri mesin dengan modul yang tidak berguna.
tu-Reinstate Monica-dor duh

cat /proc/cpuinfo
Michael Hampton

Itu memberi saya hanya informasi CPU, bukan sisa perangkat keras, seperti chipset suara dan video.
tu-Reinstate Monica-dor duh

Apa perangkat atau platform yang Anda gunakan?
LawrenceC

Jawaban:


10

Ini jawaban resmi saya setelah Anda menjawab komentar saya. Saya bisa saja salah tentang ini dan menerima koreksi.

Saya tidak yakin kapan Intel mulai memasukkan PCIe (yang merupakan ekstensi PCI yang kompatibel dengan perangkat lunak) ke dalam CPU mereka. Namun, belum seperti ini untuk sebagian besar waktu x86 telah ada. PCI benar-benar merupakan bagian dari keseluruhan "platform PC" yang mencakup sejumlah hal lain yang standar dan diharapkan, seperti port ISA standar / alamat I / O / IRQ untuk perangkat dan hal-hal seperti itu.

Kembalikan sedikit ke sebelum PCI ada - pada dasarnya, kecuali dengan upaya gagal untuk memperkenalkan standar PnP dengan ISAPNP, Anda tidak benar-benar "menyelidiki" untuk beberapa perangkat. Anda biasanya perlu mengasumsikan mereka ada sebelumnya. Anda bisa, tentu saja, mendaftar tes dan apa yang tidak untuk melihat apakah sesuatu merespons seperti yang diharapkan, tetapi Anda kemudian mendapat masalah jika ada perangkat yang berbeda, mungkin mengakibatkan hang, dll. Benar-benar tidak ada cara untuk "memindai" bus ISA. Atau benar-benar bus lain yang tidak mendukung konsep PnP dengan cara standar.

Salah satu hal yang seharusnya dipecahkan oleh ACPI adalah menyediakan beberapa tabel informasi yang memberi tahu Anda apa perangkat ISA yang terpasang. Bahkan sebelum ACPI, BIOS akan berkonsultasi untuk memutuskan berapa banyak floppy drive dalam sistem. Inilah sebabnya mengapa pada sistem yang lebih lama, bahkan jika Anda tidak memiliki floppy terhubung, Anda akan melihat drive A: di Windows jika Anda memiliki set BIOS untuk mengatakan ada satu.

Jadi, Anda mungkin bertanya bagaimana OS modern menentukan atau berinteraksi dengan chipset PCI. Sebagian besar waktu chipset muncul sebagai perangkat di bus PCI itu sendiri. Antarmuka PCI mendaftar "sudah ada" di lokasi standar yang diketahui di platform PC. Pemindaian terprogram melalui semua slot perangkat dan fungsi di ruang PCI dimungkinkan di sini. Tidak ada yang seperti itu untuk ISA. Jika perangkat berada di bus dengan ISA, itu akan merespons ketika dimuat / disimpan, dan hanya itu. Anda tidak dapat benar-benar berbicara dengan bus itu sendiri.

Kebetulan, chipset PCI bahkan mungkin memiliki kemampuan untuk mengontrol jembatan "PCI-ISA" dan membawa beberapa fungsi PnP ke bus ISA (atau sekarang, LPC). Pada sendiri, ISA mengatakan Anda sendiri, meskipun.

Tidak ada platform standar untuk ARM. Belum. Ada banyak platform unik yang dijalankan oleh CPU ARM. PCI, I2C, dan SDIO bus (dan mungkin lebih banyak yang saya tidak tahu) adalah kesamaan di antara mereka, tetapi sekali lagi, ada platform ARM yang tidak memilikinya. ACPI tidak diterapkan pada ARM AFAIK kecuali pada Microsoft Surface RT. Tanpa bekerja dengan bus standar yang mendukung beberapa gagasan PnP, tidak ada cara untuk "menyelidiki" apa pun. Anda harus memiliki pengetahuan di luar sistem perangkat keras yang seharusnya ada di sana. U-Boot adalah bootloader ARM yang umum digunakan yang membutuhkan dukungan untuk dan dibangun untuk platform spesifik yang seharusnya dijalankan. Itu sesuatu seperti standar, tetapi meskipun begitu, itu

Beberapa Googling singkat mengungkapkan bahwa perangkat ini memiliki chipset video "Mali 400". Pencarian lebih lanjut membawa situs kode sumber driver GPU Mali . Saya agak berkarat pada huruf C saya, tetapi saya melihatnya. Tampaknya apa yang seharusnya Anda lakukan adalah, ketika Anda membangun driver, katakan itu alamat yang perlu ditekan untuk berbicara dengan GPU. Saya benar-benar tidak membenamkan diri ke dalam sumber terlalu dalam, tetapi itu tidak akan mengejutkan saya jika tidak berbicara dengan bus, tetapi hanya memuat / menyimpan dari I / O yang dipetakan secara langsung.

Jadi saya tidak berpikir ada jawaban umum untuk semua platform ARM, sayangnya.


Itu jawaban yang sangat mendalam. Apakah Anda tahu apa itu AMBA? Saya tidak dapat menemukan referensi apa pun di luar sumber kernel. Tercantum di bawah bus, ya, jadi pasti semacam bus.
tu-Reinstate Monica-dor duh

@tudor: AMBA mungkin berarti Arsitektur Bus Mikrokontroler Lanjutan
mpy

Saya berharap bahwa akan ada yang setara pada semua arsitektur, terutama karena Anda dapat merusak perangkat jika Anda menentukan yang salah! Saya menerima ini untuk saat ini karena menjawab pertanyaan spesifik, namun saya pikir pertanyaan baru adalah tentang bagaimana menemukan informasi untuk membuat hal-hal ini bekerja dengan kernel dan perangkat lunak.
tu-Reinstate Monica-dor duh

1

Anda bisa mencoba hwinfo. Ada di Arch repos.

$ hwinfo --gfxcard
08: PCI 02.0: 0300 VGA compatible controller (VGA)              
[Created at pci.318]
Unique ID: _Znp.jjHn_gm8Jz5
SysFS ID: /devices/pci0000:00/0000:00:02.0
SysFS BusID: 0000:00:02.0
Hardware Class: graphics card
Model: "Intel VGA compatible controller"
Vendor: pci 0x8086 "Intel Corporation"
Device: pci 0x0162 
SubVendor: pci 0x1849 "ASRock Incorporation"
SubDevice: pci 0x0162 
Revision: 0x09
Driver: "i915"
Driver Modules: "drm"
Memory Range: 0xf7800000-0xf7bfffff (rw,non-prefetchable)
Memory Range: 0xe0000000-0xefffffff (ro,non-prefetchable)
I/O Ports: 0xf000-0xf03f (rw)
IRQ: 57 (6 events)
Module Alias: "pci:v00008086d00000162sv00001849sd00000162bc03sc00i00"
Driver Info #0:
Driver Status: i915 is active
Driver Activation Cmd: "modprobe i915"
Config Status: cfg=new, avail=yes, need=no, active=unknown

Primary display adapter: #8

1
Saya ingin ini sesederhana ini. Telah memperbarui pertanyaan. Tampaknya hwinfo tidak tersedia bagi saya, setidaknya, kecuali saya memiliki masalah repositori. Selain itu, archlinux.org/packages tidak mencantumkan ARM, hanya i686 dan x86_64.
tu-Reinstate Monica-dor duh

Mencoba hwinfo dan lshw di raspberry pi / raspian - tidak ada yang menunjukkan adaptor video sehingga ada kemungkinan Anda tidak akan dapat melihatnya.
Journeyman Geek

0

dmesg dapat menyediakan beberapa info

dan

cat /proc/devices
find /proc

lshw patut dicoba untuk dibangun kembali

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.