4、poky支持
poky支持的cpu有x86和arm,對于poky 3.2 的gcc 版本是 4.3.3。5、怎么用external tools ?在local.conf中有一個變量 POKYMODE,比如設置為:POKYMODE= external-csl2006q3這將關聯到文件 meta/conf/distro/include/poky-external-csl2006q3.inc在這個文件里定義了 extern toolchain 的路徑以及編譯選項EXTERNAL_TOOLCHAIN = "/usr/local/csl/arm-2006q3"此時外部編譯器為arm-2006q3,放在/usr/local/csl/arm-2006q3,在poky-external-csl2006q3.inc中,定義了PREFERRED_VERSION_external-csl-toolchain = "2006q3-27"我們在meta/packages/meta/external-csl-toolchain_2006q3-27.bb 中可以看到,它主要是把一些libc庫放在 staging目錄下 ,以共享6 怎么添加一個machine ? 在poky里,已經支持了一些cpu 比如imx31,如果有一個新的芯片要支持,加入芯片名稱為 newchip ,項目名稱為newproject(1) 在local.conf里加上一個 MACHINE = newchip
(2) 可以用BB_NUMBER_THREADS等來加速編譯,但注意前面不要有空格,否則出現 unparsed line: ' BB_NUMBER_THREADS = "4"'
(3) add meta/conf/machine/newchip.conf 在里面定義好 armv5te等定義相應的內核kernel 以及 boot loader PREFERRED_PROVIDER_virtual/kernel = "linux-newchip" EXTRA_IMAGEDEPENDS += "uboot-newchip virtual/kernel " 具體可參考其他的machine conf
(4) 在 linux 里面加上對應的kernel 的 bb文件 在meta/package/linux下面加上 linux-newchip_2.6.28.bb 注意 linux-newchip 和 2.6.28 之間是下劃線,之前我用了- ,結果出現 NOTE: consider defining PREFERRED_PROVIDER_virtual/kernel 然后我改成 PREFERRED_PROVIDER_virtual/kernel = "linux-newchip-2.6.28" 又出現 '[]' RDEPENDS/RECOMMENDED or otherwise requires the runtime entity 'virtual/arm-none-linux-gnueabi-depmod-1.0' but it wasn't found in any PACKAGE or RPROVIDES variables(5) 在uboot里面加上對應的uboot的 bb 文件 在uboot里面加上uboot-newchip_4.5.1.bb,但發現它找到了uboot里面其他的bb編譯 在meta/conf/machine/newchip.conf文件里加上: PREFERRED_PROVIDER_uboot = "uboot-newchip_4.5.1.bb" (6) 在meta/files里面加上device_table-newchip.txt 并在newchip.conf里寫上 IMAGE_DEVICE_TABLES = "files/device_table-newchip.txt"(7)在meta/packages/images 下加上 newproject-image-minimal.bb 和newproject-image-full.bb(8)udev怎么總是編譯失敗 ? 發現將 meta/conf/distro/include/poky-fixed-revisions.inc 的 PREFERRED_VERSION_udev ?= "141" 改為 124 就可以了 。 為什么老的版本可以,而新的版本不可以呢? 我猜想也許是編譯器太老了? 于是將arm2006q3 改為arm2008q3 ,發現 用 arm2008q3就可以了。 原因是glibc在 arm2006q3里面太老了 有些函數沒有(9)把qtopia 4.2.1也加入到poky中 由于用了gcc 4.3編譯器,所以需要修改qtopia 4.2.1的代碼,具體怎么修改參見我的另外一篇blog: buildroot編譯環境 由于我的項目中qtopia 需要用到另外我的一個庫 libABC ,而libABC編譯好了,放在staging/armv5te-none-linux-gnueabi/usr/lib下 怎么讓ld選項加上 staging/armv5te-none-linux-gnueabi/usr/lib ? 沒想到辦法,最后在qtopia的device里面的configure文件里 ,加上 -Lxxx/staging/armv5te-none-linux-gnueabi/usr/lib 才解決問題
新聞熱點
疑難解答