配色: 字号:
全系列视频第1个项目_电子产品量产测试与烧写工具.docx
2020-06-05 | 阅:  转:  |  分享 
  
前言我还没有录完驱动入门、应用程序入门,在录完这2部分入门知识之后,我才开始讲解项目开发。但是有很多同学急需一个能上手的项目,有些是用来刷经
验,有些是在工作中就要用到。所以我先写一下文档,这个文档里,不讲代码,只讲操作;看得懂的人就看,看不懂的人就等视频。本文档讲解一个
实际的项目:电子产品量产测试与烧写工具。这是一套软件,用在我们的实际生产中,有如下特点:①简单易用:把这套软件烧写在SD卡上,插
到IMX6ULL板子里并启动,它就会自动测试各个模块、烧写EMMC系统。工人只要按照说明接入几个模块,就可以完成整个测试、烧写过程
。测试结果一目了然:等LCD上所有模块的图标都变绿时,就表示测试通过。②软件可配置、易扩展:通过配置文件添加测试项,可以添加不限
个数的测试项。每个测试项有自己的测试程序,测试通过后把结果发送给GUI即可。各个测试程序互不影响。③纯C语言编程下图是这个工具的
界面,它可以一边测试一边烧写:上图中的led、speaker按钮,可以点击:①当你看到LED闪烁时,就点击led按钮,它变成绿色
表示测试通过;②当你从耳机里听到声音时,就点击speaker按钮,它变成绿色表示测试通过。其他按钮无法点击,接上对应模块后会自动
测试,测试通过时图标就会变绿。上图中的蓝色按钮表示烧写EMMC的进度,烧写成功后它也会变绿。LCD上所有图标都变绿时,就表示测试、
烧写全部完成;某项保持红色的话,就表示对应模块测试失败。文件获取与编译下载文件使用GIT下载代码,如下所示:$gitclone
https://e.coding.net/weidongshan/01_all_series_quickstart.githtt
ps://e.coding.net/weidongshan/01_all_series_quickstart.git执行上述命令后
,可以得到一个“01_all_series_quickstart”目录,本文的文件位于如下目录中:文件说明上图中,app目录下是源
代码;image下是映像文件的下载方法,由于GIT对文件大小有限制,而映像文件太大了,所以另存在网盘中;scripts_and_e
xecutable目录下是配置文件、脚本、编译好的可执行程序;tools目录下是一些运行于Ubuntu的工具。1.2.1app目
录这个目录下有如下内容:①test_gui:GUI界面程序,它用于显示测试、烧写界面。②detect_dev:这只是一个简单的
发送网络信息的程序,比如要向GUI程序发送信息时,可以执行以下命令,它表示AP3216C模块测试通过了:detect_dev12
7.0.0.1"ap3216cok"③dd.c:这是修改过的dd命令,可以打印dd执行的进度,我们使用dd命令烧写EMMC,
从它的输出获得烧写进度,然后把进度发送给GUI。④serial_test.c:它用来测试串口,向串口发送“uname”命令,如果
能读回“linux”字符,就表示串口正常。⑤其他库文件:freetype-2.4.10.tar.bz2:矢量字符库tslib-1
.21.tar.bz2:触摸屏库1.2.2scripts_and_executable目录这个目录有如下内容:①etc_tes
t_gui子目录:里面的内容要放到板子的/etc/test_gui目录,里面有2个文件:配置文件gui.conf、字体文件sims
un.ttc。test_gui程序根据配置文件gui.conf来生成界面,配置文件示例如下:#namecan_be_pre
ssedcommandled1speaker1record0key10k
ey20ap3216c0icm206080RS485toCAN0CANtoRS48504
G0usb0otg_device0otg_host0serial0w
ifi0net00net10burn0ALL0
test_sleep_key.sh第1列是测试项的名字,这会在LCD上显示出来。第2列表示该测试项能否被点击:1表示能点
击,0表示不能点击。对于led这样的测试项必须通过人眼观察,如果它能闪烁就用手点击图标把它变为绿色。对于wifi这样的模块,测试程
序会自动改变图标颜色,不允许手工点击图标。第3列是对应的命令,这项是可以省略的。如果提供了“命令”,当某个测试项的状态发生变化时,
test_gui会调用测试项对应的命令。比如如果有这项:led1led.sh当我们点击led图标让它变到绿色时,test_
gui会调用“led.shok”;当我们再次点击led图标让它变为红色时,test_gui会调用“led.sherr”。在配
置文件里最后一个测试项是“ALL”,当屏幕上除了“ALL”图标之外所有的模块都测试通过后,就会调用“test_sleep_key.
shprocessing”,表示正在处理最后一项,在这里我们是让系统进入休眠,然后测试唤醒按钮是否有效。如果唤醒按钮正常,那么t
est_sleep_key.sh会通知test_gui把“ALL”按钮也变成绿色,这表示全部测试通过。②6ull_test.sh
:这是所有模块的测试脚本,把它放到板子的/usr/bin目录。它里面有很多shell函数,比如test_ap3216c,它是用来测
试AP3216C模块的,当通过i2ctransfer命令能写、读时就表示这个模块正常:test_ap3216c(){i2ctra
nsfer-f-y0w2@0x1e00x3while:doi2ctransfer-f-y0w1@0x1e0
r1|grep-q"0x03"if[$?-eq0]thendetect_dev127.0.0.1"ap32
16cok"echo"ap3216cok">$DEBUG_DEVelseecho"ap3216cerr">$DE
BUG_DEVfisleep1done}检测AP3216C模块后,就可以通过以下命令通知test_gui,test_gui会把对
应图标变为绿色:detect_dev127.0.0.1"ap3216cok"③detect_dev:这是一个发送网络数据的
可执行程序,它向8765端口发送数据;test_gui会监听8765端口,根据这些数据来修改图标颜色。用法示例如下,需要指定IP,
一般是“127.0.0.1”:detect_dev127.0.0.1“ap3216cok”④serial_test:这是测
试串口的可执行程序,把开发板的调试串口接到开发板的USBHost,这样serial_test就可以向调试串口发送“uname”命
令,如果能读到“linux”字符就表示开发板的调试串口正常。⑤test_gui:显示测试界面的可执行程序。⑥test_slee
p_key.sh:一个脚本,用来测试系统的唤醒按钮。1.2.3tools目录genimage工具的源码及配置文件。1.2.4i
mage目录根据image目录里的说明文件,去网盘中可以下载到以下文件:①sdcard.img:可以使用Win32DiskIma
ger把它直接烧到TF卡上,用TF卡启动IMX6ULL就可以测试系统、烧写EMMC。②sdcard_rootfs.tar.bz2
:根文件系统,里面的root目录下含有emmc.img,这会烧录到EMMC上。③u-boot-dtb.imx:这是u-boot,
制作sdcard.img时genimage的配置文件指明要用到它。使用genimage工具可以利用u-boot-dtb.imx、s
dcard_rootfs.tar.bz2制作出sdcard.img。编译程序注意:你可以直接使用我们提供的sdcard_rootf
s.tar.bz2,在它的基础上修改根文件系统。这样就不需要自己去编译程序了。编译之前都要先设置工具链,如果你使用的是我们的IMX
6ULL配套开发环境,执行以下命令:exportARCH=armexportCROSS_COMPILE=arm-linux-g
nueabihf-exportPATH=$PATH:/home/book/100ask_imx6ull-sdk/ToolChai
n/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin请注意上述命令中
PATH后面的文字之间没有空格、没有换行。可以执行下面命令验证是否设置成功:$arm-linux-gnueabihf-gcc-
v//这条命令有输出的话就表示成功Usingbuilt-inspecs.COLLECT_GCC=arm-linux-gnu
eabihf-gccCOLLECT_LTO_WRAPPER=/home/book/100ask_imx6ull-sdk/ToolC
hain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/../l
ibexec/gcc/arm-linux-gnueabihf/6.2.1/lto-wrapperTarget:arm-linux
-gnueabihf有些Ubuntu可能需要先安装一些工具:$sudoapt-getupdate$sudoapt-ge
tinstallautomakelibtool1.3.1编译test_guitest_gui程序要用到tslib、free
type,所以要先编译这2个依赖。①编译tslib:$tarxjftslib-1.21.tar.bz2$cdtslib
-1.21$./autogen.sh$mkdirtmp$./configure--host=arm-linux-gnu
eabihf--prefix=$(pwd)/tmp$make$makeinstall编译出来的头文件应该放入:/home/
book/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64
_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/include$cdtmp
/include$cp/home/book/100ask_imx6ull-sdk/ToolChain/gcc-linar
o-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/li
bc/usr/include编译出来的库文件应该放入:/home/book/100ask_imx6ull-sdk/ToolChai
n/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/arm-linux-g
nueabihf/libc/lib$cdtmp/lib$cp-rfd/home/book/100ask_imx6ul
l-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabi
hf/arm-linux-gnueabihf/libc/lib②编译freetype:$tarxjffreetype-2.
4.10.tar.bz2$cdfreetype-2.4.10/$./configure--host=arm-linux-
gnueabihf$make$makeDESTDIR=$PWD/tmpinstall编译出来的头文件应该放入:/home/
book/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64
_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/include$cdtmp
/usr/local/include/$cp-rf/home/book/100ask_imx6ull-sdk/Tool
Chain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/arm-lin
ux-gnueabihf/libc/usr/include$cd/home/book/100ask_imx6ull-sdk/T
oolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/arm-
linux-gnueabihf/libc/usr/include$mvfreetype2/freetype.编译出来的库文件
应该放入:/home/book/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-201
6.11-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/lib$cd
tmp/usr/local/lib/$cp-rfd/home/book/100ask_imx6ull-sdk/ToolC
hain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/arm-linu
x-gnueabihf/libc/lib③编译test_gui:$cdtest_gui/$make1.3.2编译dete
ct_dev$cddetect_dev/$arm-linux-gnueabihf-gcc-odetect_devdet
ect_dev.c1.3.3编译serial_test$arm-linux-gnueabihf-gcc-oserial_t
estserial_test.c1.3.4编译dddd.c来自coreutils,你下载coreutils的源码后替换dd.c
就可以去编译了。为了省事,我不再去编译,你直接使用scripts_and_executable\coreutils就可以。制作映像
文件我们要做什么?我们要制作一个sdcard.img,它里面含有:emmc.img、test_gui、6ull_test.sh及必
需的库文件。把sdcard.img烧录到SD卡后,使用SD卡启动IMX6ULL开发板,它就会自动执行测试、烧写:①运行test_
gui、6ull_test.sh:6ull_test.sh会自动测试众多模块,把测试结果发送给test_gui;test_gui在
LCD上显示结果。②烧写系统:6ull_test.sh还会把emmc.img烧写到EMMCFlash,同时发送烧写进度给tes
t_gui;test_gui在LCD上显示进度。如果你要体验这套系统,直接烧写我们提供的sdcard.img就可以。准备工具gen
image如果你使用的是我们提供的buildroot系统,执行以下命令,就可以生成emmc.img、sdcard.img(这个sd
card.img不是本文提供的,它不具备测试、烧写功能),你可以在Buidlroot系统里修改里面的内容:book@100ask:
~/100ask_imx6ull-sdk$cdBuildroot_2019.02book@100ask:~/100ask_im
x6ull-sdk/Buildroot_2019.02$makecleanbook@100ask:~/100ask_imx6u
ll-sdk/Buildroot_2019.02$make100ask_imx6ull_defconfigbook@100as
k:~/100ask_imx6ull-sdk/Buildroot_2019.02$makeall但是很多人需要定制自己的产品,
他们有自己的rootfs.tar.bz2,所以需要手工生成emmc.img。我们需要一个工具:genimage。$cdtool
s$tarxJfgenimage-10.tar.xz$./configure可能会提示:Togetpkg-config
,see$sudoapt-getinstallp
kg-config$./configure可能会提示:configure:error:Packagerequirement
s(libconfuse)werenotmet:Nopackage''libconfuse''found$sudoa
pt-getinstalllibconfuse-dev$./configure$make$sudomakeinsta
ll编译程序时可能会有某些错误,你把第一条错误在百度上一贴,基本上就可以找到解决方法。准备配置文件在genimage的配置文件里,
指定了怎么分区、每一个分区使用哪种格式的文件系统、每一个分区放什么内容。我们有2个配置文件:emmc_genimage.cfg、s
dcard_genimage.cfg。emmc_genimage.cfg的内容如下。它的意思是制作出来的emmc.img中含有3个
分区:u-boot、arduino、rootfs。其中u-boot分区不在分区表里,即你只可以看到后面2个分区。u-boot分区从
偏移地址1024开始,内容是u-boot-dtb.imx文件。arduino分区我们用不到,之所以放在这里只是为了兼容我们的ard
uino教程。rootfs分区有2048M,里面的内容来自emmc_rootfs.ext4。imageemmc.img{hd
image{}partitionu-boot{in-partition-table="no"image="u
-boot-dtb.imx"offset=1024}partitionarduino{partition-type
=0xCsize=50Moffset=10M}partitionrootfs{partition-typ
e=0x83image="emmc_rootfs.ext4"size=2048M}}sdcard_genimag
e.cfg的内容如下。它的意思是制作出来的sdcard.img中含有3个分区:u-boot、arduino、rootfs。其中u-
boot分区不在分区表里,即你只可以看到后面2个分区。u-boot分区从偏移地址1024开始,内容是u-boot-dtb.img文
件。arduino分区我们用不到,之所以放在这里只是为了兼容我们的arduino教程。rootfs分区有4096M,里面的内容来自
sdcard_rootfs.ext4。imagesdcard.img{hdimage{}partitionu-boo
t{in-partition-table="no"image="u-boot-dtb.imx"offset=1
024}partitionarduino{partition-type=0xCsize=10M}partitio
nrootfs{partition-type=0x83image="sdcard_rootfs.ext4"siz
e=4096M}}制作emmc.img假设你已经有了一个emmc_rootfs.tar.bz2(我们没有提供这个文件),把它
解压到某个目录里,你可以在里面添加内容:$mkdirtmp_emmc_rootfs$sudotarxjfemmc_ro
otfs.tar.bz2-Ctmp_emmc_rootfs/使用tmp_emmc_rootfs制作emmc_rootfs.ex
t4映像文件,下面的命令制作650M的ext4映像文件:$ddif=/dev/zeroof=emmc_rootfs.ext4
bs=1Mcount=650$mkfs.ext4-F-Enodiscard-O^metadata_csum,^6
4bitemmc_rootfs.ext4$mkdirtmp$sudomount-text4emmc_rootf
s.ext4tmp$sudocp-rfdtmp_emmc_rootfs/tmp/$sudoumounttmp当
前目录下要有这3个文件:①emmc_genimage.cfg:这个配置文件指明要使用下面2个文件来制作emmc.img②emm
c_rootfs.ext4③u-boot-dtb.imx这时,就可以使用genimage生成emmc.img:mkdirroo
t//没什么用,genimage要用到它genimage--inputpath./--outputpath./-
-configemmc_genimage.cfg制作sdcard.img假设你已经有了一个sdcard_rootfs.tar.b
z2,把它解压到某个目录里,你可以在里面添加内容:$mkdirtmp_sdcard_rootfs$sudotarxjf
sdcard_rootfs.tar.bz2-Ctmp_sdcard_rootfs/如果你想修改,请留意以下目录中的文件(以下的
根目录,指的是tmp_sdcard_rootfs的根目录):/etc/init.d/S04test_gui///etc/ini
t.d下其他使用LCD的程序要删掉/etc/test_gui/gui.conf/etc/test_gui/simsun.ttc/u
sr/bin/test_gui/usr/bin/6ull_test.sh/usr/bin/detect_dev/usr/bin/s
erial_test/usr/bin/coreutils//里面含有我们修改的dd命令/lib/libts//来自上面
编译的tslib-1.21/tmp/lib/lib/ts//来自上面编译的tslib-1.21/tmp/lib/ts//e
tc/ts.conf//来自上面编译的tslib-1.21/tmp/etc/ts.conf//注意ts.conf的“#
module_rawinput”改为“module_rawinput”,要顶格写#lslib/libfreetype.s
o//来自上面编译的freetype-2.4.10/tmp/usr/local/liblib/libfreetype.so
lib/libfreetype.so.6lib/libfreetype.so.6.9.0/usr/bin
/coreutils//来自scripts_and_executable\coreutils/bin/dd//这是一个
链接文件,指向../usr/bin/coreutils/root/emmc.img//要烧写到EMMC去的文件/
root/u-boot-dtb.imx//要烧写到EMMC去的文件使用tmp_sdcard_rootfs制作sdcard_ro
otfs.ext4映像文件,下面的命令制作650M的映像文件:$ddif=/dev/zeroof=sdcard_rootfs
.ext4bs=1Mcount=650$mkfs.ext4-F-Enodiscard-O^metadata_cs
um,^64bitsdcard_rootfs.ext4$mkdirtmp$sudomount-text4sdc
ard_rootfs.ext4tmp$sudocp-rfdtmp_sdcard_rootfs/tmp/$sudo
umounttmp当前目录下要有这3个文件:①sdcard_genimage.cfg:这个配置文件指明要使用下面2个文件来制作
sdcard.img②sdcard_rootfs.ext4③u-boot-dtb.imx这时,就可以使用以下命令生成sdcar
d.img:mkdirroot//没什么用,genimage要用到它genimage--inputpath./--outputpath./--configsdcard_genimage.cfg测试与烧写这是一线工人就可以完成的操作,你首先要给他们提供一张烧录好了sdard.img的TF卡,可以使用Win32DiskImager来烧写TF卡。设置启动开关为SD卡启动1、2、3往上拨:接线上电接好0、1、2后,就可以上电:把电源开关打向左边。其他的模块可以在上电后再插。注意:一上电时就看红灯亮不亮,不亮的话就是板子有问题。测试1.观察绿色LED是否闪,闪的话点屏幕上的“led”按钮让它变绿2.听耳机,两个耳机都要有声音,都有声音的话点“speaker”按钮让它变绿3.点击右下角2个按钮,屏幕上的“key1”、“key2”会变绿4.等“otg_host”、“serial”这2个按钮变绿后,换USB线:观察“usb”、”otg_device”按钮变绿5.全部测试完后,屏幕会自动变黑,这时按右上角按钮,屏幕会变亮:6.屏幕上按钮全部变绿后,测试通过,所有线取下。设置启动开关为EMMC启动只有3往上拨:测HDMI接好HDMI屏,上电,屏幕有图像就通过。阅读源码test_gui程序是整个项目的核心,等我录完驱动入门、应用入门后,就开始讲解它。现在只贴下面这张结构图:100ask_imx6ullUserManual淘宝:100ask.taobao.com-198-电话:0755-86200561官网:www.100ask.net邮箱:support@100ask.net
献花(0)
+1
(本文系新用户14776...首藏)