交叉编译:在x86 CPU环境下编译适用于MIPS CPU架构的二进制程序

所需环境:x86(32位)linux系统【注意,一定得是32位的,不然无法使用提供的32位mips交叉编译程序。而且,智龙上的芯片也是32位的。之前安装64位的结果编译出来的程序也是64的,造成运行失败】

编译好的程序通过USB线连接,通过putty使用Series模式登录到龙芯智龙的linux操作系统:

开源龙芯loongson智龙主板V2.0程序putty登录、交叉编译、Series连接、telnet连接使用-LMLPHP

设置上注意Flow Control和通讯Speed为115200

这里给出一个benchmark程序:

#include <stdio.h>
#include <sys/time.h>
#include <unistd.h>


int main(){
    int t, len1, len2;
    len1 = 181000000;
    len2 = 81000000;
    struct timeval start, end;
    gettimeofday( &start, NULL );
    for(t=0;t<len1;t++);
    gettimeofday( &end, NULL );printf("%d times Empty loop need: %d us (%.3f ms)\n", len1, (int) (1000000*(end.tv_sec-start.tv_sec)+end.tv_usec-start.tv_usec), (float) (1000000*(end.tv_sec-start.tv_sec)+end.tv_usec-start.tv_usec) / 1000.0);

    long a=0;
    gettimeofday( &start, NULL );
    for(t=0;t<len2;t++){
       a = a + 1;
    };
    gettimeofday( &end, NULL );printf("%d times + need: %d us (%.3f ms)\n", len2, (int) (1000000*(end.tv_sec-start.tv_sec)+end.tv_usec-start.tv_usec), (float) (1000000*(end.tv_sec-start.tv_sec)+end.tv_usec-start.tv_usec) / 1000.0);


    double b=39.2;
    gettimeofday( &start, NULL );
    for(t=0;t<len2;t++){
       b = b + 1.0;
       b = b * 0.99;
    };
    gettimeofday( &end, NULL );printf("%d times +* need: %d us (%.3f ms)\n", len2, (int) (1000000*(end.tv_sec-start.tv_sec)+end.tv_usec-start.tv_usec), (float) (1000000*(end.tv_sec-start.tv_sec)+end.tv_usec-start.tv_usec) / 1000.0);
    return 0;
}

编译命令为:

编译为x86程序:
gcc benchmark.c -o benchmark_x86

编译为MIPS程序:
mipsel-linux-gcc benchmark.c -o benchmark_mips

注意:putty刚连接上智龙开发板的时候,是一片漆黑的,这时候会误以为还在连接中,一直等着。其实按一下回车就进入到shell界面了……真是囧死

出现bus error和segment fault是同理的,mips上是bus error

开启网络

ifconfig eth0 up

设置静态IP

ifconfig eth0 192.168.3.2


跟电脑端网线直连(不通过路由器),电脑端只需要设置
IP地址
192.168.3.1
子网掩码
255.255.255.0

开源龙芯loongson智龙主板V2.0程序putty登录、交叉编译、Series连接、telnet连接使用-LMLPHP


这两个即可

设置完后,通过putty链接,链接方式选择telnet即可
登录账户为root,如果没改过是不需要密码的
 

小插曲:使用的kylin ubuntu系统缺乏vim,然后apt源也比较旧了

05-08 17:14