我安装了 Ubuntu 16.04 LTS 并安装了 linux-headers。我正在尝试构建 uClibc-ng,它需要 linux 头文件。因此,当我从 linux-headers 目录运行以下命令时,我收到以下错误消息。我缺少哪一步?
sudo make INSALL_HDR_PATH=/tmp/linux-headers headers_install
CHK include/generated/uapi/linux/version.h
UPD include/generated/uapi/linux/version.h
make[1]: *** No rule to make target 'arch/x86/entry/syscalls/syscall_32.tbl'
needed by 'arch/x86/entry/syscalls/../include/generated/asm/syscalls_32.h'.
Stop.
arc/x86/Makefile:216: recipe for target 'archheaders' failed.
make: *** [archheaders] Error 2
我创建了一个新的虚拟机来使用,它uname -a
是:
Linux ubuntu 4.15.0-46-generic #49~16.04.1-Ubuntu SMP Tue Feb 12 17:45:24 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
一些问题:
linux-headers-4.15.0-46
和 和有什么区别linux-headers-4.15.0-46-generic
?- 在我的虚拟机上,我有 2 组
linux-header
目录。一与4.14.0-29
一与4.14.0-46
。每个集合中有 2 个目录。一种有,一种无-generic
。我需要维护这两套吗? - 有谁知道需要在新的 16.04 Ubuntu 映像上执行哪些步骤才能获取 linux-headers 的任何说明?
答案1
我终于明白了这一点。我访问了 GitHub,获取了与我正在运行的 Ubuntu 版本相关的 Linux 源代码。我能够运行:
make \
ARCH=<arch-name> O=. -C <path-to-linux-sources> \
headers_install INSTALL_HDR_PATH=<output-directory>
这就像一个魅力,并且不需要以提升的特权模式运行。
答案2
安装linux-source
包:
sudo apt-get install linux-source
uClibc 已经相当老了;我建议安装 uClibc-ng。