Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3537133
  • 博文数量: 864
  • 博客积分: 14125
  • 博客等级: 上将
  • 技术积分: 10634
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-27 16:53
个人简介

https://github.com/zytc2009/BigTeam_learning

文章分类

全部博文(864)

文章存档

2023年(1)

2021年(1)

2019年(3)

2018年(1)

2017年(10)

2015年(3)

2014年(8)

2013年(3)

2012年(69)

2011年(103)

2010年(357)

2009年(283)

2008年(22)

分类: Java

2010-12-01 11:04:49

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 都放在:

/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 是放在

/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

請在檔案最後將以下路徑加進去

/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 中。

阅读(1287) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

plgg08142011-03-16 15:07:16

您亲自试验过编译opencore吗?我这边用的环境和您一样,我出现了比较多的错误,解决了一些,可是还有一些不知道该怎么解决? 想和您交流一下