Android——4.2 - 3G移植之路之libusb (一)
前段時間往smart TV上移植3G模組,發現移植3G的百度Google一搜,基本全是linux開發板上的,
我在這裡記錄一下 我移植 的全過程,讓他人少走彎路,有什麼建議或者不對的歡迎留言~
目前的3G模組都是usb介面的,插在android系統中都會預設識別為usb storage 裝置,會嘗試通過Vold 掛載為usb 存放裝置!
所以必須要把裝置類型轉掉,轉換成Modem類型裝置,只有這樣才能實現主機與模組之間的正常通訊,這裡就需要一個轉換驅動了,
只有通過模式轉換才算是正確的識別到了3G裝置, 這裡先解析 usb-modeswitch 所需要的 API 的移植。
二.編譯libusb/libusb-compat
從上面的網址上面可以下載最新的 libusb-1.0.9 和 libusb-compat-0.1.4 (對久版本的相容),
解壓到我們android源碼的 external 中,這兩個lib 是為後面的usb_modeswitch服務的動態庫,可以直接在linux上進行交叉編譯,最後也能得到libusb.so libusb-compat.so,編譯方法網上有很多!
我想竟然是往android平台移植,那麼我就放到external中用android的編譯機制去編譯!
往兩個檔案夾下面添加Android.mk
先看libusb的Android.mk:
#jscese add this android.mk to compile libusb.so for usb_modelswitch 140819LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)common_src :=libusb/core.c libusb/descriptor.c libusb/io.c libusb/sync.c libusb/os/linux_usbfs.c common_include :=$(LOCAL_PATH)/ $(LOCAL_PATH)/libusb $(LOCAL_PATH)/libusb/osLOCAL_MODULE := libusbLOCAL_SRC_FILES :=$(common_src)LOCAL_C_INCLUDES +=$(common_include)include $(BUILD_SHARED_LIBRARY)
可以看到編譯的.c源檔案只要5個就OK 了,我們下載的libusb包裡面有的不需要,需要進行一些修改和配置,
我的libusb源碼下載:http://download.csdn.net/detail/jscese/7868431
libusb-compat的Android.mk:
#jscese add this android.mk to compile libusb-compat.so for usb_modelswitch 140819LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LIBUSB_DIR :=external/libusbcommon_src :=libusb/core.c common_include :=$(LOCAL_PATH)/ $(LOCAL_PATH)/libusb $(LIBUSB_DIR)/libusbLOCAL_MODULE := libusb-compatLOCAL_SRC_FILES :=$(common_src)LOCAL_C_INCLUDES +=$(common_include)LOCAL_SHARED_LIBRARIES := libusbinclude $(BUILD_SHARED_LIBRARY)
可以看到libusb-compat 引入libusb
我的libusb-compat源碼下載:http://download.csdn.net/detail/jscese/7868445
可在源碼下 通過:
mmm external/libusb
單獨編譯對應的.so
這裡先記錄libusb的移植,一步一步來。。