Linux交叉編譯器的制作-buildroot

1.問題出現

編譯內核時,需要在PC機上進行編譯才能下載到開發板上去,但兩個平台不一樣,需要我們自己實現這個功能。

[klaus@localhost linux-3.0.1]$ make

make: /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc:命令未找到

HOSTCC scripts/basic/fixdep

HOSTCC scripts/kconfig/conf.o

SHIPPED scripts/kconfig/zconf.tab.c

SHIPPED scripts/kconfig/lex.zconf.c

SHIPPED scripts/kconfig/zconf.hash.c

HOSTCC scripts/kconfig/zconf.tab.o

HOSTLD scripts/kconfig/conf

scripts/kconfig/conf --silentoldconfig Kconfig

make: /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc:命令未找到

CHK include/linux/version.h

UPD include/linux/version.h

CHK include/generated/utsrelease.h

UPD include/generated/utsrelease.h

Generating include/generated/mach-types.h

CC kernel/bounds.s

/bin/sh: /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc: 沒有那個文件或目錄

make[1]: *** [kernel/bounds.s] 錯誤 1

make: *** [prepare0] 錯誤 2

2.下載交叉編譯器

交叉編譯器,一般可以有兩種Buildroot和Crosstool-ng,另一篇文章中會涉及Crosstool-ng的制作,buildroot是一個使用uclibc制作的交叉編譯器,可以用來編譯u-boot、Linux內核,和根文件的制作,比較適合。

下載地址:https://buildroot.org/

切換到選擇界面來

[klaus@localhost opt]$ls

buildroot-2012.08 buildroot-2012.08.tar.bz2 rh

[klaus@localhost opt]$cd buildroot-2012.08/

[klaus@localhost buildroot-2012.08]$ls

arm920t board boot CHANGES Config.in configs COPYING dl docs fs linux Makefile output package support target toolchain

[klaus@localhost buildroot-2012.08]$export TERM=vt100

[klaus@localhost buildroot-2012.08]$make menuconfig

根據自己的開發板需求,這里用的s3c2440是arm920t類型的版本,更改配置

1)選擇arm920t,小端模式,EABI接口

2)選擇/arm920t主文件夾

3)部分工具鏈勾選

4)可以取消busybox,后面需要自己編譯

也可以將Package Selection for the target/Libraries/Compression and decompression下的lzo和zlib選上(性能比較好)。

5)取消項,我們只需要編譯器,下面四個全部取消

3.遇到的問題

(1)gcc編譯器版本不匹配

...in sectioning `Bugs' differ

/opt/buildroot-2012.08/output/toolchain/gcc-4.5.4/gcc/doc/service.texi:6: warning: node up `Service' in menu `Bugs' and in sectioning `Top' differ

make[2]: *** [doc/gcc.info] 錯誤 1

make[2]: 離開目錄“/opt/buildroot-2012.08/output/toolchain/gcc-4.5.4-initial/gcc”

make[1]: *** [all-gcc] 錯誤 2

make[1]: 離開目錄“/opt/buildroot-2012.08/output/toolchain/gcc-4.5.4-initial”

make: *** [/opt/buildroot-2012.08/output/toolchain/gcc-4.5.4-initial/.compiled] 錯誤 2

修改版本

[klaus@localhost buildroot-2012.08]$ gcc --version

gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16)

Copyright © 2015 Free Software Foundation, Inc.

本程序是自由軟件;請參看源代碼的版權聲明。本軟件沒有任何擔保;

包括沒有適銷性和某一專用目的下的適用性擔保。

[klaus@localhost buildroot-2012.08]$ vim .config

...

BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE=y

BR2_GCC_VERSION="4.5.4"

#修改成自己的版本

BR2_EXTRA_GCC_CONFIG_OPTIONS=""

...

(2)ncurses-devel等部分缺少

可以直接用yum安裝。類似可能還會有其他缺少,可直接安裝1。

[klaus@localhost buildroot-2012.08]$sudo yum install ncurses-devel

...

驗證中 : ncurses-devel-5.9-13.20130511.el7.x86_64 5/8

驗證中 : ncurses-5.9-13.20130511.el7.x86_64 6/8

驗證中 : ncurses-libs-5.9-13.20130511.el7.x86_64 7/8

驗證中 : ncurses-base-5.9-13.20130511.el7.noarch 8/8

更新完畢:

ncurses-devel.x86_64 0:5.9-14.20130511.el7_4

作為依賴被升級:

ncurses.x86_64 0:5.9-14.20130511.el7_4 ncurses-base.noarch 0:5.9-14.20130511.el7_4 ncurses-libs.x86_64 0:5.9-14.20130511.el7_4

完畢!

[klaus@localhost buildroot-2012.08]$

(3)busybox選項取消不了

busybox取消不了的原因是某處還占用着它,在System configuration里面,這里不選擇初始化busybox即可。

4.交叉編譯器生成測試

生成結果

...

shared library, skipping

/opt/buildroot-2012.08/arm920t/usr/bin/arm-unknown-linux-uclibcgnueabi-ldconfig: can't resolve /usr/X11R6/lib in chroot .: No such file or directory

/opt/buildroot-2012.08/arm920t/usr/bin/arm-unknown-linux-uclibcgnueabi-ldconfig: skipping /usr/X11R6/lib: No such file or directory

( \

echo "NAME=Buildroot"; \

echo "VERSION=2012.08"; \

echo "ID=buildroot"; \

echo "VERSION_ID=2012.08"; \

echo "PRETTY_NAME=\"Buildroot 2012.08\"" \

) > /opt/buildroot-2012.08/output/target/etc/os-release

[klaus@localhost buildroot-2012.08]$

查看生成的目錄

[klaus@localhost ~]$ cd /opt/

[klaus@localhost opt]$ ls

buildroot-2012.08 buildroot-2012.08.tar.bz2 rh

[klaus@localhost opt]$ cd buildroot-2012.08/

[klaus@localhost buildroot-2012.08]$ ls

arm920t board boot CHANGES Config.in configs COPYING dl docs fs linux Makefile output package support target toolchain

[klaus@localhost buildroot-2012.08]$ cd arm920t/usr/bin/

[klaus@localhost bin]$ ls

aclocal arm-linux-gcc-4.8.5 arm-linux-objdump arm-unknown-linux-uclibcgnueabi-cpp arm-unknown-linux-uclibcgnueabi-ldconfig autom4te

aclocal-1.11 arm-linux-gcc-ar arm-linux-ranlib arm-unknown-linux-uclibcgnueabi-elfedit arm-unknown-linux-uclibcgnueabi-ldd automake

arm-linux-addr2line arm-linux-gcc-nm arm-linux-readelf arm-unknown-linux-uclibcgnueabi-g++ arm-unknown-linux-uclibcgnueabi-nm automake-1.11

arm-linux-ar arm-linux-gcc-ranlib arm-linux-size arm-unknown-linux-uclibcgnueabi-gcc arm-unknown-linux-uclibcgnueabi-objcopy autoreconf

arm-linux-as arm-linux-gcov arm-linux-strings arm-unknown-linux-uclibcgnueabi-gcc-4.8.5 arm-unknown-linux-uclibcgnueabi-objdump autoscan

arm-linux-c++ arm-linux-gprof arm-linux-strip arm-unknown-linux-uclibcgnueabi-gcc-ar arm-unknown-linux-uclibcgnueabi-ranlib autoupdate

arm-linux-cc arm-linux-ld arm-unknown-linux-uclibcgnueabi-addr2line arm-unknown-linux-uclibcgnueabi-gcc-nm arm-unknown-linux-uclibcgnueabi-readelf ifnames

arm-linux-c++filt arm-linux-ld.bfd arm-unknown-linux-uclibcgnueabi-ar arm-unknown-linux-uclibcgnueabi-gcc-ranlib arm-unknown-linux-uclibcgnueabi-size ldconfig

arm-linux-cpp arm-linux-ldconfig arm-unknown-linux-uclibcgnueabi-as arm-unknown-linux-uclibcgnueabi-gcov arm-unknown-linux-uclibcgnueabi-strings ldd

arm-linux-elfedit arm-linux-ldd arm-unknown-linux-uclibcgnueabi-c++ arm-unknown-linux-uclibcgnueabi-gprof arm-unknown-linux-uclibcgnueabi-strip libtool

arm-linux-g++ arm-linux-nm arm-unknown-linux-uclibcgnueabi-cc arm-unknown-linux-uclibcgnueabi-ld autoconf libtoolize

arm-linux-gcc arm-linux-objcopy arm-unknown-linux-uclibcgnueabi-c++filt arm-unknown-linux-uclibcgnueabi-ld.bfd autoheader m4

文件編譯測試

以簡單的hello.c文件,我們編譯查看現象如何

[klaus@localhost 公共]$ls

hello.c

[klaus@localhost 公共]$/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-g

arm-linux-g++ arm-linux-gcc-4.8.5 arm-linux-gcc-nm arm-linux-gcov

arm-linux-gcc arm-linux-gcc-ar arm-linux-gcc-ranlib arm-linux-gprof

[klaus@localhost 公共]$/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc hello.c -o hello

[klaus@localhost 公共]$file hello

hello: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), not stripped

[klaus@localhost 公共]$du -h hello

8.0K hello

[klaus@localhost 公共]$/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc hello.c -o hello -static

[klaus@localhost 公共]$file hello

hello: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, not stripped

[klaus@localhost 公共]$du -h hello

60K hello

[klaus@localhost 公共]$/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-strip hello

[klaus@localhost 公共]$file hello

hello: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, stripped

[klaus@localhost 公共]$du -h hello

20K hello

[klaus@localhost 公共]$

具體錯誤提示代碼沒有保存下來,如果有遇到可自行百度求解。 ↩

linux 编译器制作,Linux交叉編譯器的制作(一)相关推荐

  1. easypr arm linux,arm linux下交叉編譯EasyPR中文車牌識別系統開發(一)

    EasyPR中文車牌識別系統開發(一),我主要介紹如何使用開源的EasyPR中文車牌識別系統,當然后面我會介紹訓練機器學習 SVM 支持向量機和 ANN 人工神經網絡模型在車牌識別的應用. 目錄: 一 ...

  2. linux 编译器 fpp,linux下常见的Fortran编译器介绍

    (百度和网页http://www.doczj.com/doc/d81360da50e2524de5187e0b.html/forum/simple/index.php?t6437.html 的作者无关 ...

  3. linux编译器6,Linux安装gcc编译器详解(CentOS 6.5 64位系统)

    本次安装针对CentOS 6.5 64位系统,由于在安装系统的时候并没有勾选安装gcc编译器,因此需要自行安装gcc编译器. 使用yum安装gcc 对于配备了yum的Linux发行版而言,安装gcc编 ...

  4. linux 编译器ping,linux指定网口ping

    SCC(超级计算集群)简介 SCC概述 超级计算集群(Super Computing Cluster,SCC)使用高速RDMA网络互联的CPU以及GPU等异构加速设备,面向高性能计算.人工智能/机器学 ...

  5. linux 编译器错误,linux – GHCi – Haskell编译器错误 – /home/user/.ghci归其他人所有,IGNORING...

    在尝试将〜/ .ghci文件更改为我的配置时,当我打开GHCi时出现此错误. GHCi, version 7.6.3: http://www.haskell.org/ghc/ :? for help ...

  6. 手机linux编译器,在linux上交叉编译helloWorld到android手机上去

    在ubuntu上交叉编译helloWorld到arm64的android手机上去. 这里NDK用的是r19及以上的版本. 1. 安装NDK 这里下载了 android-ndk-r21b,解压到 /ho ...

  7. linux 内核裁剪不当 死机,Linux編譯x86架構內核出現_stack_chk_guard未定義錯誤

    背景 android模擬器運行於virtualbox中,而virtualbox運行於x86架構的pc端,所以android及其Linux內核都編譯成x86架構.當virtualbox的vt未開啟的情況 ...

  8. 常用linux文本编辑器nano,linux常用文本編輯器nano/vi/vim

    linux下有很多文本編輯器,其中系統(不管哪個分支)都會自帶nano和vi這兩個最基本的編輯器.vim相當於vi的升級版.這里我們依次來講解這幾個編輯器的用法. 1.nano 直接在命令行中敲入na ...

  9. linux练习手册,Linux操作习题集(1)

    動動手實作題:假設你不知道你的主機內部的各項元件資料,請拆開你的主機機殼,並將內部所有的元件拆開,並且依序列出: CPU的廠牌.型號.最高時脈: 主記憶體的容量.介面 (DDR/DDR II等): 顯 ...

最新文章

  1. 为jqgrid添加统计金额页脚
  2. python 余数_python中两数相除取余数怎么运算
  3. java怎么看具体被挂起的线程_Java线程的挂起、恢复和终止
  4. 开源软件、开源硬件、……开源餐馆来了
  5. 通过注册表修改解锁ExtROM
  6. 女性寒性体质注意事项
  7. python 多线程ping_Python快速多线程ping实现
  8. SPDK/PMDK/VTune Amplifier 2019中国峰会顺利落幕
  9. CMMI认证难度大吗?
  10. Ubuntu18.04双系统安装+GPU+CUDA10+CUDNN7+ANACONDA3+PYTHON+PYCHARM
  11. 数据治理系列:数据血缘关系
  12. RHEL搭建DNS正反解析
  13. Java输入1~12之间的整数,显示该月份的英语单词及这个月属第几季度。
  14. Unity应用Handles画线,方便查看点间的路径
  15. linux 流量控制 1
  16. 微信v3native支付设置的结束时间处理办法
  17. 拓扑排序及逆拓扑排序
  18. java基础结构图_java基础之【堆、栈、方法区】结构图
  19. 15单片机通过WIFI模块ESP8266实现手机远程监控可燃气体浓度
  20. 阿里云国际版邮件服务套餐购买流程

热门文章

  1. APP开发:线上教育APP盈利模式分析
  2. uni-app 输入框类型
  3. python做人脸识别速度_Python人脸识别速度慢
  4. Vivado安装—Xilinx design tool already exists for 2019.1,specify a different program program group entr
  5. vue 跳转到指定路由地址 (可附带参数)
  6. 配置 Tapestry
  7. (个人翻译)Scrivener交互式手册中文版FowWindows 03基础操作
  8. 服务器一直被攻击怎么办?
  9. has leaked window com.android.internal.policy.impl.PhoneWindow解决(Dialog.cancel、dismiss、hide区别)
  10. 弘辽科技:如何写出自带流量的标题