linux 编译器制作,Linux交叉編譯器的制作(一)
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交叉編譯器的制作(一)相关推荐
- easypr arm linux,arm linux下交叉編譯EasyPR中文車牌識別系統開發(一)
EasyPR中文車牌識別系統開發(一),我主要介紹如何使用開源的EasyPR中文車牌識別系統,當然后面我會介紹訓練機器學習 SVM 支持向量機和 ANN 人工神經網絡模型在車牌識別的應用. 目錄: 一 ...
- linux 编译器 fpp,linux下常见的Fortran编译器介绍
(百度和网页http://www.doczj.com/doc/d81360da50e2524de5187e0b.html/forum/simple/index.php?t6437.html 的作者无关 ...
- linux编译器6,Linux安装gcc编译器详解(CentOS 6.5 64位系统)
本次安装针对CentOS 6.5 64位系统,由于在安装系统的时候并没有勾选安装gcc编译器,因此需要自行安装gcc编译器. 使用yum安装gcc 对于配备了yum的Linux发行版而言,安装gcc编 ...
- linux 编译器ping,linux指定网口ping
SCC(超级计算集群)简介 SCC概述 超级计算集群(Super Computing Cluster,SCC)使用高速RDMA网络互联的CPU以及GPU等异构加速设备,面向高性能计算.人工智能/机器学 ...
- linux 编译器错误,linux – GHCi – Haskell编译器错误 – /home/user/.ghci归其他人所有,IGNORING...
在尝试将〜/ .ghci文件更改为我的配置时,当我打开GHCi时出现此错误. GHCi, version 7.6.3: http://www.haskell.org/ghc/ :? for help ...
- 手机linux编译器,在linux上交叉编译helloWorld到android手机上去
在ubuntu上交叉编译helloWorld到arm64的android手机上去. 这里NDK用的是r19及以上的版本. 1. 安装NDK 这里下载了 android-ndk-r21b,解压到 /ho ...
- linux 内核裁剪不当 死机,Linux編譯x86架構內核出現_stack_chk_guard未定義錯誤
背景 android模擬器運行於virtualbox中,而virtualbox運行於x86架構的pc端,所以android及其Linux內核都編譯成x86架構.當virtualbox的vt未開啟的情況 ...
- 常用linux文本编辑器nano,linux常用文本編輯器nano/vi/vim
linux下有很多文本編輯器,其中系統(不管哪個分支)都會自帶nano和vi這兩個最基本的編輯器.vim相當於vi的升級版.這里我們依次來講解這幾個編輯器的用法. 1.nano 直接在命令行中敲入na ...
- linux练习手册,Linux操作习题集(1)
動動手實作題:假設你不知道你的主機內部的各項元件資料,請拆開你的主機機殼,並將內部所有的元件拆開,並且依序列出: CPU的廠牌.型號.最高時脈: 主記憶體的容量.介面 (DDR/DDR II等): 顯 ...
最新文章
- 为jqgrid添加统计金额页脚
- python 余数_python中两数相除取余数怎么运算
- java怎么看具体被挂起的线程_Java线程的挂起、恢复和终止
- 开源软件、开源硬件、……开源餐馆来了
- 通过注册表修改解锁ExtROM
- 女性寒性体质注意事项
- python 多线程ping_Python快速多线程ping实现
- SPDK/PMDK/VTune Amplifier 2019中国峰会顺利落幕
- CMMI认证难度大吗?
- Ubuntu18.04双系统安装+GPU+CUDA10+CUDNN7+ANACONDA3+PYTHON+PYCHARM
- 数据治理系列:数据血缘关系
- RHEL搭建DNS正反解析
- Java输入1~12之间的整数,显示该月份的英语单词及这个月属第几季度。
- Unity应用Handles画线,方便查看点间的路径
- linux 流量控制 1
- 微信v3native支付设置的结束时间处理办法
- 拓扑排序及逆拓扑排序
- java基础结构图_java基础之【堆、栈、方法区】结构图
- 15单片机通过WIFI模块ESP8266实现手机远程监控可燃气体浓度
- 阿里云国际版邮件服务套餐购买流程
热门文章
- APP开发:线上教育APP盈利模式分析
- uni-app 输入框类型
- python做人脸识别速度_Python人脸识别速度慢
- Vivado安装—Xilinx design tool already exists for 2019.1,specify a different program program group entr
- vue 跳转到指定路由地址 (可附带参数)
- 配置 Tapestry
- (个人翻译)Scrivener交互式手册中文版FowWindows 03基础操作
- 服务器一直被攻击怎么办?
- has leaked window com.android.internal.policy.impl.PhoneWindow解决(Dialog.cancel、dismiss、hide区别)
- 弘辽科技:如何写出自带流量的标题