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的任何投诉也可能有用。