技术天地

获取英创Linux主板型号的方法简介作者:黄志超    发布时间:2017-8-22 17:18:31    被阅览数:

  英创公司十余年来都专注于嵌入式工控主板的开发,推出了很多不同型号的产品,也和许多客户建立了长期的合作和信任。随着英创公司不断的对产品进行更新,推出性能越来越好的新产品,很多客户也对自己的产品进行更新,并且推出新的项目。


  经过长时间的累积,已经有许多客户的多个项目使用了英创公司不同型号的板卡,为了让客户更方便的管理应用程序,英创公司整理了一个方便客户识别板卡型号的方法,通过这个方法,客户可以将多个项目的程序整合起来,通过一个管理程序,对板卡进行判断,然后执行相应的操作,十分简单和方便。


  客户只需要读取板卡文件系统中的/etc/hostname这个文件就可以了,英创公司目前主要的产品型号和hostname文件的对应可以参考下面的表格:


板卡型号hostname文件
em9x60系列板卡EM9X60
em928x系列板卡EM9280
em335x系列板卡

EM335X

esm335x系列板卡ESM335X
esm6800板卡ESM6800
esm6802板卡ESM6802


  客户可以用过C语言标准的I/O读写函数来实现这一功能,使用fopen打开文件,然后fread将文件内容读取到buffer中,进行对比。


  下面的是一个简单的例程,判断板卡型号并打印出来,可以供需要的客户参考:


  #include <stdio.h>

  #include <string.h>

  #include <unistd.h>

  #include <errno.h>

 

  /* the boardtype of Emtronix */

  enum type{em9x60 = 1, em928x, em335x, esm335x, esm6800};

 

  /* get the boadrtype from /etc/hostname */

  int main(int argc, char *argv[])

  {

  FILE *fp;

         char       buf[50];

         int          boardtype = 0;

 

         /* open the /etc/hostname read only */

         fp = fopen("/etc/hostname", "rb");

         if(fp == NULL)

         {

                perror("/etc/hostname");

                return errno;

         }

 

         fread( buf, sizeof(char), 50, fp );

 

         /* check the boardtype */

         if(strstr(buf, "EM9X60") > 0)

                boardtype = em9x60;

         else if(strstr(buf, "EM9280") > 0)

                boardtype = em928x;

         else if(strstr(buf, "EM335X") > 0)

                boardtype = em335x;

         else if(strstr(buf, "ESM335X") > 0)

                boardtype = esm335x;

         else if(strstr(buf, "ESM6800") > 0)

                boardtype = esm6800;

 

         fclose(fp);

 

         /* printf the boardtype */

         switch(boardtype)

         {

         case em9x60:

                printf("the boardtype is EM9x60\n");

                break;

         case em928x:

                printf("the boardtype is EM928x\n");

                break;

         case em335x:

                printf("the boardtype is EM335x\n");

                break;

         case esm335x:

                printf("the boardtype is ESM335x\n");

                break;

         case esm6800:

                printf("the boardtype is ESM680x\n");

                break;

         default:

                printf("the boardtype is unknow, please check the platform!\n");

               break;

         }

 

         return 0;

  }

Go Top