FCT测试

1.       总论

2.       启动过程

3.       各模块实现


1.       总论

FCT作为Android的一个外来测试程序,位于源码的external文件夹内,其目的是作为产品在PCBA装配生产线中的一个制程,对外围硬件设备驱动进行测试,通过对硬件的一些基本操作,如读芯片地址,来判断硬件是否能够正常工作。

 

 

2.       启动过程

系统由bootloader启动,解压并加载内核,完成系统各模块初始化,最后执行init.c脚本。

可以通过对init.c配置,比如,可以通过同时按下两个按键,选择进入FCT模式。

 

 

 

3.       各模块实现

FCT测试程序的实现过程,就是通过一个while(1)死循环,监听来自触摸屏的input事件,根据用户点击的区域执行对应的测试,测试完后给出passfail的结果。

 

 

 

3.1    按键

通过select()监听用户来自按键的事件,通过input子系统得到键值,判断键值是否正确。

struct input_event t;

       int keys_fd = open ("/dev/input/event1", O_RDONLY |O_NONBLOCK);

       if (read (keys_fd, &t, sizeof (t)) == sizeof (t))     {

              if (t.type == EV_KEY && t.value == 1) {

                     switch (t.code)

                     {

                            case 4: //page up

case 2: //page down

… …

}

3.2    显示屏

根据驱动提供的接口,对5张图片作全屏刷处理。

 

3.3    电池

电源驱动将电量值写进/sys/class/power_supply/battery/uevent文件里,FCT模式下只需要读取该文件的数据,就能得到电量值。

 

3.4    LED

直接控制GPIO,就能控制LED灯。

 

3.5    录音

打开录音功能,执行录音测试

system("/bin/echo f > /proc/driver/sound");

system("/system/bin/arecord -D hw:0,1 -t wav  -d 3 -c 1 -r 32000 -d 10 -f S16_LE /record.wav");

 

3.6    系统时间

直接读/dev/rtc0设备。

int rtc_read(struct rtc_time * rtc_tm) {

fd=open("/dev/rtc0",O_RDWR);

ioctl(fd,RTC_RD_TIME, rtc_tm);

… …

}

3.7    外围设备

通过读取驱动里注册的相关文件,判断设备是否插入。

check_arephone("/proc/driver/earphone");

check_bat("/sys/class/power_supply/usb/online");

check_sd("/dev/block/mmcblk0");

 

3.8    G-sensor

通过system("echo on > /proc/driver/gsensor");打开重力感应功能,翻转屏幕看是否正常。

你可能感兴趣的:(Linux驱动,测试,system,input,struct,android,脚本)