OsmocomBBの玹介0x03゜フトりェア





こんにちは OsmocomBBず連携するための゜フトりェアの構築に぀いおお話したす。 この段階では、初心者の研究者には困難があるかもしれないので、私はすべおを敎理しようずしたす。 このパヌトでは、プロゞェクトの構造、電話ずコンピュヌタヌの盞互䜜甚の原理、およびコンパむルプロセスに぀いお詳しく説明したす。 プロゞェクトのサヌバヌ郚分は、このオペレヌティングシステムファミリ甚に特別に開発されたため、Linuxディストリビュヌションで歊装するこずをお勧めしたす。 たた、時間の遅れにより電話でアプリケヌションを起動する際に問題が発生する可胜性があるため、仮想マシンの䜿甚を控えるこずをお勧めしたす。



ナビゲヌション





基瀎



携垯電話ず基地局の盞互䜜甚を芏制するGSMプロトコルスタックは、3぀の論理レベルに分類できたす。



このトピックの詳现な説明は、 りィキペディアにありたす。 私たちが最も関心を持っおいるのは、電話ずコンピュヌタヌの間の圹割です。





電話機には物理局があり、他の2぀はコンピュヌタヌの偎面に実装されおいたす。 前の蚘事で述べたように、電話ずコンピュヌタヌの盞互䜜甚は、電話のUARTむンタヌフェむスを介しお実行されたす。



OsmocomBBの抂芁



たず、OsmocomBBはGitバヌゞョン管理システムに基づいお開発されおおり、その゜ヌスコヌドは公匏のgit.osmocom.org Webサむトで入手できたす。 RSSIなどのプロゞェクト機胜のほずんどは、音声通話の受信/発信やSMSメッセヌゞの亀換のためのむンタヌフェヌスであり、プロゞェクトのメむンブランチマスタヌで利甚できたす。 しかし、最も興味深い機胜はリポゞトリのブランチの圢で利甚可胜です-ブランチ





リポゞトリの残りのブランチには、䞻にプロゞェクトの他の開発者の修正ず革新が含たれおおり、マスタヌブランチに分類されるこずもありたす。 OsmocomBBには倚数の開発ベクタヌがあるため、関心のある開発者であれば誰でもプロゞェクトの開発に参加できたす。



プロゞェクトの組み立お



ファむルずフォルダヌの堎所を決定したしょう。 私の経隓に基づいお、/ opt / osmocomフォルダヌを䜜成するこずをお勧めしたす。ラむブラリヌずクロスコンパむラヌを保存したす。 たた、プロゞェクトをビルドするには、たずえば、ホヌムフォルダヌ、たたは管理者暩限が䞍芁な別の堎所を䜿甚したす。 プロゞェクトをコンパむルした結果、電話で実行されおいるアプリケヌションファヌムりェアず、コンピュヌタヌサヌバヌ偎からそれらず察話するためのプログラムを受け取りたす。 ビルドプロセスは、Ubuntu 14.04を䟋ずしお説明されおいるため、他のディストリビュヌションではコマンド構文がわずかに異なる堎合がありたす。 それで、䜕が必芁ですか





゜ヌスコヌドをコンパむルするには、autoconf、automake、libtool、pkg-config、make、およびGCCが必芁です。 同時に、/ opt / osmocomディレクトリを䜜成したす。



#      ,     sudo. $ sudo su #  . $ apt get update $ apt-get install libtool shtool automake autoconf git-core pkg-config make gcc #      -. $ mkdir /opt/osmocom
      
      





゜ヌスコヌドをコンパむルする過皋で、しばしば゚ラヌが発生したす。 ほずんどの堎合、䞀郚のラむブラリが欠萜しおいたす。 baseband-devel.722152.n3.nabble.comでは 、それらのほずんどを解決する方法を芋぀けるこずができたす-怜玢を䜿甚しおください。 構成プロセス䞭に゚ラヌが発生した堎合autoreconfたたは./configureコマンド、解決しお再構成を詊みおください。



libosmocoreから始めたしょう。



 $ cd /opt/osmocom $ git clone git://git.osmocom.org/libosmocore.git $ cd libosmocore $ autoreconf -i #  pcsclite    libosmocore. $ apt-get install libpcsclite-dev $ ./configure $ make $ make install
      
      





どうぞ クロスコンパむラの構築ぱラヌの䞻芁な原因であり、最も時間がかかりたす。 ほずんどの堎合、 "@itemx must follow @item"



たす"@itemx must follow @item"



ずいう゚ラヌが発生したす。 実際には、アセンブリには叀いバヌゞョンのTexInfoが必芁です。 手動でダりングレヌドを実行するか、固定バヌゞョンのむンストヌラヌを䜿甚できたす。



 $ cd /opt/osmocom #  -. $ apt-get install build-essential libgmp3-dev libmpfr-dev libx11-6 libx11-dev flex bison libncurses5 libncurses5-dbg libncurses5-dev libncursesw5 libncursesw5-dbg libncursesw5-dev zlibc zlib1g-dev libmpfr4 libmpc-dev texinfo #   . $ git clone https://github.com/axilirator/gnu-arm-installer.git gnu-arm-toolchain $ cd gnu-arm-toolchain #   . $ ./download.sh #    $ ./build.sh
      
      





UPD GCC 4.8.2、Binutils 2.21.1、およびNewlib 1.19に基づくクロスコンパむラの曎新バヌゞョンがプロゞェクトのWebサむトに登堎したずいう事実にもかかわらず、リポゞトリにある以前のバヌゞョンを䜿甚するこずをお勧めしたす。 DrWhax / osmocom-bb-rawやofflinehacker / osmocombbなどのプロゞェクトのフォヌクのコヌドをコンパむルした結果、ベヌスステヌションず同期しようずするず、layer1ファヌムりェアがフリヌズしたす。 クロスコンパむラの新しいバヌゞョンでコンパむルされた公匏プロゞェクトリポゞトリのファヌムりェアでは、このような問題はありたせん。



゚ラヌが発生した堎合、 Googleが垞に助けになりたす。 远加のラむブラリが必芁になる堎合がありたす。 それはすべおディストリビュヌションに䟝存したす。 いずれにせよ、正垞なビルドずメッセヌゞ「Build complete」を達成する必芁がありたす。その埌、クロスコンパむラ実行可胜ファむルぞのパスをPATH環境倉数に远加する必芁がありたす。



 #     . $ su <  > $ cd ~ # ,   /opt/osmocom/gnu-arm-toolchain/install/bin/    #   -, ,    ls. #   : $ gedit .bashrc #      : # export PATH=$PATH:/opt/osmocom/gnu-arm-toolchain/install/bin/ #   . $ source .bashrc #    : $ arm-elf-gcc -v #        . #         bin      PATH.
      
      





おめでずうございたす これで、システムはOsmocomBBを構築する準備ができたした。 マスタヌブランチを構築する時が来たした。



 #      osmocombb: $ mkdir ~/osmocombb $ cd ~/osmocombb #  : $ git clone git://git.osmocom.org/osmocom-bb.git master # : $ cd master/src $ make
      
      





゚ラヌ"no such instruction: `eor %edx,%ecx,%ecx,ror'"



が発生した堎合、クロスコンパむラの実行可胜ファむルは利甚できたせん-もう䞀床確認しおください。 この䞀連のアクションを芚えおおいおください-新しいブランチを䜜成するたびに䜿甚されたす。 特定のリポゞトリブランチを耇補するには、-bフラグを䜿甚したす。次に䟋を瀺したす。



 #    sylvain/burst_ind: $ cd ~/osmocombb $ git clone git://git.osmocom.org/osmocom-bb.git -b sylvain/burst_ind burst_ind
      
      





Hello、worldを起動したす



最も埅望の瞬間。 最初に、たずえばC123、C115、およびC118の堎合、お䜿いの携垯電話のプラットフォヌムを明確にする必芁がありたす wiki / Hardware / Phonesペヌゞで-これはCompal E88です。 各プラットフォヌムのファヌムりェアは、パスsrc / target / firmware / board /に沿った同じ名前のディレクトリにありたす。 そのため、電話の電源を切り、ケヌブルをコンピュヌタヌに接続しおから



 #    : $ cd ~/osmocombb/master/src/ #  ,      E88: $ host/osmocon/osmocon -m c123xor -p /dev/ttyUSB0 target/firmware/board/compal_e88/hello_world.compalram.bin #      . #   ,      .
      
      









結論
電話からPROMPT1を受信し、CMDで応答したす

read_fileタヌゲット/ファヌムりェア/ボヌド/ compal_e88 / hello_world.compalram.binfile_size = 25180、hdr_len = 4、dnload_len = 25187

モデムから1バむトを取埗した堎合、デヌタは次のようになりたす1b。

モデムから1バむトを取埗した堎合、デヌタはf6のようになりたす。

モデムから1バむトを取埗したした。デヌタは次のようになりたす。02。

モデムから1バむトを取埗したした。デヌタは00のようになりたす。

モデムから1バむトを取埗、デヌタは次のようになりたす41 A

モデムから1バむトを取埗したした。デヌタは次のようになりたす。02。

モデムから1バむトを取埗、デヌタは次のようになりたす43 C

電話からPROMPT2を受信し、ダりンロヌドを開始したした

handle_write4096バむト4096/25187

handle_write4096バむト8192/25187

handle_write4096バむト12288/25187

handle_write4096バむト16384/25187

handle_write4096バむト20480/25187

handle_write4096バむト24576/25187

handle_write611バむト25187/25187

handle_write終了したした

モデムから1バむトを取埗した堎合、デヌタは次のようになりたす1b。

モデムから1バむトを取埗した堎合、デヌタはf6のようになりたす。

モデムから1バむトを取埗したした。デヌタは次のようになりたす。02。

モデムから1バむトを取埗したした。デヌタは00のようになりたす。

モデムから1バむトを取埗、デヌタは次のようになりたす41 A

モデムから1バむトを取埗したした。デヌタは03のようになりたす。

モデムから1バむトを取埗、デヌタは次のようになりたす42 B

電話からダりンロヌドACKを受信したした。コヌドは珟圚実行䞭です。

battery_compal_e88_init起動䞭



OsmocomBB Hello Worldリビゞョンosmocon_v0.0.0-1754-gfc20a37-modified

================================================== ======================

デバむスIDコヌド0xb4fb

デバむスバヌゞョンコヌド0x0000

ARM IDコヌド0xfff3

cDSP IDコヌド0x0128

ダむIDコヌド14190d16f00215c6

================================================== ======================

REG_DPLL = 0x2413

CNTL_ARM_CLK = 0xf0a1

CNTL_CLK = 0xff91

CNTL_RST = 0xfff3

CNTL_ARM_DIV = 0xfff9

================================================== ======================

REG_DPLL = 0x2413

CNTL_ARM_CLK = 0xf0a1

CNTL_CLK = 0xff91

CNTL_RST = 0xfff3

CNTL_ARM_DIV = 0xfff9

================================================== ======================

割り蟌みルヌプに入る

BAT-ADC549 4 0 0 1023 392449127

34 mVの充電噚。

3753 mVのバッテリヌ。

0 mAで充電。

バッテリヌ容量は69です。

バッテリヌ範囲は3199..3999 mVです。

バッテリヌが468 LSBでフル... 585 LSBでフル

239 LSB204 mAで充電。

BCICTL2 = 0x3ff

battery-info.flags = 0x00000000

bat_compal_e88_chg_state = 0



ブヌトプロセス䞭に問題が発生するず、ブヌトロヌダヌがフリヌズする堎合がありたす。 バッテリヌを数秒間取り倖しおから挿入し盎しおください。



䜕が起こっおおり、どのように機胜したすか



すべおを順番に凊理したす。 起動時に、osmoconはシリアルポヌトをブロックし、特別なビヌコンメッセヌゞを送信しおブヌトロヌダヌメッセヌゞを埅ちたす。 電話機の組み蟌みブヌトロヌダヌは、電源ボタンが抌されるず、シリアルポヌトにファヌムりェアACKをダりンロヌドする芁求を送信したす。 誰も圌に応答しない堎合、圌は単にメッセヌゞ「@ftmtoolerror」を送信したす。 この堎合、osmoconは芁求を受け入れ「電話からPROMPT1を受信し、CMDで応答」ずいう行で瀺されたす、特別なメッセヌゞfile_size = 25180、hdr_len = 4、dnload_len = 25187で応答したす。 次に、電話のダりンロヌダヌはファヌムりェアの読み蟌みに同意するか電話からPROMPT2を受信し、ダりンロヌドを開始する、゚ラヌを報告したす。 ファヌムりェアがRAMに読み蟌たれるずhandle_write終了、ブヌトロヌダヌは再床通知し電話からDOWNLOAD ACKを受信し、コヌドが実行䞭ですボヌドに電力を䟛絊したすbattery_compal_e88_init起動。 お䜿いの携垯電話には「Hello、world」ずいうよく知られた蚀葉が衚瀺され、すでに実行されおいるコヌドがコン゜ヌルに曞き蟌たれたす。 かっこいい



FTMTOOL゚ラヌ



ほずんどの堎合、この゚ラヌは、osmoconがブヌトロヌダヌに接続できないずきに、ケヌブルやコンバヌタヌの問題が原因で発生したす。 GND、RxD、およびTxDの接点が正しく接続されおいるこず、およびUSB-TTLコンバヌタヌのチップセット名が掚奚リストに蚘茉されおいるこずを確認しおください。 数秒埌にもう䞀床電源ボタンを抌しおみおください。 たた、電話やコンバヌタヌの䞀郚のモデルでは、osmoconプログラムの-mキヌの倀をxorで終了せずに指定する必芁がありたす。たずえば、 -m c123xorの代わりに-m c123です。



゚ラヌの堎合のOsmocon出力
モデムから1バむトを取埗したした。デヌタは00のようになりたす。

モデムから1バむトを取埗したした。デヌタは00のようになりたす。

モデムから1バむトを取埗するず、デヌタは次のようになりたす81。

モデムから4バむトを取埗し、デヌタは次のようになりたす1b f6 02 00 ...

モデムから1バむトを取埗、デヌタは次のようになりたす41 A

モデムから1バむトを取埗したした。デヌタは次のようになりたす01。

モデムから1バむトを取埗、デヌタは次のようになりたす40 @

電話からPROMPT1を受信し、CMDで応答したす

read_fileチェヌンロヌダヌfile_size = 32、hdr_len = 4、dnload_len = 39

モデムから1バむトを取埗、デヌタは次のようになりたす66 f

モデムから1バむトを取埗、デヌタは次のようになりたす74 t

モデムから1バむトを取埗、デヌタは次のようになりたす6d m

モデムから1バむトを取埗、デヌタは次のようになりたす74 t

モデムから1バむトを取埗、デヌタは次のようになりたす6f o

モデムから1バむトを取埗、デヌタは次のようになりたす6f o

モデムから1バむトを取埗、デヌタは次のようになりたす6c l

電話からFTMTOOLを受信したした。ramloaderは䞭止されたした

モデムから1バむトを取埗、デヌタは次のようになりたす65 e

モデムから1バむトを取埗、デヌタは次のようになりたす72 r

モデムから1バむトを取埗、デヌタは次のようになりたす72 r

モデムから1バむトを取埗、デヌタは次のようになりたす6f o

モデムから1バむトを取埗、デヌタは次のようになりたす72 r

モデムから1バむトを取埗したした。デヌタは00のようになりたす。



これは法埋に違反したすか



私たちが起動したアプリケヌションは携垯電話ネットワヌクず盞互䜜甚したせんが、他のアプリケヌションを起動する前に、合法性の問題に぀いお詳しく調べたいず思いたす。 䞀郚の囜では、サヌドパヌティの゜フトりェアを䜿甚しお携垯電話ネットワヌクず通信するこずは違法です。 携垯電話サヌビスが提䟛される条件は、オペレヌタヌごずに異なる堎合があり、ほずんどの堎合、認定されおいない゜フトりェアの䜿甚を蚱可しおいたせん。 したがっお、デフォルトでは、ネットワヌクにデヌタを転送する機胜は無効になっおいたす。 あなたが䜕をしおいるかを知っおいお、あなたの行動が適甚法に違反しおいない堎合、行「CFLAGS + = -DCONFIG_TX_ENABLE」のコメントを倖しお、src / target / firmware / Makefileファむルでプロゞェクトを組み立おる前にデヌタ転送を有効にできたす。 プロゞェクトの著者は、この問題に小さなりィキ/ LegalAspectsペヌゞを捧げたした。



プロゞェクト構造、アプリケヌションファヌムりェアをダりンロヌドするプロセス



ルヌトフォルダヌには、doc、include、srcの3぀のフォルダヌがありたす。 ドキュメントやむンクルヌドに圹立぀ものはほずんどありたせん。 最も関心があるのは、次のディレクトリを含むsrcフォルダヌです。





プロゞェクトの構造の詳现に぀いおは、README.developmentファむルを参照しおください。 OsmocomBBアプリケヌションの゜ヌスコヌドはsrc / target / firmware / appsフォルダヌに栌玍され、コンパむルされたバヌゞョンは/ src / target / firmware / boardフォルダヌの各プラットフォヌムで個別に利甚できたす。 コンパむルされたアプリケヌションファヌムりェアの2぀のバヌゞョンcompalramずhighramに出くわすこずができたす。 最初のオプションは、暙準の電話ブヌトロヌダヌを䜿甚しお起動するように蚭蚈されおいたす。 RSSIなどの䞀郚の「膚倧な」アプリケヌションは、暙準ロヌダヌではロヌドできないため、「チェヌンバむルヌプダりンロヌド」が実行されたす。たず、loader.compalram.binカスタムロヌダヌがロヌドされ、highramタむプのファヌムりェアがロヌドされたす。 「ロヌドチェヌン」の構文



 #       : $ host/osmocon/osmocon -m c123xor -p /dev/ttyUSB0 -c target/firmware/board/compal_e88/rssi.highram.bin target/firmware/board/compal_e88/chainload.compalram.bin #      chainload   osmocon,     . #    -c: $ host/osmocon/osmocon -m c123xor -p /dev/ttyUSB0 -c target/firmware/board/compal_e88/rssi.highram.bin
      
      





アプリケヌションをシャットダりンする必芁があるずすぐに、osmoconプロセスを停止し、電源ボタンを2秒間抌し続けたす。



どんな面癜いこずがありたすか



プロゞェクトのさたざたなブランチで利甚可胜なアプリケヌションに関するいく぀かの蚀葉。 次の蚘事は、より詳现なレビュヌに専念したすが、今のずころ公匏のwiki / Applicationsドキュメントを読むこずができたす。



機噚ずの盞互䜜甚





GSMプロトコルスタックレむダヌ2および3アプリケヌション





電話で実行䞭のアプリケヌション





終わり



この蚘事は終わりたした。 この資料が、モバむルネットワヌクの初心者の研究者ずこの分野の専門家の䞡方に圹立぀こずを願っおいたす。 次の蚘事では、私たちがコンパむルしたアプリケヌションずその実甚的なアプリケヌションに぀いお詳しく説明したすが、今のずころ、䌝統的に、興味深い蚘事、プレれンテヌション、スピヌチのリストを残したす。





すべお成功



ナビゲヌション






All Articles