C 在Linux中构建PLX SDK驱动程序会产生;没有这样的文件或目录;

C 在Linux中构建PLX SDK驱动程序会产生;没有这样的文件或目录;,c,linux,module,linux-kernel,centos,C,Linux,Module,Linux Kernel,Centos,我正试图构建源代码,却陷入了悲痛之中 [root@localhost Driver]# pwd /usr/src/PlxSdk/Driver [root@localhost Driver]# ls -la total 36 drwxr-xr-x. 7 root root 183 Sep 15 18:10 . drwxr-xr-x. 8 root root 123 Sep 15 18:10 .. -rwxr-xr-x. 1 root root 658 Sep 15 18:10 buildal

我正试图构建源代码,却陷入了悲痛之中

[root@localhost Driver]# pwd
/usr/src/PlxSdk/Driver
[root@localhost Driver]# ls -la
total 36
drwxr-xr-x. 7 root root  183 Sep 15 18:10 .
drwxr-xr-x. 8 root root  123 Sep 15 18:10 ..
-rwxr-xr-x. 1 root root  658 Sep 15 18:10 buildalldrivers
-rwxr-xr-x. 1 root root 4524 Sep 15 18:10 builddriver
-rw-r--r--. 1 root root  590 Sep 15 18:10 Makefile
...
[root@localhost Driver]# ./buildalldrivers 

   ------------------

Build: Plx8000_NT

- PLA: CentOS Linux release 8.2.2004 (Core) 
- KER: 4.18.0-193.el8.x86_64
- INC: /lib/modules/4.18.0-193.el8.x86_64/build/include
- CPU: x86_64 (64-bit Little Endian)
- CMP: gcc
- TYP: 8000_NT Driver
- PKG: PCI/PCIe SDK v8.00
- CFG: Release

make[1]: *** /lib/modules/4.18.0-193.el8.x86_64/build: No such file or directory.  Stop.
make: *** [/usr/src/PlxSdk/Makefiles/Targets.def:46: BuildDriver] Error 2
   ------------------
我看到了这个信息,它谈到了我的问题,但没有一个答案有帮助

使用$uname-r检查内核版本

4.18.0-193.el8.x86_64

投诉是
没有这样的文件或目录
,但是有一个构建目录,内核开发工具确实存在

[root@localhost Driver]# ls -la /lib/modules/4.18.0-193.el8.x86_64
total 16440
drwxr-xr-x.  6 root root    4096 Sep 15 20:20 .
drwxr-xr-x.  4 root root      64 Sep 14 14:27 ..
-rw-r--r--.  1 root root     295 May  8 07:07 bls.conf
lrwxrwxrwx.  1 root root      54 Sep 15 20:20 build -> ../../../usr/src/kernels/4.18.0-193.14.2.el8_2.x86_64/
-rw-r--r--.  1 root root  187648 May  8 07:07 config
drwxr-xr-x. 12 root root     128 Sep 14 14:27 kernel
-rw-r--r--.  1 root root  865312 Sep 14 14:31 modules.alias
-rw-r--r--.  1 root root  827199 Sep 14 14:31 modules.alias.bin
-rw-r--r--.  1 root root     488 May  8 07:07 modules.block
-rw-r--r--.  1 root root    7534 May  8 07:07 modules.builtin
-rw-r--r--.  1 root root    9748 Sep 14 14:31 modules.builtin.bin
-rw-r--r--.  1 root root  287699 Sep 14 14:31 modules.dep
-rw-r--r--.  1 root root  397124 Sep 14 14:31 modules.dep.bin
-rw-r--r--.  1 root root     365 Sep 14 14:31 modules.devname
-rw-r--r--.  1 root root     140 May  8 07:07 modules.drm
-rw-r--r--.  1 root root      59 May  8 07:07 modules.modesetting
-rw-r--r--.  1 root root    1602 May  8 07:07 modules.networking
-rw-r--r--.  1 root root  100539 May  8 07:07 modules.order
-rw-r--r--.  1 root root     553 Sep 14 14:31 modules.softdep
-rw-r--r--.  1 root root  414722 Sep 14 14:31 modules.symbols
-rw-r--r--.  1 root root  505717 Sep 14 14:31 modules.symbols.bin
lrwxrwxrwx.  1 root root       5 May  8 07:07 source -> build
-rw-r--r--.  1 root root  347581 May  8 07:07 symvers.gz
-rw-------.  1 root root 3909996 May  8 07:07 System.map
drwxr-xr-x.  2 root root       6 May  8 07:06 updates
drwxr-xr-x.  2 root root      40 Sep 14 14:27 vdso
-rwxr-xr-x.  1 root root 8913656 May  8 07:07 vmlinuz
-rw-r--r--.  1 root root     166 May  8 07:06 .vmlinuz.hmac
drwxr-xr-x.  3 root root      23 Sep 14 14:30 weak-updates
[root@localhost Driver]# 
生成链接有效且正在闪烁

[root@localhost Driver]# ls -la /usr/src/kernels/4.18.0-193.14.2.el8_2.x86_64/
total 5348
drwxr-xr-x.  24 root root    4096 Sep 15 20:56 .
drwxr-xr-x.   3 root root      42 Sep 15 17:13 ..
drwxr-xr-x.  26 root root    4096 Sep 15 17:13 arch
drwxr-xr-x.   3 root root      78 Sep 15 17:13 block
drwxr-xr-x.   2 root root      37 Sep 15 17:13 certs
-rw-r--r--.   1 root root  187644 Jul 26 00:02 .config
drwxr-xr-x.   4 root root      76 Sep 15 17:13 crypto
drwxr-xr-x. 135 root root    4096 Sep 15 17:13 drivers
drwxr-xr-x.   2 root root      22 Sep 15 17:13 firmware
drwxr-xr-x.  73 root root    4096 Sep 15 17:13 fs
drwxr-xr-x.  30 root root    4096 Sep 15 17:14 include
drwxr-xr-x.   2 root root      37 Sep 15 17:14 init
drwxr-xr-x.   2 root root      22 Sep 15 17:14 ipc
-rw-r--r--.   1 root root     575 Jul 26 00:02 Kconfig
drwxr-xr-x.  17 root root    4096 Sep 15 17:14 kernel
drwxr-xr-x.  16 root root    4096 Sep 15 17:14 lib
-rw-r--r--.   1 root root   60925 Jul 26 00:02 Makefile
-rw-r--r--.   1 root root    1325 Jul 26 00:02 Makefile.rhelver
drwxr-xr-x.   3 root root      71 Sep 15 17:14 mm
-rw-r--r--.   1 root root       0 Sep 15 20:51 modules.order
-rw-r--r--.   1 root root 1241984 Jul 26 00:02 Module.symvers
drwxr-xr-x.  70 root root    4096 Sep 15 17:14 net
drwxr-xr-x.  26 root root    4096 Sep 15 17:14 samples
drwxr-xr-x.  13 root root    8192 Sep 15 17:14 scripts
drwxr-xr-x.  10 root root     151 Sep 15 17:14 security
drwxr-xr-x.  26 root root    4096 Sep 15 17:14 sound
-rw-r--r--.   1 root root 3910607 Jul 26 00:02 System.map
drwxr-xr-x.   2 root root       6 Sep 15 20:51 .tmp_versions
drwxr-xr-x.  29 root root    4096 Sep 15 17:14 tools
drwxr-xr-x.   2 root root      37 Sep 15 17:14 usr
drwxr-xr-x.   4 root root      44 Sep 15 17:14 virt
-rw-r--r--.   1 root root      41 Jul 26 00:02 vmlinux.id
[root@localhost Driver]# 
sudodnf安装内核devel-$(uname-r)

已安装

@夜鹰663在他的回答中指出,
注意,“源”链接也被破坏,因为它指向构建。
我的
链接也指向构建,但我所做的一切都没有让它去其他地方。我不知道这是不是一个有效的评论

[root@localhost Driver]# rpm -i /home/mnvme/Downloads/kernel-devel-4.18.0-193.el8.x86_64.rpm 
package kernel-devel-4.18.0-193.14.2.el8_2.x86_64 (which is newer than kernel-devel-4.18.0-193.el8.x86_64) is already installed
[root@localhost Driver]# 
该页面说明了一些要求,我遵循了这些要求:

为了构建提供的文件,必须设置shell环境变量PLX\u SDK\u DIR。这应该设置为创建PlxSdk文件夹的根位置。

# export PLX_SDK_DIR=$HOME/PlxSdk
#
# Or in my case
export PLX_SDK_DIR=/usr/src/PlxSdk
我确实用那一行和注释更新了我的
.bashrc
文件

我想验证
gcc
是否有效,编译器是否没有问题,因此我构建了API和一个示例。下面是构建一个示例的输出

[root@localhost Samples]# cd ApiTest
[root@localhost ApiTest]# make

Build: ApiTest

- PLA: CentOS Linux release 8.2.2004 (Core) 
- CPU: x86_64 (64-bit Little Endian)
- CMP: gcc
- TYP: Sample App
- PKG: PCI/PCIe SDK v8.00
- CFG: Release

CC  /usr/src/PlxSdk/Samples/Shared/ConsFunc.c
CC  /usr/src/PlxSdk/Samples/Shared/PlxInit.c
CC  ApiTest.c
LNK ApiTest

Application "App/ApiTest" built successfully

[root@localhost ApiTest]# cd ..
[root@localhost Samples]# 
因此,问题在于严格构建驱动程序,尤其是内核中的某些东西使构建工具不满意

试图加载驱动程序时表示,我没有按照预期构建驱动程序。(为了完整性起见,我也在说明load命令。)

注:

PLX发行说明说明了以下内容,适用于我的问题

内核2.6 内核2.6介绍了Linux内核构建系统。为了构建PLX驱动程序或任何其他驱动程序,Linux构建系统需要以下内容:

·必须安装与目标内核版本匹配的Linux内核开发包

·在某些情况下,必须手动配置和构建当前运行的内核 如果PLX驱动程序无法生成,请验证是否满足上述要求

我的Linux内核开发包与前面讨论的目标内核版本相匹配,我不确定第二点。我会调查的


思考?

这个问题的具体答案是创建符号链接,而不使用../。。就像样品上的一样

[root@localhost Samples]# cd ApiTest
[root@localhost ApiTest]# make

Build: ApiTest

- PLA: CentOS Linux release 8.2.2004 (Core) 
- CPU: x86_64 (64-bit Little Endian)
- CMP: gcc
- TYP: Sample App
- PKG: PCI/PCIe SDK v8.00
- CFG: Release

CC  /usr/src/PlxSdk/Samples/Shared/ConsFunc.c
CC  /usr/src/PlxSdk/Samples/Shared/PlxInit.c
CC  ApiTest.c
LNK ApiTest

Application "App/ApiTest" built successfully

[root@localhost ApiTest]# cd ..
[root@localhost Samples]# 
我作为root用户执行了/lib/modules/4.18中的命令。。。目录

ln -s /usr/src/kernels/4.18.0-193.14.2.el8_2.x86_64/ build
这样做,然后产生了一个坚实的蓝色对黑色的链接,我可以做一张CD到那个

然后我就可以解决下一个问题了,但第一个问题解决了

有趣的是,我以前试过上面的命令。也许我必须安装一些东西,然后再做那一行。我所知道的是上述一切的最终解决了这个问题。感谢@JohnBollinger将方向转向正确

[mnvme@localhost Driver]$ ./buildalldrivers 

       ------------------

Build: Plx8000_NT

- PLA: CentOS Linux release 8.2.2004 (Core) 
- KER: ver 4.18.0-193.14.2.el8_2.x86_64
- INC: /lib/modules/4.18.0-193.el8.x86_64/build/include
- CPU: x86_64 (64-bit Little Endian)
- CMP: gcc
- TYP: 8000_NT Driver
- PKG: PCI/PCIe SDK v8.00
- CFG: Release

arch/x86/Makefile:248: *** You are building kernel with non-retpoline compiler, please update your compiler..  Stop.
make: *** [/usr/src/PlxSdk/Makefiles/Targets.def:46: BuildDriver] Error 2
非retpoline
错误的解决方案是通过搜索和发布。我必须:

导出每个项目的PLX_芯片类型,并将该项目作为根项目

从#提示符:

cd/usr/src/PlxSdk 出口PLX_芯片=8000_NT 制作 出口PLX_芯片=8000_DMA 制作 出口PLX_芯片=6000_NT 制造


9000代码有一个编译器错误。

在修改后,您是否重新记录了
.bashrc
或手动重新编写了源代码?@JohnBollinger也没有,我从终端窗口执行了命令并验证了导出:
declare-x PLX_SDK_DIR=“/usr/src/PlxSdk”
“没有这样的文件或目录”通常真正的意思是“我无法打开该文件或目录”,这不一定是同一件事。对于符号链接,它指的是链接目标(如有必要,递归)。似乎您正在以根用户身份执行构建(有风险!),但即使假设simlink没有被破坏,root仍有可能无法访问目标的原因。您可以更改到该目录,列出其内容,并在那里创建新文件吗?@JohnBollinger我只切换到root,因为我正在重做符号链接和其他建议。root使事情比无数sudo前缀更简单es.
Make
既不能作为root用户也不能作为用户使用。我认为更改该目录意味着
/lib/modules
。根据SO的回答,我从零开始删除了创建的构建和源代码。我在内核包上执行
yum安装
和'rpm-I'“,我的意思是更改symlink
/lib/modules/4.18.0-193.el8.x86_64/build的目标,但现在我发现我没有足够仔细地阅读这个问题:至少可以列出该目录的内容。尽管如此,为了消除任何疑问,还是值得验证您是否可以
cd
到该目录并在那里创建文件。检查系统日志中是否有来自SELinux的任何投诉也可能有用。