[Android6.0] [RK3399] PCIe 인터페이스 4G 모듈 EC20 디버그 레코드

Platform: RK3399 OS: Android 6.0 Kernel: 4.4 Version: v2017.04 4G Module: EC20-CE
  • 의 기본 개념
  • USB 부분 기능 커넥터
  • APN

  • 2구동이식
  • USB Driver
  • GobiNet Driver 또는 QMI WWAN
  • PPP 다이얼 업 구성
  • 트리플 RIL 마이그레이션
  • RIL Driver Integration
  • Android Log 캡처
  • RIL 마이그레이션 문제 요약
  • 코드에 대량의 error 출현
  • 모듈 충돌 보고
  • RIL이 효력이 발생하지 않아 RIL 부분의 이식을 마친 후 4G 모듈이 작용하지 않은 것으로 보인다
  • initrc의 수정이 적용되지 않았습니다
  • initrc를 수정하지 않고 시스템prop을 수정하는 방식으로lib 라이브러리
  • 를 지정합니다



    기본 개념


    1. USB 부분 기능 커넥터


    Quectel 3G/4G 모듈(UMTS/HSPA/LTE)의 USB 부분에는 여러 가지 서로 다른 기능 인터페이스가 포함되어 있다.
    USB Serial tty USB0 대표 DM tty USB1 대표 GPS NMEA (GPS 내비게이션 장치 통일 RTCM 표준 프로토콜) 정보 출력 tty USB2 대표 AT commands tty USB3 대표 PP 연결
    GobiNet은 GobiNet 드라이브를 이식한 후 네트워크 장치와 QMI 채널을 생성합니다.네트워크 장치는 ethX(코어 버전 2.6.39 이전에는 usbX라고 불렀음)라고 하고 QMI 채널은/dev/qcqmiX라고 하는 노드이다.네트워크 장치는 데이터 전송을 하고 QMI 채널은 QMI 정보의 상호작용을 한다.Qualcomm Gobi is a family of embedded mobile broadband modem products by Qualcomm. Gobi technology was designed to allow for any product with the embedded solution to connect to the internet anywhere a wireless carrier provides data coverage. One of the more notable products that contain a Gobi modem is the iPhone 4 for Verizon, which contains a MDM6600™, however it does not take advantage of the support for HSPA+
    QMI WWAN이 QMI WWAN 드라이브를 이식하면 드라이브는 네트워크 장치와 QMI 채널을 생성합니다. 네트워크 장치는 wwanX라고 하고 QMI 채널은/dev/cdc-wdmX라고 합니다.네트워크 장치는 데이터 전송을 하고 QMI 채널은 QMI 데이터 상호작용을 한다.
    CDC ACM이 CDC ACM 드라이브를 이식한 후/dev에서 다음과 같은 노드 ttyACM0을 생성합니다. PPP 연결기나 AT 명령 ttyACM1 Trace1 ttyACM2 Trace2 ttyACM3 AT commands ttyACM4 AT commands
    USB의 CDC 클래스는 USB 통신 장비 클래스(Communication Device Class)의 약칭이다.CDC 클래스는 USB 조직이 정의하는 다양한 통신장비(전신통신장비와 중속망통신장비)에 전문적으로 사용되는 USB 하위 클래스다.

    2. APN


    APN은 일종의 인터넷 접속 기술을 가리키며 휴대전화를 통해 인터넷에 접속할 때 반드시 설정해야 하는 매개 변수로 휴대전화가 어떤 접속 방식을 통해 네트워크에 접근하는지를 결정한다.

    2. 구동 이식


    1. USB Driver


    주로 공식 문서인'Quectel WCDMA & LTE Linux USB Driver User Guide V1.5.pdf'의 간략한 이식 매뉴얼을 참고하면 참고할 수 있다http://blog.csdn.net/hnjztyx/article/details/72495433이 편, 삼성 플랫폼 안드로이드 5.1의, 비교적 또렷하게 썼다.
    또 일부 강조해야 할 부분이 있다.
  • EC20이라면 VendorID와 ProductID를 출력해 보아야 한다. 왜냐하면 어떤 EC20은 두 가지 버전이 있는데 그것이 바로 EC20-C와 EC20-CE이기 때문이다.EC20-C IDVendor=0x05c6 IDProduct=0x9215 EC20-CE IDVendor=0x2c7c IDProduct=0x0125 플러그 장치 정보는 다음과 같습니다. [ 723.730113] usb 1-1: New USB device found, idVendor=2c7c, idProduct=0125 내 장치는 EC20-CE임을 알 수 있습니다.반드시 자신의 재료 판본을 잘 확인해야 한다.
  • 이식할 때 변수를 먼저 제어하고 첫 번째 단계는 USB 시리즈 드라이브 부분만 이식하는 것이 좋다.이 부분의 이식을 완료한 후/dev/아래에 ttyUSB0-ttyUSB4를 생성해야 합니다.한 번에 첨가하는 게 많아졌어요.

  • 2. GobiNet Driver 또는 QMI WWAN


    GobiNet 드라이브와 QMI WWAN의 역할은 같다. 하나는 Kernel Space에서, 하나는 Userspace에서 이루어진다.GobiNet 드라이브에 대해 Kernel에 공급업체가 제공하는 GobiNet의 원본 코드를 추가해야 한다.QMI WWAN의 경우 기본 안드로이드 6.0에서 이러한 방식이 이미 구현되었으므로 ID만 추가하면 되므로 후자를 선택했습니다.디버그가 완료되면/dev에서 cdc-wdmX 노드가 생성됩니다.

    3. PPP 다이얼 업 구성


    구동 부분 참고 매뉴얼에서 대응하는 매크로를 열면 됩니다.다음은 RIL 마이그레이션을 완료한 후 APN 구성에 대한 설명입니다.
    APN : Access Point Names . ChinaUnicom 연통 3gnet, China Mobile 모바일 cmnet, China Telecom 전신ctnet.

    3. RIL 이식


    안드로이드에서 RIL의 위치는 다음과 같습니다.
    RIL이 안드로이드 구조에서 Kernel과 Framework 사이에 있는 것을 볼 수 있습니다.리브레이스의 RIL은 두 부분으로 나뉘는데 RILD와 Vendor RIL이다.RILD는 Socket과 Framework 간의 통신을 담당합니다.Vendor RIL은 라디오와의 통신(AT command channel과 Packet data channel(PDCH)을 담당합니다.AT command channel은 라디오와 직접 통신하는 데 사용되며 PDCH는 데이터 서비스로 사용됩니다.Java framework의 RIL도 RIL module과 Phone module로 두 부분으로 나뉜다.The RIL modeule은 밑바닥의 RILD 통신에 사용되며, The Phone module는 응용층(Application)에 직접 전화 기능을 제공하는 인터페이스를 제공한다.

    1. RIL Driver Integration


    Quectel의 EC20을 예로 들 수 있습니다.Quectel은 RIL driver(package/reference-ril)를 소스로 제공합니다.우리는 안드로이드 원본의 정확한 경로를 복사하고 컴파일하기만 하면 된다.
    해당 안드로이드 소스 경로는 Hardware/ril/reference-ril이며, 에이전트가 제공한 코드로 바꾸면 됩니다.
    그리고 init. 수정rc
    service ril-daemon /system/bin/rild -l /system/lib/libreference-ril.so
        class main
        socket rild stream 660 root radio 
        socket rild-debug stream 666 radio system 
        user root 
        group radio cache inet misc audio sdcard_rw log

    사용자 하드웨어/ril/rild/rild/rild를 전환할 수 없습니다.c
    OpenLib:
        #endif
          //switchUser();

    비 루트에서 디버깅이 필요하면common/ueventd.rockchip.rc에 더하기:
    # for radio
    /dev/ttyUSB0              0666   radio      radio
    /dev/ttyUSB1              0666   radio      radio
    /dev/ttyUSB2              0666   radio      radio
    /dev/ttyUSB3              0666   radio      radio

    다시 컴파일하면 됩니다.

    2. Android Log 캡처

    #    RIL module   log
    adb logcat -b radio -v time

    3. RIL 마이그레이션 문제 요약


    1. 코드에 대량의 error 출현


    EC20의 프록시 코드 해제가 잘못되었습니다. Android6.0에 해당하는 코드는 Quectel Android RIL SR01A41V17입니다.

    2. 모듈 충돌 신고가 발생했습니다.

    build/core/base_rules.mk:157: *** hardware/ril/reference-ril: MODULE.TARGET.EXECUTABLES.chat alread defined by external/ppp/chat。

    rk의 chat 모듈을 직접 삭제하면 됩니다
    rm externel/ppp/chat -rf 

    3. RIL이 적용되지 않음(RIL 부분의 이식이 완료된 후 4G 모듈이 작동하지 않는 것으로 보임)


    1) RIL 프로세스가 실행 중인지 확인
    # getprop init.svc.ril-daemon
         Running ,       Stopped    Restarting,           

    2) lib이 Quectel인지 확인
    # getprop gsm.version.ril-impl
        Quectel     
    Quectel_Android_RIL_SR    

    RILRK_DATA_V3.6_android6.0//설명은 rk 자신의 ril 라이브러리로 호출되었습니다. 다음 단계에서 init를 확인하세요.rc의 수정이 성공했는지 안 성공했는지 4점을 참조하십시오.만약 여기에 빈 설명 라이브러리와 플랫폼이 호환되지 않는다면, 자신의 플랫폼과 호환되는 라이브러리를 호출하는지 확인하십시오. 예를 들어 32비트는 시스템/lib에 있고 64비트는 시스템/lib64에 있습니다.
    3) init를 확인한다.rc의 수정이 성공했습니까
    cat init.rc | grep ril-daemon

    성공하지 못하면 뒤의 네 번째 점을 참조하세요.
    4) SELinux가 열려 있지 않음 확인
    # getenforce     SELinux    
    
    # setenforce 0       Permissive

    4. init.rc의 수정이 적용되지 않았습니다


    device/rockchip/rk3399/init.rc의 수정이 아웃/.../rk3399 에 적용되지 않았습니다.mid/root/init.rc에서 보면 우리가 필요로 하는 수정이 생기지 않았다
    rk3399/device.mk에서 볼 수 있어요.
    #ifeq ($(strip $(TARGET_BOARD_PLATFORM_PRODUCT)), tablet)
    #PRODUCT_COPY_FILES += \
        $(LOCAL_PATH)/rk3399_32/init.rc:root/init.rc
    #endif

    타블렛 제품이라면 copy rk339932의 init rc에서mid/init로rc에서.그래서 이곳의 논리는
    PRODUCT_COPY_FILES += \
        $(LOCAL_PATH)/init.rc:root/init.rc

    또한 3399 플랫폼에서 device.mk에 lib의 경로를 한 번 추가합니다./rockchip/common/device.mk:588: rild.libpath=/system/lib64/libril-rk29-dataonly.so는 이전에 우리가 지정한 라이브러리의 경로를 덮어씁니다. 이 줄을 삭제해야 합니다.

    5. init. 수정 안 함rc, 시스템 수정prop 방식lib 라이브러리 지정


    예를 들어 vr,box는 시스템에 있습니다.prop에서 rild를 지정합니다.libpath ..그래서 우리는 RK가 제공하는 방법을 참고하여 라이브러리 경로의 지정을 완성할 수 있다. 예를 들어 나는mid제품이고lib경로가 64bit인 라이브러리 경로를 지정한다.
    vi device/rockchip/rk3399/rk3399_mid/system.prop
    -- rild.libpath=/system/lib/libril-rk29-dataonly.so
    -- rild.libargs=-d /dev/ttyACM0
    ++ rild.libpath=/system/lib64/libreference-ril.so
    ++ rild.libargs=-d /dev/ttyUSB0
    

    좋은 웹페이지 즐겨찾기