<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>i.MX ProcessorsのトピックAndroid : spidev ioctl handlers to user space and running spidev_test app on imx6.</title>
    <link>https://community.nxp.com/t5/i-MX-Processors/Android-spidev-ioctl-handlers-to-user-space-and-running-spidev/m-p/825617#M126951</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi All,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Recently I have tried to integrate spidev driver and bring-up of /dev/spidevx.x at&amp;nbsp; user-space. I want to share this&amp;nbsp;&amp;nbsp; experience on the blog so that it will be helpful to others.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;We have used imx6solo and Android OS running on that with the Linux kernel 3.0.35.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1. There are many links available on how to enable spidev driver at kernel and registering spidev @ board file (on particular bus no &amp;amp; chipsel.) so it is assumed that /dev/spidevx.x is available on your device.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;2. Using the SPI User Mode Device Driver&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;courtesy from&amp;nbsp; "Using SPI with Linux | armbedded.eu"&amp;nbsp; website. I have referred few points from this.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; There are two ways of of using the user mode spi device driver. You can call either the read/write functions or an ioctl(). With calling read/write you can only read or write at a time. I have taken a code from above mentioned website and built. yes I could able to write/read at a time using read/write APIs.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; But my requirement was full-duplex read and write, so we had to call the ioctl SPI_IOC_MESSAGE().&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Now I will brief my contribution in this.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;1.&lt;/STRONG&gt; sample code for spi dev test spidev_test.c is available in the kernel Documentation/spi folder itself or at many websites.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;2.&lt;/STRONG&gt; problem was how to build/compile it ?? Everywhere it is mentioned that "Cross-compile with cross-gcc -I/path/to/cross-kernel/include"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;3.&lt;/STRONG&gt; How to build it exactly for an ARM architecture, how to direct the compiler to include header files syntax was not mentioned on the net.&lt;/P&gt;&lt;P&gt;Everyone tried in their own way and only mentioned how to run the binary. but the problem was how to compile it?&amp;nbsp; I have tried for 2 days with different methods and finally got it worked. methods listed below&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.cd kernel_imx/Documentation/spi/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $arm-linux-androideabi-gcc -o spidev_test -I../../include -I../../arch/arm/include spidev_test.c&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spi_test_dev.c:15:20: error: stdint.h: No such file or directory&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spi_test_dev.c:16:20: error: unistd.h: No such file or directory ..... lot of erros.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2. made a project folder at external with following Android.mk&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LOCAL_PATH:= $(call my-dir)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; include $(CLEAR_VARS)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LOCAL_C_INCLUDES := \&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; kernel_imx/include \&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; kernel_imx/arch/arm/include&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LOCAL_SRC_FILES:= spi_test_dev.c&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LOCAL_MODULE := spi_test_dev&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LOCAL_MODULE_TAGS := eng&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; include $(BUILD_EXECUTABLE)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; with folder contents as&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Android.mk &amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spi_test_dev.c&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Got Lot of errors.&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In file included from bionic/libc/include/sys/types.h:37:0,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from bionic/libc/include/unistd.h:33,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from external/spi-test/spi_test_dev.c:16:&lt;BR /&gt;&lt;SPAN&gt;kernel_imx/include/linux/types.h:13:2: warning: #warning "Attempt to use kernel headers from user space, see &lt;/SPAN&gt;&lt;A _jive_internal="true" href="https://community.nxp.com/kernelnewbies.org/KernelHeaders" rel="nofollow" target="_blank"&gt;http://kernelnewbies.org/KernelHeaders&lt;/A&gt;&lt;SPAN&gt;" [-Wcpp]&lt;/SPAN&gt;&lt;BR /&gt;In file included from kernel_imx/arch/arm/include/asm/page.h:204:0,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from bionic/libc/include/limits.h:109,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from bionic/libc/include/signal.h:33,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from bionic/libc/include/sys/select.h:34,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from bionic/libc/include/unistd.h:34,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from external/spi-test/spi_test_dev.c:16:&lt;BR /&gt;kernel_imx/arch/arm/include/asm/memory.h:19:25: fatal error: mach/memory.h: No such file or directory&lt;BR /&gt;compilation terminated.&lt;BR /&gt;make: *** [out/target/product/sabresd_6dq/obj/EXECUTABLES/spi_test_dev_intermediates/spi_test_dev.o] Error 1&lt;BR /&gt;make: *** Waiting for unfinished jobs....&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;4.&lt;/STRONG&gt; method was follow Makefile given in kernel folder Documentation/spi/Makefile&lt;/P&gt;&lt;P&gt;-------------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;P&gt;# kbuild trick to avoid linker error. Can be omitted if a module is built.&lt;BR /&gt;obj- := dummy.o&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;# List of programs to build&lt;BR /&gt;hostprogs-y := spidev_test spidev_fdx&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;# Tell kbuild to always build the programs&lt;BR /&gt;always := $(hostprogs-y)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;HOSTCFLAGS_spidev_test.o += -I$(objtree)/usr/include&lt;BR /&gt;HOSTCFLAGS_spidev_fdx.o += -I$(objtree)/usr/include&lt;/P&gt;&lt;P&gt;-----------------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;So this also added as part of kernel build source and it got built without any errors. when I pushed the binary to device and tried to execute but got error not executable: magic 7F45&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;5.&lt;/STRONG&gt; Thought of one more method, will use google ndk kit for compiling and&amp;nbsp; used the following command&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Set cross-compiler for arm&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;$ export NDK=~/usr/android-ndk-r7&lt;BR /&gt;$ export NDK_TOOLCHAIN=${NDK}/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin&lt;BR /&gt;/arm-linux-androideabi-&lt;BR /&gt;$ export NDK_SYSROOT=${NDK}/platforms/android-9/arch-arm&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;In order to compile it for Android we need to set CC and CFLAGS. CC will point to the cross-compiler from the&lt;BR /&gt;NDK toolchain. CFLAGS will set sysroot to point to the NDK directory that has the header files and libraries.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;make CC=${NDK_TOOLCHAIN}gcc CFLAGS=--sysroot=${NDK_SYSROOT} spi_test_dev&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;spi_test_dev.c:23:30: error: linux/spi/spidev.h: No such file or directory&lt;BR /&gt;spi_test_dev.c: In function 'transfer':&lt;BR /&gt;spi_test_dev.c:52: error: variable 'tr' has initializer but incomplete type&lt;BR /&gt;spi_test_dev.c:53: error: unknown field 'tx_buf' specified in initializer&lt;BR /&gt;spi_test_dev.c:53: warning: excess elements in struct initializer&lt;BR /&gt;spi_test_dev.c:53: warning: (near initialization for 'tr')&lt;BR /&gt;spi_test_dev.c:54: error: unknown field 'rx_buf' specified in initializer&lt;BR /&gt;spi_test_dev.c:54: warning: excess elements in struct initializer&lt;BR /&gt;spi_test_dev.c:54: warning: (near initialization for 'tr')&lt;BR /&gt;spi_test_dev.c:55: error: unknown field 'len' specified in initializer&lt;BR /&gt;spi_test_dev.c:55: warning: excess elements in struct initializer&lt;BR /&gt;spi_test_dev.c:55: warning: (near initialization for 'tr')&lt;BR /&gt;spi_test_dev.c:56: error: unknown field 'delay_usecs' specified in initializer&lt;BR /&gt;spi_test_dev.c:56: warning: excess elements in struct initializer&lt;BR /&gt;spi_test_dev.c:56: warning: (near initialization for 'tr')&lt;BR /&gt;spi_test_dev.c:57: error: unknown field 'speed_hz' specified in initializer&lt;BR /&gt;spi_test_dev.c:57: warning: excess elements in struct initializer&lt;BR /&gt;spi_test_dev.c:57: warning: (near initialization for 'tr')&lt;BR /&gt;spi_test_dev.c:58: error: unknown field 'bits_per_word' specified in initializer&lt;BR /&gt;spi_test_dev.c:58: warning: excess elements in struct initializer&lt;BR /&gt;spi_test_dev.c:58: warning: (near initialization for 'tr')&lt;BR /&gt;spi_test_dev.c:52: error: storage size of 'tr' isn't known&lt;BR /&gt;spi_test_dev.c: In function 'parse_opts':&lt;BR /&gt;spi_test_dev.c:126: error: 'SPI_LOOP' undeclared (first use in this function)&lt;BR /&gt;spi_test_dev.c:126: error: (Each undeclared identifier is reported only once&lt;BR /&gt;spi_test_dev.c:126: error: for each function it appears in.)&lt;BR /&gt;spi_test_dev.c:129: error: 'SPI_CPHA' undeclared (first use in this function)&lt;BR /&gt;spi_test_dev.c:132: error: 'SPI_CPOL' undeclared (first use in this function)&lt;BR /&gt;spi_test_dev.c:135: error: 'SPI_LSB_FIRST' undeclared (first use in this function)&lt;BR /&gt;spi_test_dev.c:138: error: 'SPI_CS_HIGH' undeclared (first use in this function)&lt;BR /&gt;spi_test_dev.c:141: error: 'SPI_3WIRE' undeclared (first use in this function)&lt;BR /&gt;spi_test_dev.c: In function 'main':&lt;BR /&gt;spi_test_dev.c:164: error: 'SPI_IOC_WR_MODE' undeclared (first use in this function)&lt;BR /&gt;spi_test_dev.c:168: error: 'SPI_IOC_RD_MODE' undeclared (first use in this function)&lt;BR /&gt;spi_test_dev.c:175: error: 'SPI_IOC_WR_BITS_PER_WORD' undeclared (first use in this function)&lt;BR /&gt;spi_test_dev.c:179: error: 'SPI_IOC_RD_BITS_PER_WORD' undeclared (first use in this function)&lt;BR /&gt;spi_test_dev.c:186: error: 'SPI_IOC_WR_MAX_SPEED_HZ' undeclared (first use in this function)&lt;BR /&gt;spi_test_dev.c:190: error: 'SPI_&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;STRONG&gt;6.&lt;/STRONG&gt; &lt;STRONG&gt;So finally thought in a very vague method, Simply copy pasted spidev.h file from kernel source to --&amp;gt;&amp;gt; android-ndk-r7/platforms/android-4/arch-arm/usr/include/linux/spi/ folder&lt;/STRONG&gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Set cross-compiler for arm&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;$ export NDK=~/usr/android-ndk-r7&lt;BR /&gt;$ export NDK_TOOLCHAIN=${NDK}/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin&lt;BR /&gt;/arm-linux-androideabi-&lt;BR /&gt;$ export NDK_SYSROOT=${NDK}/platforms/android-4/arch-arm&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;In order to compile it for Android we need to set CC and CFLAGS. CC will point to the cross-compiler from the&lt;BR /&gt;NDK toolchain. CFLAGS will set sysroot to point to the NDK directory that has the header files and libraries.&lt;/P&gt;&lt;P&gt;make CC=${NDK_TOOLCHAIN}gcc CFLAGS=--sysroot=${NDK_SYSROOT} spidev_test&lt;BR /&gt;android-ndk-r7/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc --sysroot=/android-ndk-r7/platforms/android-4/arch-arm/&amp;nbsp;&amp;nbsp;&amp;nbsp; spidev_test.c&amp;nbsp;&amp;nbsp; -o spidev_test (Binary)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;It Got built without any errors. pushed the binary&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;root@sabresd_6dq:/ # spi_test_dev&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [/dev/spidev0.0 hardcoded]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;spidev spi0.0: spi_imx_setup: mode 3, 8 bpw, 1000000 hz&lt;BR /&gt;spidev spi0.0: setup mode 3, 8 bits/w, 1000000 Hz max --&amp;gt; 0&lt;BR /&gt;spidev spi0.0: spi mode 03&lt;BR /&gt;spidev spi0.0: spi_imx_setup: mode 3, 8 bpw, 1000000 hz&lt;BR /&gt;spidev spi0.0: setup mode 3, 8 bits/w, 1000000 Hz max --&amp;gt; 0&lt;BR /&gt;spidev spi0.0: 8 bits per word&lt;BR /&gt;spidev spi0.0: spi_imx_setup: mode 3, 8 bpw, 1000000 hz&lt;BR /&gt;spidev spi0.0: setup mode 3, 8 bits/w, 1000000 Hz max --&amp;gt; 0&lt;BR /&gt;spidev spi0.0: 1000000 Hz (max)&lt;BR /&gt;spi mode: 3&lt;BR /&gt;bits per word: 8&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;7F FF FF FF FF FF&lt;BR /&gt;A0 00 00 00 00 4A&lt;BR /&gt;FF FF FF FF FF FF&lt;BR /&gt;FF FF FF FF FF FF&lt;BR /&gt;FF FF FF FF FF FF&lt;BR /&gt;EF 56 DF 77 DD 56&lt;BR /&gt;F8 2A&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;Finaly SPIDEV Loopback application ran successfully and could able to write/read the data.!!!!!!!!!!!!!!&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Comments are well received if I have done any mistakes in the above non-working cases or any other methods are available.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 18 Jul 2018 11:48:30 GMT</pubDate>
    <dc:creator>prasannakulkarni</dc:creator>
    <dc:date>2018-07-18T11:48:30Z</dc:date>
    <item>
      <title>Android : spidev ioctl handlers to user space and running spidev_test app on imx6.</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/Android-spidev-ioctl-handlers-to-user-space-and-running-spidev/m-p/825617#M126951</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi All,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Recently I have tried to integrate spidev driver and bring-up of /dev/spidevx.x at&amp;nbsp; user-space. I want to share this&amp;nbsp;&amp;nbsp; experience on the blog so that it will be helpful to others.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;We have used imx6solo and Android OS running on that with the Linux kernel 3.0.35.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1. There are many links available on how to enable spidev driver at kernel and registering spidev @ board file (on particular bus no &amp;amp; chipsel.) so it is assumed that /dev/spidevx.x is available on your device.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;2. Using the SPI User Mode Device Driver&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;courtesy from&amp;nbsp; "Using SPI with Linux | armbedded.eu"&amp;nbsp; website. I have referred few points from this.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; There are two ways of of using the user mode spi device driver. You can call either the read/write functions or an ioctl(). With calling read/write you can only read or write at a time. I have taken a code from above mentioned website and built. yes I could able to write/read at a time using read/write APIs.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; But my requirement was full-duplex read and write, so we had to call the ioctl SPI_IOC_MESSAGE().&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Now I will brief my contribution in this.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;1.&lt;/STRONG&gt; sample code for spi dev test spidev_test.c is available in the kernel Documentation/spi folder itself or at many websites.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;2.&lt;/STRONG&gt; problem was how to build/compile it ?? Everywhere it is mentioned that "Cross-compile with cross-gcc -I/path/to/cross-kernel/include"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;3.&lt;/STRONG&gt; How to build it exactly for an ARM architecture, how to direct the compiler to include header files syntax was not mentioned on the net.&lt;/P&gt;&lt;P&gt;Everyone tried in their own way and only mentioned how to run the binary. but the problem was how to compile it?&amp;nbsp; I have tried for 2 days with different methods and finally got it worked. methods listed below&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.cd kernel_imx/Documentation/spi/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $arm-linux-androideabi-gcc -o spidev_test -I../../include -I../../arch/arm/include spidev_test.c&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spi_test_dev.c:15:20: error: stdint.h: No such file or directory&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spi_test_dev.c:16:20: error: unistd.h: No such file or directory ..... lot of erros.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2. made a project folder at external with following Android.mk&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LOCAL_PATH:= $(call my-dir)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; include $(CLEAR_VARS)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LOCAL_C_INCLUDES := \&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; kernel_imx/include \&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; kernel_imx/arch/arm/include&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LOCAL_SRC_FILES:= spi_test_dev.c&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LOCAL_MODULE := spi_test_dev&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LOCAL_MODULE_TAGS := eng&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; include $(BUILD_EXECUTABLE)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; with folder contents as&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Android.mk &amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spi_test_dev.c&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Got Lot of errors.&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In file included from bionic/libc/include/sys/types.h:37:0,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from bionic/libc/include/unistd.h:33,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from external/spi-test/spi_test_dev.c:16:&lt;BR /&gt;&lt;SPAN&gt;kernel_imx/include/linux/types.h:13:2: warning: #warning "Attempt to use kernel headers from user space, see &lt;/SPAN&gt;&lt;A _jive_internal="true" href="https://community.nxp.com/kernelnewbies.org/KernelHeaders" rel="nofollow" target="_blank"&gt;http://kernelnewbies.org/KernelHeaders&lt;/A&gt;&lt;SPAN&gt;" [-Wcpp]&lt;/SPAN&gt;&lt;BR /&gt;In file included from kernel_imx/arch/arm/include/asm/page.h:204:0,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from bionic/libc/include/limits.h:109,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from bionic/libc/include/signal.h:33,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from bionic/libc/include/sys/select.h:34,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from bionic/libc/include/unistd.h:34,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from external/spi-test/spi_test_dev.c:16:&lt;BR /&gt;kernel_imx/arch/arm/include/asm/memory.h:19:25: fatal error: mach/memory.h: No such file or directory&lt;BR /&gt;compilation terminated.&lt;BR /&gt;make: *** [out/target/product/sabresd_6dq/obj/EXECUTABLES/spi_test_dev_intermediates/spi_test_dev.o] Error 1&lt;BR /&gt;make: *** Waiting for unfinished jobs....&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;4.&lt;/STRONG&gt; method was follow Makefile given in kernel folder Documentation/spi/Makefile&lt;/P&gt;&lt;P&gt;-------------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;P&gt;# kbuild trick to avoid linker error. Can be omitted if a module is built.&lt;BR /&gt;obj- := dummy.o&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;# List of programs to build&lt;BR /&gt;hostprogs-y := spidev_test spidev_fdx&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;# Tell kbuild to always build the programs&lt;BR /&gt;always := $(hostprogs-y)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;HOSTCFLAGS_spidev_test.o += -I$(objtree)/usr/include&lt;BR /&gt;HOSTCFLAGS_spidev_fdx.o += -I$(objtree)/usr/include&lt;/P&gt;&lt;P&gt;-----------------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;So this also added as part of kernel build source and it got built without any errors. when I pushed the binary to device and tried to execute but got error not executable: magic 7F45&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;5.&lt;/STRONG&gt; Thought of one more method, will use google ndk kit for compiling and&amp;nbsp; used the following command&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Set cross-compiler for arm&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;$ export NDK=~/usr/android-ndk-r7&lt;BR /&gt;$ export NDK_TOOLCHAIN=${NDK}/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin&lt;BR /&gt;/arm-linux-androideabi-&lt;BR /&gt;$ export NDK_SYSROOT=${NDK}/platforms/android-9/arch-arm&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;In order to compile it for Android we need to set CC and CFLAGS. CC will point to the cross-compiler from the&lt;BR /&gt;NDK toolchain. CFLAGS will set sysroot to point to the NDK directory that has the header files and libraries.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;make CC=${NDK_TOOLCHAIN}gcc CFLAGS=--sysroot=${NDK_SYSROOT} spi_test_dev&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;spi_test_dev.c:23:30: error: linux/spi/spidev.h: No such file or directory&lt;BR /&gt;spi_test_dev.c: In function 'transfer':&lt;BR /&gt;spi_test_dev.c:52: error: variable 'tr' has initializer but incomplete type&lt;BR /&gt;spi_test_dev.c:53: error: unknown field 'tx_buf' specified in initializer&lt;BR /&gt;spi_test_dev.c:53: warning: excess elements in struct initializer&lt;BR /&gt;spi_test_dev.c:53: warning: (near initialization for 'tr')&lt;BR /&gt;spi_test_dev.c:54: error: unknown field 'rx_buf' specified in initializer&lt;BR /&gt;spi_test_dev.c:54: warning: excess elements in struct initializer&lt;BR /&gt;spi_test_dev.c:54: warning: (near initialization for 'tr')&lt;BR /&gt;spi_test_dev.c:55: error: unknown field 'len' specified in initializer&lt;BR /&gt;spi_test_dev.c:55: warning: excess elements in struct initializer&lt;BR /&gt;spi_test_dev.c:55: warning: (near initialization for 'tr')&lt;BR /&gt;spi_test_dev.c:56: error: unknown field 'delay_usecs' specified in initializer&lt;BR /&gt;spi_test_dev.c:56: warning: excess elements in struct initializer&lt;BR /&gt;spi_test_dev.c:56: warning: (near initialization for 'tr')&lt;BR /&gt;spi_test_dev.c:57: error: unknown field 'speed_hz' specified in initializer&lt;BR /&gt;spi_test_dev.c:57: warning: excess elements in struct initializer&lt;BR /&gt;spi_test_dev.c:57: warning: (near initialization for 'tr')&lt;BR /&gt;spi_test_dev.c:58: error: unknown field 'bits_per_word' specified in initializer&lt;BR /&gt;spi_test_dev.c:58: warning: excess elements in struct initializer&lt;BR /&gt;spi_test_dev.c:58: warning: (near initialization for 'tr')&lt;BR /&gt;spi_test_dev.c:52: error: storage size of 'tr' isn't known&lt;BR /&gt;spi_test_dev.c: In function 'parse_opts':&lt;BR /&gt;spi_test_dev.c:126: error: 'SPI_LOOP' undeclared (first use in this function)&lt;BR /&gt;spi_test_dev.c:126: error: (Each undeclared identifier is reported only once&lt;BR /&gt;spi_test_dev.c:126: error: for each function it appears in.)&lt;BR /&gt;spi_test_dev.c:129: error: 'SPI_CPHA' undeclared (first use in this function)&lt;BR /&gt;spi_test_dev.c:132: error: 'SPI_CPOL' undeclared (first use in this function)&lt;BR /&gt;spi_test_dev.c:135: error: 'SPI_LSB_FIRST' undeclared (first use in this function)&lt;BR /&gt;spi_test_dev.c:138: error: 'SPI_CS_HIGH' undeclared (first use in this function)&lt;BR /&gt;spi_test_dev.c:141: error: 'SPI_3WIRE' undeclared (first use in this function)&lt;BR /&gt;spi_test_dev.c: In function 'main':&lt;BR /&gt;spi_test_dev.c:164: error: 'SPI_IOC_WR_MODE' undeclared (first use in this function)&lt;BR /&gt;spi_test_dev.c:168: error: 'SPI_IOC_RD_MODE' undeclared (first use in this function)&lt;BR /&gt;spi_test_dev.c:175: error: 'SPI_IOC_WR_BITS_PER_WORD' undeclared (first use in this function)&lt;BR /&gt;spi_test_dev.c:179: error: 'SPI_IOC_RD_BITS_PER_WORD' undeclared (first use in this function)&lt;BR /&gt;spi_test_dev.c:186: error: 'SPI_IOC_WR_MAX_SPEED_HZ' undeclared (first use in this function)&lt;BR /&gt;spi_test_dev.c:190: error: 'SPI_&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;STRONG&gt;6.&lt;/STRONG&gt; &lt;STRONG&gt;So finally thought in a very vague method, Simply copy pasted spidev.h file from kernel source to --&amp;gt;&amp;gt; android-ndk-r7/platforms/android-4/arch-arm/usr/include/linux/spi/ folder&lt;/STRONG&gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Set cross-compiler for arm&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;$ export NDK=~/usr/android-ndk-r7&lt;BR /&gt;$ export NDK_TOOLCHAIN=${NDK}/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin&lt;BR /&gt;/arm-linux-androideabi-&lt;BR /&gt;$ export NDK_SYSROOT=${NDK}/platforms/android-4/arch-arm&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;In order to compile it for Android we need to set CC and CFLAGS. CC will point to the cross-compiler from the&lt;BR /&gt;NDK toolchain. CFLAGS will set sysroot to point to the NDK directory that has the header files and libraries.&lt;/P&gt;&lt;P&gt;make CC=${NDK_TOOLCHAIN}gcc CFLAGS=--sysroot=${NDK_SYSROOT} spidev_test&lt;BR /&gt;android-ndk-r7/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc --sysroot=/android-ndk-r7/platforms/android-4/arch-arm/&amp;nbsp;&amp;nbsp;&amp;nbsp; spidev_test.c&amp;nbsp;&amp;nbsp; -o spidev_test (Binary)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;It Got built without any errors. pushed the binary&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;root@sabresd_6dq:/ # spi_test_dev&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [/dev/spidev0.0 hardcoded]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;spidev spi0.0: spi_imx_setup: mode 3, 8 bpw, 1000000 hz&lt;BR /&gt;spidev spi0.0: setup mode 3, 8 bits/w, 1000000 Hz max --&amp;gt; 0&lt;BR /&gt;spidev spi0.0: spi mode 03&lt;BR /&gt;spidev spi0.0: spi_imx_setup: mode 3, 8 bpw, 1000000 hz&lt;BR /&gt;spidev spi0.0: setup mode 3, 8 bits/w, 1000000 Hz max --&amp;gt; 0&lt;BR /&gt;spidev spi0.0: 8 bits per word&lt;BR /&gt;spidev spi0.0: spi_imx_setup: mode 3, 8 bpw, 1000000 hz&lt;BR /&gt;spidev spi0.0: setup mode 3, 8 bits/w, 1000000 Hz max --&amp;gt; 0&lt;BR /&gt;spidev spi0.0: 1000000 Hz (max)&lt;BR /&gt;spi mode: 3&lt;BR /&gt;bits per word: 8&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;7F FF FF FF FF FF&lt;BR /&gt;A0 00 00 00 00 4A&lt;BR /&gt;FF FF FF FF FF FF&lt;BR /&gt;FF FF FF FF FF FF&lt;BR /&gt;FF FF FF FF FF FF&lt;BR /&gt;EF 56 DF 77 DD 56&lt;BR /&gt;F8 2A&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;Finaly SPIDEV Loopback application ran successfully and could able to write/read the data.!!!!!!!!!!!!!!&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Comments are well received if I have done any mistakes in the above non-working cases or any other methods are available.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 18 Jul 2018 11:48:30 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/Android-spidev-ioctl-handlers-to-user-space-and-running-spidev/m-p/825617#M126951</guid>
      <dc:creator>prasannakulkarni</dc:creator>
      <dc:date>2018-07-18T11:48:30Z</dc:date>
    </item>
    <item>
      <title>Re: Bringing spidev ioctl handlers to user space and running spidev_test app on imx6.</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/Android-spidev-ioctl-handlers-to-user-space-and-running-spidev/m-p/825618#M126952</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Prassana,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;thank you so much for sharing your experience and for the time you took to wrote it. We really appreciate it.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I would also like to share here other threads that have been very useful regarding SPIDEV:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;A href="https://community.nxp.com/thread/461426"&gt;How to check if SPI is working?&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;A href="https://community.nxp.com/docs/DOC-335264"&gt;https://community.nxp.com/docs/DOC-335264&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Carlos&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 19 Jul 2018 18:06:50 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/Android-spidev-ioctl-handlers-to-user-space-and-running-spidev/m-p/825618#M126952</guid>
      <dc:creator>Carlos_Musich</dc:creator>
      <dc:date>2018-07-19T18:06:50Z</dc:date>
    </item>
    <item>
      <title>Re: Bringing spidev ioctl handlers to user space and running spidev_test app on imx6.</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/Android-spidev-ioctl-handlers-to-user-space-and-running-spidev/m-p/825619#M126953</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks for your links&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 24 Jul 2018 08:55:03 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/Android-spidev-ioctl-handlers-to-user-space-and-running-spidev/m-p/825619#M126953</guid>
      <dc:creator>prasannakulkarni</dc:creator>
      <dc:date>2018-07-24T08:55:03Z</dc:date>
    </item>
  </channel>
</rss>

