制作ARM Linux交叉编译环境

发布者:SereneWhisper最新更新时间:2016-06-16 来源: eefocus关键字:ARM  Linux  交叉编译环境 手机看文章 扫描二维码
随时随地手机看文章
一、准备工作

       
       首先需要一台运行Linux操作系统的PC以完成我们的编译工作。
       其次要准备如下一些源文件。
 
       1、源文件准备
         binutils-2.14.tar.gz 
         ftp://ftp.gnu.org/gnu/binutils/binutils-2.14.tar.gz
         gcc-core-2.95.3.tar.gz 
         ftp://ftp.gnu.org/gnu/gcc/gcc-2.95.3/gcc-core-2.95.3.tar.gz
         gcc-g++2.95.3.tar.gz 
         ftp://ftp.gnu.org/gnu/gcc/gcc-2.95.3/gcc-g++-2.95.3.tar.gz
         glibc-2.2.4.tar.gz 
         ftp://ftp.gnu.org/gnu/glibc/glibc-2.2.4.tar.gz
         glibc-linuxthreads-2.2.4.tar.gz 
         ftp://ftp.gnu.org/gnu/glibc/glibc-linuxthreads-2.2.4.tar.gz
         linux-2.4.21.tar.gz
         ftp://ftp.kernle.org/pub/linux/kernel/v2.4/linux-2.4.21.tar.gz
         patch-2.4.21-rmk1.gz # linux kernel patch for arm
         ftp://ftp.arm.linux.org.uk/pub/linux/arm/kernel/v2.4/patch-2.4.21-rmk1.gz
 
       binutils-2.14.tar.gz这个压缩包包含有ld,ar,as等一些产生或者处理二进制文件的工具。
    gcc-core-2.95.3.tar.gz这个压缩包是GCC的主体部分,GCC是GNU Compiler Collection的简称,顾名思义,它能够编译很多种高级语言,例如C、C++,Java等,而这个压缩包中含有C编译器,及公共部分,而对其他语言的支持,采用另外的压缩包单独发布。
    gcc-g++2.95.3.tar.gz,这个压缩包就是为使GCC能够编译C++程序而单独发布的。
    glibc-2.2.4.tar.gz,libc是很多用户层应用都要用到的库,kernel和bootloader不需要这个库的支持,这个库主体部分封装在这个压缩包内。
    glibc-linuxthreads-2.2.4.tar.gz,这是Libc用于支持Posix线程而单独发布的一个压缩包。
    linux-2.4.21.tar.gz,这个压缩包就是Linux的内核。
    patch-2.4.21-rmk1.gz,这个压缩包是用来给Linux内核打补丁,以使其可以支持ARM的硬件平台。
 
       2、工作目录搭建
       我们创建如下的目录树结构
       mkdir arm
       mkdir tool-chain
       mkdir build-dir
       mkdir src-dir
       mkdir setup-dir
       mkdir kernel
       
       arm这个目录是我们的最顶层工作目录,我们所有的编译工作都在这里完成。
       tool-chain这个目录是我们交叉编译工具的安装位置,它下面的bin子目录存放我们创建好的编译器,汇编器,连接器,以及编译好的C库也会安装到这个目录之下。
       setup-dir这个目录用来存放我们下载的压缩包。
       src-dir这个目录用于存放binutils,gcc,glibc解压之后的源文件。
       kernel这个目录用来存放内核文件,对内核的配置、编译工作将在这个目录中完成。
       build-dir用来编译src-dir中的源文件,具体就是binutils,gcc,glibc的编译工作将在这个目录下完成。这种源文件目录和编译目录分离的编译方式是GNU所推荐的。
       
       cd ./src-dir
       tar –xvzf ../setup-dir/ binutils-2.14.tar.gz
       tar –xvzf ../setup-dir/ gcc-core-2.95.3.tar.gz
       tar –xvzf ../setup-dir/ glibc-2.2.4.tar.gz
       tar –xvzf ../setup-dir/ glibc-linuxthreads-2.2.4.tar.gz –directory=./glibc-2.2.4   //unsuccess
 
       这样我们在src-dir目录下就形成了3个源文件目录binutils-2.14,gcc-core-2.95,3,glibc-2.2.4,其中分别存放着binutils tools,gcc,glibc的源代码。接下来我们到build-dir中创建3个与这三个源文件目录对应的编译目录。
       
       cd ../build-dir
       mkdir ../build-dir/build-binutils
       mkdir ../build-dir/build-gcc
       mkdir ../build-dir/build-glibc
 
       我们将在这三个目录中完成对binutils tools, gcc, glibc的配置和编译工作。下面还要把内核文件解压到kernel目录下,并打补丁。
 
       cd ../kernel
       tar –xvzf ../setup-dir/ linux-2.4.21.tar.gz
       cd ./linux-2.4.21
       patch –p1 <../../setup-dir/ patch-2.4.21-rmk1 //unsuccess
 
 
二、开始创建
 
1、  确定几个系统变量
cd ../../
export TARGET=arm-linux
export PREFIX=../arm/tool-chain
export TARGET_PREFIX=$PREFIX/$TARGET
export KERNEL_SOURCE_LOCATION=../kernel/linux-2.4.21
export PATH=$PREFIX/bin:$PATH

创建目录
 
       几个系统变量经常要用到,TARGET定义了目标机,PREFIX是工具链的安装目录,KERNEL_SOURCE_LOCATION是内核文件位置。
 
2、  创建binutils
       运行如下命令来创建binutils
       cd ./build-dir/build-binutils
        ../../src-dir/binutils-2.14/configure –target=$TARGET –prefix=$PREFIX
       make 
       make install
       这时$PREFIX/bin下创建了一些文件,包括arm-linux-ld,arm-linux-as等。
3、  编译内核
 
       cd ../../kernel/linux-2.4.21

             
       改Makefile文件使
       make ARCH = arm CROSS_COMPILE=arm-linux-

 

        编译linux的内核,进入该目录,命令make menuconfig
 之后,出现下面的错误:
rm -f include/asm-arm/arch include/asm-arm/proc
(cd include/asm-arm; ln -sf arch-mx2ads arch; ln -sf proc-armv proc)
rm -f include/asm
( cd include ; ln -sf asm-arm asm)
make -C scripts/lxdialog all
make[1]: Entering directory `/home/lhs/HHARMMX21/linux-2.4.20/scripts/lxdialog'
/usr/bin/ld: cannot find -lncurses
collect2: ld returned 1 exit status
-e 
>> Unable to find the Ncurses libraries.
>>
>> You must have Ncurses installed in order
>> to use 'make menuconfig'

make[1]: * [ncurses] Error 1
make[1]: Leaving directory `/home/lhs/HHARMMX21/linux-2.4.20/scripts/lxdialog'
make: * [menuconfig] Error 2

解决方法:

执行命令: sudo apt-get install ncurses-dev 即可!

(ncurses 用于make menuconfig界面显示)

       
       make menuconfig
       在System Types中选择正确的硬件类型
 
       make dep
 
       之后执行如下操作
       mkdir $TARGET_PREFIX/include
       cp -r $KERNEL_SOURCE_LOCATION/include/asm-arm 
                     $TARGET_PREFIX/include/asm

[cp -r kernel/linux-2.4.21/include/asm-arm arm/tool-chain/arm-linux/include/asm]
       cp -r $KERNEL_SOURCE_LOCATION/include/linux 
                     $TARGET_PREFIX/include/linux
 [cp -r kernel/linux-2.4.21/include/linux arm/tool-chain/arm-linux/include/linux]
4、  创建boot-trap gcc,这个GCC没有glibc库的支持,所以只能用于编译内核,bootloader等,后面创建C库也要用到这个编译器,所以创建它主要是为创建C库做准备,如果只想编译内核和bootloader那么,就可以到此结束。
       cd ../../build-dir/build-gcc
         ../../src_dir/gcc-2.95.3/configure -target=$TARGET  -prefix=arm/tool-chain --with-headers=arm/kernel/linux-2.4.21/include -enable-language=c --disable-threads    

             然后修改src-dir/gcc-2.95.3/gcc/config/arm/t-linux文件,在
              TARGET_LIBGCC2_CFLAGS中添加如下两个定义
              -Dinhibit_libc –D__gthr_posix_h
       make
       make install              //unsuccess
       这时$PREFIX/bin下创建了一些文件,主要创建了arm-linux-gcc。
5、  创建gblic
       cd ../build-glibc
       export CC=arm-linux-gcc
       ../../src-dir/glibc-2.2.4/configure –host=$TARGET –prefix=$TARGET_PREFIX 
                            --enable-add-ons
       make 
       make install           //unsuccess
 
6、  创建功能健全的GCC,并创建G++
       在成功创建了libc之后,我们就可以创建功能丰富的GCC编译器了,并且可以创建支持编译C++程序的G++。
       cd ../../src-dir
       tar –xvzf ../setup-dir/ gcc-g++2.95.3.tar.gz
       cd ../build-dir/build-gcc
       export CC=gcc
       ../../src-dir/gcc-2.95.3/configure –target=$TARGET –prefix=$PREFIX 
              –enable-language=c,c++
       
       然后修改src-dir/gcc-2.95.3/gcc/config/arm/t-linux文件,在
              TARGET_LIBGCC2_CFLAGS中去除如下两个定义
              -Dinhibit-libc –D__gthr_posix_h
 
       make 
       make install
 
7,至此我们成功的创建了ARM Linux的交叉编译工具

关键字:ARM  Linux  交叉编译环境 引用地址:制作ARM Linux交叉编译环境

上一篇:创建ARM Linux交叉编译环境实践
下一篇:在ubuntu8.10 下建立 ARM-Linux 交叉编译环境

推荐阅读最新更新时间:2024-03-16 14:57

設置Linux保留物理內存並使用 (1)
平臺 硬件平臺: TQ2440 Linux版本:Linux 3.14.45 說明 1.在tq2440上,物理內存的起始地址是0x30000000,一共有64MB的內存,所以物理內存地址範圍是: 0x30000000 - 0x33ffffff 2.可以在uboot傳給kernel的參數bootargs中添加一個 memblock=debug ,這樣在Linux啓動的時候,會將設置memblock的信息打印出來 參考博文 Linux内核---41.arm 内存初始化 http://bbs.chinaunix.net/thread-4143403-1-1.html 代碼調用 在Linux啓動的時候會調用ma
[单片机]
ARM7学习---按键测试程序(LPC2103 IO0PIN)
今天一直在学习按键测试程序,看上去很简单,按键嘛谁都会用,很多种单片机里都是用过了,但是今天还是遇到了一个问题,而且花了我半天的时间调试和找问题。刚开始我不会用LPC2103的GPIO,后来查了数据手册,知道了读取IO口的方法是读取IOPIN寄存器,LPC2103使用的是IO0PIN。我程序写好,把按键通过串口反馈信息。但是我一直测试没按键的时候输入按键口状态不稳定,有按键的时候还是很稳定的。我以为程序出错了,一直在修改程序,但是还是一样的情况。后来静下心来想了下,是否IO配置错了?但是检查了好多遍,IO是配置为输入,没什么问题的。后来终于想起来了,我没在按键的IO口加上拉电阻,以前我在51 STC AVR单片机的按键口都不加上拉电
[单片机]
嵌入式Linux网络驱动程序的开发及实现原理
引言   随着人们对开放源代码软件热情的日益增高,Linux作为一个功能强大而稳定的开源操作系统,越来越受到成千上万的计算机专家和爱好者的青睐。在嵌入式领域,通过对Linux进行小型化裁剪后,使其能够固化在容量只有几十兆字节的存储器芯片或单片机中,成为应用于特定场合的嵌入式Linux系统。Linux强大的网络支持功能实现了对包括TCP/IP在内的多种协议的支持,满足了面向21世纪的嵌入式系统应用联网的需求。因此,在嵌入式系统开发调试时,网络接口几乎成为不可或缺的模块。   1 嵌入式Linux网络驱动程序介绍   Linux网络驱动程序作为Linux网络子系统的一部分,位于TCP/IP网络体系结构的网络接口层,主要实现上层
[单片机]
嵌入式<font color='red'>Linux</font>网络驱动程序的开发及实现原理
ARM-Linux驱动移植--RTC(实时时钟)移植
硬件平台:FL2440 内核版本:2.6.28 主机平台:Ubuntu 11.04 内核版本:2.6.39 首先修改内核源码/arch/arm/mach-s3c2410/mach-smdk2410.c 添加红色字体部分 static struct platform_device *smdk2410_devices __initdata = { &s3c_device_usb, &s3c_device_lcd, &s3c_device_wdt, &s3c_device_i2c, &s3c_device_iis, &s3c_device_sdi, &s3c_dev
[单片机]
<font color='red'>ARM</font>-<font color='red'>Linux</font>驱动移植--RTC(实时时钟)移植
ARMv7:Linux Kernel引导
1.如果内核镜像是压缩的,需要解压缩,引导的第一步是从解压缩开始:archarmbootcompressedhead.S 2.解压缩之后,内核镜像已经存在于ARM中了,下面开始运行,内核开始运行是从/arch/arm/kernel/head.S开始的,入口代码为: 1 2 3 4 5 6 7 8 .arm __HEAD ENTRY(stext) THUMB( adr r9, BSYM(1f) ) @ Kernel is always entered in ARM. THUMB( bx r9 ) @ If this is a Thumb-2 kernel, THUMB( .
[单片机]
高通CEO:有意与芯片同行一起收购ARM
据金融时报报道,高通CEO安蒙表示,高通希望参与软银集团旗下芯片制造商ARM即将进行的首次公开募股(IPO),并购买部分股份。 安蒙提到,高通公司有兴趣与竞争对手一起投资,如果进行收购的财团足够大,它可能会与其他公司一起直接收购ARM。不过,他还提到,高通尚未与软银谈及对ARM的潜在投资。 今年早些时候,英伟达收购ARM的计划失败。为此,软银选择了对ARM进行IPO。据彭博社报道,总部位于东京的软银正在为ARM寻求至少 600 亿美元的估值。
[手机便携]
ARM的工作模式和寄存器
以前学的时候学的是S3C6410的开发板,它是三星公司推出的基于ARM v6架构(指令集),处理器是ARM11。 ARM架构是构建每个ARM处理器的基础。 目前最新的是ARM v8架构:http://www.arm.com/zh/products/processors/instruction-set-architectures/armv8-architecture.php ARMv8-A 将 64 位架构支持引入 ARM 架构中,其中包括: 64 位通用寄存器、SP(堆栈指针)和 PC(程序计数器) 64 位数据处理和扩展的虚拟寻址 两种主要执行状态: AArch64 - 64 位执行状态,包括该状态的异常模型、内存模型
[单片机]
<font color='red'>ARM</font>的工作模式和寄存器
基于Linux平台的天气雷达高速数据采集系统设计
Linux是开放源代码、网络化的操作系统,具有稳定、高效、内核可自由配置等特点。采用Linux 操作系统作为开发平台与采用VxWorks 和Windows 作为开发平台相比不仅有免费的优势,而且对于发展核心技术,提高信息安全有着极其重要的意义,是自主研发的一个方向。随着我国天气雷达的快速发展,天气雷达在民用和军事领域的应用越来越广泛。目前,天气雷达高速数据采集、传输等功能大都基于Windows平台进行开发实现,实现由Windows平台向Linux平台的转换,对于发展中国自主知识产权气象软件核心技术, 提高信息安全有着极其重要的意义。本文基于Linux 操作系统(2.6.23内核),实现了天气雷达高速数据采集及处理,对天气雷达系统
[测试测量]
基于<font color='red'>Linux</font>平台的天气雷达高速数据采集系统设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved