레이블이 t-login인 게시물을 표시합니다. 모든 게시물 표시
레이블이 t-login인 게시물을 표시합니다. 모든 게시물 표시

2011년 10월 29일 토요일

android(Gingerbread)에서 USB 3G Modem 사용하기

android 2.2(froyo)에 HSDPA 3G Modem을 붙여 본 적있습니다.
제 blog에 post한 적이 있습니다.

이번에 gingerbrea(2.3)에 올리는데 성공은 했는데 삽질을 많이 했습니다.
아직 해결 못한 문제도 있고...

ril-daemon이 pppd가 동작하기 전에 특정 동작을 하면 SKTelecom이나 안테나 상태 등을 업데이트 할 수 있습니다. 그런데 이 상태가 되면 pppd로 연결이 실패가 됩니다.

그래서 부팅하고 usb modem이 ril-daemon의 어느 시점 보다 pppd로 접속을 먼저해야 하더라구요.

아래는 참고한 사이트...

그리고 성공 인증샷...

2010년 8월 18일 수요일

odroid에 T-Login(LM-629HUL) 사용하기

이전에 HSDPA USB Modem(LM-629HUL )을 linux에서 사용하기 위한 내용을 posting 하였습니다.
linux에 먼저 작업한 이유는 odroid-t에 t-login을 사용하기 위해서 입니다.

그래서 이번 내용은 이전에 올렸던 linux 작업했던 내용을 이어서 android에 HSDPA USB Modem porting 방법을 posting합니다.

x86 usb-modeswitch는 libusb-0.1 버전을 사용하였습니다.
하지만 libusb android를 검색하면 libusb-1.0 버전이 있습니다.
그리고 libusb-1.0에 libusb-0.1버전을 사용할 수 있는 libusb-compat가 있습니다.
둘다 android용으로 library가 존재 합니다.
하지만 external에 넣고 빌드 하여 libusb.so와 libusb-compat.so를 만들어지만 dynamic link가 되지 않아서 configure에 --enable-static을 둘다 주고 usb_modeswitch도 static으로 만듭니다.
usbutils 역시 동일하게 static으로 만들면 lsusb를 통하여 usb mode switch가 되었는지 확인이 가능합니다.

여기서부터 추가
external 밑에 아래 세 폴더를 복사 합니다.
monaka-libusb-android-b35de21
monaka-libusb-compat-android-85dc44d
usb-modeswitch-1.1.3

monaka는 Android.mk가 있습니다.

usb-modeswitch-1.1.3에 Android.mk는 아래와 같습니다.

1 ifeq ($(TARGET_ARCH),arm)
2
3 LOCAL_PATH:= $(call my-dir)
4 include $(CLEAR_VARS)
5
6 LOCAL_SRC_FILES:= \
7 usb_modeswitch.c
8
9 LOCAL_SHARED_LIBRARIES := \
10 libusb-compat libusb
11
12 LOCAL_C_INCLUDES := \
13 $(LOCAL_PATH)/include
14
15 LOCAL_CFLAGS := \
16 -Iexternal/monaka-libusb-compat-android-85dc44d/libusb -pthread -rt
17
18 LOCAL_MODULE:= usb_modeswitch
19
20 include $(BUILD_EXECUTABLE)
21
22 endif

이렇게 추가하면 odroidt-img/system/bin/usb_modeswitch와 odroidt-img/system/lib/libusb.so, libusb-compat.so가 생깁니다.

그리고 추가로 external/monaka-libusb-android-b35de21/examples을 컴파일 하면 lsusb가 생깁니다.
Android.mk는 아래와 같습니다.

1 ifeq ($(TARGET_ARCH),arm)
2
3 LOCAL_PATH:= $(call my-dir)
4
5 include $(CLEAR_VARS)
6
7 LOCAL_SRC_FILES:= \
8 lsusb.c
9
10 LOCAL_C_INCLUDES += $(LOCAL_PATH)/android \
11 external/monaka-libusb-android-b35de21
12
13 LOCAL_SHARED_LIBRARIES := \
14 libusb
15
16 LOCAL_CFLAGS := \
17 -pthread -rt
18
19 LOCAL_MODULE:= lsusb
20
21 include $(BUILD_EXECUTABLE)
22
23 endif

이렇게 위에서 언급한 static문제는 해결 되었습니다.
추가 끝

다음 단계로 커널에 usb file system이 올라 가야 합니다. kernel에 usb file system을 추가 하시고
odroid-t는 ramdisk를 사용함으로 vendor/sec/android/conf/init_ramdisk.rc 파일에 usbfs를 mount하도록 추가 합니다.

mount usbfs none /proc/bus/usb

다음 부터는 아래 주소에 있는 x86 emulator에서 HSDPA를 연결한 내용을 참고하였습니다.

내용을 간략하게 설명하면 host linux에 modem을 연결하면 ttyUSB가 생성되고 여기서 command port인 ttyUSB3을 android의 ttyS1으로 연결한다는 내용입니다.

vendor/sec/odroidt/system.prop 파일을 아래와 같이 수정 합니다.

1 #
2 # system.prop for odroidt
3 #
4
5 rild.libpath=/system/lib/libreference-ril.so
6 #codewalker
7 #rild.libargs=-d /dev/ttyS0
8 rild.libargs=-d /dev/ttyUSB3
9 ro.sf.lcd_density=240

다음에 linux atdt sk라고 검색하면 HSDPA를 PPP에서 동작 하도록 하는 내용이 있습니다.
이 부분은 x86에서 가져온 chat이 있다면 desktop과 동일하게 처리 되는 부분입니다.

아래 사이트에 가면 ppp에 관한 내용이 있고 HSDAP USB modem에 AT command로 connection하는 내용이 있습니다.


usb_modeswitch를 통해 usb modem을 storage card에서 modem으로 변경 해줍니다.
insmod /modules/usbserial.ko 'vendor=0x1d74 product=0x00c9'으로 ttyUSB 노드를 생성해 줍니다.
여기서 따옴표를 주지 않으면 두번째 parameter product인자가 제대로 넘어가지 않습니다.
ppp call gprs를 호출 하면 t-login 모뎀이 녹색으로 바뀌면서 동작합니다.

지금은 간략하게 작성하였고 차후에 추가 보강하겠습니다.