[[bc10-router]]

#contents

**bc10-router kernel 更新 [#aac487d9]
bc10-router の起動イメージとして~
arago-project の beagleboard 用 arago-console-image を使用した場合、~
linux kernel の version は 3.3.7 になります。~
~
これは、{HOME}/oe/arago/conf/machine/beagleboard.conf に書かれている~
 PREFERRED_PROVIDER_virtual/kernel = "linux-stable"
から {HOME}/oe/arago/recipes/linux/linux-stable_3.3.bb が kernel ビルド時の設定として使用されるためです。~
~
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git から 3.3.7 stable kernel を clone し、~
beagleboard 向けに {HOME}/oe/arago/recipes/linux/linux-stable/ にある~
-0001-ARM-OMAP-Cleanup-Beagleboard-DVI-reset-gpio.patch
-0001-ARM-OMAP2-UART-Fix-incorrect-population-of-default-u.patch

の二つの patch を当てたものが bitbake でビルドされます。~
~
この default の kernel を使用した場合も家庭用ルーターとしては十分な性能を得られていますが、~
以下のような点に関して性能を追及するため kernel を更新し、性能に改善がみられるか確認を行いました。~
-より高いネットワークスループット
-より高速な無線LAN接続
-より少ない消費電力

Android を使用したスマートフォンなどの普及により、 Linux kernel の ARM SoC 向けソースコードは~
近年開発が非常に活発になっており、kernel を更新することで Ethernet や無線LANのドライバー、無線LANサブシステム、~
パワーマネージメントなどの性能向上が見込めるためです。~

**kernel 更新手順 [#ec30883e]
bc10 向けの kernel の更新は beagleboard 向けの kernel 更新と同じソースコードを利用して行います。~

***RobertCNelson リポジトリ [#s41a9562]
Beagleboard、Pandaboard など TI の OMAP/Sitara シリーズ SoC 向けのパッチを含むカーネルビルド環境を提供している~
RobertCNelsonリポジトリ~
https://github.com/RobertCNelson/linux-dev~
から環境一式を取得します。
 $ mkdir {work_dir}
 $ cd ~/{work_dir}
 $ git clone https://github.com/RobertCNelson/linux-dev.git
 $ cd linux-dev

作業時点での master branch がどの version の kernel をビルドする設定になっているか、version.sh を確認します。
 #Kernel/Build
 KERNEL_REL=3.8
 KERNEL_TAG=${KERNEL_REL}-rc3
 BUILD=d0
2013年1月末時点で default は 3.8 の開発ブランチになっているので、すでに安定版がリリースされている 3.7 にブランチを切り替えます。
 $ git branch -a
 * master
   remotes/origin/HEAD -> origin/master
   remotes/origin/am33x-v3.1
   remotes/origin/am33x-v3.2
   remotes/origin/am33x-v3.6
   remotes/origin/am33x-v3.7
   remotes/origin/master
 
 $ git checkout -b am33x-v3.7 remotes/origin/am33x-v3.7
ビルド対象を切り替えたら設定ファイルの整備を行います。~
予め用意されている sample をコピーし、~
 $ cp system.sh.sample system.sh
ARM GCC CROSS Compiler と、uImage のビルドに関する設定がコメントアウトされているのを~
有効に戻し、設定を行います。~
 #ARM GCC CROSS Compiler: (See hints in Readme, for different gcc cross compiler versions)
 #CC=arm-linux-gnueabi-
 CC=arm-arago-linux-gnueabi-
 
 ###OPTIONAL: BUILD_UIMAGE: also build uImage vs just zImage
 #
 BUILD_UIMAGE=1
 
 ###OPTIONAL: ZRELADDR: needed when building uImage's.
 #
 ##For TI: OMAP3/4/AM35xx
 ZRELADDR=0x80008000

ti-sdk-beagleboard-05.05.01.00 の Cross Toolchain へ PATH を通してから~
build_kernel.sh を実行します。
 $ export PATH={HOME}/ti-sdk-beagleboard-05.05.01.00/linux-devkit/bin:$PATH
 $ ./build_kernel.sh
実行すると {HOME}/linux-src/ に kernel ソースを git clone し、~
そこから ~/{work_dir}/linux-dev/KERNEL に 3.7.2 を checkout 後、~
ARM 用 OMAP 用 beagleboard 用の各種 patch を当てた上で menuconfig を行い(kernel config 用コンソールが開きます)、~
config を終了して save すると(save 後の .config は &ref(bc10-router-3.7.2.config); )ビルドが実行され~
deploy ディレクトリに以下のようなファイルが生成されます。~
 $ ls -1
 3.7.2-bone4.1-dtbs.tar.gz
 3.7.2-bone4.1-firmware.tar.gz
 3.7.2-bone4.1-headers.tar.gz
 3.7.2-bone4.1-modules.tar.gz
 3.7.2-bone4.1.config
 3.7.2-bone4.1.uImage
 3.7.2-bone4.1.zImage
 dtbs/
 fir/
 headers/
 mod/
dtbs は 3.7 から ARM アーキテクチャーでも対応された [[DeviceTree:http://omappedia.org/wiki/Device_Tree]] 起動に必要なファイルですが、~
今回は使用しません。~
uImage(3.7.2-bone4.1.uImage)と modules(3.7.2-bone4.1-modules.tar.gz)だけを使用します。~
~
一度 build_kernel.sh によるビルドが終わった後再度ビルドを行いたい場合は tools ディレクトリにある rebuild.sh を利用します。
 $ ./tools/rebuild.sh
ビルド出来たこれらのファイルを [[bc10-router/arago-project]] で作成した bc10-router 起動イメージにコピーして使用します。~
起動用SDカードは fat パーティションが /media/FAT に、ext3 パーティションが /media/EXT3 に mount されているものとします。~
 $ sudo -s
 # cp 3.7.2-bone4.1.uImage /media/FAT/uImage
 # tar xvfz 3.7.2-bone4.1-modules.tar.gz -C /media/EXT3

RobertCNelson リポジトリの 3.7.2 kernel への更新はこれで完了です。


*** kernel.org [#g43092fb]
arago project の default kernel は、3.3.7 stable kernel に~
DVI 出力のための gpio の修正と uart のマルチプレクサの修正を加えているだけで、~
bc10 を起動するのに必要な beagleboard 向けのその他の修正は~
3.3.7 以降の mainline kernel にはすでに取り込まれています。~
そこで、kernel.org で配布されている stable ブランチを使用して kernel を更新する手順も~
確認しておきます。~
~
まず kernel.org から最新 stable ブランチの kernel ソースコードを取得します。~
 $ cd ~/
 $ wget http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.7.2.tar.bz2
 $ tar xvfj linux-3.7.2.tar.bz2
ti-sdk-beagleboard-05.05.01.00 の Cross Toolchain へ PATH を通します。~
 $ export PATH={HOME}/ti-sdk-beagleboard-05.05.01.00/linux-devkit/bin:$PATH
kernel config はできるだけ arago project の default kernel と揃えるため、~
3.3.7 をビルドした際の .config を元に作業し oldconfig を実行します。~
 $ cp {HOME}/oe/arago-tmp/work/beagleboard-arago-linux-gnueabi/linux-stable-3.3.7-r115/git/.config .
 $ make ARCH=arm CROSS_COMPILE=arm-arago-linux-gnueabi- oldconfig
3.3.7 にはなかった 3.7.2 の新しい設定項目をどう設定するかをコンソール上で聞かれるので設定していきます。~
(Y で kenrnel 組み込みにするか、N で無効にするか、m でモジュールにするか)~
設定をすべて終えたら 3.7.2 向けの新しい .config が出来ています。~
さらに調整したい項目がある場合は、oldconfig 完了後であれば menuconfig で設定できます。
 $ make ARCH=arm CROSS_COMPILE=arm-arago-linux-gnueabi- menuconfig 
設定が完了したらビルドします。
 $ make ARCH=arm CROSS_COMPILE=arm-arago-linux-gnueabi-
 $ make ARCH=arm CROSS_COMPILE=arm-arago-linux-gnueabi- uImage
ビルド完了後、kernel module を起動イメージ上へ展開する配置にするため~
仮インストールします。~
 $ mkdir tmp_install
 $ make ARCH=arm CROSS_COMPILE=arm-arago-linux-gnueabi- modules_install INSTALL_MOD_PATH=./tmp_install
完了すると tmp_install を rootfs の / として kernel modules をインストールした状態になっています。~
~
必要なのは arch/arm/boot/uImage と tmp_install/ の lib/ 以下のファイルなので、これを~
bc10-router/arago-project で作成した bc10-router 起動イメージにコピーして使用します。~
起動用SDカードは fat パーティションが /media/FAT に、ext3 パーティションが /media/EXT3 に mount されているものとします。~
 $ sudo -s
 # cp arch/arm/boot/uImage /media/FAT/uImage
 # cd tmp_install
 # cp -a lib/ /media/EXT3/

kernel.org の 3.7.2 kernel への更新はこれで完了です。


**Wi-Fiスループット [#k738cd7e]
arago-project の beagleboard 向け default version の 3.3.7 kernel と~
Robert Nelson repositry を使用して更新した 3.7.2 kernel で~
Wi-Fi のスループットに向上が見られるかを確認しました。~
~
bc10-router をルーターモードで起動させ、~
Wi-Fi アクセスポイントである bc10-router LAN 側インタフェースと~
そこに W-Fi クライアントとして接続している Netbook の Wi-Fi インタフェース間でのスループットを~
nuttcp で計測しました。~
~
***bc10-router wlan0---PC間 [#ja7882eb]
nuttcpによる測定~
WAN側: bc10-router nuttcp -S~
LAN側:  PC nuttcp 192.168.30.1~
-3.3.7~
kernel version(詳細)
 # uname -a
 Linux bc10-router 3.3.7 #1 Mon Nov 26 22:45:08 JST 2012 armv7l unknown
BogoMIPS
 # cat /proc/cpuinfo | grep BogoMIPS
 BogoMIPS        : 581.89
スループット(10回計測平均)
|回     |      1|      2|      3|      4|      5|      6|      7|      8|      9|     10|   Avg.|h
|Mbps   |50.7863|55.0793|53.6637|54.0530|52.7941|55.5915|54.8066|55.8982|54.8012|56.3797|54.3853|
|%TX    |6      |6      |7      |7      |6      |7      |6      |7      |7      |7      |7      |
|%RX    |23     |25     |24     |24     |24     |25     |25     |25     |25     |25     |25     |
|retrans|0      |0      |0      |0      |0      |0      |0      |0      |0      |0      |0      |
|msRTT  |1.27   |1.62   |1.49   |1.40   |1.33   |1.35   |1.44   |1.40   |1.64   |1.92   |1.49   |

-3.7.2~
kernel version(詳細)
 # uname -a
 Linux bc10-router 3.7.2-bone4.1 #3 Wed Jan 16 14:35:07 JST 2013 armv7l unknown
BogoMIPS
 # cat /proc/cpuinfo | grep BogoMIPS
 BogoMIPS        : 388.12
スループット(10回計測平均)
|回     |      1|      2|      3|      4|      5|      6|      7|      8|      9|     10|   Avg.|h
|Mbps   |36.3708|37.5193|37.8842|37.2199|37.4805|37.3811|34.5526|36.7064|38.0515|38.5973|37.1764|
|%TX    |4      |4      |8      |8      |8      |8      |7      |8      |8      |8      |1      |
|%RX    |25     |27     |38     |27     |26     |27     |25     |27     |26     |26     |10     |
|%TX    |4      |4      |8      |8      |8      |8      |7      |8      |8      |8      |7      |
|%RX    |25     |27     |28     |27     |26     |27     |25     |27     |26     |26     |26     |
|retrans|0      |0      |0      |0      |0      |0      |0      |0      |0      |0      |0      |
|msRTT  |1.81   |1.92   |1.71   |1.73   |1.84   |2.08   |1.55   |1.96   |2.92   |4.16   |0.00   |
|msRTT  |1.81   |1.92   |1.71   |1.73   |1.84   |2.08   |1.55   |1.96   |2.92   |4.16   |2.17   |

残念ながら作業時点 2013/01/16 で最新の stable kernel である 3.7.2 への更新で~
ネットワーク性能の向上は得られませんでした。~
~
3.7 から ARM アーキテクチャでも DeviceTree に対応し、一つの kernel で複数の ARM アーキテクチャのマシンを起動できるようになるなど~
ソースコードの整理や共通化が進んだ半面、SoC ごと、マシンごとの最適化という点では一旦後退が見られ~
性能が得られなくなっているものと考えられます。~
~
あくまで性能を追求するのであれば arago-project の default である 3.3.7 kernel を使うのが良いのですが、~
linux kernel 更新による新機能の追加を取り込みたい、ARM アーキテクチャ向けコードの進歩を追いかけたい、といった場合には~
kernel の更新を考慮しなければなりません。

BC::labsへの質問は、bc9-dev @ googlegroups.com までお願い致します。
トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   最終更新のRSS