Linux GCC:buildroot GCC和预编译GCC(与APT一起安装)之间的区别?
我正在尝试为x86系统的initrd定制二进制文件。我采用了通用的预编译Debian7GCC版本4.7.2-5,并用它编译了内核。下一步是在initrd中生成helloworld程序而不是init脚本,以检查我的开发进度。Helloworld程序也使用该gcc编译。当我尝试启动自定义系统时,内核启动没有问题,但helloworld程序遇到了一些错误:Linux GCC:buildroot GCC和预编译GCC(与APT一起安装)之间的区别?,linux,gcc,kernel,libc,buildroot,Linux,Gcc,Kernel,Libc,Buildroot,我正在尝试为x86系统的initrd定制二进制文件。我采用了通用的预编译Debian7GCC版本4.7.2-5,并用它编译了内核。下一步是在initrd中生成helloworld程序而不是init脚本,以检查我的开发进度。Helloworld程序也使用该gcc编译。当我尝试启动自定义系统时,内核启动没有问题,但helloworld程序遇到了一些错误: kernel: init[24879] general protection ip:7fd7271585e0 sp:7fff1ef55070 er
kernel: init[24879] general protection ip:7fd7271585e0 sp:7fff1ef55070 error:0 in init[7fd727142000+20000]
数字不是我的,我从谷歌得到了类似的字符串。Helloworld计划:
#include <stdio.h>
int main(){
printf("Helloworld\r\n");
sleep(9999999);
return 0;
}
早些时候,我在ARM系统上也遇到了同样的问题,使用通用编译器编译内核和一些二进制文件,并尝试运行,内核运行,但二进制-不是。用完整的buildroot系统解决了这个问题,并在下一个项目中使用了buildroot编译器
所以我的问题是:作为buildroot的一部分编译的gcc和一般预编译的gcc有什么区别?
我知道buildroot编译器是分几个步骤完成的,有不同的libs等等,这是主要的区别吗,平台独立性
我不需要解决方案,我随时都可以找到。我想知道我的问题的根源,以避免将来出现这样的问题。谢谢
UPD:用while1代替睡眠;同样的情况。我的内核输出:
init[1]: general protection ip: 8053682 sp: bf978294 error: 0 in init[8048000+81000]
printk: 14300820 message suppressed.
每秒钟重复一次
UPD2:我添加了vdso32-int80.so原始名称,就像在内核树中一样,经过测试-没有运气。
我添加了ld-linux.so 2文件:ld-2.13.so,带有符号链接,已测试-相同错误。
Busybox way允许运行二进制文件,而不需要任何库,这是我在ARM平台上测试的。
感谢您尝试帮助我,还有其他想法吗?更改您的程序,主要用于a;;循环并查看发生了什么。您的initrd是否包含所有必需的共享库?特别是,与-static链接的可执行文件仍然需要linux-vdso.so,它实际上是内核的一部分,ld-linux.so应该在/lib或/lib64.BTW中。同样的helloworld可执行文件在从shell而不是从init启动时是否正常工作?Arnout,请检查编辑。
init[1]: general protection ip: 8053682 sp: bf978294 error: 0 in init[8048000+81000]
printk: 14300820 message suppressed.