您的位置:首页 > 运维架构 > Linux

Build OpenCORE 2.05 on x86 Linux

2015-06-10 11:27 351 查看


Build OpenCORE 2.05 on x86 Linux

一、目的 ..............................................................................
2
二、環境 & 所需工具 ...............................................................
2
三、編譯前的準備 ..................................................................
2
四、開始編譯 OpenCORE ....................................................
2
五、註解掉 XCXXFLAGS 參數之原因 ....................................
6
六、編譯後所產生的 library 及 binary 執行檔 ......................
8
七、檢驗 binary 執行檔及 library 之完整度 ..........................
9
八、測試前的注意事項 .........................................................
12
九、測試執行檔 ....................................................................
15
一、目的
在 x86 Linux 平臺上 ( 例如 PC) ,編譯 OpenCORE 的 source
code ,並利用內建的 test application來對所產生的 library 進行驗證,確保其可用性。
二、環境 & 所需工具
OS
Ubuntu 9.04
GCC
v4.3.3
G++
v4.3.3
make
v3.81
UnZip
v5.52
三、編譯前的準備
1. 安裝 GCC 、 G++ 、 make 、 UnZip
a. 輸入以下指令來更新套件庫
sudo apt-get update
b. 輸入以下指令來安裝所需工具
sudo apt-get install gcc g++ make unzip
四、開始編譯 OpenCORE
1. 將 OpenCORE source code 的壓縮檔解壓縮
( 假設壓縮檔放在自己的家目錄下 )
unzip opencore.zip
2. 進入 opencore source
code 資料夾
cd opencore
3. 執行以下指令並 記下此路徑 ( 之後會常用到 )

pwd
以下為我的執行結果: ( 每個人的執行結果均不同 )
之後只要提到 <opencore > 就代表是這個路徑的意思。
4. 進入以下目錄
cd <opencore >/build_config/opencore_dynamic
<opencore > 即為第 3 步所得到之路徑
5. 執行以下指令來設定環境變數
source setup.sh <opencore >
<opencore > 即為第 3 步所得到之路徑
6. 執行以下指令來開始編譯 OpenCORE source
code
make
7. 遇到第一個 Error

從此 error message 可得知,在編譯 source
code 過程中有一些 warning 被當成 error ,為了使編譯能夠完成,必須修改 gcc 編譯的參數,使其不要將 warning 當成 error 。

8. 執行以下指令來修改 makefile
gedit <opencore >/engines/player/test/build/android/local.mk
<opencore > 即為第 3 步所得到之路徑
11 行 註解掉 ( 前面加個 # 即可 ) ,如下:
# XCXXFLAGS += $(FLAG_COMPILE_WARNINGS_AS_ERRORS)
註解之後記得存檔。
9. 繼續執行 make 指令
make
剛剛的 error 變成 warning 了。

10. 遇到第二個 Error
此 error message 發生原因如同第 7 步所述。
11. 執行以下指令來修改 makefile
gedit <opencore >/engines/2way/test/build/make/local.mk
<opencore > 即為第 3 步所得到之路徑
24 行 註解掉 ( 前面加個 # 即可 ) ,如下:
# XCXXFLAGS += $(FLAG_COMPILE_WARNINGS_AS_ERRORS)
註解之後記得存檔。
12. 繼續執行 make 指令
make
13. 遇到第三個 Error
此 error message 發生原因如同第 7 步所述。

14. 執行以下指令來修改 makefile
gedit <opencore >/ engines/pvme/test/build/make/local.mk
<opencore > 即為第 3 步所得到之路徑
7 行 註解掉 ( 前面加個 # 即可 ) ,如下:
# XCXXFLAGS += $(FLAG_COMPILE_WARNINGS_AS_ERRORS)
註解之後記得存檔。
15. 繼續執行 make 指令
make
16. 編譯完成,下一節將解釋為何要註解掉 makefile 中的 XCXXFLAGS 參數。

五、註解掉 XCXXFLAGS 參數之原因
1. 執行以下指令來查看 gcc 的編譯參數
man gcc
所以表示,當時在 makefile 中定義 gcc 編譯參數時,必定多加了 -Werror 這個選項,導致它將warning 當成 error 。

那這又和 XCXXFLAGS 這個參數有什麼關係呢?畢竟我們剛剛註解掉的是這個 XCXXFLAGS 這個參數,而不是 -Werror 。
按一下 q 離開 man 模式。
2. 執行以下指令 ( 此一步驟並不需要改動任何東西,請注意 )
gedit <opencore >/opencore/tools_v2/build/make/g++.mk
<opencore > 即為第四節第 3 步所得到之路徑
在第 26~27 行位置,發現以下兩行:
#Make all warnings into errors.
FLAG_COMPILE_WARNINGS_AS_ERRORS := -Werror
而之前我們註解掉的那一行如下:
XCXXFLAGS += $(FLAG_COMPILE_WARNINGS_AS_ERRORS)
由上可發現,我們註解掉 XCXXFLAGS 是為了避免它去使用FLAG_COMPILE_WARNINGS_AS_ERRORS 這個參數,也就是避免使用了 -Werror 這個參數。
那一定有人會疑惑為什麼當初在寫 makefile 時,要加入這參數呢?
原因是因為在寫大型的軟體時,作者都會小心的去撰寫 code ,以免在編譯過程出現任何 warning或 error ,因為有時某些 warning 也可能是很危險的,所

以最簡單的方式就是使用 -Werror 這參數,連一個 warning 都不允許

那為什麼我們卻又註解掉 XCXXFLAGS 這個參數呢?其實仔細看,我們所修改的 makefile ,都是放在 test 資料夾下,這些 source
file 並不屬於 OpenCORE 核心部份 ,這些只是最後我們要用的 test
application 的 source file 而已,例如:
<opencore >/engines/player/test /build/android/local.mk
所以在編譯 OpenCORE 核心部份的時候,是連一個 warning 或 error 都沒有出現的,所以產生出來的 library 都是沒有問題的。
而這些出現 warning 的 test
application 的 source file ,可能是作者還沒修改的 bug ,基於不修改source
code 的前提下,我們選擇註解掉 XCXXFLAGS 這個參數,讓編譯過程可以完成。

六、編譯後所產生的 library 及 binary 執行檔
1. 第五節所編譯出來產生的 library 都放在:
<opencore>/build_config/opencore_dynamic/build/installed_lib/linux
<opencore > 即為第四節第 3 步所得到之路徑

2. 第五節所編譯出來產生的 binary 執行檔都放在:

<opencore >/build_config/opencore_dynamic/build/bin/linux
<opencore > 即為第四節第 3 步所得到之路徑
下一節將檢驗所產生出來的 binary 執行檔及 library 之完整度。
七、檢驗 binary 執行檔及 library 之完整度
1. 進入到 binary 執行檔的資料夾
cd <opencore >/build_config/opencore_dynamic/build/bin/linux
<opencore > 即為第四節第 3 步所得到之路徑
2. 執行以下指令來檢查執行檔是否可在 x86 機器上跑
file test_omx_client
此圖說明了這個執行檔是 x86 32-bit 的 ELF(E xecutable
and L inkable F ormat) , for Linux ,並使用了動態聯結 library 。

既然它使用了動態聯結 library ,所以就必須檢查所需的 library 是否都存在,下一步將檢查 library 的存在與否。
3. 執行以下指令來檢查執行檔所需的 library 是否都存在
ldd test_omx_client
我們可以發現有兩個 library 是 not
found !

而根據第六節第 1 步可以知道, not
found 的兩個 library 是放在
<opencore>/build_config/opencore_dynamic/build/installed_lib/linux
<opencore > 即為第四節第 3 步所得到之路徑
這代表當時在產生這個執行檔時,系統不知道這兩個 library 的位置,所以下一步我們會將這個路徑加到系統中,並重掃一次 library ,讓執行檔可以正確 link

到所需的 library 。

4. 執行以下指令在 /etc/ld.so.conf 中新增動態聯結路徑
( 因為要修改的檔案是需要 root 權限,所以請登入 root 修改,或者使用 sudo )
sudo gedit /etc/ld.so.conf
請在檔案最後將以下路徑加進去
<opencore>/build_config/opencore_dynamic/build/installed_lib/linux
<opencore > 即為第四節第 3 步所得到之路徑
修改完之後記得存檔。
5. 執行以下指令來重新掃系統中所有的 library
( 因為要執行的指令是需要 root 權限,所以請登入 root 修改,或者使用 sudo )
sudo /sbin/ldconfig.real -v
6. 重新執行以下指令來檢查執行檔所需的 library 是否都存在
ldd test_omx_client
我們發現剛剛找不到 library 的 libopencore_player_debug.so 及 libopencore_common_debug.so 都已經正確聯結到了。
7. 執行以下指令將 pvplayer.cfg copy 到執行檔所在的資料夾
cp <opencore >/pvplayer.cfg /
<opencore >/build_config/opencore_dynamic/build/bin/linux /
這個 pvplayer.cfg 中是紀錄了 OpenCORE 會用到的 library 的 UUID 。
八、測試前的注意事項
接下來我們會利用編譯 OpenCORE 所產生出來的執行檔來做測試。
1. 測試 PV Player Engine 的功能
利用的執行檔是 pvplayer_engine_test ,此執行檔的參考手冊 在:
<opencore >/doc/pvplayer_engine_unit_test_guide.pdf
<opencore > 即為第四節第 3 步所得到之路徑

2. 測試 OpenMAX decoder 的功能

利用的執行檔是 test_omx_client ,此執行檔的參考手冊 在:
<opencore >/doc/ omx_decoder_test_app_guide.pdf
<opencore > 即為第四節第 3 步所得到之路徑
3. 測試檔所會用到的影音檔 ( 如 xxx.mp4 、 xxx.mp3 、 xxx.aac 、 xxx.264
...)
MP4 、 MP3 、 AAC 檔案放在以下這個位置
<opencore >/engines/player/test/data
<opencore > 即為第四節第 3 步所得到之路徑
我們利用 test.mp4 來當測試檔。
H.264 、 AMR 檔案放在以下這個位置
<opencore >/codecs_v2/omx/omx_testapp/data
<opencore > 即為第四節第 3 步所得到之路徑
我們利用 ba1_sony_c.264 來當測試檔。
4. 將 test.mp4 及 ba1_sony_c.264 檔案 copy 到執行檔所在的資料夾
分別執行以下兩道指令
cp <opencore >/engines/player/test/data/test.mp4 /
<opencore >/build_config/opencore_dynamic/build/bin/linux /
cp <opencore >/codecs_v2/omx/omx_testapp/data/ba1_sony_c.264 /
<opencore >/build_config/opencore_dynamic/build/bin/linux /
<opencore > 即為第四節第 3 步所得到之路徑

5. 建立執行檔所需的 output 檔

touch output.txt
這個檔案是執行檔所需的 output 檔,請自己命名喜歡的檔名,在這邊我把它命名為 output.txt 。
6. 確定回到執行檔所在的資料夾
cd <opencore >/build_config/opencore_dynamic/build/bin/linux /
<opencore > 即為第四節第 3 步所得到之路徑
7. 確認所需檔案
確認執行檔目錄下有:
兩個執行檔
pvplayer_engine_test
test_omx_client

一個 cfg 檔
pvplayer.cfg
兩個測試影音檔
test.mp4
ba1_sony_c.264
一個 output 檔
output.txt
九、測試執行檔
1. 測試 PV Player Engine 的功能
利用的執行檔是 pvplayer_engine_test
此執行檔要輸入的參數如下表:
-source InputFile
InputFile 是要輸入的 file 位置
-test a b
a,b 是要測試的 range ,例如 -test
0 2 就是從第 0 號測試到第 2 號。
-logall
加此選項就可以 log 全部的資訊
在參考手冊中,會詳細解說測試編號的細節 ( 例如 -test) 及更多的 log 選項 ( 例如 -logall ) ,請務必要詳細閱讀參考手冊。
參考手冊位置請參考第八節第 1 步。
執行以下指令來利用 test.mp4 檔來測試第 0 個測試,並秀出全部的資訊
./pvplayer_engine_test -source test.mp4 -test 0 0 -logall
輸出的執行畫面最後會秀出一些訊息,說明執行的成功與否、執行時間及 memory 使用狀況 ... 等。
2. 測試 OpenMAX decoder 的功能
利用的執行檔是 test_omx_client
此執行檔要輸入的參數如下表:
InputFile
InputFile 是要輸入的 file 位置
-o OutputFile
請指定第八節第 5 步所建立的 output 檔。
-c xxx
xxx 是輸入的 file 的檔案類型,例如 H.264 檔就是 avc , MP3 檔就是 mp3
... 等
-t a b
a,b 是要測試的 range ,例如 -test
0 2 就是從第 0 號測試到第 2 號。
-l
將 log 資訊寫到 log 檔 ( 不需指定位置 )
在參考手冊中,會詳細解說測試編號的細節 ( 例如 -t) 及更多的影音檔資訊選項 ( 例如 -c) ,請務必要詳細閱讀參考手冊。
參考手冊位置請參考第八節第 2 步。
執行以下指令來利用 ba1_sony_c.264 這個 avc 檔來測試第 0
~ 1
個測試,並將資訊寫入 logfile 中。
./test_omx_client ba1_sony_c.264 -o output.txt -c avc -t 0 1 -l
輸出的執行畫面最後會秀出一些訊息,說明每一個測試的成功與否。 至於一些更詳細的訊息,因為剛剛有加了 -l 選項,所以它會自動寫到當前目目錄的 logfile.txt 中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: