searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

lspci 3.10.0的编译方法

2023-07-31 05:32:27
77
0
  1. 工具信息
  • 主机:VMwareWorkstation或VirtualBox + CentOS Linux release 8.5.2111

VMwareWorkstation或VirtualBox

自行安装

CentOS Linux release 8.5.2111

https://mirrors.aliyun.com/centos/8/isos/x86_64/

选择:CentOS-8.5.2111-x86_64-dvd1.iso

 

  • pciutils: pciutils-3.10.0

http://mj.ucw.cz/download/linux/pci/pciutils-3.10.0.tar.gz

 

最新版本的pciutils从网站http://mj.ucw.cz/download/linux/pci/确定。

 

  1. 目的

有时系统自带的lspci不能满足使用需求,这时就需要编译新的lspci程序,默认编译的lspci是动态链接的,如果搞不清楚它所依赖的库,在直接拷贝到其它系统中可能导致lspci无法使用,如下是查看lspci是动态链接还是静态链接的方法:

 

[root@localhost jis1]# lspci --version

lspci version 3.7.0

[root@localhost jis1]# which lspci

/usr/sbin/lspci

[root@localhost jis1]# file /usr/sbin/lspci

/usr/sbin/lspci: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=a9e136ebd08537940151befd642752ef9222ee4e, stripped

 

从命令“file /usr/sbin/lspci”执行结果中包括了“dynamically linked”可以看到lspci是动态链接的,本文旨在编译静态的lspci。

 

  1. 编译步骤
    • 下载pciutils

从网站http://mj.ucw.cz/download/linux/pci/获取最新版本的pciutils,如目前最新版本为3.10.0

[root@localhost jis1]# wget http://mj.ucw.cz/download/linux/pci/pciutils-3.10.0.tar.gz

--2023-07-30 08:19:46--  http://mj.ucw.cz/download/linux/pci/pciutils-3.10.0.tar.gz

Resolving mj.ucw.cz (mj.ucw.cz)... 46.255.230.98, 2a00:da80:fff0:2::2

Connecting to mj.ucw.cz (mj.ucw.cz)|46.255.230.98|:80... connected.

HTTP request sent, awaiting response... 200 OK

Length: 931711 (910K) [application/x-gzip]

Saving to: ‘pciutils-3.10.0.tar.gz’

 

pciutils-3.10.0.tar.gz                  100%[============================================================================>] 909.87K  99.2KB/s    in 7.9s   

 

2023-07-30 08:19:55 (116 KB/s) - ‘pciutils-3.10.0.tar.gz’ saved [931711/931711]

 

  • 解压并进入对应的目录

[root@localhost jis1]# tar xvf pciutils-3.10.0.tar.gz

[root@localhost jis1]# cd pciutils-3.10.0/

[root@localhost pciutils-3.10.0]#

 

  • 修改顶层Makefile

修改顶层Makefile,“CFLAGS=”后加上-static选项,此处的-static选项表示编译单个.o文件时编译成静态链接库。

[root@localhost pciutils-3.10.0]# vi Makefile

CFLAGS=$(OPT) -Wall -W -Wno-parentheses -Wstrict-prototypes -Wmissing-prototypes -static

 

  • 编译pciutils
  • 编译pciutils

[root@localhost pciutils-3.10.0]# make SHARED=no ZLIB=no

cd lib && ./configure

make -C lib all

make[1]: Entering directory '/home/jis1/pciutils-3.10.0/lib'

cc -O2 -Wall -W -Wno-parentheses -Wstrict-prototypes -Wmissing-prototypes -static   -c -o init.o init.c

cc -O2 -Wall -W -Wno-parentheses -Wstrict-prototypes -Wmissing-prototypes -static   -c -o access.o access.c

cc   lspci.o ls-vpd.o ls-caps.o ls-caps-vendor.o ls-ecaps.o ls-kernel.o ls-tree.o ls-map.o common.o lib/libpci.a  -lresolv  -o lspci

 

 

注:从编译输出的打印中可以看到,链接生成lspci的命令如下,后面手动生成静态链接的lspci以此命令为基础进行简单修改即可。

cc   lspci.o ls-vpd.o ls-caps.o ls-caps-vendor.o ls-ecaps.o ls-kernel.o ls-tree.o ls-map.o common.o lib/libpci.a  -lresolv  -o lspci

 

 

  • 查看生成的lspci可执行程序,此时还是动态链接的

[root@localhost pciutils-3.10.0]# file lspci

lspci: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=541c9d09788b10181f2d8a92b96137fffa31a7bc, not stripped

 

  • 手动生成静态链接的lspci可执行程序

把编译过程中链接生成lspci的cc修改成gcc, 再末尾添加-static就可以编译成静态的lspci程序,

[root@localhost pciutils-3.10.0]#  gcc lspci.o ls-vpd.o ls-caps.o ls-caps-vendor.o ls-ecaps.o ls-kernel.o ls-tree.o ls-map.o common.o lib/libpci.a  -lresolv  -static -o lspci

 

  • 确认静态链接lspci可执行程序的版本号
  • 确认静态链接属性和版本号

[root@localhost pciutils-3.10.0]# file lspci

lspci: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, for GNU/Linux 3.2.0, BuildID[sha1]=a64193c377b24c2d2c50fdac2981d5b9ea930381, not stripped, too many notes (256)

 

[root@localhost pciutils-3.10.0]# ./lspci --version

lspci version 3.10.0

 

 

  • 新编译的lspci可以正常使用

[root@localhost pciutils-3.10.0]# ./lspci -vvv -s 00:00.0

00:00.0 Class 0600: Device 8086:7190 (rev 01)

        Subsystem: Device 15ad:1976

        Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-

        Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-

        Latency: 0

 

 

0条评论
0 / 1000
j****n
5文章数
0粉丝数
j****n
5 文章 | 0 粉丝
原创

lspci 3.10.0的编译方法

2023-07-31 05:32:27
77
0
  1. 工具信息
  • 主机:VMwareWorkstation或VirtualBox + CentOS Linux release 8.5.2111

VMwareWorkstation或VirtualBox

自行安装

CentOS Linux release 8.5.2111

https://mirrors.aliyun.com/centos/8/isos/x86_64/

选择:CentOS-8.5.2111-x86_64-dvd1.iso

 

  • pciutils: pciutils-3.10.0

http://mj.ucw.cz/download/linux/pci/pciutils-3.10.0.tar.gz

 

最新版本的pciutils从网站http://mj.ucw.cz/download/linux/pci/确定。

 

  1. 目的

有时系统自带的lspci不能满足使用需求,这时就需要编译新的lspci程序,默认编译的lspci是动态链接的,如果搞不清楚它所依赖的库,在直接拷贝到其它系统中可能导致lspci无法使用,如下是查看lspci是动态链接还是静态链接的方法:

 

[root@localhost jis1]# lspci --version

lspci version 3.7.0

[root@localhost jis1]# which lspci

/usr/sbin/lspci

[root@localhost jis1]# file /usr/sbin/lspci

/usr/sbin/lspci: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=a9e136ebd08537940151befd642752ef9222ee4e, stripped

 

从命令“file /usr/sbin/lspci”执行结果中包括了“dynamically linked”可以看到lspci是动态链接的,本文旨在编译静态的lspci。

 

  1. 编译步骤
    • 下载pciutils

从网站http://mj.ucw.cz/download/linux/pci/获取最新版本的pciutils,如目前最新版本为3.10.0

[root@localhost jis1]# wget http://mj.ucw.cz/download/linux/pci/pciutils-3.10.0.tar.gz

--2023-07-30 08:19:46--  http://mj.ucw.cz/download/linux/pci/pciutils-3.10.0.tar.gz

Resolving mj.ucw.cz (mj.ucw.cz)... 46.255.230.98, 2a00:da80:fff0:2::2

Connecting to mj.ucw.cz (mj.ucw.cz)|46.255.230.98|:80... connected.

HTTP request sent, awaiting response... 200 OK

Length: 931711 (910K) [application/x-gzip]

Saving to: ‘pciutils-3.10.0.tar.gz’

 

pciutils-3.10.0.tar.gz                  100%[============================================================================>] 909.87K  99.2KB/s    in 7.9s   

 

2023-07-30 08:19:55 (116 KB/s) - ‘pciutils-3.10.0.tar.gz’ saved [931711/931711]

 

  • 解压并进入对应的目录

[root@localhost jis1]# tar xvf pciutils-3.10.0.tar.gz

[root@localhost jis1]# cd pciutils-3.10.0/

[root@localhost pciutils-3.10.0]#

 

  • 修改顶层Makefile

修改顶层Makefile,“CFLAGS=”后加上-static选项,此处的-static选项表示编译单个.o文件时编译成静态链接库。

[root@localhost pciutils-3.10.0]# vi Makefile

CFLAGS=$(OPT) -Wall -W -Wno-parentheses -Wstrict-prototypes -Wmissing-prototypes -static

 

  • 编译pciutils
  • 编译pciutils

[root@localhost pciutils-3.10.0]# make SHARED=no ZLIB=no

cd lib && ./configure

make -C lib all

make[1]: Entering directory '/home/jis1/pciutils-3.10.0/lib'

cc -O2 -Wall -W -Wno-parentheses -Wstrict-prototypes -Wmissing-prototypes -static   -c -o init.o init.c

cc -O2 -Wall -W -Wno-parentheses -Wstrict-prototypes -Wmissing-prototypes -static   -c -o access.o access.c

cc   lspci.o ls-vpd.o ls-caps.o ls-caps-vendor.o ls-ecaps.o ls-kernel.o ls-tree.o ls-map.o common.o lib/libpci.a  -lresolv  -o lspci

 

 

注:从编译输出的打印中可以看到,链接生成lspci的命令如下,后面手动生成静态链接的lspci以此命令为基础进行简单修改即可。

cc   lspci.o ls-vpd.o ls-caps.o ls-caps-vendor.o ls-ecaps.o ls-kernel.o ls-tree.o ls-map.o common.o lib/libpci.a  -lresolv  -o lspci

 

 

  • 查看生成的lspci可执行程序,此时还是动态链接的

[root@localhost pciutils-3.10.0]# file lspci

lspci: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=541c9d09788b10181f2d8a92b96137fffa31a7bc, not stripped

 

  • 手动生成静态链接的lspci可执行程序

把编译过程中链接生成lspci的cc修改成gcc, 再末尾添加-static就可以编译成静态的lspci程序,

[root@localhost pciutils-3.10.0]#  gcc lspci.o ls-vpd.o ls-caps.o ls-caps-vendor.o ls-ecaps.o ls-kernel.o ls-tree.o ls-map.o common.o lib/libpci.a  -lresolv  -static -o lspci

 

  • 确认静态链接lspci可执行程序的版本号
  • 确认静态链接属性和版本号

[root@localhost pciutils-3.10.0]# file lspci

lspci: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, for GNU/Linux 3.2.0, BuildID[sha1]=a64193c377b24c2d2c50fdac2981d5b9ea930381, not stripped, too many notes (256)

 

[root@localhost pciutils-3.10.0]# ./lspci --version

lspci version 3.10.0

 

 

  • 新编译的lspci可以正常使用

[root@localhost pciutils-3.10.0]# ./lspci -vvv -s 00:00.0

00:00.0 Class 0600: Device 8086:7190 (rev 01)

        Subsystem: Device 15ad:1976

        Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-

        Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-

        Latency: 0

 

 

文章来自个人专栏
linux-驱动-pcie
5 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0