使用buildroot配置uclibc交叉編譯工具鏈!


前情提要

在學習《家用路由器0day漏洞挖掘技術》一書中修復二進制仿真環境部分的時候,書中采用動態庫劫持的方式,重新實現了二進制中仿真失敗的函數,並將源文件使用交叉編譯鏈編譯為目標架構下的動態庫文件。我按照此鏈接中的方式安裝了arm-linux-gnueabi之后,編譯生成的so文件無法使用,經過分析發現,路由器固件中二進制是基於uclibc庫的,而不是eabi或者glibc,所以我安裝的交叉編譯工具版本不對!下面就來講一下如何使用buildroot安裝基於uclibc庫的交叉編譯工具鏈

* 下載buildroot

工具下載地址,從這里進去下載,然后解壓,並進入buildroot文件夾。

* 配置

  1. configs文件夾中包含了工具提前配置好的適用於很多平台的配置文件,我們可以從中選擇自己需要的。我的目標架構是ARM架構,因此我選擇了qemu_arm_vexpress_defconfig文件,然后將該文件復制到buildroot文件夾下,並執行make qemu_arm_vexpress_defconfig命令進行初步配置。
  2. 終端輸入make menuconfig命令,彈出窗口可以進行進一步的配置,這里可以參考文章最后的鏈接[1],對Target optionsBuild optionsToolchain等選項進行設置。
    2.1 Target options
    根據目標平台架構進行設置,還有大小端等,最后的use soft-float給選上(這個不知道是干嘛的,參考資料里選了那我也選)。
    2.2 Build options
    這個選項中需要注意Host dir,這個可以自定義為/usr/local/xxx,其中xxx是自己創建的一個文件夾,名字隨意。這個選項設置的好處就是方便后續的移植,可以很方便的在其他機器上使用這個編譯工具。
    2.3 Toolchain
    這個里邊需要注意以下幾點。① Toolchain type選擇Buildroot toolchain內部工具鏈; ② custom toolchain vendor name就是自定義工具鏈的名字; ③ Kernel Headers,內核版本號,這個需要根據自己的Linux環境來選擇,使用uname -a顯示系統信息,選擇一致的版本就可以,如果沒選對的話之后可以根據報錯再回來改; ④ C library也就是C庫,選uclibc; 剩下的內容可以默認不改。
  3. 配置好以上信息,保存一下,退出即可。
  4. 終端中執行sudo make命令,等待執行完成。期間可能會出現很多報錯,請看下一節。

* 過程中遇到的問題

  1. Unable to find the ncurses libraries
    執行以下命令:sudo apt-get install ncurses-dev
  2. 提示沒有安裝pkg-config
    參考此鏈接,一定要看鏈接。從wget命令下載源碼,到解壓,再到./configure\make\make check\sudo make install,安裝完成。安裝好的pkg-config文件在目錄/usr/bin下,需要將其復制到指定的Host dir下的某一路徑下,應該是/usr/local/xxx/bin,報錯中也會提到相應的路徑,安裝好復制過去就好了,如果不復制的話還是會報錯提示找不到。
  3. 在安裝pkg-config時提示configure: error: Either a previously installed pkg-config or "glib-2.0 >= 2.16" could not be found.
    解決辦法:./configure --with-internal-glib
  4. 報錯Incorrect selection of kernel headers: expected 3.2.x, got 4.6.x
    這種報錯中3.2.x是在上一節2.3中自己選的,重新運行make menuconfig把選項改成后邊這個4.6.x就行了。要根據自己的報錯改成相應的值,我的是改成了4.16.x(但是我的系統信息明明是4.15.x,不知道為啥會不一致)。
    鏈接中還給了另外一種方法,但是我找不到它里邊提到的那個路徑下的文件..

參考資料

[1] buildroot之交叉編譯環境


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM