0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

英创信息技术应用程序及配置文件的生产自动拷贝简介

英创信息技术 来源:英创信息技术 作者:英创信息技术 2020-02-07 11:03 次阅读

为了帮助用户提高生产测试效率,我们提供了代为客户拷贝应用程序的服务,在主板出厂之前我们会将用户提交的所有程序和文件拷贝到用户指定的系统目录中,用户拿到主板后可直接装机测试,大大节省了生产测试时间。客户也可参考此方法,在自己的整机生产中实现应用程序及配置文件的自动拷贝。本文以下介绍在CE平台实现应用程序及配置文件自动拷贝的具体步骤。

英创主板处于调试模式启动时,会查询系统的usbdisk根目录下是否有名为autotest.txt的配置文件,如果配置文件存在则会执行文件中指定的exe程序,程序的拷贝正是利用系统的这一功能自动实现的。

实现程序的自动拷贝需要以下几个步骤:

1、编写autotest.txt配置文件

配置文件中需要指定要启动的exe完整路径,同时可配置系统网口1的网络参数,下面是示例配置。

[LOCAL_MACHINE]
DefaultGateway="192.168.201.19"
IPAddress="192.168.201.220"
SubnetMask="255.255.255.0"
[USER_EXE]
Name="\usbdisk\autocfg.exe"
Parameters=""
[SYSTEM]
Store="25"

2、编写自动配置程序

配置程序autocft.exe一般需要实现将应用程序拷贝到主板指定目录的功能,同时也可完成用户自定义的一些配置功能,比如增加特定注册表、烧写开机画面等。下面是一些示例代码可供用户参考。

AutoCopy函数实现将当前执行的配置程序所在目录的全部文件拷贝到系统的nandflash目录中。

DWORD AutoCopy( )
{
DWORD dwResult;
TCHAR szCurrentDir[MAX_PATH];
TCHAR szLocalFile[MAX_PATH];
TCHAR szNewFile[MAX_PATH];
TCHAR szDisFolder[MAX_PATH];
CHAR localFile[MAX_PATH];
CHAR newFile[MAX_PATH];
int i1, diskType;
dwResult = GetModuleFileName( NULL,szCurrentDir, sizeof( szCurrentDir ) );
if( 0 == dwResult )
{
printf("GetModuleFileName failure!\r\n" );
return -1;
}
TCHAR *pch = _tcsrchr( szCurrentDir, '\\' );
*(pch+1) = '\0';
_tcslwr(szCurrentDir);
pch = _tcsstr( szCurrentDir, _T("usb") );
if( NULL != pch )
{
_tcscpy( szLocalFile, szCurrentDir );
_tcscat( szLocalFile, _T("*.*"));
diskType = 1;
GetFolderName(diskType, szDisFolder);
HANDLE hFind;
WIN32_FIND_DATA FindFileData;
BOOL BFind;
hFind = FindFirstFile( szLocalFile, &FindFileData);
if(hFind != INVALID_HANDLE_VALUE)
{
BFind = TRUE;
while( BFind )
{
if( FindFileData.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY )
{
_tcscpy( szLocalFile, szCurrentDir );
_tcscat( szLocalFile, FindFileData.cFileName );
_stprintf(szNewFile, _T("\\%s\"), szDisFolder);
_tcscat( szNewFile, FindFileData.cFileName );
dwResult = CopyFile( szLocalFile, szNewFile, FALSE );
memset( localFile, 0, sizeof(localFile));
i1 = wcslen( szLocalFile );
wcstombs( localFile, szLocalFile, i1 );
memset( newFile, 0, sizeof(newFile));
i1 = wcslen( szNewFile );
wcstombs( newFile, szNewFile, i1 );
if( dwResult == 0 )
{
printf("Copy %s to %s failure!\r\n", localFile, newFile );
return -1;
}
else
{
printf("Copy %s to %s successful!\r\n", localFile, newFile );
}
}
BFind = FindNextFile( hFind, &FindFileData );
}
}
FindClose( hFind );
}
return 0;
}
// Get "Folder" name from register.
// type = 0: SDMemory
// type = 1: Nand
// type = 2: USB
// type = 3: EMMC
//
void GetFolderName( int type, LPWSTR szName )
{
HKEY hKey = NULL;
DWORD dwType=REG_SZ;
DWORD size=100;
DWORD ret;
TCHAR szFolderPath[80];
switch( type )
{
case 0:
_tcscpy( szFolderPath, REG_SDFOLDER_PATH );
break;
case 1:
_tcscpy( szFolderPath, REG_NANDFOLDER_PATH );
break;
case 2:
_tcscpy( szFolderPath, REG_USBFOLDER_PATH );
break;
case 3:
_tcscpy( szFolderPath, REG_EMMC_PATH );
break;
default:
return;
}
//get the folder Name from registry in case BSP is using non-default name
if (ERROR_SUCCESS == RegCreateKeyEx(HKEY_LOCAL_MACHINE, (LPWSTR)szFolderPath,
0, NULL, REG_OPTION_NON_VOLATILE, 0, NULL, &hKey, NULL))
{
ret=RegQueryValueEx(hKey, L"Folder", 0, &dwType, (BYTE*)szName, &size);
if (ret!=ERROR_SUCCESS)
RETAILMSG(1,(L"RegQueryValueEx returned error %d dwType=%d size=%dbufSz=%d\r\n", ret,dwType,size,sizeof(szName)));
}
if( hKey!=NULL )
RegCloseKey(hKey);
return;
}

英创主板支持开机画面在线更新,《WinCE工控主板在线更新开机画面(2017新版)》中提到的lu程序,用户也可以在配置程序中直接调用实现开机画面的自动更新,下面是利用lu更新U盘目录下usersplash800480.bmp图片的示例代码。

PROCESS_INFORMATION processInfo;
TCHAR szProgram[] = _T("lu.exe");
TCHAR szCmdLine[100] = _T("usbdisk\\usersplash800480.bmp");
BOOL result = CreateProcess( szProgram, szCmdLine,NULL, NULL, FALSE,CREATE_NEW_CONSOLE, NULL, NULL, NULL, &processInfo );
if( result == 0 )
{
//执行失败...
}

3、将autotest.txt放在U盘根目录,同时将配置程序autocft.exe和需要拷贝到主板上的应用程序及文件放在U盘指定目录中。

4、将U盘连接到英创主板,主板在调试模式启动后会自动执行用户指定的配置程序,完成系统配置工作。

系统默认只会执行一次查询autotest.txt启动配置程序的过程,如果希望这个功能总是有效,可在配置程序开始处增加一个清除注册表标志的工作,当系统注册表项HKEY_LOCAL_MACHINE\Emtronix或HKEY_LOCAL_MACHINE\Wstartup下的Count等于0时,系统在调试模式下就会查询U盘中的autotest.txt配置文件。下面是count清零代码。

HKEY hKey;
DWORD dwVal, dwRet;
DWORD dwType = REG_DWORD;
DWORD dwBufLen = sizeof(DWORD);
if((dwRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE, _T("Emtronix"), 0, 0, &hKey)) != ERROR_SUCCESS)
{
dwRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE, _T("Wstartup"), 0, 0, &hKey);
}
if(dwRet == ERROR_SUCCESS)
{
dwVal = 0;
RegSetValueEx(hKey, _T("Count"), 0, dwType, (BYTE*)&dwVal, dwBufLen);
RegCloseKey(hKey); // close registry
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6068

    浏览量

    34728
收藏 人收藏

    评论

    相关推荐

    鸿蒙开发:【Stage模型应用配置文件

    应用配置文件中包含应用配置信息、应用组件信息、权限信息、开发者自定义信息等,这些信息在编译构建、
    的头像 发表于 06-15 09:15 547次阅读
    鸿蒙开发:【Stage模型应用<b class='flag-5'>配置文件</b>】

    labview生成exe文件如何配置文件

    可执行文件之前,您需要确保正确配置文件,以便应用程序能够在不同计算机上正确运行。 下面是一个详尽、详实、细致的步骤指南,告诉您如何配置LabVIEW生成的可执行
    的头像 发表于 12-27 16:28 1175次阅读

    labview的opc生成配置文件

    的数据交互和通信。在 LabVIEW 中生成 OPC 配置文件有助于实现与其他设备的数据传输和共享,本文将详细介绍如何生成 OPC 配置文件。 首先,在 LabVIEW 中生成 OPC 配置文件,我们
    的头像 发表于 12-26 17:57 920次阅读

    oracle配置文件类型关联

    Oracle是一种业界领先的关系型数据库管理系统,它在大型企业中被广泛使用。Oracle的配置文件对于数据库的稳定运行和性能优化至关重要。在这篇文章中,我们将详细讨论Oracle的一些重要配置文件
    的头像 发表于 12-06 10:17 298次阅读

    oracle配置文件tnsnames怎么配置

    Oracle配置文件tnsnames.ora是一个文本文件,用于定义数据库连接的别名和连接信息。通过配置文件,可以在
    的头像 发表于 12-06 10:15 2202次阅读

    php的配置文件是什么

    中,配置文件的名称默认为php.ini。该文件通常位于PHP安装目录下的conf文件夹中。当PHP解释器启动时,会自动加载php.ini文件
    的头像 发表于 12-04 15:55 1116次阅读

    zookeeper的核心配置文件是什么

    Zookeeper是一个常用的分布式协调服务,它被广泛应用于大型分布式系统中。Zookeeper的核心配置文件是zoo.cfg,它包含了Zookeeper服务器的各种配置参数,可以通过修改这些参数
    的头像 发表于 12-04 10:33 400次阅读

    springboot的核心配置文件有哪些

    的工作量。 Spring Boot的核心配置文件主要有以下几个: application.properties:Spring Boot应用程序的主要配置文件。它使用Java的键值对格式来定义各种
    的头像 发表于 12-03 15:30 765次阅读

    springboot的全局配置文件有几种

    Spring Boot是一种快速开发框架,其通过提供配置文件来实现对应用程序配置。全局配置文件在Spring Boot中起着非常重要的作用,可以用于
    的头像 发表于 12-03 15:28 704次阅读

    springboot自动配置的原理介绍

    Spring Boot是一个开源的Java框架,用于构建独立的、基于微服务的应用程序。它的最大特点是自动配置,能够根据应用程序的依赖库和配置文件
    的头像 发表于 12-03 15:12 616次阅读

    ROS编写参数配置文件示例程序

    _config.yaml这三个文件中,这三个文件均位于下图所示的目录下,下面依次进行详细的介绍 1、编写user_config.yaml参数配置文件 首先,我们来看作者提供的示例程序
    的头像 发表于 11-26 17:35 889次阅读
    ROS编写参数<b class='flag-5'>配置文件</b>示例<b class='flag-5'>程序</b>

    linux修改网卡ip配置文件

    Linux是一种开源的操作系统,因此,它给用户提供了很高的自由度,可以根据个人需要进行各种定制和配置。其中,修改网络接口配置文件是常见的操作,可以通过修改网卡ip配置文件来设置网络接口的IP地址
    的头像 发表于 11-17 10:51 1529次阅读

    KT142C语音芯片配置文件总是不起作用?配置文件的问题集中归纳

    KT142C语音芯片配置文件总是不起作用?配置文件的问题集中归纳
    的头像 发表于 10-20 15:04 356次阅读
    KT142C语音芯片<b class='flag-5'>配置文件</b>总是不起作用?<b class='flag-5'>配置文件</b>的问题集中归纳

    教程 3:构建自定义配置文件

    教程 3:构建自定义配置文件
    发表于 07-06 18:49 1次下载
    教程 3:构建自定义<b class='flag-5'>配置文件</b>

    教程 2:自定义配置文件示例

    教程 2:自定义配置文件示例
    发表于 07-04 20:50 1次下载
    教程 2:自定义<b class='flag-5'>配置文件</b>示例