Linuxは海思3516にOprofileを移植した

5597 ワード

最近、プロジェクトのニーズのため、Oprofileを海思3516プラットフォームに移植する必要があります.Oprofileは比較的使いやすいオープンソースの性能分析ツールです.CPUをサンプリングすることで、プログラムの各部分にかかる時間を計算します.正確と言うべきだ.
oprofileをインストールする前に、システムがoprofileをサポートすることを保証する必要があります.つまり、システムがカーネルをコンパイルするときに2つのチェックボックスをオンにします.
make menuconfig
General setup --->

[*] Profiling support
<*> OProfile system profiling

Oprofileにはpoptライブラリとbinutilsライブラリのサポートが必要なので、Oprofileをインストールする前にpoptとbinutilsをインストールします.
インストール前にいくつかの環境変数を設定する必要があります
export CC=arm-none-linux-gnueabi-gcc //        

export CXX=arm-none-linux-gnueabi-g++ //

export CFLAGS=-static

export CXXFLAGS=-static

export CPPFLAGS=-static

export ac_cv_va_copy=C99

一、インストールpoptライブラリダウンロードアドレス:http://download.chinaunix.net/download.php?id=16763&ResourceID=8268
ダウンロードが完了したら、解凍:
tar zxvf popt-1.7.tar.gz 

次にディレクトリにコマンドを実行します
./configure --with-kernel-support --target= <arm-hisiv100-linux> --host=<arm-hisiv100-linux> --prefix=</home/XXX/oprofile> && make && make install

--targetと--hostはあなたのシステムの名前です.--prefixは、ライブラリの生成ディレクトリです.--with-kernel-supportは2.6のコアでしかできません.コアのソースコードは必要ありません.2.4のコアでは、--with-kernel=<コアのソースコードパス>を指定する必要があります.
コンパイルが完了すると、生成したincludeディレクトリとlibディレクトリの下のファイルをクロスコンパイラのincludeディレクトリとlibディレクトリにそれぞれコピーします.これでpoptもインストール完了です.
二、binutilsのインストール
ダウンロードアドレス:http://ftp.gnu.org/gnu/binutils/
ダウンロードが完了したら、解凍:
tar zxvf binutils-2.20.1.tar.gz

次に、ディレクトリで次のコマンドを実行します.
./configure --with-kernel-support --target=arm-hisiv100-linux --host=arm-hisiv100-linux --enable-install-libbfd --prefix=/home/xxx/oprofile/binutils --disable-nls

--enable-install-libbfdはbfdライブラリをインストールするためです.デフォルトではbinutilsはbfdライブラリをインストールしないためです.これにより、後でOprofileをコンパイル中にエラーが発生します.
--disable-nlsは、このオプションを追加しないと、後でコンパイルするときに/devel/gettextライブラリへの依存度が増加します.後のOprofileのコンパイルエラーが発生する可能性があります.
三、oprofileのインストール
ダウンロードアドレス:http://oprofile.sourceforge.net/news/
解凍:
tar zxvf oprofile-0.9.6.tar.gz

2.6コアの場合、コンパイル前に2.4コアのサポートを排除するために、いくつかのコードを修正する必要があります(そうしないと、後でエラーが発生します).主に以下の点があります(赤い部分を削除します).
./daemon/Makefile.am
Line 1:
SUBDIRS = liblegacy .

Line 49:
bin_PROGRAMS = oprofiled

oprofiled_LDADD = \
liblegacy/liblegacy.a \
../libabi/libabi.a \
../libdb/libodb.a \
../libop/libop.a \
../libutil/libutil.a

./daemon/Makefile.in
Line 73:
oprofiled_DEPENDENCIES = liblegacy/liblegacy.a  ../libabi/libabi.a \

Line 239:
SUBDIRS = liblegacy .

Line 284:
oprofiled_LDADD = \
liblegacy/liblegacy.a \
../libabi/libabi.a \
../libdb/libodb.a \
../libop/libop.a \
../libutil/libutil.a

./daemon/oprofiled.cLine 80:
extern struct oprofiled_ops opd_24_ops;

Line 480:
 switch (op_get_interface()) {
case OP_INTERFACE_24:
printf("Using 2.4 OProfile kernel interface.
");

return &opd_24_ops;
case OP_INTERFACE_26:
printf("Using 2.6+ OProfile kernel interface.
");

return &opd_26_ops;

主に以上の点で、バージョンが違うなどの理由で、行番号などが変わる可能性があります.
変更が完了したら、コマンドを入力します.
 ./configure --with-kernel-support --target=arm-hisiv100-linux --host=arm-hisiv100-linux --with-binutils=/home/xxx/oprofile/binutils --prefix=/home/xxx/oprofile/oprofile && make && make install 

コマンドの実行が完了すると、oprofileディレクトリの下にoprofileのファイルが生成されます.これらのファイルを組み込みプラットフォームにコピーすると、oprofileの移植に成功します.