There have been too many trivial matters recently and there is no time to write a blog. Continue to write the android driver for development and debugging.
This chapter focuses on how to test the driver.
1. Simple driver test
In the previous article, we have finished adding the driver module and downloaded the driver to the board. The following describes how to test whether the driver works properly.
This TTT driver implements a read and write interface, so we can perform a simple test:
Start the board, enter the system, and then enter the command line (you can use the serial port or the ADB shell)
Go to the dev directory:
root@android:/ # cd /devroot@android:/dev #
Check whether the TTT device file exists:
root@android:/dev # ls -l tttcrw------- root root 249, 0 2013-04-02 09:58 ttt
Enter the/proc directory to verify the input and output of the device:
root@android:/dev # cd /proc/root@android:/proc #
Get the value of the TTT device:
root@android:/proc # cat ttt0root@android:/proc #
Set the value of the TTT device:
root@android:/proc # echo '111' > tttroot@android:/proc # cat ttt111root@android:/proc #
The TTT device file is OK, and the input and output interfaces are correct.
Of course, there are other ways to verify the input and output, such:
Go to the/sys/class TTT Device directory:
root@android:/proc # cd /sys/class/ttt/ttt/root@android:/sys/class/ttt/ttt # lsdevpowersubsystemueventvalroot@android:/sys/class/ttt/ttt #
Access the Val property file to read and write TTT device values:
root@android:/sys/class/ttt/ttt # lsdevpowersubsystemueventvalroot@android:/sys/class/ttt/ttt # cat val111root@android:/sys/class/ttt/ttt # echo '123' > valroot@android:/sys/class/ttt/ttt # cat val123root@android:/sys/class/ttt/ttt #
2. Write a C program to test the driver's read/write operations.
Switch to the root permission and go to the external directory under the android source code directory:
root@brantyou-ubuntu:~# cd workspace/android-4.0.4_r1.2/external/root@brantyou-ubuntu:~/workspace/android-4.0.4_r1.2/external# lsandroid-mock freetype libpng safe-iopantlr fsck_msdos libvpx skiaapache-harmony genext2fs libxml2 sonivoxapache-http giflib libxslt speexapache-xml google-diff-match-patch libyuv sqliteastl grub llvm srecbison gtest lohit-fonts srtpblktrace guava markdown stlportbluetooth harfbuzz mesa3d stracebouncycastle hyphenation mksh svoxbsdiff icu4c mockwebserver tagsoupbzip2 iproute2 mtpd tcpdumpchromium ipsec-tools netcat tinyalsaclang iptables netperf tinyxmlcollada javasqlite neven tremolodbus javassist nist-sip v8dhcpcd jdiff oauth valgrinddnsmasq jhead opencv webkitdoclava jpeg openssl webpdropbear jsilver oprofile webrtce2fsprogs jsr305 pcre wpa_supplicanteasymock junit ping wpa_supplicant_6elfutils kernel-headers ping6 wpa_supplicant_8embunit libffi ppp xmlwriteremma libgsm proguard yaffs2esd liblzf protobuf yappexpat libnfc-nxp qemu zlibeyes-free libnl-headers qemu-pc-biosfdlibm libpcap quakeflac libphonenumber replicaislandroot@brantyou-ubuntu:~/workspace/android-4.0.4_r1.2/external#
Due to the large number of files in this directory, I created a new yapp directory to store related programs.
Go to the yapp directory and create the tttapp directory:
root@brantyou-ubuntu:~/workspace/android-4.0.4_r1.2/external/yapp# mkdir tttapproot@brantyou-ubuntu:~/workspace/android-4.0.4_r1.2/external/yapp# lshelloapp helloworld tttapp
Go to the tttapp directory and create the tttapp. c file:
root@brantyou-ubuntu:~/workspace/android-4.0.4_r1.2/external/yapp# cd tttapp/root@brantyou-ubuntu:~/workspace/android-4.0.4_r1.2/external/yapp/tttapp# gedit tttapp.c
The content of the tttapp. c file is as follows:
#include <stdio.h>#include <stdlib.h>#include <fcntl.h>#defineDEVICE_NAME"/dev/ttt"int main(int argc, char** argv){int fd = -1;int val = 0;fd = open(DEVICE_NAME, O_RDWR);if(fd == -1){printf("Failed to open device %s.\n", DEVICE_NAME);return -1;}printf("Read original value:\n");read(fd, &val, sizeof(val));printf("%d.\n\n", val);val = 100;printf("Write value %d to %s.\n\n", val, DEVICE_NAME);write(fd, &val, sizeof(val));printf("Read the value again:\n");read(fd, &val, sizeof(val));printf("%d.\n\n", val);close(fd);return 0;}
Create the corresponding Android. mk configuration file:
root@brantyou-ubuntu:~/workspace/android-4.0.4_r1.2/external/yapp/tttapp# gedit Android.mk
The content of the android. mk file is as follows:
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE_TAGS := optionalLOCAL_MODULE := tttappLOCAL_SRC_FILES := tttapp.cinclude $(BUILD_EXECUTABLE)
After the C program is compiled, compile it as follows:
Return to the android source code directory and execute envsetup. sh:
root@brantyou-ubuntu:~/workspace/android-4.0.4_r1.2# lsabi build device hardware out systembionic cts docs libcore packages v8.logbootable dalvik external Makefile prebuilt vendorboot.img development frameworks ndk sdkroot@brantyou-ubuntu:~/workspace/android-4.0.4_r1.2# . build/envsetup.sh including device/moto/stingray/vendorsetup.shincluding device/moto/wingray/vendorsetup.shincluding device/samsung/crespo4g/vendorsetup.shincluding device/samsung/crespo/vendorsetup.shincluding device/samsung/maguro/vendorsetup.shincluding device/samsung/smdkc110/vendorsetup.shincluding device/samsung/smdkv210/vendorsetup.shincluding device/samsung/torospr/vendorsetup.shincluding device/samsung/toro/vendorsetup.shincluding device/samsung/tuna/vendorsetup.shincluding device/ti/panda/vendorsetup.shincluding sdk/bash_completion/adb.bashroot@brantyou-ubuntu:~/workspace/android-4.0.4_r1.2#
Execute make tttapp to compile the tttapp program:
root@brantyou-ubuntu:~/workspace/android-4.0.4_r1.2# make tttapp============================================PLATFORM_VERSION_CODENAME=RELPLATFORM_VERSION=4.0.4TARGET_PRODUCT=fullTARGET_BUILD_VARIANT=engTARGET_BUILD_TYPE=releaseTARGET_BUILD_APPS=TARGET_ARCH=armTARGET_ARCH_VARIANT=armv7-aHOST_ARCH=x86HOST_OS=linuxHOST_BUILD_TYPE=releaseBUILD_ID=IMM76I============================================target thumb C: tttapp <= external/yapp/tttapp/tttapp.ctarget Executable: tttapp (out/target/product/generic/obj/EXECUTABLES/tttapp_intermediates/LINKED/tttapp)target Symbolic: tttapp (out/target/product/generic/symbols/system/bin/tttapp)target Strip: tttapp (out/target/product/generic/obj/EXECUTABLES/tttapp_intermediates/tttapp)Install: out/target/product/generic/system/bin/tttapproot@brantyou-ubuntu:~/workspace/android-4.0.4_r1.2#
This indicates that the compilation is successful. Let's see if the corresponding execution program has been generated:
root@brantyou-ubuntu:~/workspace/android-4.0.4_r1.2# ls -l out/target/product/generic/system/bin/tttapp -rwxr-xr-x 1 root root 5524 2013-04-02 11:04 out/target/product/generic/system/bin/tttapproot@brantyou-ubuntu:~/workspace/android-4.0.4_r1.2#
In this way, the corresponding executable program is generated.
Now we copy the generated tttapp to the SD card and place it on the board for execution.
I put it on the USB flash drive and copied tttapp from the USB flash drive to the/data directory on the Board:
root@android:/mnt # ls usbD3GOther.exeEBOOT.binEBOOT.nb0IRDA_X.exeLOST.DIRMapTools.exeNK.BINNK_2G.binNK_3G.binNK_3G_y.BINNK_src.binRFIDForProduce.exeRFIDTest.exeRFID_X.exeSTEPLDR.binSTEPLDR.nb0SwitchTools.exeWINCE 6软件android-samsung-dev_20110830.tar.gzbarscan.exebbkhellohtcbjwdm.inftttappubuntu-11.10-desktop-i386.iso凯立德地图机身å·ç (MC60端).exeroot@android:/mnt #root@android:/mnt # lsasecext_sdobbsdcardsecureusbroot@android:/mnt # cd usb/root@android:/mnt/usb # lsD3GOther.exeEBOOT.binEBOOT.nb0IRDA_X.exeLOST.DIRMapTools.exeNK.BINNK_2G.binNK_3G.binNK_3G_y.BINNK_src.binRFIDForProduce.exeRFIDTest.exeRFID_X.exeSTEPLDR.binSTEPLDR.nb0SwitchTools.exeWINCE 6软件android-samsung-dev_20110830.tar.gzbarscan.exebbkhellohtcbjwdm.inftttappubuntu-11.10-desktop-i386.iso凯立德地图机身å·ç (MC60端).exeroot@android:/mnt/usb # ll tttapp----rwxr-x system media_rw 5524 2013-04-02 11:08 tttapproot@android:/mnt/usb # chmod 777 tttapproot@android:/mnt/usb # ll tttapp----rwxr-x system media_rw 5524 2013-04-02 11:08 tttapproot@android:/mnt/usb # cp tttapp /data/system/bin/sh: cp: not found127|root@android:/mnt/usb # mv tttapp /datafailed on 'tttapp' - Cross-device link255|root@android:/mnt/usb # mv tttapp /data/tttappfailed on 'tttapp' - Cross-device link255|root@android:/mnt/usb # cat tttapp > /data/tttapproot@android:/mnt/usb # ll /data/tttapp-rw-rw-rw- root log 5524 2013-04-02 11:14 tttapproot@android:/mnt/usb # cd /dataroot@android:/data # ./tttapp/system/bin/sh: ./tttapp: cannot execute - Permission denied126|root@android:/data # chmod 777 tttapproot@android:/data # ./tttapp[ttt]: ttt_open().[ttt]: ttt_read().[ttt]: ttt_write().[ttt]: ttt_read().[ttt]: ttt_release().Read original value:123.Write value 100 to /dev/ttt.Read the value again:100.root@android:/data #
Some situations occur during the copy process. If the CP command is unavailable, you can use the cat command. From the last few statements above, we can see that the C program has succeeded. The test driver is OK.
At this point, the driver test is complete. The next article will introduce how to write the corresponding HAL Hardware Abstraction Layer to access the kernel driver.