我有一个(旧的)嵌入式系统,我想编译它。我没有工具链,所以我想创建一个。
嵌入式系统有一个“ARM926EJ-S rev 5(v5l)”CPU和“cat / proc / version”表示它使用GCC 4.0.2运行“Linux版本2.6.20.7”。
我听说我必须在构建过程中包含内核头文件。我从kernel.org下载Linux内核版本2.6.20,解压缩所有文件并运行“make headers_install ARCH = arm INSTALL_HDR_PATH =〜/ headers”。这是正确的方法还是我需要特定内核的头文件?
答案 0 :(得分:5)
解读内核。
make mrproper
make ARCH=${arch} headers_check
例如make ARCH=arm headers_check
make ARCH=${CLFS_ARCH} INSTALL_HDR_PATH=dest headers_install
这是从内核获取标头的步骤。
内核头文件的目的是 - > C库和编译的程序需要与内核交互 即可用系统调用及其编号,常量定义,数据结构等。 因此,编译C库需要内核头文件,许多应用程序也需要它们。
do I need the header files of the specific kernel?
kernel-to-userspace ABI
向后兼容
- > 1)使用内核headers older
than the running kernel will work without problem
使用工具链生成的二进制文件,但won't
be able
使用new system calls, data structures,
等。
- > 2)使用内核标头newer
使用工具链生成的二进制文件
如果他们不使用,那么正在运行的内核可能会工作
最近的功能,否则他们will break
。
---> 3)使用latest
内核头是not necessary
,除非访问
需要新的内核功能
因此,在您的情况下,内核版本为"Linux version 2.6.20.7"
您可以使用来自kernel.org的Linux内核版本2.6.20
或2.6.21
的内核头文件。
不会产生任何问题。
答案 1 :(得分:1)
如果您使用标头构建libc
,那应该没问题您也应该预先运行make ARCH=arm headers_check
。