-
2020-07-01 16:39:56
什么是交叉测试?
1、字面意思就是把测试同学负责的测试模块进行 相互交换测试。比如原来A同学负责a模块,B同学负责b模块;那么在一轮测试之后,A同学负责b模块测试,B同学负责a模块测试。
为什么要做交叉测试?
1、思维发散,每个测试同学可能会有自己的思维局限和受限情况等等,虽然通过类似头脑风暴,用例风暴的形式可以为正在测试该项目的同学提一些建议和意见。
但是不可能所有同学都对该项目这个同学的需求、业务了解的很清楚(特别是一些大公司,业务复杂之后,更需要新的测试手段)。
2、解决一部分因为测试人员工作粗心导致的漏测。
所以,在实际的项目测试过程中,会预留出某个对业务整体和细节都比较厉害的测试同学。来进行交叉测试。
如何进行交叉测试?
总结经验:
1.比如线上问题的反馈就是比较能说明问题的,我们可以通过线上问题分析,比如哪块可能会存在问题,归纳总结,在类似项目中进行重点功能回归。
2.用例风暴之后将细节功能点,或逻辑相对复杂功能点进行重点标注,其他同学可以一目了然知道如何开始。
联测过程。
因为业务不同,有的公司会实行联测。或者也可以叫做"集成测试"。在这个过程中,大家测试相关模块会交叉又重点关注。排除可能存在的问题点。更多相关内容 -
什么是交叉编译
2017-06-30 09:21:17对于没有做过嵌入式编程的人,可能不太理解交叉编译的概念,那么什么是交叉编译?它有什么作用? 在解释什么是交叉编译之前,先要明白什么是本地编译。 本地编译 本地编译可以理解为,在当前编译平台下,编译出来...第 1 章 交叉编译简介
1.1 什么是交叉编译
对于没有做过嵌入式编程的人,可能不太理解交叉编译的概念,那么什么是交叉编译?它有什么作用?
在解释什么是交叉编译之前,先要明白什么是本地编译。
本地编译
本地编译可以理解为,在当前编译平台下,编译出来的程序只能放到当前平台下运行。平时我们常见的软件开发,都是属于本地编译:
比如,我们在 x86 平台上,编写程序并编译成可执行程序。这种方式下,我们使用 x86 平台上的工具,开发针对 x86 平台本身的可执行程序,这个编译过程称为本地编译。
交叉编译
交叉编译可以理解为,在当前编译平台下,编译出来的程序能运行在体系结构不同的另一种目标平台上,但是编译平台本身却不能运行该程序:
比如,我们在 x86 平台上,编写程序并编译成能运行在 ARM 平台的程序,编译得到的程序在 x86 平台上是不能运行的,必须放到 ARM 平台上才能运行。
1.2 为什么会有交叉编译
之所以要有交叉编译,主要原因是:
- Speed: 目标平台的运行速度往往比主机慢得多,许多专用的嵌入式硬件被设计为低成本和低功耗,没有太高的性能
- Capability: 整个编译过程是非常消耗资源的,嵌入式系统往往没有足够的内存或磁盘空间
- Availability: 即使目标平台资源很充足,可以本地编译,但是第一个在目标平台上运行的本地编译器总需要通过交叉编译获得
- Flexibility: 一个完整的Linux编译环境需要很多支持包,交叉编译使我们不需要花时间将各种支持包移植到目标板上
1.3 为什么交叉编译比较困难
交叉编译的困难点在于两个方面:
不同的体系架构拥有不同的机器特性
- Word size: 是64位还是32位系统
- Endianness: 是大端还是小端系统
- Alignment: 是否必修按照4字节对齐方式进行访问
- Default signedness: 默认数据类型是有符号还是无符号
- NOMMU: 是否支持MMU
交叉编译时的主机环境与目标环境不同
- Configuration issues:
- HOSTCC vs TARGETCC:
- Toolchain Leaks:
- Libraries:
- Testing:
详细的对比可以参看这篇文章,已经写的很详细了,在这就不细说了:Introduction to cross-compiling for Linux
第 2 章 交叉编译链
2.1 什么是交叉编译链
明白了什么是交叉编译,那我们来看看什么是交叉编译链。
首先编译过程是按照不同的子功能,依照先后顺序组成的一个复杂的流程,如下图:
那么编译过程包括了预处理、编译、汇编、链接等功能。既然有不同的子功能,那每个子功能都是一个单独的工具来实现,它们合在一起形成了一个完整的工具集。
同时编译过程又是一个有先后顺序的流程,它必然牵涉到工具的使用顺序,每个工具按照先后关系串联在一起,这就形成了一个链式结构。
因此,交叉编译链就是为了编译跨平台体系结构的程序代码而形成的由多个子工具构成的一套完整的工具集。同时,它隐藏了预处理、编译、汇编、链接等细节,当我们指定了源文件(.c)时,它会自动按照编译流程调用不同的子工具,自动生成最终的二进制程序映像(.bin)。
注意:严格意义上来说,交叉编译器,只是指交叉编译的gcc,但是实际上为了方便,我们常说的交叉编译器就是交叉工具链。本文对这两个概念不加以区分,都是指编译链
2.2 交叉编译链的命名规则
我们使用交叉编译链时,常常会看到这样的名字:
arm-none-linux-gnueabi-gcc arm-cortex_a8-linux-gnueabi-gcc mips-malta-linux-gnu-gcc
其中,对应的前缀为:
arm-none-linux-gnueabi- arm-cortex_a8-linux-gnueabi- mips-malta-linux-gnu-
这些交叉编译链的命名规则似乎是通用的,有一定的规则:
arch-core-kernel-system
- arch: 用于哪个目标平台。
- core: 使用的是哪个CPU Core,如Cortex A8,但是这一组命名好像比较灵活,在其它厂家提供的交叉编译链中,有以厂家名称命名的,也有以开发板命名的,或者直接是none或cross的。
- kernel: 所运行的OS,见过的有Linux,uclinux,bare(无OS)。
- systen:交叉编译链所选择的库函数和目标映像的规范,如gnu,gnueabi等。其中gnu等价于glibc+oabi;gnueabi等价于glibc+eabi。
注意:这个规则是一个猜测,并没有在哪份官方资料上看到过。而且有些编译链的命名确实没有按照这个规则,也不清楚这是不是历史原因造成的。如果有谁在资料上见到过此规则的详细描述,欢迎指出错误。
第 3 章 包含的工具
3.1 Binutils
Binutils是GNU工具之一,它包括链接器、汇编器和其他用于目标文件和档案的工具,它是二进制代码的处理维护工具。
Binutils工具包含的子程序如下:
- ld GNU连接器the GNU linker.
- as GNU汇编器the GNU assembler.
- addr2line 把地址转换成文件名和所在的行数
- ar A utility for creating, modifying and extracting from archives.
- c++filt Filter to demangle encoded C++ symbols.
- dlltool Creates files for building and using DLLs.
- gold A new, faster, ELF only linker, still in beta test.
- gprof Displays profiling information.
- nlmconv Converts object code into an NLM.
- nm Lists symbols from object files.
- objcopy Copys and translates object files.
- objdump Displays information from object files.
- ranlib Generates an index to the contents of an archive.
- readelf Displays information from any ELF format object file.
- size Lists the section sizes of an object or archive file.
- strings Lists printable strings from files.
- strip Discards symbols
3.2 GCC
GNU编译器套件,支持C, C++, Java, Ada, Fortran, Objective-C等众多语言。
3.3 GLibc
Linux上通常使用的C函数库为glibc。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。
因为嵌入式环境的资源及其紧张,所以现在除了glibc外,还有uClibc和eglibc可以选择,三者的关系可以参见这两篇文章:
3.4 GDB
GDB用于调试程序
第 4 章 如何得到交叉编译链
既然明白了交叉编译链的功能,那么在针对嵌入式系统开发时,我们需要的交叉编译链从哪儿得到?
主要有三个方式可以获取
4.1 下载已经做好的交叉编译链
使用其他人针对某些CPU平台已经编译好的交叉编译链。我们只需要找到合适的,下载下来使用即可。
常见的交叉编译链下载地址:
- 在 http://ftp.arm.linux.org.uk/pub/armlinux/toolchain/ 下载已经编译好的交叉编译链
- 在 http://www.denx.de/en/Software/WebHome 下载已经编译好的交叉编译链
- 在https://launchpad.net/gcc-arm-embedded下载已经编译好的交叉编译链
- 一些制作交叉编译链的工具中,包含了已经制作好的交叉编译链,可以直接拿来使用。如crosstool-NG
- 如果购买了某个芯片或开发板,一般厂商会提供对应的整套开发软件,其中就包含了交叉编译链。
厂家提供的工具一般是经过了严格的测试,并打入了一些必要的补丁,所以这种方式往往是最可靠的工具来源。
4.2 使用工具定制交叉编译链
使用现存的制作工具,以简化制作交叉编译链这个事情的复杂度。我们只需要了解有哪些工具可以实现,并选个合适的工具,搞懂它的操作步骤即可。
- crosstool-NG
- Buildroot
- Embedded Linux Development Kit (ELDK)
工具还有很多,各有各的优势和劣势,大家可以慢慢研究,在这就不细说了。
4.3 从零开始构建交叉编译链
这个是最困难也最耗时间的,毕竟制作交叉编译链这样的事情,需要对嵌入式的编译原理了解的比较透彻,至少要知道出了问题要往哪个方面去翻阅资料。而且,也是最考耐心和细心的地方,配错一个选项或是一个步骤,都可能出现以前从来没见过的问题,而且这些问题往往还无法和这个选项或步骤直接联系起来。
当然如果搭建出来,肯定也是收获最大的,至少对于编译的流程和依赖都比较清楚了,细节上的东西可能还需要去翻看相应的协议或标准,但至少骨架会比较清楚。
详细的搭建过程可以参看后续的文章,这里面有详细的参数和步骤:
交叉编译详解 二 从零制作交叉编译链为了方便大家搭建交叉编译链,我写了一个一键生成的脚本(包括源码下载和自动编译)。如果大家自己一直搭建不成功,不妨试试这个脚本,然后对比下自己的流程是否一致,参数是否有差异,也许能帮大家迈过这个障碍:
交叉编译详解 三 使用脚本自动生成交叉编译链4.4 对比三种构建方式
项目 使用已有交叉编译链 自己制作交叉编译链 安装 一般提供压缩包 需要自己打包 源码版本 一般使用较老的稳定版本,对于一些新的GCC特性不支持 可以使用自己需要的GCC特性的版本 补丁 一般都会打上修复补丁 普通开发者很难辨别需要打上哪些补丁,资深开发者可以针对自己的需求合入补丁 源码溯源 可能不清楚源码版本和补丁情况 一切都可以定制 升级 一般不会升级 可以随时升级 优化 一般已经针对特定CPU特性和性能进行优化 一般无法做到比厂家优化的更好,除非自己设计的CPU 技术支持 可以通过FAE进行支持,可能需要收费 只能通过社区支持,免费 可靠性验证 已经通过了完善的验证 自己验证,肯定没有专业人士验证的齐全 参考资料
[1] Introduction to cross-compiling for Linux
[2] binutils介绍
[3] glibc 各个库作用介绍
[4] uclibc eglibc glibc之间的区别和联系
[5] Glibc vs uClibc Differences
[6] 交叉编译链下载地址
- http://ftp.arm.linux.org.uk/pub/armlinux/toolchain/
- http://www.denx.de/en/Software/WebHome
- https://launchpad.net/gcc-arm-embedded
-
什么是交叉验证(Cross Validation)?
2019-04-02 22:57:50交叉验证就是一种常用的模型选择方法,使用部分数据集进行验证模型的有效性。 常见方法 常见的交叉验证方法分为3种: 1. 简单交叉验证 将数据集分为两部分(或者是三部分),70%作为训练集,30%作为验证集。使用70%...简述
验证是指的在机器学习模型训练时对模型好坏程度的衡量。
交叉验证就是一种常用的模型选择方法,使用部分数据集进行验证模型的有效性。常见方法
常见的交叉验证方法分为3种:
1.简单交叉验证
将数据集分为两部分(或者是三部分),70%作为训练集,30%作为验证集。使用70%的数据,选择不同的模型参数,进行训练。结束后使用30%的数据(未经过训练)进行验证。选择最优的模型。
2.S折交叉验证
将数据集分为规模大小相近的S个互不相交的数据集,利用S-1部分数据去训练模型,剩下的1部分数据进行验证 。经过多次训练选出最优的模型。
【注意】每次的验证集都有可能不同。3.留一交叉验证
其实就是S折交叉验证的特殊形式,即在数据集规模及其小的时候(小于100条,甚至更夸张)。将S折的S=N,其中N为数据规模。留下1条数据做验证。
细节
所有的数据集在选择的时候,都需要强调独立同分布的选择(随机采样),因为机器学习就是在这个框架下所产生的科学理论Reference
[1] 《统计学习方法》P14-P15
[2] https://www.cnblogs.com/pinard/p/5992719.html -
一文搞懂交叉编译(一)——什么是交叉编译以及为什么要交叉编译
2020-03-02 15:58:39一、什么是交叉编译: 程序员编辑的代码是以人的思维模型为基础的,这并不能被机器直接识别并执行,所以必须要通过一定的步骤进行转变后才能变成机器可执行的程序,此过程就是编译。 程序开发有两种情形,第一种是...一、什么是交叉编译:
目前的电子设备的计算和存储都是基于2进制,亦即是01010110....这种形式的数据。而我们编程所使用语言最低也是汇编,更高级的像C,C++等。所以使用这些语言所编辑的代码并不能被机器直接识别并执行,而必须要通过一定的转变后才能变成机器可执行的程序,这个转换过程一般统称为编译(区分于整个过程中的编译那一步),这也即是其必要性的原因。
程序开发一般有两种情形,第一种是在一种设备上开发,编译生成的程序在同类设备上运行,如我们电脑里的office等,这种叫本地编译。
第二种则是在一种设备上进行编辑、编译(宿主机),而生成的执行程序却在另一种设备上执行(目标机),即开发环境和运行环境不一样,如单片机、嵌入式系统程序,这就是交叉编译。
二、为什么要交叉编译:
更深层的问题是:为什么要在宿主机上进行开发,而不直接在目标机上进行?
最主要的原因是:目标机资源太有限了(出于成本考虑,其硬件资源一般都只能满足特定功能需求),难以支撑开发环境的运行需求:如CPU占用,内存开销,硬盘占用等,对比下硬件资源吧:
单片机一般的硬件资源:CPU主频<=100MHZ,RAM<=100KB,FLASH<=2MB;
嵌入式系统一般的硬件资源:CPU主频<=1GHZ,RAM<=2GB,FLASH<=8GB。
而通用电脑的硬件资源:CPU主频>=1.5GHZ,4GB以上的内存,250GB以上的磁盘。
显而易见,通用电脑的硬件资源能够较好地满足开发需求,而且像单片机这种情况,是根本没法运行开发环境的,也只能在通用主机上开发。当然,也有像树莓派这种,可以在设备本地开发运行。但运行开发环境,特别是QtCreator时,其卡顿程度,足以让人怀疑。。。
另一方面来说,在通用电脑上进行开发,也不会有较大的学习成本。换一个目标平台,至多去熟悉一下目标机特性及新的开发IDE。
程序开发流程之一是编辑的代码,都需要通过编译才能转变成机器可执行的程序。
只是我们以程序的开发环境与执行环境差异而作了各种区分。还要注意的是不同的开发环境和执行环境,都需要不同的编译工具(关系能否运行、能否生成),如下例:
1、Windows里开发Windows应用和开发Linux应用所使用的编译工具不一样,因为编译目标平台不一样;
2、Windows里开发Windows应用和Ubuntu里开发Ubuntu应用所使用的编译工具不一样,因为工具运行平台和编译目标平台不一样;
2、Windows和Ubuntu开发同一嵌入式目标平台程序所使用的编译工具也不一样,虽然都是交叉编译,但还要满足编译工具可运行的条件。
参考资料:https://www.crifan.com/files/doc/docbook/cross_compile/release/html/cross_compile.html
-
上激发三重态状态介导的系统间交叉用于抗Kasha荧光:在深紫外传感中的潜在应用
2021-04-01 06:01:10从S5到Tn的系统间交叉(ISC)可以成功地与内部转换竞争,接着是从Tn到S2的反向ISC竞争以形成高态发射。 此外,讨论了将该效果用于深紫外光传感器。 这些发现为操纵激发态演化提供了敏锐的见解,同时为利用高能激发... -
交叉测试的理解
2020-02-07 23:31:17交叉,顾名思义就是交换着测试,交叉测试的理解就是把测试人员所测试的功能或模块交换测试。例如本轮甲测试号的A模块,乙测试的B模块, 在下一次测试时乙执行的A模块,甲执行的B模块。 交叉测试有哪些意义 1、每... -
弹性盒之主轴与交叉轴的区分
2020-03-21 15:03:13这周学习了弹性盒,而其中要区分好主轴和交叉轴,否则搞不清楚其排列的顺序: ①当里面的盒子为水平排列时:(没有折行发生时) 没有折行现象时不存在交叉轴: 有折行现象时: ①当里面的盒子为竖直排列时:(没有... -
数据库中事务是什么意思?
2019-05-07 09:45:55什么是事务?我们知道,数据库是一个面向多用户的共享机制,因此数据库管理系统应当具备并发控制和封锁机制,保证数据库系统的正常运行。但是当多个用户访问数据库的时候,如果每一个用户程序一个一个的串行执行,则... -
什么是计算机网络中的上行链路端口?
2021-06-22 20:13:09我们经常听说在使用网络中需要确保您的网络能够... 网络专业人员可能会指出,以太网交叉电缆 可用于将计算机连接到上行链路端口或将两个上行链路端口彼此连接。尽管从技术上讲是正确的,但这种连接的有用性受到限制。 -
什么是耦合、解耦
2021-02-13 00:34:19什么是耦合、解耦一、耦合1、耦合是指两个或两个以上的体系或两种运动形式间通过相互作用而彼此影响以至联合起来的现象。2、在软件工程中,对象之间的耦合度就是对象之间的依赖性。对象之间的耦合越高,维护成本越高... -
CSS Hack是什么意思?css hack有什么用?
2018-08-14 10:02:58第一部分:什么是CSS Hack? CSS hack是通过在CSS样式中加入一些特殊的符号,让不同的浏览器识别不同的符号(什么样的浏览器识别什么样的符号是有标准的,CSS hack就是让你记住这个标准),以达到应用不同的CSS样式... -
数据分析之交叉分析
2019-12-31 09:45:28#1、概念:交叉分析,通常用于分析两个或两个以上,分组变量之间的关系,以交叉表形式进行变量间关系的对比分析; #可以有三种情况下的交叉:定量与定量分组进行交叉;定量与定性分组进行交叉;定性与定性分组进行... -
kdj超买超卖是什么意思?kdj指标里说的“超买区,超卖区”什么意思?
2020-12-30 06:55:29在分析股票的走势以及股票买卖点的时候,我们经常会使用一些指标来作为工具进行分析,比如KDJ指标等,最近有人问kdj超买超卖是什么意思?对此小编给大家搜集了有关KDJ指标和超买超卖指标的一些内容。kdj超买超卖是... -
交叉编译
2020-09-16 20:35:39什么是交叉编译 交叉编译是在一个平台上生成另一个平台上的可执行代码(例如我们在windows上用keil编译代码生成hex文件,供51单片机使用,这个过程就是交叉编译。这是一个行为。)。 为什么要交叉编译 既然我们已经... -
文献解读:纵向数据的测量不变性和交叉滞后模型(一)
2021-03-03 12:16:22Measurement invariance测量不变性 在心理学的很多情形下,我们都不能直接测量我们想要的构象,比如饮酒动机,这些不能直接测量的变量叫做潜变量,叫做因子,叫做构象,叫做维度。 下次你看到上面的红字你都可以把... -
解释权限的继承性、累加性、优先性和交叉性
2012-08-28 11:53:15权限的继承性、累加性、优先性和交叉性 想更深入的了解权限,那么权限的一些特性就不能不知道了,权限特性具有继承性、累加性、优先性、交叉性。在我的上一篇博客中我说到了权限的一些特性,这里我也给出具体... -
什么是弹性(display: flex)布局 ?
2021-02-25 11:52:17display:flex 意思是弹性布局,它能够扩展和收缩 flex 容器内的元素,以最大限度地填充可用空间。Flex是Flexible Box的缩写,意为”弹性布局”,用来为盒状模型提供最大的灵活性。 任何一个容器都可以指定为Flex布局... -
NP是什么意思?
2018-09-27 21:37:00非确定性问题,都可以转换为一类叫做满足性问题的 逻辑运算 问题。既然这类问题的所有可能答案,都可以在 多项式时间 内计算,人们于是就猜想,是否这类问题,存在一个确定性算法,可以在多项式时间内,直接算出或是... -
交叉验证:什么是训练集(training-set)与测试集(test-set)
2018-04-01 20:25:52二、交叉验证(Cross Validation) 交叉验证(Cross Validation)是用来验证分类器的性能一种统计分析方法,基本思想是把在某种意义下将原始数据(dataset)进行分组,一部分做为训练集 (training set),另一部分... -
IP地址,子网掩码、默认网关,DNS服务器是什么意思?
2018-05-30 09:24:09IP地址,子网掩码、默认网关,DNS服务器是什么意思? (一)问题解析 001. 问:IP地址,子网掩码,默认网关,DNS服务器,有什么区别呀?我知道没有IP地址就不能上网,我也知道没设DNS就不能上外网,可它们都有什么功能... -
遗传算法选择-交叉
2021-05-25 17:22:22遗传算法中的选择算子、交叉算子、变异算子 1.选择算子 轮盘选择 按照每条染色体的适应度占种群所有染色体适应度之和的概率来选择; 锦标赛选择 每次从种群中选出m条染色体,保留适应度最大的,共选K次,得到K条... -
弹性布局的主轴和交叉轴的区别
2020-05-16 21:53:28弹性布局可以让块级元素横向显示,只要设置... 交叉轴:永远与主轴垂直相交的一根轴,交叉轴有两条,分别是x轴和y轴。 交叉轴是x轴:交叉轴起点在左侧,终点在右侧; 交叉轴是y轴:交叉轴起点在顶部,终点在底部; -
matlab-K折交叉验证与分层K折交叉验证
2020-10-12 21:21:09文章目录K折交叉验证有什么用?如何实现K折交叉验证?K折交叉验证的要点:(文字版)如何实现K折交叉验证(图片版)如何实现K折交叉验证(matlab版)为啥我们需要分层K折交叉验证?如何实现分层k折交叉验证如何实现... -
阿里技术四面+交叉面+HR面,成功拿到offer
2020-10-27 17:46:24前两天,我收到了阿里巴巴的实习offer,从学长内推开始面试到拿到最后offer经历了4面技术、一面交叉面和一面HR面。经过了漫长的等待和几次几乎折磨的面试之后,终于拿到了实习offer。 自我介绍 本人来自西南某双非... -
为什么会有这么多中间表?
2021-03-03 19:41:43为什么中间表会越来越多?中间表会给项目组带来什么样的困扰,如何解决这些困扰?这里我们就尝试探讨一下这个问题。中间表出现的典型场景主要有三个:一步算不出来。数据库中的原始数据表要经过复杂计算,才能在报表... -
交叉销售功能介绍-功能
2016-02-24 17:13:34当创建销售订单时,SAP系统会根据订单中的物料检索条件记录,如果找到,就会弹出一个窗口用来展示相关的物料,以及这些物料的价格和可用性信息。在上一篇blog中,我们提到,此弹出窗口可以配置为自动弹出或者人为... -
供应链浅谈(一) 什么是供应链
2020-10-28 19:03:01交叉性 节点企业可以是这个供应链的节点企业,同时又是另一个供应链的节点企业,众多的供应链形成交叉结构,增加了协调管理的难度。 比如,仓储是公司A, 运输是公司B 三、供应链中的业务域 几个核心大域: 以上各个...