Out of tree build

剛剛上一章講解了基本套件和基本建制,這一章來講解一下如果要你有多個案子想要一起建制,而且不想要放在buildroot 的tree裡面要怎麼處理。

buildroot是使用參數『O』來控制輸出的,就像上一個例子一樣,如果你沒有指定輸出的資料夾的話,它會使用最上層的『output』,所以代表的就是『O = buildroot/output/』的意思。可以看到Makefile檔案裡面:

如果你有在建立組態時有指定『O = /path/to/directory』的話,系統就會在你指定的路徑底下建立一個『wrapper - Makefile』,就是一個子Makefile的意思。

假設我想要建立兩個案子,叫做『ra-pi2』和『ra-pi3』,所以在跟buildroot同一個層級上建立兩個資料夾,然後到『buildroot』底下去下指令,這個指令會在『ra-pi2』裡面去建立組態:

mkdir ra-pi2
mkdir ra-pi3
cd buildroot
make O=../ra-pi2/ raspberrypi2_defconfig
cd ..

『ra-pi3』的部份我們用另一種方式建立組態:
cd ra-pi3
make -C ../buildroot O=$(pwd) raspberrypi3_defconfig

總而言之,兩個結果是差不多的,只是一個在來源下指令,一個是在目標下指令。以上用法也可以使用menuconfig,
eg.
make O=../ra-pi2/ menuconfig

建立完之後,tree長的如下,可以看到『ra-pi2』和『ra-pi3』都有各自的Makefile:

├── buildroot
│  ├── arch
│  ├── board
│  ├── boot
│  ├── build.log
│  ├── CHANGES
│  ├── Config.in
│  ├── Config.in.legacy
│  ├── configs
│  ├── COPYING
│  ├── DEVELOPERS
│  ├── docs
│  ├── fs
│  ├── linux
│  ├── Makefile
│  ├── Makefile.legacy
│  ├── output
│  ├── package
│  ├── README
│  ├── support
│  ├── system
│  └── toolchain
├── ra-pi2
│  ├── build
│  └── Makefile
└── ra-pi3
   ├── build
   └── Makefile

比較過兩個Makefile以後,發現兩個MAKEARGS都指到同一個路徑,其他內容也一模一樣:

Then Build

組態建置完後,就直接建置專案:

cd ra-pi2
make 2>&1 | tee build_ra2.log

cd ..
cd ra-pi3
make 2>&1 | tee build_ra3.log

建制完了以後,你就會看到輸出映像檔出現在每個案子底下的『images』:

├── ra-pi2
│  ├── build
│  ├── host
│  ├── images
│  ├── Makefile
│  ├── staging -> /home/hugh/workspace/ra-pi2/host/usr/arm-buildroot-linux-uclibcgnueabihf/sysroot
│  └── target
├── ra-pi3
 ├── build
 ├── host
 ├── images
 ├── Makefile
 ├── staging -> /home/hugh/workspace/ra-pi3/host/usr/arm-buildroot-linux-uclibcgnueabihf/sysroot
  └── target

results matching ""

    No results matching ""