用arm-linux-gcc.4.3.2交叉编译器编译linux-3.0.1内核

合集下载

实验3-4 交叉编译工具arm-linux-gcc的制作

实验3-4 交叉编译工具arm-linux-gcc的制作

实验3-4 交叉编译工具arm-linux-gcc的制作【实验目的】掌握交叉编译工具arm-linux-gcc制作.掌握交叉编译工具arm-linux-gcc测试.【实验步骤】第一步:准备工具包(工具包在相应的实验代码目录下)crosstool-0.43.tar.gzbinutils-2.16.1.tar.bz2gcc-4.0.2.tar.gzglibc-2.3.6.tar.gzglibc-linuxthreads-2.3.6.tar.gzlinux-2.6.26.tar.gzlinux-libc-headers-2.6.12.0.tar.bz2第二步:在登录的用户目录(假定用户名是:james)下面建立cross目录【不要以root 用户登录】mkdir /home/james/downloads第三步:将crosstool-0.43.tar.gz 复制到downloads目录并减压cp crosstool-0.43.tar.gz /home/james/downloadscd /home/james/downloadstar -zxvf crosstool-0.43.tar.gz第四步:将其他文件一起复制到downloads目录下第五步:进入crosstool-0.43目录对相关文件进行修改【1】修改arm.datKERNELCONFIG=`pwd`/arm.configTARGET=arm-linuxTARGET_CFLAGS="-O"【2】修改demo-arm.sh:#!/bin/sh# This script has one line for each known working toolchain# for this architecture. Uncomment the one you want.# Generated by generate-demo.pl from buildlogs/all.dats.txtTARBALLS_DIR=/home/james/downloads#下载的源码包存放的路径RESULT_TOP=/home/james/crosstool #交叉编译工具来链安装的路径export TARBALLS_DIR RESULT_TOPGCC_LANGUAGES="c,c++"export GCC_LANGUAGES# Really, you should do the mkdir before running this,# and chown /opt/crosstool to yourself so you don't need to run as root.mkdir -p $RESULT_TOP#eval `cat arm.dat gcc-2.95.3-glibc-2.1.3.dat` sh all.sh --notest#eval `cat arm.dat gcc-2.95.3-glibc-2.2.2.dat` sh all.sh --notest#eval `cat arm.dat gcc-2.95.3-glibc-2.2.5.dat` sh all.sh --notest#eval `cat arm.dat gcc-3.2.3-glibc-2.2.5.dat` sh all.sh --notest#eval `cat arm.dat gcc-3.2.3-glibc-2.3.2.dat` sh all.sh --notest#eval `cat arm.dat gcc-3.2.3-glibc-2.3.2-tls.dat` sh all.sh --notest#eval `cat arm.dat gcc-3.3.6-glibc-2.2.2.dat` sh all.sh --notest#eval `cat arm.dat gcc-3.3.6-glibc-2.2.5.dat` sh all.sh --notest#eval `cat arm.dat gcc-3.3.6-glibc-2.3.2.dat` sh all.sh --notest#eval `cat arm.dat gcc-3.3.6-glibc-2.3.2-tls.dat` sh all.sh --notest#eval `cat arm.dat gcc-3.4.5-glibc-2.2.2.dat` sh all.sh --notest#eval `cat arm.dat gcc-3.4.5-glibc-2.2.5.dat` sh all.sh --notest#eval `cat arm.dat gcc-3.4.5-glibc-2.3.2.dat` sh all.sh --notest#eval `cat arm.dat gcc-3.4.5-glibc-2.3.2-tls.dat` sh all.sh --notest#eval `cat arm.dat gcc-3.4.5-glibc-2.3.5.dat` sh all.sh --notest#eval `cat arm.dat gcc-3.4.5-glibc-2.3.5-tls.dat` sh all.sh --notest#eval `cat arm.dat gcc-3.4.5-glibc-2.3.6.dat` sh all.sh --notest#eval `cat arm.dat gcc-3.4.5-glibc-2.3.6-tls.dat` sh all.sh --notest#eval `cat arm.dat gcc-4.0.2-glibc-2.2.2.dat` sh all.sh --notest#eval `cat arm.dat gcc-4.0.2-glibc-2.3.2.dat` sh all.sh --notest#eval `cat arm.dat gcc-4.0.2-glibc-2.3.2-tls.dat` sh all.sh --notest#eval `cat arm.dat gcc-4.0.2-glibc-2.3.5.dat` sh all.sh --notest#eval `cat arm.dat gcc-4.0.2-glibc-2.3.5-tls.dat` sh all.sh --notest#eval `cat arm.dat gcc-4.0.2-glibc-2.3.6.dat` sh all.sh --notest#eval `cat arm.dat gcc-4.0.2-glibc-2.3.6-tls.dat` sh all.sh --notest#eval `cat arm.dat gcc-4.1.0-glibc-2.2.2.dat` sh all.sh --notest#eval `cat arm.dat gcc-4.1.0-glibc-2.3.2.dat` sh all.sh --notest#eval `cat arm.dat gcc-4.1.0-glibc-2.3.2-tls.dat` sh all.sh --notest #注释eval `cat arm.dat gcc-4.0.2-glibc-2.3.6.dat` sh all.sh --notestt #添加此行echo Done.【3】修改gcc-4.0.2-glibc-2.3.6.datBINUTILS_DIR=binutils-2.16.1GCC_DIR=gcc-4.0.2GLIBC_DIR=glibc-2.3.6LINUX_DIR=linux-2.6.26LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.6第六步:执行./demo-arm.sh,大约1个小时左右在/home/james/crosstool 将生成我们需要的交叉编译工具。

基于Qt的汽车车速仪表盘的设计

基于Qt的汽车车速仪表盘的设计

研究生课程论文基于Qt的汽车车速仪表盘的设计学院:信息工程学院专业:交通信息工程及控制课程:嵌入式系统及应用姓名:学号:授课教师:一研究背景仪表作为汽车整个系统中十分重要的部分,是提高汽车综合性能的重要方面之一。

随着计算机软硬件技术、总线技术、电子技术等的快速发展,控制系统臃肿、接线布线复杂、占用空间大的传统电磁机械仪表渐渐被淘汰,虚拟仪表正以传统机械仪表无法比拟的速度迅猛发展。

目前虚拟仪表通常包括纯数字仪表和虚拟仪表盘仪表两种:纯数字仪表成本较低,但功能和界面比较简单,满足不了一般驾驶员的需求;而现有的虚拟仪表盘仪表虽然功能和界面比较丰富,但又存在着开发成本高、可移植性和可重绘性差、可扩展性不足等缺点,不利于大范围的推广与应用。

针对传统仪表和现有仪表存在的不足,本文提出了一种新型的车载虚拟仪表设计方案,采用ARM处理器S3C6410为核心的硬件平台和以嵌入式Linux系统为核心的软件平台,并在此基础上采用开放源代码的图形界面库QT开发仪表终端应用程序。

该虚拟仪表可读性好,读数精度高,在可移植性、可维护性和成本方面都得到了良好的改善,具有较大的科研价值和商业使用价值。

本文目前只实现了仪表中关于车速的终端应用程序。

二开发环境2.1 Ubuntu与Qt简介Ubuntu是一个以桌面应用为主的Linux操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。

Ubuntu 拥有很多优点。

相对于其他版本的Linux,Ubuntu也有着自己的优势。

首先,安装系统非常简单,只需要非常少的设置即可,完全可以和Windows桌面系统相媲美;其次,图形界面很人性化,模仿了在xp下常用的快捷键;还有,安装和升级程序时,可以通过网络,由系统自行安装依赖的文件包,从此不必再为Linux系统的依赖关系大伤脑筋。

Ubuntu的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

Armlinux交叉编译

Armlinux交叉编译

Armlinux交叉编译1、编译C++程序,链接是需要添加 -lstdc++g++和gcc本质一样的,本质上还是gcc,我们实验室所有的c++程序都是用gcc编译的,一般的程序用gcc足够了。

对于C++ 程序,编译的时候用gcc 或者g++ 都可以。

但是在进行连接的时候最好用g++,因为用g++ 会自动进行C++ 标准库的连接;用gcc 连接C++ 程序也可以,但是需要人为指定连接C++ 标准库,否则就会出现 undefined reference to `__gxx_personality_v/0' 之类的错误。

可见-lstdc++ 所对应的是标准C++库。

2、linux OpenCV 静态链接错误,链接是需要添加–ldlundefined reference to `dlopen'undefined reference to `dlerror'undefined reference to `dlsym'对dlopen, dlerror, dlsym 未定义的引用,缺少链接库,链接时加上选项-ldl3、对icvPuts, icvGets, gzputs, gzgets, gzopen, gzclose 未定义的引用,编译错误如下./obj/local/armeabi-v7a/libopencv_core.a(persistence.cpp.o): In function `icvPuts(CvFileStorage*, char const*)':persistence.cpp:(.text._ZL7icvPutsP13CvFileStoragePKc+ 0x20): undefined reference to`gzputs'./obj/local/armeabi-v7a/libopencv_core.a(persistence.cpp.o): In function `icvGets(CvFileStorage*, char*, int)':persistence.cpp:(.text._ZL7icvGetsP13CvFileStoragePci+0x26 ): undefined reference to`gzgets'./obj/local/armeabi-v7a/libopencv_core.a(persistence.cpp.o): In function缺少zlib库引起的,编译链接时加上-lz4、如何在configure时,将编译参数传入,改变默认的编译器gcc成arm-linux编译器按照INSTALL中的介绍,也是常用的方法,在configure的时候,加上–host=arm-linux,结果没有实现我们要的效果,没有将编译器从默认的gcc改成arm-linux-gcc,编译器还是用的默认的gcc。

ARM-Linux交叉编译步骤

ARM-Linux交叉编译步骤

samba事先安装sudo apt-get install nfs-kernel-server交叉编译步骤1、创建目录s3c2440_recover2、设置网络文件系统的根目录配置文件/etc/exports在最后一行添加s3c2440_recover的绝对路径*(rw,sync,no_root_squash)重启nfssudo /etc/init.d/nfs-kernel-server restart3、arm开发板启动Bootloader 引导加载程序Kernel uImageFilesystemBootloader -》把内核的uImge加载到内存uImage 加载filesystem =》shell 用户空间4、编译器arm-linux-gcc-4.3.2.tar.gzsudo tar zxvf xxx.tar.gz -C /编译自动会解压到/usr/local/arm设置编译器脚本(自己创建),每次打开终端,若要使用arm编译器,则先source一下arm-compile.sh ()#!/bin/bashexport PA TH=$PATH:/usr/local/arm/4.3.2/bin############### 告诉系统编译器的路径(通过在PATH环境变量中添加)修改脚本可执行权限chmod u+x arm-compile.shsource arm-compile.sh4、Uboot 编译分别解压源码uboot-1.2-utu2440.tar.bz2按照uboot编译.txt5、内核编译准备工具修改过的内核源码Linux2.6.24_utu2440.tar.gz拷贝到crosscompile目录下解压tar zxvf linux inux2.6.24_utu2440.tar.gz制作镜像文件工具mkimage拷贝到/usr/sbin 或者/usr/bin 目录下参考脚本hw-kernel编译.txt内核编译时,会根据.config 的配置文件进行文件编译(即选择哪些模块,卸载哪些模块)Make menuconfig 就是一个图形裁剪的配置工具,操作结果会自动保存到.config操作步骤参hw-kernel编译.txt6 . Busybox 创建yaffs文件系统准备工具busybox-1.19.2.tar.bz2mkyaffsimage除开uboot、kernel之外的脚本文件第一个脚本mkroot.sh是用来创建根目录下的子目录的6.1 在某个目录下执行./mkroot.sh这时,会在当前路径下生成rootfs 目录及其子目录进入rootfs/dev 下创建console null操作如下:$cd rootfs/dev/$ su口令:# mknod -m 600 console c 5 1;mknod -m 666 null c 1 3;exit退出rootfs目录cd ../../6.2 解压busybox.1.19.2.tar.bz2$ cd busybox.1.19.2修改Makefile文件Gedit Makefile在164行CROSS_COMPILE ?=改为CROSS_COMPILE ?= arm-linux-make menuconfig设置交叉编译器的路径设置编译输出路径,即make install会把编译生成的东西放到指定路径配置menuconfigBusybox Settings --->//设置静态编译方式或者动态链接Busybox Settings ---> Build Options ---> [] Build BusyBox as a static binary (no shared libs)(/usr/local/arm/4.3.2/bin) cross compiler prefix[*] Build with Large File Support (for accessing files > 2 GB)Busybox Settings ---> Install Options ---> 中输入建立根文件系统的文件所在的路径busybox install prefix即rootfs的绝对路径makemake install备注:6.3 6.4让学生做总有问题,因为这两步其实是配置etc和lib故为了方便,已经都做好了,放在build/busybox目录下,直接拷贝到rootfs下即可6.3 配置rootfs下的文件信息修改和创建必要的文件cp -a busybox.1.19.2/examples/bootfloppy/etc/* rootfs/etccd rootfs/etc增加为SHELL导入全局变量的文件/etc/profilegedit etc/profile增加初始化文件gedit etc/inittabgedit etc/fstab增加初始化脚本gedit etc/init.d/rcS在etc下创建文件mdev.conftouch medev.conf6.4 动态链接库当前路径rootfs/libcp -a /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/lib/* ./当前路径rootfs/usr/libcp -a /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/lib/libstdc++* ./当前路径:rootfs的上一级目录sudo mv mkyaffsimage /usr/bin/mkyaffsimage rootfs filesystem.yaffs6.5 sudo cp filesystem.yaffs /srv/tftp在CRT中run install-filesystem注意:要用arm-linux-gcc-4.3.2 编译出来的u-boot.bin uImage filesysetm.yaffs7 在arm上执行应用程序写个简单的hello world程序arm-linux-gcc hello.c -o armhello把armhello复制到s3c2440_recover 下启动开发板登陆到shell界面后(在CRT中进行操作)将虚拟机里的目录s3c2440_recover目录,通过NFS挂载到开发板的/mnt下mount -t nfs -o nolock 192.168.1.200:/home/guoji/share/crosscompile/s3c2440_recover /mnt 此时,在开发板下的/mnte下即可看到armhello将armhello拷贝到/home目录下,并执行./armhello。

linux arm交叉编译程序步骤

linux arm交叉编译程序步骤

linux arm交叉编译程序步骤下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。

文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by the editor. I hope that after you download them, they can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!In addition, our shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!在嵌入式系统开发中,使用ARM架构是非常常见的选择。

arm-linux-gcc 4.3.2编译安装过程

arm-linux-gcc 4.3.2编译安装过程

arm-linux-gcc 4.3.2编译安装过程收藏arm-linux-gcc 4.3.2编译安装过程本文由《我的arm-gcc工具编译安装过程》修正而成,红字部分为与原作不同之处,希望对大家有所帮助。

原文地址:/blog/static/28351497200902193223687/我的编译环境是在ubuntu8.10 amd64,gcc版本为4.3.2,编译的linux内核版本为2.6.8,故后面需要修改少许内核头文件。

开始前确认环境里有texinfo, gawk(注意mawk编译glibc header时会有问题), bison, flex,没有就安装它们。

>sudo apt-get install texinfo gawk bison flex工作的目录是用户目录下源文件放在目录cross_source里编译的工作目录是cross_buildxxx 就是存放解压出来的源代码,例如binutils-2.19.tar.bz2,解压放在binutils-2.19 xxx_build 用于编译的目录,例如binutils-2.19.tar.bz2,编译目录是binutils-2.19_build用到的文件是binutils-2.19.tar.bz2gcc-core-4.3.2.tar.bz2gcc-g++-4.3.2.tar.bz2mpfr-2.3.2.tar.bz2gmp-4.2.4.tar.bz2linux-2.6.28.tar.bz2glibc-ports-2.7.tar.bz2glibc-2.7.tar.bz2首先创建目录>mkdir cross_source>mkdir cross_build>cd cross_build1编译,安装binutilsbinutils的配置和编译安装,binutils的编译一般不会遇到什么问题,至少我没有遇到。

>sudo apt-get install texinfo>tar -jxvf ../cross_source/binutils-2.19.tar.bz2根据[Bug gas/7026] New: ARM target wont build, error: format not a string literal and no format arguments,修改tc-arm.c>mkdir binutils-2.19_build>cd binutils-2.19_build>../binutils-2.19/configure --target=arm-linux --prefix=/usr/local/arm/4.3.2 >make>sudo make all install这就会把binutils的编译结果安装到/usr/local/arm/4.3.2/里binutils安装后需要把路径导出。

arm-linux-gcc-4.4.1+Linux-2.6.31.6+busybox-1.15.1在TQ2440的移植

arm-linux-gcc-4.4.1+Linux-2.6.31.6+busybox-1.15.1在TQ2440的移植

针对最新的交叉编译环境和最新的Linux内核以及最新的busybox,我用最新的交叉编译器arm-linux-gcc-4.4.1编译且移植linux-2.6.31.6和busybox-1.15.1到TQ2440开发板上。

使用的u-boot是天嵌光盘中带的u-boot-1.1.6,但是我把其中的s3c2440的机器码修改为默认值,即:362,这样就不用修改Linux内核中的s3c2440的机器码了。

下面是具体的移植步骤(今天我只移植了NAND、RTC、SD卡和DM9000,明天接着移植其他部分):移植Linux-2.6.31.6到24401。

从下载目前Linux最新源代码包,linux-2.6.31.6.tar.bz22。

解压缩linux-2.6.31.6.tar.bz2到指定的目录下,如:kernel/目录下;3。

进入kernel目录(#cd kernel);4。

修改系统时钟。

Linux内核默认系统时钟为16MHz,我的板子使用的时钟是12MHz的,因此需要调整系统时钟参数。

打开文件arch/arm/mach-s3c2440/mach-smdk2440.c,修改smdk2440_map_io()函数中的s3c24xx_init_clocks()中的参数为12000000;5。

添加NAND分区表到内核。

1)#vim arch/arm/plat-s3c24xx/common-smdk.c;2)修改结构smdk_default_nand_part,添加自己的分区表信息。

如下是我的分区表:static struct mtd_partition smdk_default_nand_part[] = {[0] = {.name = "bootloader",.size = 0x00040000,.offset = 0x0,},[1] = {.name = "kernel",.size = 0x00200000,.offset = 0x00200000,},[2] = {.name = "yaffs2",.size = 0x0FB80000,.offset = 0x00400000,}}3)在内核配置选项中,选择Device Drivers->MTD support->NAND Device Support->NAND Flash support for Samsung S3C SoCs和Samsung S3C NAND Hardware ECC;同时需要在MTD support中选择MTD partitioning support(支持分区)、Command line partition table parsing、Direct char device access to MTD devices和Caching block device access to MTD devices。

ubuntu10.04安装交叉编译器arm-linux-gcc-4.3.2

ubuntu10.04安装交叉编译器arm-linux-gcc-4.3.2

这次安装交叉编译器没费什么劲。

1.先将arm-linux-gcc-4.3.2.tgz的安装包复制到ubuntu10.04任意目录中。

用直接在root用户下tar -zxvf arm-linux-gcc-4.3.2.tgz解压到当前目录下。

2.安装标准C开发环境,apt-get install build-essential libncurses5-dev3.添加环境变量gedit~/.profile。

在这个文件最后添加上自己的环境变量:export PATH=$PATH:/home/usr/local/arm/4.3.2/bin4.然后在终端执行source~/.profile ,即可立即生效5.执行arm-linux-gcc-v查看编译器版本Using built-in specs.Target:arm-none-linux-gnueabiConfigured with:/scratch/julian/lite-respin/linux/src/gcc-4.3/configure--build=i686-pc-linux-gnu --host=i686-pc-linux-gnu--target=arm-none-linux-gnueabi --enable-threads --disable-libmudflap--disable-libssp --disable-libstdcxx-pch --with-gnu-as --with-gnu-ld--enable-languages=c,c++ --enable-shared --enable-symvers=gnu--enable-__cxa_atexit --with-pkgversion='Sourcery G++ Lite 2008q3-72'--with-bugurl=https:--with-sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc--with-build-sysroot=/scratch/julian/lite-respin/linux/install/arm-none-linux-gnueabi/libc--with-gmp=/scratch/julian/lite-respin/linux/obj/host-libs-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr--with-mpfr=/scratch/julian/lite-respin/linux/obj/host-libs-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr --disable-libgomp--enable-poison-system-directories--with-build-time-tools=/scratch/julian/lite-respin/linux/install/arm-none-linux-gnueabi/bin--with-build-time-tools=/scratch/julian/lite-respin/linux/install/arm-none-linux-gnueabi/binThread model:posixgcc version4.3.2 (Sourcery G++ Lite 2008q3-72)表示安装成功。

交叉编译步骤

交叉编译步骤

交叉编译步骤1.交叉编译包的安装创建文件夹mkdir /usr/local/arm解压xzvf 4.3.1-eabi-armv6-up-cup6410.tar.gz 到/usr/local/arm目录下tar xzvf 4.3.1-eabi-armv6-up-cup6410.tar.gz -C /usr/local/arm修改配置文件vi ~/.bashrcPATH=$PATH:$HOME/bin:/usr/local/arm/4.3.1-eabi-armv6/usr/binLD_LIBRARY_PATH=/usr/local/arm/4.3.1-eabi-armv6/gmp/lib:/usr/local/arm/4.3.1-eabi-armv6/mpfr/lib更新配置文件source ~/.bashrc检测是否安装成功which arm-linux-gcc 或者 arm-linux-gcc -v(如果出现arm-linux-gcc的版本信息,则安装成功gcc version 4.3.1 (for S3C64XX Samsung Electronics AP Development Team)2.minicom 连接与配置minicom (-s 端口设置)(波特率115200 数据位0 奇偶校验位无停止位 1 数据流控制无)(minicom ctrl+a x 退出查看串口名称 ls -l /dev/ttyS*)3.if配置查看宿主机ip,开发板ip 保证在同一个网段ping命令测试连通性ifconfig eth0 192.168.1.145 netmask 255.255.255.0关闭防火墙 setup查看防火墙 /etc/init.d/iptables status4.nfs服务编辑exports文件,进入exports文件后进行对要挂载文件的配置/usr/192.168.1.199 (rw,sync),然后保存并推出。

Arm-linux-gcc-4.3.2安装步骤

Arm-linux-gcc-4.3.2安装步骤
Arm-linux-gcc-4.3.2安装步骤
1.关于这个编译好的工具的安装:
下载arm-linux-gcc-4.3.2.tgz大约84m
首先以root用户登入
复制arm-linux-gcc-4.3.2.tgz到根目录下tmp文件夹里
解压命令tar xvzf arm-linux-gcc-4.3.2 -C /
保存对profile的修改后,执source /etc/profile就OK了,好了log out进入后验证arm-linux-gcc -v可以了

若想让它在非超级用户下使用那
首先,以用户登入,
1、 输入命令:vi ~/.bashrc
编辑.bashrc文件,在文件末尾加入export PATH=/usr/local/arm/4.3.2/bin:$PATH
2、输入命令:gedit /etc/profile
在文件的末尾加上PATH=/usr/local/arm/4.3.2/bin:$PATH
注意以上命令必须要有-C而且是大写的后边有个空格也要注意
然后配置下编译环境路径gedit /root/.bashrc等一会出来文本编辑器后在文件最后(最后一行)加上 下面代码
export PATH=/usr/local/arm/4.3.2/bin:$PATH
此时你可以在root用户下验证 arm-linux-gcc -v成功(注意必须得重新登录下)log out这个也是对profile进行配置

gcc编译arm

gcc编译arm

GCC (GNU Compiler Collection) 是一个广泛使用的编译器,它支持多种编程语言,包括C、C++、Objective-C 和Fortran 等。

它也可以用于编译ARM 架构的代码,主要涉及交叉编译(cross-compilation)的概念。

要进行交叉编译,您需要为目标ARM 系统设置一个交叉编译工具链(cross-compiler toolchain)。

这个工具链通常包含一系列的交叉编译器工具,如gcc、g++、cpp、ld 等,这些工具用于生成可在目标ARM 系统上运行的二进制文件。

以下是一些基本步骤,用于使用GCC 进行ARM 交叉编译:1. 安装交叉编译工具链:首先,下载并安装适用于ARM 的交叉编译工具链。

2. 设置环境变量:在您的shell 中,设置交叉编译工具链的路径,以便系统能够找到这些工具。

例如,在bash shell 中,您可以运行以下命令:bashexport PATH=/path/to/your/arm-linux-gnueabihf/bin:$PATH3. 编译代码:使用交叉编译器编译您的代码。

例如,如果您有一个名为main.c 的C 源文件,您可以这样编译它:basharm-linux-gnueabihf-gcc main.c -o main这将生成一个名为main 的可执行文件,该文件是为ARM 系统设计的。

4. 测试可执行文件:将生成的可执行文件复制到目标ARM 系统上并运行它,以验证其功能。

5. 链接库:如果您在您的程序中使用了库(如libc),那么您需要确保使用正确的库版本(例如,对于ARM,您可能需要libm 和libc 等库)。

在编译过程中,使用-l 选项指定库的名称。

例如:basharm-linux-gnueabihf-gcc main.c -o main -lm -lc这将链接数学库(libm) 和C 标准库(libc)。

6. 优化:您还可以考虑使用优化选项来优化您的程序,以提高其在目标ARM 系统上的性能。

arm-linux-gcc交叉编译工具链安装

arm-linux-gcc交叉编译工具链安装

arm-linux-gcc交叉编译工具链安装
arm-linux-gcc交叉编译工具链安装
1.解压交叉编辑工具链到根目录
// -C 参数指的是解压到根目录下面
// 安装在/usr/local/arm/4.3.2/bin/ 的“bin”目录下面
2.修改环境变量,把交叉编译器的路径加入到PATH
// arm-linux-gcc 使用方法1:跟上“全路径”
// arm-linux-gcc 使用方法2:添加路径到环境变量中去,在系统的时候就可以“任何地方”使用arm-linux-gcc
[root@localhost ~]#
# Path manipulation
if [ "$EUID" = "0" ]; then
pathmunge /sbin
pathmunge /usr/sbin
pathmunge /usr/local/sbin
pathmunge /usr/local/arm/4.3.2/bin //环境变量添加的位置
fi
3.立即使新的环境变量生效,不用重启电脑
#source etc/profile
4.检查是否将路径加入到PATH
显示的内容中有/usr/local/arm/4.3.2/bin,说明已经将交叉编译器的路径加入PATH 5.测试是否安装成功。

ARM-LINUX-GCC编译选项介绍

ARM-LINUX-GCC编译选项介绍

ARM-LINUX-GC(编译选项介绍我们需要编译出运行在ARM 平台上的代码,所使用的交叉编译器为arm- linux-gcc。

下面将arm-linux-gcc编译工具的一些常用命令参数介绍给大家。

在此之前首先介绍下编译器的工作过程,在使用GCC编译程序时,编译过程分为四个阶段:1)预处理(Pre-Processing)2)编译(Compiling)3)汇编(Assembling)4)链接(Linking)Li nux程序员可以根据自己的需要让GCC在编译的任何阶段结束,以便检查或使用编译器在该阶段的输出信息,或者对最后生成的二进制文件进行控制,以便通过加入不同数量和种类的调试代码来为今后的调试做好准备。

和其它常用的编译器一样,GCC也提供了灵活而强大的代码优化功能,利用它可以生成执行效率更高的代码。

以文件example.c为例说明它的用法1. a rm-linux-gcc-o example example.c不加-c、-S -E参数,编译器将执行预处理、编译、汇编、连接操作直接生成可执行代码。

-o参数用于指定输出的文件,输出文件名为example,如果不指定输出文件,则默认输出 a.out2. a rm-linux-gcc-c -o example.o example.c-c参数将对源程序example.c进行预处理、编译、汇编操作,生成example.。

文件去掉指定输出选项"-o example.o"自动输出为example.o所以说在这里-o加不加都可以3. a rm-linux-gcc-S -o example.s example.c-S参数将对源程序example.c进行预处理、编译,生成example.s文件-o选项同上4. arm-linux-gcc-E -o example.i example.c-E参数将对源程序example.c进行预处理,生成example.i文件(不同版本不一样,有的将预处理后的内容打印到屏幕上)就是将#include,#define 等进行文件插入及宏扩展等操作。

交叉编译大致过程

交叉编译大致过程

交叉编译⼤致过程1、⾸先配置环境变量。

环境变量主要是为了下⾯的步骤做准备,如PATH等环境变量。

将安装交叉编译器的bin⽬录添加到PATH环境变量,如exportPATH=/opt/eldk/usr/bin:$PATH2、进⼊源码包根⽬录下,运⾏./configure。

configure命令有很多参数可配置,可以⽤./configure --help来查看,在交叉编译过程中可设置--host,--target,--build这⼏个参数,如--host=ppc-linux,--build=i686-pc-linux-gnu,--target=ppc-linux。

个⼈理解是--host表⽰主机上安装的交叉编译器对应⽬标板的架构和所运⾏操作系统,--target表⽰⽬标板的架构和所运⾏操作系统,--build表⽰主机的架构及操作系统类型。

这些参数配置后,configure时会读取源码⽬录下⾯的config.sub⽂件,查找、检查设置的参数是否⽀持,如ppc架构是否⽀持、linux操作系统是否⽀持等。

./configure --prefix参数表⽰⽣成的库⽂件所安装的⽬录,默认的是在/usr/local⽬录下。

其他参数含义可以通过./configure --help来查看,configure过程中若失败可通过查找config.log⽂件来查找出错原因。

./configure --diabale-可以把源码包中的某个模块不配置,编译的时候也就不编译,如配置thinkfinger时--disable-pam将pam模块配置排除在外。

3、make。

make的过程如果前期配置了正确的环境变量并configure成功后⼀般都没遇到什么问题,具体问题具体解决,可以通过查看控制台打印出来的信息了解make的过程。

4、make install,主要是把⽣成的库⽂件、可执⾏⽂件等拷贝到合适的⽬录下,⽬标⽬录根你./configure时设置的--prefix参数有关。

经典=建立交叉编译工具链方法1(制作好的=成功实验)

经典=建立交叉编译工具链方法1(制作好的=成功实验)

制作好的交叉编译工具链下载及使用【转载】安装方法在文章后面最常用的编译版本是arm-linux-gcc-2.95.3、arm-linux-gcc-3.4.1和arm-linux-3.3.2的,现在的嵌入式开发基本上用的是这些,2.95.3用于编译2.4的内核,3.4.1的用于编译2.6的内核,而3.3.2的常用于编译busybox,和bootloader(u-boot),编译的版本配合不好的话就会出错,所以要选择好编译版本,如果这个版本不行的话,可以试试其他的版本,在uclinux上用的多的就是arm-elf-tools-20030314arm-linux-gcc-2.95.3 = 编译2.4的内核arm-linux-gcc-3.4.1 = 编译2.6的内核arm-linux-3.3.2 = 编译busybox和u-boot/download/projects/toolchain/arm-linux-g cc-3.4.1.tar.bz2/download/projects/toolchain/arm-linux-g cc-3.3.2.tar.bz2如果系统中又装了3.4.1和3.3.2的版本的话,可以在 .bashrc 中通过设置PATH来指定默认的版本为GCC3.4.1,然后再打开一个新的终端就可以用了,如果需要使用3.3.2的话,可以用具体的路径指定(/usr/local/arm/3.3.2/bin/arm-linux-)。

【同时安装两套】在~/.bashrc最后加入: export PATH=$PATH:/usr/local/arm/3.4.1/bin 如果编译u-boot或者busybox的时候指定3.3.2的版本:CROSS_COMPILE=/usr/local/arm/3.3.2/bin/arm-linux-3.4.1的就直接用arm-linux-就可以了。

arm-linux-gcc-4.2.1的版本在:9981/pub/snapgear/tools/arm-linux/这里可以下载,arm-linux-tools-20070808.tar.gz这个可能是4.2.1的版本,因为下面有编译4.2.1的方法还有相应的代码包,build-arm-linux-4.2.1,此版本由于过大,我没有下载。

嵌入式实验一:LED灯点亮

嵌入式实验一:LED灯点亮

嵌⼊式实验⼀:LED灯点亮实验⼀:LED灯程序⼀、实验环境开发机环境操作系统:ubuntu 12.04交叉编译环境:arm-linux-gcc 4.3.26410板⼦内核源码:linux-3.0.1⽬标板环境:OK6410-A linux-3.0.1⼆、实验原理image.png图1-OK6410LED原理图image.png图2-LED原理图从上⾯的原理图可以得知,LED与CPU引脚的连接⽅法如下,低电平点亮。

LED1 -GPM0LED2 -GPM1LED3 -GPM2LED4 -GPM3image.png通过上⾯可以得知,需要先将GPM0设置为输出⽅式。

将相应的寄存器进⾏配置。

然后将GPMDAT寄存器的第0位置0灯亮,置1灯灭。

三、实验代码1.编写驱动程序#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <asm/uaccess.h> /* copy_to_user,copy_from_user */#include <linux/miscdevice.h>#include <linux/pci.h>#include <mach/map.h>#include <mach/regs-gpio.h>#include <mach/gpio-bank-m.h>#include <plat/gpio-cfg.h>#define LED_MAJOR 240int led_open(struct inode *inode, struct file *filp){unsigned tmp;tmp = readl(S3C64XX_GPMCON);tmp = (tmp & ~(0x7U << 1)) | (0x1U);writel(tmp, S3C64XX_GPMCON);printk("#########open######\n");return 0;}ssize_t led_read(struct file *filp, char __user *buf, size_t count, loff_t *f_pos){printk("#########read######\n");return count;}ssize_t led_write(struct file *filp, const char __user *buf, size_t count, loff_t *f_pos) {char wbuf[10];unsigned tmp;printk("#########write######\n");copy_from_user(wbuf, buf, count);switch (wbuf[0]){case 0: //offtmp = readl(S3C64XX_GPMDAT);tmp |= (0xfU);writel(tmp, S3C64XX_GPMDAT);break;case 1: //ontmp = readl(S3C64XX_GPMDAT);tmp &= ~(0xfU);writel(tmp, S3C64XX_GPMDAT);break;default:break;}return count;}int led_release(struct inode *inode, struct file *filp){printk("#########release######\n");return 0;}struct file_operations led_fops = {.owner = THIS_MODULE,.open = led_open,.read = led_read,.write = led_write,.release = led_release,};int __init led_init(void){int rc;printk("Test led dev\n");rc = register_chrdev(LED_MAJOR, "led", &led_fops);if (rc < 0){printk("register %s char dev error\n", "led");return -1;}printk("ok!\n");return 0;}void __exit led_exit(void){unregister_chrdev(LED_MAJOR, "led");printk("module exit\n");return;}module_init(led_init);module_exit(led_exit);2.编写Makefile⽂件ifneq ($(KERNELRELEASE),)obj-m := driver_led.oelseKDIR := /work/linux-3.0.1all:make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-linux-clean:rm -f *.ko *.o *.mod.o *.mod.c *.symversendif3.编写测试⽂件#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int main (void){int fd;char buf[10]={0,1,0,1};fd = open("/dev/my_led",O_RDWR);if (fd < 0){printf ("Open /dev/my_led file error\n");return -1;}while(1){write(fd,&buf[0],1);sleep(1);write(fd,&buf[1],1);sleep(1);}close (fd);return 0;}四、实验步骤1、编译驱动程序和测试程序在终端中运⾏:#make命令,编译成功⽣⽣下列⽂件在终端中运⾏:#arm-linux-gcc test.c -o test,编译成功⽣成⽂件2、将⽂件拷贝到SD卡3、将SD卡插⼊到OK6410开发板中4、在OK6410终端中运⾏程序加载驱动:#insmod sdcard/driver_led.ko创建设备⽂件:# mknod /dev/my_led c 240 0运⾏测试⽂件:#./sdcard/test卸载驱动程序:#rmmod sdcard/driver_led.ko5、运⾏结果此时可以看到OK6410开发板的4个LED灯⼀直同时点亮,然后熄灭。

linux内核交叉编译过程详解

linux内核交叉编译过程详解

linux内核交叉编译过程详解交叉编译是在一个平台上生成适用于另一个平台的可执行文件的过程。

下面将详细解释在Linux下的内核交叉编译过程:1.环境搭建:o安装交叉编译工具链。

这些工具通常以静态链接的方式提供,例如gcc-arm-linux-gnueabi、binutils-arm-linux-gnueabi。

o配置本地的Makefile文件,以指定交叉编译工具链的路径。

2.获取内核源码:o从官方网站或git仓库下载目标内核的源码。

3.配置内核:o运行makemenuconfig或其他配置工具,根据目标平台的硬件和需求选择合适的配置选项。

o保存配置,生成.config文件。

4.交叉编译内核:o运行make命令开始编译过程。

由于内核很大,此过程可能需要很长时间。

o在编译过程中,内核将被编译成可在目标平台上运行的二进制文件。

5.打包编译好的内核:o内核编译完成后,需要将其打包成适合在目标平台上安装的形式。

这通常涉及到创建引导加载程序(如U-Boot)所需的映像文件。

6.测试和调试:o将编译好的内核和相关文件复制到目标板上,进行启动和测试。

o如果遇到问题,需要进行调试和修复。

7.部署:o一旦内核能够正常工作,就可以将其部署到目标设备上。

这可能包括将其集成到设备固件中,或者作为独立的操作系统运行。

8.维护和更新:o根据需要更新内核版本或进行其他更改,重复上述步骤。

在整个过程中,确保你的交叉编译环境和目标硬件的文档齐全,并遵循相应的开发指导原则。

对于复杂的项目,可能还需要进行更深入的定制和优化。

项目日志

项目日志

宿主机开发环境:ubuntu 12.04目标机:飞凌6410(arm11)12月5日* 环境搭建设置交叉编译器1.设置整个项目在/opt目录下进行,修改权限sudo chown jun /optsudo chgrp jun /opt2.使用厂商提供的交叉编译器:arm-linux-gcc-4.3.2.tgzcd /opttar xvzf arm-linux-gcc-4.3.2.tgz3.修改环境变量sudo vi /etc/environment添加/opt/usr/local/arm/4.3.2/bin:之后为:PATH="/opt/usr/local/arm/4.3.2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin: sbin:/bin:/usr/games"保存退出,使之生效. /etc/environment4.检查交叉编译器arm-linux-gcc -v* 配置编译 uboot1.使用厂商提供的uboot:uboot1.1.6-V5.50-2014-09-19.tar.gz2.解压:tar xvzf uboot1.1.6-V5.50-2014-09-19.tar.gzcd uboot1.1.6/3.配置:make forlinx_nand_ram256_config4.编译:make cleanmake5.烧写uboot.bin到开发板*编译内核1.使用厂商提供的内核:FORLINX_linux-2.6.36.2.tar.gz2.解压:tar xvzf FORLINX_linux-2.6.36.2.tar.gz3.编译:make zImage4.拷贝zImage到/tftpboot/目录cp arch/arm/boot/zImage /tftpboot/* 根文件系统制作(使用busybox开源软件)1.下载busybox源码包:busybox-1.21.1.tar.bz22.解压:tar -xvjf busybox-1.21.1.tar.bz23.配置源码:cd busybox-1.21.1/make menuconfig重新定制模块操作命令Linux Module Utilities --->[ ] Simplified modutils (NEW) //去掉[*] insmod //添加[*] rmmod //添加[*] lsmod //添加[*] modprobe //添加[*] Blacklist support//添加[*] depmod //添加取出闪存flash操作命令Miscellaneous Utilities --->[*] nandwrite (NEW) //去掉[*] nanddump (NEW) //去掉保存退出4.修改Makefilevim Makefile +164164 将CROSS_COMPILE ?= 修改为CROSS_COMPILE=arm-linux- 190 将ARCH ?= $(SUBARCH)修改为ARCH=arm5.编译和安装make && make install默认安装在当前目录的_install目录用file命令检查编译结果:file _install/bin/busyboxELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), stripped确保是ARM平台的5.手动在_install创建目录cd _install/ && mkdir dev lib etc/init.d proc sys home mnt var tmp root -p6.添加系统启动配置文件vim etc/inittab//添加如下内容::sysinit:/etc/init.d/rcS::respawn:-/bin/sh::ctrlaltdel:/sbin/reboot::shutdown:/bin/umount -a -r保存退出7.添加文件系统配置文件vim etc/fstab//添加如下内容proc /proc proc defaults 0 0tmpfs /tmp tmpfs defaults 0 0sysfs /sys sysfs defaults 0 0tmpfs /dev tmpfs defaults 0 0保存退出8.添加系统启动服务配置脚本vim etc/init.d/rcS/bin/mount -amkdir /dev/ptsmount -t devpts devpts /dev/ptsecho /sbin/mdev > /proc/sys/kernel/hotplugmdev -s保存退出修改rcS文件权限chmod 777 etc/init.d/rcS9.添加 busybox运行时所需动态库和链接库查看busybox可执行程序所需的动态库arm-linux-readelf -a bin/busybox | grep "Shared"0x00000001 (NEEDED) Shared library: [libm.so.6]0x00000001 (NEEDED) Shared library: [libc.so.6]可知需要动态库为:libc和libm两个动态库当然还要有链接库拷贝所需动态库到根文件系统lib目录下//拷贝标准C库find /opt/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc \( -name "libc-*" -o -name "libc.so*" \) -exec cp -frd {} lib/ \;//拷贝数学运算库find /opt/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc \( -name "libm-*" -o -name "libm.so*" \) -exec cp -frd {} lib/ \;//拷贝动态链接库find /opt/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc \( -name "ld-*" \) -exec cp -frd {} lib/ \;注:在拷贝前将/opt/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc目录下的thumb2目录删除,因为这个目录的库会与在arm模式下需要的库重名,即与armvt目录的有些库重名,这会导致在拷贝时有可能将有用的覆盖掉没用的留下了,最终导致网络文件系统挂载失败。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用arm-linux-gcc.4.3.2交叉编译器编译linux-3.0.1内核
1.我这里的内核是forlinx 的FORLINX_linux-3.0.1.tar.gz内核,把这个文件准备好(拷贝到linux os 的forlinx文件夹下面),这个文件不小117M,用xftp花费了我20秒时间。

2.然后解压缩命令tar zxf FORLINX_linux-
3.0.1.tar.gz,
 这里我看出来了已经解压缩成功了
 在编译内核之前,我先安装一个工具可能会用到,那就是libncurses5方便使用make menuconfig 命令,执行命令即可:apt-get install libncurses5-dev
 下面就是编译内核过程了,之前见别人编译的时间挺长的,我倒要看看需要多少时间。

 执行命令make zImage即可
 结果生成zImage的话就成功了,检查如下:
 看了一下时间也就20多分钟,还可以哈最后去我的工作目录下的arm中的arch的arm的boot中查看以下:
 嗯确实有了
 tips:感谢大家的阅读,本文由我司收集整编。

仅供参阅!。

相关文档
最新文档