完美体育·(中国)手机网页版科技提醒您:您的浏览器版本过低或者使用了兼容模式,为了获得更好的浏览体验,建议使用IE10以上的浏览器或使用极速模式。 请升级浏览器以获得更好的体验!

完美体育·(中国)手机网页版 > 评测报告 > 【完美体育·(中国)手机网页版王牌产品MYD-Y6ULX-V2开发板】搭建C_C++开发环境

【完美体育·(中国)手机网页版王牌产品MYD-Y6ULX-V2开发板】搭建C_C++开发环境

文章来源: 发布日期:2023.1.9 浏览次数:1324 次

 由评测者“ALSET”提供。


电子发烧友网推出了一款完美体育·(中国)手机网页版的产品:MYD-Y6ULX-V2开发板,该开发板被完美体育·(中国)手机网页版称之为经典王牌产品。是一款嵌入式linux入门级的开发板,说入门级是因为其性能在众多的板子里面已经不是很优秀了,但是其板子的硬件基础和系统都非常经典规范和之前的ARM开发具有很好的继承性,它的开发资源非常丰富,文档也非常细致,很适合初学者入门学习。能够通过该开发板快速的掌握嵌入式ARM Linux上的开发。




一、相关技术文档资料

     开发板所有资源文件在http://down.myir-tech.com/MYD-Y6ULX/ 网站上可以找到,其中工具和源码是对开发需要的,把他们下载下来。
下载到本地的文件目录结构如下:



其中Document是开发板相应的软硬件文档资料,Tools是相关的开发工具,包括编译工具以及SD系统制作工具与刷板工具,Source是开发板系统对应的源码。
开发资源里有基于QT的图片应用例程:



也有开发板硬件接口使用和驱动开发的例程:



同时源码资料包里,开放了系统Uboot,Kernel,Dts,eFS整体系统的源码和资源,并且带有QT与core多种版本的配置。同时它包含Bitbake、 OpenEmbedded-Core, 板级支持包, 各种软件包的配置文件。可以构建出不同类需求的系统,如带 Qt5.15 图形库的 myir-imag e-full 系统,全功能命令行系统 myir-image-core。 MYD-Y6ULX 也有符合 Yocto 的配置文件,可以让开发者构建出可烧写在 MYD-Y6ULX 板上的 Linux 系统像,非常便于初学者掌握个性化系统的定制开发的方法。而Yocto 提供了丰富的开发文档资源,可以直接使用,也让开发者学习定制自己的系统变的非常方便。




二、开发主机环境准备

     开发板文档里要求使用Ubuntu.20做为开发主机上的操作系统,但为了方便,继续使用之前的快捷模式,直接使用备份的Ubuntu18.04的Ubuntu虚机方式,经过后面的实际使用,发现这个版本完全可以使用。
把之前备份的Ubuntu18.4安装标准版的镜像文件复制一分,改一下镜像的名字为iMX6UL-Ubuntu64-18.04,然后启动 VMwarePlayer 选择打开该镜像:



再在设置里根据电脑的性能,为只分配好虚拟CPU数与内存数,这里设置4核,4GB:



配置网络连接为网桥模式,为了和网络里其它主机在同一个网段,方便后面的网络应用测试。



再打开共享文件,把windows下的工作目录设置为Ubuntu共享文件夹,作为windows与Ubuntu系统文件交换的空间。





三、安装开发工具包

     在成功的连接到开发板之后,按软件文档知道就可以轻松构建开发环境,对开发板进行开发测试工作了。
在开发工具目录 03_Tools\Tools_chain下,提供了三套不同的编译开发工具包:



它分别对应的是



基础工具,QT应用开发工具和命令行应用工具。在此开发板测试中,因为没有配置LCD显示屏,因此QT图形界面的应用开发将用不上,主要采用命令行的应用开发方式,因此安装上表中第三个开发工具包。
fsl-imx-fb-glibc-x86_64-myir-image-core-cortexa7t2hf-neon-myd-y6ull14x14-toolchain-5.10-gatesgarth.sh
把这个文件复制到 /loginname/home目录里,不要在Ubuntu的共享目录里去执行安装,因为共享目录的文件不支持链接。
复制到Ubuntu工作目录里后,然后开始执行:
cp /mnt/hgfs/MYD-Y6ULX/03_Tools/Tools_chain/fsl-imx-fb-glibc-x86_64-myir-image-core-cortexa7t2hf-neon-myd-y6ull14x14-toolchain-5.10-gatesgarth.sh
/home/lutherluo/workspace/
增加执行权限
sodu chmod 755 /home/lutherluo/workspace/fsl-imx-fb-glibc-x86_64-myir-image-core-cortexa7t2hf-neon-myd-y6ull14x14-toolchain-5.10-gatesgarth.sh
执行安装
sudo /home/lutherluo/workspace/fsl-imx-fb-glibc-x86_64-myir-image-core-cortexa7t2hf-neon-myd-y6ull14x14-toolchain-5.10-gatesgarth.sh
在安装中,提示默认的安装目录是:
/opt/fsl-imx-fb/5.10-gatesgarth
这里,为方便文件统一管理,就修改安装目录到工作目录下,输入执行的工具安装路径:
/home/lutherluo/workspace/fsl-imx-fb/5.10-gatesgarth
然后就开始自动安装,安装操作如下图:



安装完成后,工具安装路径下的文件内容如下:
至此开发编译工具安装完成。

四、开发环境检查
      安装好了开发板的编译开发环境后,可以先进行一下检查,根据,看一下交叉编译的工具的版本信息:
首先执行切换进入交叉环境:
source environment-setup-cortexa7t2hf-neon-poky-linux-gnueabi  



然后查看一下环境中的 $CC 编译器名,以及SDK头文件目录,库目录等信息,如下:



交叉编译环境变量:



C编译器版本:



C++ 编译器版本



五、开发测试程序
搭建好了开发环境以后,就可以做先一个简单的c和c++程序的测试程序。
写一个hello测试程序:


  1. #include

  2. int main()
  3. {
  4.         printf("Hello, MYD-Y6ULX !");
  5.         printf("\n");
  6.         return 0;
  7. }


再写一个Makefile

  1. target=hello

  2. all: main.o
  3.         ${CC} -o $(target) $^

  4. main.o:
  5.         ${CC} -O3 -I . -c main.c
  6.        
  7. scp:
  8.         scp $(target) root@192.168.50.150:/home/root
  9.        
  10. clean:
  11.         rm -rf *.o *.bak $(target)

然后编译,上传,运行,结果如下图:



板上运行得到正确的结果:



再写一个C++代码,找使用 bbp 算法计算1000位圆周率的代码,如下:



  1. #include
  2. #include
  3. #include
  4. #include <time.h>

  5. using namespace std;

  6. double bbp(int n,int k,int l)
  7. {
  8. int i;
  9. long b=1;
  10. double c=1;
  11. if(n>k)
  12. {
  13.   for(i=n-k;i!=0;i--)
  14.    b=(b*16+0)%(8*k+l);
  15.   return(((double)b)/((double)(8*k+l)));
  16. }
  17. else
  18.   if(n==k)
  19.    return(((double)1)/((double)(8*k+l)));
  20.   else
  21.   {
  22.    for(i=0;i<(k-n);i++)
  23.     c=c/16;
  24.    return(c/(8*k+l));
  25.   }
  26. };

  27. void pi(int m,int n,int p[])
  28. {
  29. double a=0;
  30. int k=0;
  31. while(k<(n+8))
  32. {
  33.   a+=4+4*bbp(n,k,1)-2*bbp(n,k,4)-bbp(n,k,5)-bbp(n,k,6);
  34.   a=a-(int)a;
  35.   k++;
  36. }
  37. for(k=0;k
  38. {
  39.   a*=16;
  40.   p[k]=(int)a;
  41.   a=a-(int)a;
  42. }
  43. }
  44. void div(int p[])
  45. {
  46. int i,j=0;
  47. for(i=0;i<300;i++)
  48. {
  49.   p[i]=j*10000+p[i];
  50.   j=p[i]%2;
  51.   p[i]=p[i]/2;
  52. }
  53. }

  54. void add(int a[],int b[])
  55. {
  56. int i,j=0;
  57. for(i=299;i>=0;i--)
  58. {
  59.   a[i]=a[i]+b[i]+j;
  60.   if(a[i]>=10000)
  61.   {
  62.    a[i]-=10000;
  63.    j=1;
  64.   }
  65.   else
  66.    j=0;
  67. }
  68. }

  69. void pi_calc()
  70. {
  71. int i,j,p[1100]={0},r[300]={0};
  72. short q[4000];

  73. for(i=0;i<125;i++)
  74.    pi(8,i*8,p+i*8);
  75.    
  76. for(i=0;i<1000;i++)
  77. {
  78.   j=p[i];
  79.   q[i*4+3]=j%2;
  80.   j=j/2;
  81.   q[i*4+2]=j%2;
  82.   j=j/2;
  83.   q[i*4+1]=j%2;
  84.   j=j/2;
  85.   q[i*4+0]=j%2;
  86.   p[i]=0;
  87. }
  88. p[0]=10000;
  89. for(i=0;i<4000;i++)
  90. {
  91.    div(p);
  92.    if(q[i])
  93.            add(r,p);
  94. }
  95. //cout<<3<<" ";
  96. printf("3.");
  97. for(i=0;i<250;i++)
  98.    printf("%04d", r[i]);
  99.    
  100. for(i=0;i<0;i++)
  101. {
  102.   if(r[i]<10)
  103.    cout<<"000";
  104.   else
  105.    if(r[i]<100)
  106.     cout<<"00";
  107.    else
  108.     if(r[i]<1000)
  109.      cout<<"0";
  110.   cout<
  111. }
  112. cout<
  113. }

  114. int main() {
  115.         clock_t start, finish;
  116.         double duration;
  117.         printf( "Time start...\n ") ;
  118.   start = clock();
  119.         pi_calc();
  120.         finish = clock();
  121.   duration = (double)(finish - start) / CLOCKS_PER_SEC;
  122.   printf( "Escaping %f seconds\n", duration );
  123.         return 0;
  124. }



再在上面Makefile基础上修改一下,写一个c++程序的编译脚本,如下:


  1. target =pi
  2. src    =pi_bbp.cpp
  3. objs   =$(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(src)))

  4. .phony: all

  5. all:$(objs) $(target)

  6. %.o:%.cpp
  7.         $(CXX) -I . -c -o $@ [        DISCUZ_CODE_155        ]lt;
  8.        
  9. $(target): $(objs)
  10.         $(CXX) -o $(target) $(objs)

  11. scp:
  12.         scp $(target) root@192.168.50.151:/home/root

  13. clean:
  14.         @rm -rf *.o $(target) *.bak



然后编译,上传,运行,结果如下:



板上运行:




六、C++开发测试总结
        MYD-Y6UL开发板对于ARMLinux 嵌入式工作开发和学习都比较合适,它具有工业级的硬件设计与丰富的接口,在工业应用中常用的接口它都有。还提供了非常多的保姆级的文档资料,非常适合初学者入手,在软件资料方面并且给出了板子的全部硬件设计资料以及软件系统源码,以及直接可用的组件库和非常多的例程代码,因此是上手比较容易。能够很轻松自如的掌握ARM Linux 从应用层到系统层的开发技能。
      通过阅读文档,可以在个把小时就能够搭建出一个完备的开发环境,并且所以资料结构清晰,说明细致。因此这个平台对于Arm Linux学习研究者来说是个理想的平台。