Utilidades PCI en Linux

Utilidades PCI en Linux

PCI significa interconexión de componentes periféricos, es un protocolo utilizado para conectar periféricos (DDR, UART, USB, etc.) con el sistema CPU en las computadoras o estaciones de trabajo de los primeros días. Este fue el protocolo definido por Intel para su propio desarrollo de arquitectura. En tiempo actual, PCI todavía se usa como un bus de sistema en las PC o estaciones de trabajo basadas en la arquitectura Intel.

En este escrito, pasaremos por algunos comandos útiles que el usuario puede ejecutar para explorar PCI en los sistemas Linux. LSPCI y SETPCI son comandos utilizados principalmente en Linux PCI Community. Discutiremos algunos ejemplos y casos de uso de estos comandos.

Antes de comenzar con los comandos, exploremos poco en los sistemas PCI basados ​​en Linux. Por lo general, un sistema Linux consta de componentes de hardware y software. La parte de hardware se basará en alguna arquitectura, por ejemplo, x86. X86 es la arquitectura definida por Intel. Hay varios periféricos en el hardware: CPU, DDR, USB y UART, por nombrar pocos. Estos son todos los componentes de hardware necesarios para que un protocolo se comunique. Ahí es donde viene PCI a jugar. PCI es el conjunto de reglas/pautas que todos los componentes tienen que seguir para comunicarse entre sí.

Ahora todos los componentes del hardware están conectados con el PCI, pero esto todavía no es suficiente. El sistema todavía no está completo y no se puede usar. Falta una pieza importante, yo.mi. Software. El componente de software tendrá el BIOS, el gestor de arranque y el sistema operativo. Todos estos componentes deben instalarse en el hardware.

Los componentes del software tendrán el software necesario para inicializar PCI y habilitar los comandos para el usuario. Una vez que el sistema operativo esté instalado en el sistema, los comandos LSPCI y SETPCI estarán disponibles.

Tomemos un ejemplo de Ubuntu, que es la distribución del sistema operativo basado en Linux. Una vez que el Ubuntu se instala en hardware basado en X86, los comandos LSPCI y SETPCI deberían estar disponibles de forma predeterminada. Las computadoras personales son sistemas basados ​​en X86. Si Ubuntu está instalado en ellos, estos son los sistemas que discutiremos.

Abra la terminal en Ubuntu y ejecute el comando LSPCI. Veremos la siguiente salida:

En la imagen de arriba, el comando ha proporcionado todos los detalles de los dispositivos PCI del sistema. Esto proporciona la lista completa de dispositivos PCI en este sistema.

Para proporcionar algunos detalles sobre los diferentes tipos de dispositivos PCI, hay 3 tipos de dispositivos PCI: i) complejo de raíz ii) dispositivo de punto final iii) PCI puentes.

Complejo de la raíz

Este es el puerto raíz para cualquier sistema PCI. Todos los dispositivos y puentes de punto final están conectados al complejo de raíz o en el puerto raíz.

Punto final

Estos son los dispositivos que proporcionan algún caso o función de uso de punto final. Por ejemplo, la tarjeta gráfica o la tarjeta de red que está conectada a la ranura PCI en la placa base entra en la categoría de dispositivos de punto final. Cada dispositivo de punto final puede tener múltiples funciones asociadas con el dispositivo. Las funciones máximas respaldadas por el punto final pueden ser 8. Cualquier dispositivo de punto final puede tener un recuento de funciones de 1 a 8, la indexación comienza desde 0 y va hasta 78.

Puentes

Estos son los dispositivos que conectan diferentes buses PCI juntos. Suponga en el sistema si hay múltiples buss presentes, entonces estos múltiples buss se conectarán con los dispositivos del puente.

En cualquier sistema PCI, generalmente habrá 1 puerto de raíz o dispositivo complejo de raíz y puede haber múltiples puentes y dispositivos de punto final.

Listas de comandos LSPCI Todos los dispositivos y puentes de punto final en el puente del puerto de raíz I.mi. Complejo de la raíz. En general, el número de bus asignado a esto es 0. El bus 0 es el bus complejo de la raíz y el bus primario del sistema. En el bus único, puede haber 256 dispositivos y cada dispositivo puede tener 8 funciones máximas. Este (número de bus [b], el número de dispositivo [d] y el número de función [f]) ​​se conoce comúnmente como la combinación BDF en el mundo PCI en PCI. La combinación BDF es suficiente para ubicar cualquier dispositivo específico en el sistema PCI. La asignación de estos BDF es realizada por el BIOS en el proceso conocido como enumeración de bus PCI. La enumeración del bus PCI se realiza mediante escaneos de BIOS y BIOS todo el número de bus, el número de dispositivo y el número de función a todos los dispositivos y los llenan. LSPCI es la utilidad que arroja esta información enumerada al espacio del usuario según lo solicite el usuario ejecutando el comando LSPCI.

En la instantánea, hay múltiples dispositivos enumerados por LSPCI. Tomemos una línea de ejemplo para comprender la salida proporcionada por LSPCI:

En esta salida podemos ver las primeras entradas como 00:00.0.

Primero 00 representa el número de autobús. Esto proporciona los detalles sobre el número de bus en el que está conectado este dispositivo. Segundo 00 después del colon, representa el número de dispositivo. Último dígito después . [dot], representa el número de función.

Sí, este es el mismo BDF que discutimos anteriormente.

Otra información de cadena proporciona algunos detalles del dispositivo. Esta es la breve descripción del dispositivo. Como el ejemplo, la salida dice que este es el puente host y también proporciona información del fabricante.

Todos los valores en este ejemplo son 0, no significa que estos siempre serán 0. Tomemos otro ejemplo con algunos valores diferentes:

En este ejemplo, podemos ver el número de bus como 2 para el controlador SATA y 3 para el dispositivo de controlador Ethernet. Los números de dispositivo son 01 para el controlador SATA y 00 para el controlador Ethernet. Ambos dispositivos tienen número de función como 0.

Después del BDF, existe la descripción del dispositivo PCI.

Hasta ahora, hemos discutido la salida predeterminada del comando i.mi. Solo ejecutando el comando LSPCI. Este comando también tiene opciones que se pueden pasar al comando para proporcionar algunos detalles más del dispositivo. Si se requiere algún formato de la salida, también hay opciones. Exploremos alguna opción del comando. Se puede ver una lista completa de opciones en la página del hombre del comando. Solo para familiarizarse con las opciones más utilizadas, tomemos algunos ejemplos.

Para enumerar la ID de dispositivo y proveedor de los dispositivos PCI, se puede usar la opción -nnn.

La identificación del proveedor y la ID del dispositivo están asignadas por PCI SIG Group. PCI SIG es el grupo que funciona para el desarrollo de estándares de PCI y sus mejoras. Definen las mejoras y las nuevas versiones del PCI para que coincidan con los desarrollos tecnológicos del sistema.

En la salida de ejemplo, podemos ver [Xxxx: xxxx], en todas las líneas. Los primeros 4 dígitos son la identificación del proveedor y 4 dígitos después de que el colon sea la identificación del dispositivo. Para la primera línea de salida de salida, ID es 8086, que es la ID del proveedor asignada a Intel. Segundo 4 dígitos después del colon i.mi. 7190 es la identificación del dispositivo.

Si queremos enumerar el dispositivo en función de cualquier ID de dispositivo en particular, se puede utilizar LSPCI con -D opción.

LSPCI -D: 7190, El comando proporcionará la información del dispositivo con ID de dispositivo 7190. El comando solo ha proporcionado la información en un solo dispositivo.

La salida de ejemplo es la siguiente:

Si BDF se conoce de cualquier dispositivo, LSPCI se puede utilizar para obtener la información del dispositivo específico. Peguemos al mismo ejemplo de BDF que 00:00.0, -s La opción proporciona la capacidad de obtener la información del dispositivo.

LSPCI -S 00:00.0, Proporciona la información en el dispositivo que está conectada al número de bus y el dispositivo y la función del dispositivo es 0.

Opciones LSPCI -VVV proporciona la información detallada del dispositivo. Lee el espacio de configuración del dispositivo e imprime la información del dispositivo en el formato detallado. Esta opción se puede usar en combinación de opción -d o -s. El uso combinado de -s o -d y -vvv proporcionará los detalles en el dispositivo específico.

Las salidas de ejemplo son las siguientes:

LSPCI -VVV -S 00:00.0
LSPCI -VVV -D: 7190

-opción X Proporciona los detalles del espacio de configuración del dispositivo en formato hexadecimal.

opción LSPCI -VT se puede usar para proporcionar el árbol como salida de los dispositivos PCI. La siguiente es la salida que tengo en mi sistema:

Comando setpci en Linux también proporciona algunas formas de acceder/modificar el espacio de configuración de los dispositivos PCI. Para obtener la ID de proveedor del dispositivo PCI, podemos usar el comando como; setPCI -S 00:00.0 0.w

El comando imprimirá la palabra i.mi. 2 bytes del desplazamiento 0 del BDF como 00:00.0. Deberíamos obtener la salida como 8086.

ID del dispositivo son los 2 bytes presentes en el desplazamiento 2 después de la identificación del proveedor. Para obtener la ID del dispositivo, el comando debe ser setpci -s 00:00.0 2.w

El comando setPCI se puede usar para modificar el contenido del espacio de configuración. Solo el requisito previo para esto es que el campo de configuración debería estar escribiendo capaz. Algunos de los dispositivos tienen el maestro de bus por defecto deshabilitado. Para habilitar la maestría del bus, al valor de desplazamiento de 2 debe escribirse. Para habilitar la maestría en bus de cualquier dispositivo, el comando que se puede usar es:

setPCI -S 00:01.0 4.w = 2 ; Este comando habilitará la masterización del bus y, por lo tanto, se puede acceder a la región de memoria de la barra.

Conclusión

Hemos discutido el comando LSPCI más popular en Linux y sus opciones de uso común. Tocamos una base en pocos conceptos básicos de conceptos PCI como BDF, tipos de dispositivos PCI, etc. También hemos discutido un sistema PCI típico con pocos ejemplos. Hemos pasado por pocos ejemplos de muestras y uso del comando LSPCI. Hemos visto un poco en setpci y un par de ejemplos de uso de setpci. Con toda esta discusión, concluyamos sobre este tema.