程序员

交叉编译工具的下载

2018-11-21  本文已影响0人  bbdlg

正确的传送门

官网 下载,不要去国内某些博客的网盘里下载,他们给出的环境也许并不适合你。

官网 https://releases.linaro.org/components/toolchain/binaries 的下载截图如下:

选择所需版本,我们这里选择 latest-7

这里有若干版本,需要根据你的宿主机和目标机的位数,以及目标机器的大小端来选择。

aarch64代表目标机是64位的,其他的则都为32位的
_be代表是大端模式,不带该字段的为小端模式

查看机器位数

比如我的宿主机:

root@ubuntu:~/tools# uname -a
Linux ubuntu 4.4.0-131-generic #157-Ubuntu SMP Thu Jul 12 15:51:36 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

上面的 x86_64 代表的是64位机型
再比如我的目标机:

root@Orangepi:~# uname -a
Linux Orangepi 3.10.102+ #6 SMP PREEMPT Mon Apr 23 19:09:26 CST 2018 aarch64 aarch64 aarch64 GNU/Linux

上述aarch64 也是代表的是64位机型
两者是不同的架构,一个是intel的,一个是arm的。

查看机器大小端

目前没有找到合适的系统自带命令查看,需要编写程序。

/* ex8-1.c */
#include <sys/utsname.h>
#include <unistd.h>
#include <stdio.h>
 
int main()
{
    union
    {
        short   inum;
        char c[sizeof(short)];
    } un;
    struct utsname  uts;
    un.inum=0x0102;
    if(uname(&uts)<0)
    {
        printf("Could not get host information .\n");
        return -1;
    }
    printf("%s -%s-%s:\n",uts.machine, uts.sysname, uts.release);
    if(sizeof(short)!=2)
    {
        printf("sizeof short =%d\n", sizeof(short));
        return 0;
    }
    if(un.c[0]==1 && un.c[1]==2)
        printf("big_endian.\n");
    else if(un.c[0]==2 && un.c[1]==1)
        printf("little_endian.\n");
    else
        printf("unknown .\n");
    return 0;
}

上述代码通过

gcc test.c 
./a.out

编译并执行,我的目标机显示的内容为:


因此我选择 aarch64-linux-gnu ,并在跳转后的页面 https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/ 中选择了 gcc-linaro-7.3.1-2018.05-x86_64_aarch64_be-linux-gnu.tar.xz

x86_64 代表宿主机是64位的,其他的则都为32位的
_be代表是大端模式,不带该字段的为小端模式

100多M,没有搭梯子,300多k的速度稍有点慢,建议用迅雷等断点续传工具,chrome经常下载中断且无法继续。

上一篇 下一篇

猜你喜欢

热点阅读