0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在LINUX平臺(tái)上進(jìn)行成功實(shí)現(xiàn)RIL層功能和框架層應(yīng)用

電子設(shè)計(jì) ? 作者:電子設(shè)計(jì) ? 2018-11-08 09:05 ? 次閱讀

1.課題研究的背景和意義

1.1 Android RIL簡(jiǎn)介

Android RIL(Radio Interface Layer)提供了無線基帶Modem與電話應(yīng)用之間的抽象層.在Android RIL層中,完善的考慮了電話應(yīng)用的各種情況,如:雙SIM卡;電話,短信,彩信,PS DATA業(yè)務(wù),PIN/PUK碼等各種3G網(wǎng)絡(luò)業(yè)務(wù).

RIL層在Android系統(tǒng)中,處于硬件抽象層,運(yùn)行在一個(gè)獨(dú)立的守護(hù)進(jìn)程中,主要為框架層和基帶接口提供適配,具有良好的獨(dú)立性.其中的通信機(jī)制,與框架層接口主要使用Socket通信,內(nèi)部線程主要使用管道,與基帶接口默認(rèn)使用AT命令.且其代碼均由C和C++來完成,依賴第三方庫(kù)較少,所以,Android RIL層具有良好的移植性.

1.2 移植Android RIL的意義

目前很多基于L I N U X平臺(tái)的系統(tǒng),如:

PC(LINUX操作系統(tǒng)),QT,路由器平臺(tái)(如O p e n W r t系統(tǒng))等等,都對(duì)連接3 G網(wǎng)絡(luò)有需求,但在這些平臺(tái)原生的功能中,沒有獨(dú)立的RIL接口層,所以開發(fā)一套基于LINUX的獨(dú)立應(yīng)用,用來支持與基帶發(fā)起各種3G網(wǎng)絡(luò)相關(guān)業(yè)務(wù)是很有意義的.Android RIL具有良好的穩(wěn)定性,獨(dú)立性,以及對(duì)3G網(wǎng)絡(luò)業(yè)務(wù)的完整性,所以將其移植成一個(gè)獨(dú)立的,供LINUX通用平臺(tái)使用的RIL層,可方便所有的基于LINUX的平臺(tái)完成各種電話應(yīng)用的開發(fā).

2.Android系統(tǒng)中RIL層分析

2.1 RIL層在Android系統(tǒng)中的位置

RIL在Android系統(tǒng)中,處于硬件抽象層位置.主要通過SOCKET通信連接框架層,將框架層下發(fā)的消息解析后,向基帶下發(fā)相應(yīng)的AT指令,并將從基帶返回的AT指令的響應(yīng),封裝成消息,返回給框架層.位置如圖1所示.

在LINUX平臺(tái)上進(jìn)行成功實(shí)現(xiàn)RIL層功能和框架層應(yīng)用

2.2 Android RIL工作原理

2.2.1 Android RIL代碼說明

RIL主要由RILD(radio interface layerdaemon)守護(hù)進(jìn)程和兩個(gè)動(dòng)態(tài)庫(kù):librefrence_ril.so和libril.so組成.Android工程源代碼目錄中,RIL代碼包含于hardware/ril目錄中,主要文件說明如表1所示.

2.2.2 Android RIL工作原理

rild以一個(gè)main函數(shù)作為整個(gè)RIL層的入口點(diǎn),負(fù)責(zé)完成初始化.libril.so庫(kù)包含了主要的消息循環(huán)流程,主要負(fù)責(zé)與框架層進(jìn)行交互,在接收框架層命令后,調(diào)用相應(yīng)函數(shù)處理,然后將命令響應(yīng)結(jié)果傳回客戶進(jìn)程.

librefrence_ril.so主要提供各個(gè)具體業(yè)務(wù)的AT指令的封裝和解析接口,供libril調(diào)用,向下通過AT_COM和基帶進(jìn)行交互.具體工作線程如圖2所示.

在LINUX平臺(tái)上進(jìn)行成功實(shí)現(xiàn)RIL層功能和框架層應(yīng)用

3.移植Android RIL層功能

通過對(duì)Android RIL層代碼分析, 在RIL層主要使用了基于linux的POSIX Thread(pthread)多線程編程和socket IPC通信,這些在移植過程中是無須考慮的.需要移植的是RIL層依賴于Android系統(tǒng)的功能.

3.1 移植Android系統(tǒng)屬性

系統(tǒng)屬性系統(tǒng)的一個(gè)重要特性.屬性數(shù)據(jù)由init進(jìn)程維護(hù),用于管理系統(tǒng)全局配置和狀態(tài),每個(gè)屬性對(duì)應(yīng)一對(duì)鍵值.

在RIL層中對(duì)系統(tǒng)屬性的依賴比較小,所以不需要將Android系統(tǒng)屬性機(jī)制全部移植.RIL層主要在RILD初始化過程中需要從系統(tǒng)屬性讀取reference-ril.so路徑.AT設(shè)備路徑,網(wǎng)卡設(shè)備等信息,以及運(yùn)行過程中將從網(wǎng)絡(luò)中動(dòng)態(tài)獲取的IP和DNS等信息寫入對(duì)應(yīng)系統(tǒng)屬性中.

可根據(jù)所處的具體系統(tǒng),將需要的信息寫入系統(tǒng)保存全局共享參數(shù)的機(jī)制,并根據(jù)所處系統(tǒng)的配置方法去獲取需要的參數(shù).由于RIL層需要獲得的參數(shù)非常有限,所以同樣可以配置RIL層獨(dú)有的配置文件,通過配置和解析RIL層的配置文件來達(dá)到替換Android系統(tǒng)屬性機(jī)制.甚至可直接在rild啟動(dòng)的時(shí)候,作為應(yīng)用參數(shù)直接傳入.

3.2 移植Android.mk編譯文件

Android. m k機(jī)制是Android平臺(tái)利用makefile封裝成一種特有的編譯機(jī)制,在通用linux平臺(tái)上,通常每個(gè)模塊都有自己的Makefile文件.所以我們需要根據(jù)。/libril../reference-ril和。/rild文件夾中的Android.

mk內(nèi)容寫出對(duì)應(yīng)的Makefile文件.從本質(zhì)上來講,Android.mk就是對(duì)Makefile的的一部分,所以移植編譯文件是很簡(jiǎn)單的.

. / l i b RIL和。 / reference – RIL中的Android.mk描述了libril.so和libreferenceril.

so兩個(gè)動(dòng)態(tài)庫(kù)的生成和安裝路徑../rild中的Android.mk描述了rild守護(hù)進(jìn)程的生成和安裝路徑和鏈接libril.so庫(kù).

3.3 移植Parcel消息

由以上對(duì)Android RIL層功能分析發(fā)現(xiàn),框架層和RIL層的交互是通過socket消息來互相傳遞的.消息作為IPC通信的數(shù)據(jù)單元是通過Parcel容器來進(jìn)行封裝的,用于存儲(chǔ)序列化數(shù)據(jù).所以在移植過程中,完成相同的消息機(jī)制,是整個(gè)移植工作的核心任務(wù).源碼位于Frameworks/base/libs/binder/parcel.cpp.

分析源碼可知:1.整個(gè)讀寫全是在內(nèi)存中進(jìn)行,主要根據(jù)數(shù)據(jù)大小需求通過malloc().realloc().memcpy()等內(nèi)存操作動(dòng)態(tài)分配,這些接口都是標(biāo)準(zhǔn)C所具備的,移植性非常好;2.Binder通信中數(shù)據(jù)對(duì)象都是封裝成為parcel格式進(jìn)行傳輸?shù)?,傳輸?shù)念愋桶↖Binder.Filedescriptor等,這些數(shù)據(jù)在傳輸過程中需要做特殊處理,移植的依賴較多,好在RIL部分用不到Binder通信,所以這部分代碼可以從中刪除,降低了移植難度,所以只需要實(shí)現(xiàn)普通數(shù)據(jù)的消息封裝.在Parcel中對(duì)普通數(shù)據(jù)的讀寫,定義了以下方法:

在LINUX平臺(tái)上進(jìn)行成功實(shí)現(xiàn)RIL層功能和框架層應(yīng)用

基本數(shù)據(jù)的消息封裝通過這些方法來寫入Parcel和從Parcel讀出.由于AT指令的參數(shù)以及AT response均為Int和String型數(shù)據(jù),所以在RIL層中主要使用到了對(duì)這兩種數(shù)據(jù)操作的方法.所以通過C++代碼實(shí)現(xiàn)一個(gè)容器,并含有writeInt(int),readInt(),writeString(String),readString()四種處理數(shù)據(jù)的方法是非常簡(jiǎn)單的.所以通過自己實(shí)現(xiàn)的類來模擬Android在RIL層中的消息機(jī)制是可行的.

3.4 開發(fā)框架層

綜上所述,將Android RIL移植到基于LINUX的通用平臺(tái)就完全能夠?qū)崿F(xiàn)了.RIL只能支持一路socket連接,事物處理都是串行的,要讓其工作在多任務(wù)的系統(tǒng)上,互相不阻塞對(duì)方,需要更上層進(jìn)行封裝,Android的移動(dòng)通信相關(guān)業(yè)務(wù)流程以及策略控制都是在框架層是通過JAVA代碼實(shí)現(xiàn)的,在Android中叫做Telephony,Telephony為上層應(yīng)用提供了并行訪問的接口,但一般LINUX平臺(tái)是沒有運(yùn)行JAVA虛擬機(jī)的,所以Android的Telephony是無法進(jìn)行移植的,所以需要開發(fā)一個(gè)與AndroidTelephony對(duì)等的框架層.

框架層主要起連接RIL層和應(yīng)用的作用,框架內(nèi)部分為了客戶端和服務(wù)端,客戶端封裝成共享庫(kù)提供函數(shù)接口供應(yīng)用程序使用,函數(shù)內(nèi)部通過socket與服務(wù)端通信,服務(wù)端可以支持多個(gè)客戶端同時(shí)連接,并將客戶端的請(qǐng)求串行化發(fā)送到RILD,能夠?qū)ILD返回的結(jié)果異步地將返回給對(duì)應(yīng)的請(qǐng)求客戶端.為避免阻塞,服務(wù)端由三個(gè)線程來實(shí)現(xiàn),如圖3所示.線程一(accept_thread):接收上層應(yīng)用下發(fā)的消息.將應(yīng)用接入的clients排序,并將發(fā)送的消息存入鏈表data_queue中;線程二(sender_thread):將應(yīng)用消息寫入與RIL層的接口.依次從鏈表data_queue中取出消息,并依次寫入到RIL層的接口;線程三(receiver_thread):將RIL的response寫回應(yīng)用.從RIL層的接口中讀出消息,并判斷出所屬的應(yīng)用描述符,并寫入.

在LINUX平臺(tái)上進(jìn)行成功實(shí)現(xiàn)RIL層功能和框架層應(yīng)用

4.搭建驗(yàn)證平臺(tái)

OpenWrt系統(tǒng)是一個(gè)運(yùn)行在嵌入式設(shè)備上的LINUX系統(tǒng),主要實(shí)現(xiàn)路由器功能,所以PSDATA是其最基本的業(yè)務(wù).將OpenWrt系統(tǒng)移植到ARM開發(fā)板上,并加載基帶模塊.通過移植的RIL層代碼,使開發(fā)板成功連入3G網(wǎng)絡(luò).驅(qū)動(dòng)枚舉出/dev/設(shè)備作為AT_COM與RIL層通信,并創(chuàng)建網(wǎng)卡設(shè)備作為網(wǎng)絡(luò)通信設(shè)備,如圖4所示.編寫應(yīng)用創(chuàng)建SOCKET,并連入框架層的服務(wù)端,并在應(yīng)用中將PS DATA請(qǐng)求寫入Parcel.

在LINUX平臺(tái)上進(jìn)行成功實(shí)現(xiàn)RIL層功能和框架層應(yīng)用

在系統(tǒng)中成功ping通網(wǎng)絡(luò),驗(yàn)證了移植后的RIL層在LINUX平臺(tái)上運(yùn)行良好.

5.總結(jié)

在基于LINU X的通用平臺(tái)上,通過移植工作,成功實(shí)現(xiàn)RIL層功能和框架層應(yīng)用.在Android RIL中定義了電話.短信.PS DATA等100多種與基帶通信業(yè)務(wù).在平臺(tái)上便可根據(jù)功能需求向RIL層發(fā)起所需請(qǐng)求,便能簡(jiǎn)單.方便.高效的完成這些定義好的業(yè)務(wù).移植后的RIL層將所有的LINUX平臺(tái)與基帶建立連接,實(shí)現(xiàn)了通用性.

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Android
    +關(guān)注

    關(guān)注

    12

    文章

    3939

    瀏覽量

    127641
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11326

    瀏覽量

    209961
  • 無線
    +關(guān)注

    關(guān)注

    31

    文章

    5465

    瀏覽量

    173573
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Linux平臺(tái)設(shè)備框架驅(qū)動(dòng)

    ? 平臺(tái)設(shè)備框架(platform)是將一個(gè)驅(qū)動(dòng)分為設(shè)備和驅(qū)動(dòng)兩個(gè)部分,通過總線模型將設(shè)備和驅(qū)動(dòng)進(jìn)行綁定。
    的頭像 發(fā)表于 09-25 08:59 ?1838次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>平臺(tái)</b>設(shè)備<b class='flag-5'>框架</b>驅(qū)動(dòng)

    想要學(xué)習(xí)DSP的平臺(tái)上進(jìn)行圖像處理,求推薦入門教材。

    各位大神,本人想要學(xué)習(xí)DSP的平臺(tái)上進(jìn)行圖像處理,但基礎(chǔ)比較差。圖像處理的算法是有基礎(chǔ)的,但是總覺得這兩者結(jié)合很困難,希望大神告訴我下有什么好方法入門,或者看哪些教材
    發(fā)表于 05-20 10:29

    Android RIL架構(gòu)簡(jiǎn)介

    對(duì)接BPRIL—radiointerface layer1、說的簡(jiǎn)單點(diǎn),RIL是為了適應(yīng)各種Modem的一個(gè)適配,無論你是高通,MTK,馬維爾等,通過他都可以直接面向用戶。這里說的是整個(gè)RIL
    發(fā)表于 09-25 15:46

    嵌入式操作系統(tǒng)的通用硬件抽象設(shè)計(jì)

    的開發(fā)能夠支持這種硬件平臺(tái)的硬件抽象上進(jìn)行。2 通用硬件抽象總體設(shè)計(jì)2.1 通用硬件抽象
    發(fā)表于 12-07 10:30

    MTK平臺(tái)上實(shí)現(xiàn)2ME需要哪些功能?

    J2ME是什么?MTK平臺(tái)上實(shí)現(xiàn)J2ME運(yùn)行環(huán)境,需要哪些功能?怎樣去設(shè)計(jì)并實(shí)現(xiàn)J2ME運(yùn)行平臺(tái)
    發(fā)表于 04-27 06:22

    怎樣阿里云物聯(lián)網(wǎng)平臺(tái)上進(jìn)行單片機(jī)程序的編寫呢

    阿里云物聯(lián)網(wǎng)平臺(tái)是怎樣設(shè)置的?怎樣阿里云物聯(lián)網(wǎng)平臺(tái)上進(jìn)行單片機(jī)程序的編寫呢?
    發(fā)表于 02-22 06:04

    【學(xué)習(xí)打卡】OpenHarmony的系統(tǒng)服務(wù)說明

    一次性開發(fā)多設(shè)備部署的能力,從而為開發(fā)人員提供了很大的靈活性。開發(fā)人員可以開發(fā)一次應(yīng)用程序,然后將其部署到一系列設(shè)備上。這避免了不同平臺(tái)上重復(fù)開發(fā)的問題,開發(fā)者可以有效地利用了已經(jīng)創(chuàng)建的內(nèi)容去進(jìn)行
    發(fā)表于 07-13 08:48

    酷派手機(jī)擁抱鴻蒙,成功展訊T606平臺(tái)上接入OpenHarmony

    最新消息,酷派技術(shù)團(tuán)隊(duì)宣布已成功實(shí)現(xiàn)將 OpenHarmony 系統(tǒng)接入到展訊平臺(tái)上,相信這是一個(gè)重要的里程碑,標(biāo)志著推動(dòng) OpenHarmony 的發(fā)展環(huán)節(jié)取得了重要進(jìn)展。
    發(fā)表于 11-21 13:51

    RRC功能

    RRC功能 RRC實(shí)現(xiàn)功能包括:􀁺 廣播由非接入提供的信息;
    發(fā)表于 11-28 17:15 ?3871次閱讀

    基于Android平臺(tái)的雙網(wǎng)雙待的設(shè)計(jì)方法

    實(shí)現(xiàn)Android 平臺(tái)上的雙網(wǎng)雙待功能,研究Android 平臺(tái)的系統(tǒng)架構(gòu)以及Android framework 上已經(jīng)
    發(fā)表于 05-24 11:02 ?2880次閱讀
    基于Android<b class='flag-5'>平臺(tái)</b>的雙網(wǎng)雙待的設(shè)計(jì)方法

    嵌入式控制器CORBA平臺(tái)的應(yīng)用實(shí)現(xiàn)

    整個(gè)控制器包括應(yīng)用和系統(tǒng)。系統(tǒng)包含硬件和相關(guān)的實(shí)時(shí)操作系統(tǒng)以及應(yīng)用平臺(tái),應(yīng)用包含運(yùn)行于應(yīng)用平臺(tái)上
    發(fā)表于 10-15 10:39 ?1062次閱讀

    如何在Android 4.3平臺(tái)上進(jìn)行藍(lán)牙低功耗開發(fā)操作?(1)

    Android 4.3平臺(tái)上進(jìn)行藍(lán)牙低功耗(BLE)開發(fā) 第一部分
    的頭像 發(fā)表于 08-22 01:33 ?2783次閱讀

    Linux應(yīng)用操作寄存器

    。 devmem的實(shí)現(xiàn)原理,就是打開/dev/mem,然后通過mmap映射物理地址,從而實(shí)現(xiàn)讀寫寄存器。因此,我們只要實(shí)現(xiàn)這些操作,就可以自己實(shí)現(xiàn)類似devmem的
    的頭像 發(fā)表于 10-08 15:16 ?1277次閱讀
    <b class='flag-5'>Linux</b>應(yīng)用<b class='flag-5'>層</b>操作寄存器

    無線通信模塊管理框架RIL簡(jiǎn)介

    大家好,今天分享一個(gè)開源框架 RIL(Radio Interface Layer),嵌入式平臺(tái)的無線通信模塊管理框架。
    的頭像 發(fā)表于 12-21 09:24 ?2086次閱讀
    無線通信模塊管理<b class='flag-5'>框架</b><b class='flag-5'>RIL</b>簡(jiǎn)介

    OSI七模型的每一功能

    : 物理(Physical Layer) 功能 :物理負(fù)責(zé)物理媒介上傳輸原始的比特流。這包括定義電氣、機(jī)械、過程和功能標(biāo)準(zhǔn),以
    的頭像 發(fā)表于 11-24 10:46 ?428次閱讀