s5pv210_gpio驱动及其在android2.3.1下jni调用
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                s5pv210_gpio驱动及其在android2.3.1下jni调用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                
                            
                            
                            1、編寫GPIO驅動并編譯為模塊
完全按照linux驅動的編寫方式,封裝為標準的linux字符驅動
 
2、使用C語言編寫測試程序
編寫、編譯一個操作led的程序進行驅動測試
以上兩步可參考《s5pv210-gpio》:
s5pv210-gpio.c
s5pv210-gpio.h
s5pv210-gpio_test.c
其編譯必須在linux環境下完成,交叉編譯測試程序時使用靜態編譯
 
3、在eclipose中設計java接口
在eclipose中新建一個android工程用于設計底層jni的操作接口(windows、linux均可)
可參考《s5pv210-gpio》:
s5pv210-gpio\src\com\edu\gpio\s5pv210_gpio_options.java
 
4、由javah 生成.h文件
我們最終的目的是要實現s5pv210_gpio_options.java中設計的接口
 
由jdk自帶的javah組件生成s5pv210_gpio_options.h文件
打開終端,進入剛才編譯的Java程序的目標文件夾(如果是在Eclipse中,則進入工程的bins\classes目錄),執行下面的命令:
javah com.edu.gpio.s5pv210_gpio_options
其中,com.edu.gpio.是package的名字,s5pv210_gpio_options是聲明了native接口的Java類。
之后,將會生成一個形如com_edu_gpio_s5pv210_gpio_options.h的頭文件。
此頭文件中便聲明了可以被Java調用的C/C++的函數形式。
 
5、由.h文件設計.c文件接口
自己根據s5pv210_gpio_options.h構建相應的.c文件
復制一個跟s5pv210_gpio_options.h同名的.c文件,將里面的聲明全部改為對應的實現
可參考:s5pv210_gpio_options.c
注意java中數據類型與c語言數據類型之間的轉換規則
設計.c文件的實現時可參考第2步的測試程序設計
 
7、編寫makefile文件
C程序編寫完畢后,在文件夾中創建一個名為Android.mk的文件,文件名不能修改,內容如下:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:=com_sapp_gpio.c
LOCAL_C_INCLUDES := $(JNI_H_INCLUDE)
LOCAL_MODULE := libgpio
LOCAL_SHARED_LIBRARIES := libutils
LOCAL_MODULE_TAGS := eng
LOCAL_PRELINK_MODULE := false
include $(BUILD_SHARED_LIBRARY)?
 
其中,LOCAL_SRC_FILES后面的文件是我們的C語言的源程序文件名
LOCAL_MODULE后面的名字是我們將來生成的目標文件名
include $(BUILD_SHARED_LIBRARY)表示將來要生成動態鏈接庫。
 
OK,寫好之后,回到Android源碼的根目錄,執行:
在android源碼目錄的external下建立libs5pv210-gpio文件夾
將com_edu_gpio_s5pv210_gpio_options.c
com_edu_gpio_s5pv210_gpio_options.h
Android.mk
libs5pv210-gpio.so
拷到此目錄下
 
回到android源碼根目錄,執行以下命令make libgpio
其中,libgpio是我們的Android.mk文件中LOCAL_MODULE的名字。
等待編譯結束,在out/target/product/generic/system/lib/libgpio.so目錄下即可找到編譯好的文件。
 
 
 
 
 
相關代碼可在此處下載點擊打開鏈接:http://download.csdn.net/detail/topicdev/5266853
                        
                        
                        完全按照linux驅動的編寫方式,封裝為標準的linux字符驅動
2、使用C語言編寫測試程序
編寫、編譯一個操作led的程序進行驅動測試
以上兩步可參考《s5pv210-gpio》:
s5pv210-gpio.c
s5pv210-gpio.h
s5pv210-gpio_test.c
其編譯必須在linux環境下完成,交叉編譯測試程序時使用靜態編譯
3、在eclipose中設計java接口
在eclipose中新建一個android工程用于設計底層jni的操作接口(windows、linux均可)
可參考《s5pv210-gpio》:
s5pv210-gpio\src\com\edu\gpio\s5pv210_gpio_options.java
4、由javah 生成.h文件
我們最終的目的是要實現s5pv210_gpio_options.java中設計的接口
由jdk自帶的javah組件生成s5pv210_gpio_options.h文件
打開終端,進入剛才編譯的Java程序的目標文件夾(如果是在Eclipse中,則進入工程的bins\classes目錄),執行下面的命令:
javah com.edu.gpio.s5pv210_gpio_options
其中,com.edu.gpio.是package的名字,s5pv210_gpio_options是聲明了native接口的Java類。
之后,將會生成一個形如com_edu_gpio_s5pv210_gpio_options.h的頭文件。
此頭文件中便聲明了可以被Java調用的C/C++的函數形式。
5、由.h文件設計.c文件接口
自己根據s5pv210_gpio_options.h構建相應的.c文件
復制一個跟s5pv210_gpio_options.h同名的.c文件,將里面的聲明全部改為對應的實現
可參考:s5pv210_gpio_options.c
注意java中數據類型與c語言數據類型之間的轉換規則
設計.c文件的實現時可參考第2步的測試程序設計
7、編寫makefile文件
C程序編寫完畢后,在文件夾中創建一個名為Android.mk的文件,文件名不能修改,內容如下:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:=com_sapp_gpio.c
LOCAL_C_INCLUDES := $(JNI_H_INCLUDE)
LOCAL_MODULE := libgpio
LOCAL_SHARED_LIBRARIES := libutils
LOCAL_MODULE_TAGS := eng
LOCAL_PRELINK_MODULE := false
include $(BUILD_SHARED_LIBRARY)?
其中,LOCAL_SRC_FILES后面的文件是我們的C語言的源程序文件名
LOCAL_MODULE后面的名字是我們將來生成的目標文件名
include $(BUILD_SHARED_LIBRARY)表示將來要生成動態鏈接庫。
OK,寫好之后,回到Android源碼的根目錄,執行:
在android源碼目錄的external下建立libs5pv210-gpio文件夾
將com_edu_gpio_s5pv210_gpio_options.c
com_edu_gpio_s5pv210_gpio_options.h
Android.mk
libs5pv210-gpio.so
拷到此目錄下
回到android源碼根目錄,執行以下命令make libgpio
其中,libgpio是我們的Android.mk文件中LOCAL_MODULE的名字。
等待編譯結束,在out/target/product/generic/system/lib/libgpio.so目錄下即可找到編譯好的文件。
8、將動態庫拷入根文件系統/system/lib文件
 
 
相關代碼可在此處下載點擊打開鏈接:http://download.csdn.net/detail/topicdev/5266853
總結
以上是生活随笔為你收集整理的s5pv210_gpio驱动及其在android2.3.1下jni调用的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: SLAM中边缘化与一致性
- 下一篇: 如何知道股票里面有庄
