2013年2月6日 星期三

build uClibc toolchains using Buildroot for GM812x (補2/1)

參考來源:

  • uClibc Web site : http://uclibc.org/toolchains.html
  • http://linux.derkeiler.com/Mailing-Lists/Kernel/2009-03/msg04460.html
  • http://www.crifan.com/make_uimage_error_conflicting_types_for_getline_stdio_h_previously_declaration_was_here/
  • https://bugzilla.redhat.com/show_bug.cgi?id=493941


步驟:
1. 在uClibc官網中(http://uclibc.org/toolchains.html)有簡易的說明如何此用 Buildroot 來產生 uClibc 的 toolchains.
2. 下載 Buildroot,然後修改設定檔:(run 'make menuconfig')

  • Target Architecture (ARM (little endian))
  • Target Architecture Variant (arm926t)
  • Target ABI (EABI)
  • Toolchain  --->
    • Kernel Headers (Linux 2.6 (manually specified version))
    • (2.6.28) linux version 
  • Filesystem images ==> 全部取消
3. run 'make'

問題修正:

  • 當在build 到 output/toolchain/linux-2.6.28 kernal時會出現以下的錯誤。


   scripts/unifdef.c:209: error: conflicting types for 'getline'
   /usr/include/stdio.h:653: note: previous declaration of 'getline' was here
   make[2]: *** [scripts/unifdef] Error 1
   make[1]: *** [__headers] Error 2
   make[1]: Leaving directory `/home/ken/WrkSrc/test1/Grain/grain/test_tmp/buildroot-      2012.11.1/output/toolchain/linux-2.6.28'
  make: *** [/home/ken/WrkSrc/test1/Grain/grain/test_tmp/buildroot-2012.11.1/output/toolchain/linux/.configured] Error 2

        在網路上搜尋到有兩種解決方式(請看參考來源),一種是直接修改 "scripts/unifdef.c",將"getline"函式直接修改成其他的名字(例:parseline);另外一種是在 CFLAGS 中加入 "-D_POSIX_C_SOURCE=200112L"。
※ 若是採用第一種方式,每次當 buildroot run 'make clean' 後,就必須再修改一次。(至於第二種不知道加在哪,所以沒試)
        此外網路上也有說明這問題已經在2009/04已經修正。


  • 安裝額外的lib (prec)時,發生需要支援 large file support.
    => 修改 buuild 設定檔。
    • Toolchain  --->
      •  [*] Enable large file (files > 2 GB) support
 

沒有留言: