linux编译arm
编译器的问题,更换交叉编译链即可
另外编译内核推荐使用使用make bzImage ARCH=arm CROSS_COMPILE=arm-linux-
在编译之前请先配置内核make menuconfig ARCH=arm
② 程序Linux系统下运行ARM程序的实践linux运行arm
Linux是一款UNIX-like类型操作系统,在这种系统中,可以实现各种嵌入式操作系统应用。ARM程序是指在ARM架构中,特别是特定类型的处理器(ARM Cortex-M),使用编程语言(如C语言)来编写的代码,在此背景下,将介绍如何在Linux系统下运行ARM程序的实践。
一、首先,需要在计算机上安装合适的编程语言开发环境,常用的编程语言有C, C++, Java等,而我们要编写ARM程序,可以使用特定的编程语言,比如GNU C, C++ Compiler, ARM官方GNU Toolchain以及LLVM。
二、接下来,需要选择ARM架构支持的操作系统,常见的操作系统支持ARM有Linux,Windows,Adroid,嵌入式LINUX。在本文实践中,我们采用Linux系统作为ARM程序的运行环境。
三、为了在Linux系统中,运行ARM程序,需要安装ARM模拟器。常见的ARM模拟器有QEMU,Bochs,Raspberry Pi等。这里我们采用QEMU模拟器来运行ARM程序。另外,还需要安装QEMU的ARM模拟器工具,以便能够运行ARM程序,这个工具包括ARM汇编语言,ARM实用库,ARM交叉编译器和ARM运行库。
四、最后,使用ARM模拟器完成ARM程序的编译与运行,编译ARM程序要用到交叉编译器,它可以将程序从源代码编译成ARM架构下的可执行代码,而运行ARM程序,需要在ARM模拟器中调用QEMU相应的应用,就可以将ARM程序转换成代码运行在模拟器中。
总之,在Linux系统下运行ARM程序,需要安装相应的开发环境与ARM模拟器,并使用ARM编译器交叉编译程序,然后在模拟器中运行ARM程序,实践中的能实现上述要求的过程,也只能算作一种初步尝试,为了更好的实现在Linux中运行ARM程序,还需要我们继续做出努力。
③ 深度linux的arm-linux-gnueabihf-gcc编译参数如何配
一般来说,交叉编译工具是用于在一种架构的主机(例如x86)上,编译另一种主机(例如arm)运行的程序,在这个编译期间,需要用到的头文件/库,往往需要从一个叫目标文件系统(sysroot)的路径开始查找。
sysroot里包含usr,lib,usr/lib usr/include等文件夹结构和必要的头文件和库,你理解为目标机器上的整个文件系统,搬到你这台电脑上,然后作为一个文件夹存在。
交叉编译原则上不能用主机(host)的头文件,
这首先是因为编译器在查找头文件的相对路径时,交叉编译器会配置为查找目标平台架构的位置,和主机的gcc不一样,这也是为什么它去arm-linux-gnueabihf这个目录去寻找的原因。
其次主机和目标机的系统版本有差异,再加上处理器架构的差异,往往有很多兼容性问题,甚至有难以解决的编译错误。
如果一定要用本机的头文件系统来凑合,那么需要把所有的-I都列出来,即不仅需要-I/usr/include,还需要-I/usr/include/xxx,甚至要创建一些文件夹的符号链接指向你主机的这些头文件文件夹。即使这些,往往也未必成功,有些头文件不同的系统架构,会不完全一样甚至缺失。
交叉编译一般无法使用主机的库(so)文件
主机和目标机往往架构不同,库完全不能使用
可能遇到主机和目标机架构相同的情况,比如你在intel64上编译一套运行在intel64位手机的程序,但是库兼容性的问题仍然存在。
最后结论:你这个问题,如果你是为了另一套机器(比如arm开发板编译),那么需要搞一套目标机的文件系统才能顺利编译。
对了,目标文件系统需要编译了python和dev头文件/库,好多嵌入式设备裁剪的很厉害,都不用python。