[Android6.0] [RK3399] PCIe 인터페이스 4G 모듈 EC20 디버그 레코드
9247 단어 구동 이식RockChip 플랫폼
기본 개념
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의, 비교적 또렷하게 썼다.
또 일부 강조해야 할 부분이 있다.
[ 723.730113] usb 1-1: New USB device found, idVendor=2c7c, idProduct=0125
내 장치는 EC20-CE임을 알 수 있습니다.반드시 자신의 재료 판본을 잘 확인해야 한다.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