arm gcc交叉编译工具链建立

发布者:fnfeecjknquc最新更新时间:2016-06-17 来源: eefocus关键字:arm  gcc  交叉编译  工具链 手机看文章 扫描二维码
随时随地手机看文章

1.1.      Arm交叉编译工具链

下载地址Gnu.org

binutils-2.21.1.tar.bz2

gcc-4.4.4.tar.bz2

glibc-2.11.2.tar.bz2

Glibc-ports-2.11.tar.bz2

Gmp-4.2.tar.bz2

Mpfr-2.4.0.tar.bz2

 

1.1.1.     建立工作目录

    创建工具链文件夹:

[root@localhost  cross]# mkdirembedded-toolchains

在建立了顶层文件夹embedded-toolchains,下面在此文件夹下建立如下几个目录:

Ø  setup-dir,存放下载的压缩包;

Ø  src-dir,存放binutils、gcc、glibc解压之后的源文件;

Ø  kernel,存放内核文件,对内核的配置和编译工作也在此完成;

Ø  build-dir ,编译src-dir下面的源文件,这是GNU推荐的源文件目录与编译目录分离的做法;

Ø  tool-chain,交叉编译工具链的安装位;

Ø  program,存放编写程序;

Ø  doc,说明文档和脚本文件;

    下面建立目录,并拷贝源文件。

[root@localhost  cross]#cd embedded- toolchains

[root@localhost  embedded-toolchains] #mkdir setup-dir src-dir kernel build-dir tool-chain program doc

[root@localhost  embedded-toolchains] #ls

build-dir doc kernelprogram setup-dir src-dir tool-chain

[root@localhost  embedded-toolchains] #cd setup-dir

 拷贝源文件:

这里我们采用直接拷贝源文件的方法,首先应该修改setup-dir的权限

[root@localhost  embedded- toolchains]#chmod 777 setup-dir

然后直接拷贝/home/karen目录下的源文件到setup-dir目录中,如下图:

 

 建立编译目录:

[root@localhost  setup-dir]#cd ../build-dir

[root@localhost  build-dir] #mkdir build-binutils build-gcc build-glibc

1.1.2.      输出环境变量

输出如下的环境变量方便我们编译。

为简化操作过程。下面就建立shell命令脚本environment-variables:

[root@localhost  build -dir] #cd ../doc

[root@localhost  doc] #mkdir scripts

[root@localhost  doc] #cd scripts

用编辑器vi编辑环境变量脚本envionment-variables:

[root@localhost  scripts]#vi envionment-variables  

export  PRJROOT=/home/mxl/diliuzhang/embedded-toolchains

export  TARGET=arm-linux

export  PREFIX=$PRJROOT/tool-chain

export  TARGET_PREFIX=$PREFIX/$TARGET

export  PATH=$PREFIX/bin:$PATH

截图如下:

 %% Q:为什么用了source ./environment-variables才正常执行,去掉source就没有执行? %%

%%  如果用source 执行, 不需要脚本有执行权限, 权限为664也可以,执行命令如下:%%

%%  Sourceenvironment-variables %%

 说明:

TARGET变量用来定义目标板的类型,以后会根据此目标板的类型来建立工具链。参

看表6-1所示。目标板的定义与主机的类型是没有关系的,但是如果更改TARGET的值,

GNU工具链必须重新建立一次。

PREFIX变量提供了指针,指向目标板工具程序将被安装的目录。

TARGET_PREFIX变量指向与目标板相关的头文件和链接库将被安装的目录。

PATH变量指向二进制文件(可执行文件)将被安装的目录。

如果不惯用环境变量的,可以直接用绝对或相对路径。如果不用环境变量,一般都用绝对路径,相对路径有时会失败。环境变量也可以定义在.bashrc文件中,这样就不用老是export这些变量了。

体系结构和TAEGET变量的对应如下表6-1所示:

表6-1 体系结构和TAEGET变量的对应

体系结构

TARGET变量的值

PowerPC

Powerpc-linux

ARM

arm-linux

MIPS(big endian)

mips-linux

MIPS(little endian)

mipsel-linux

MIPS64

mips64-linux

SuperH3

sh3-linux

SuperH4

sh4-linux

I386

i386-linux

Ia64

ia64-linux

M68k

m68k-linux

M88k

m88k-linux

Alpha

alpha-linux

Sparc

sparc-linux

Sparc64

sparc64-linux

1.1.3.      建立二进制工具(binutils)

Binutils是GNU工具之一,它包括连接器、汇编器和其他用于目标文件和档案的工具,它是二进制代码的处理维护工具。安装Binutils工具包含的程序有addr2line、ar、as、c++filt、gprof、ld、nm、objcopy、objdump、ranlib、readelf、size、strings、strip、libiberty、libbfd和libopcodes。对这些程序的简单解释如下。

Ø  addr2line  把程序地址转换为文件名和行号。在命令行中给它一个地址和一个可执行文件名,它就会使用这个可执行文件的调试信息指出在给出的地址上是哪个文件以及行号。

Ø  ar  建立、修改、提取归档文件。归档文件是包含多个文件内容的一个大文件,其结构保证了可以恢复原始文件内容。

Ø  as  主要用来编译GNU C编译器gcc输出的汇编文件,产生的目标文件由连接器ld连接。

Ø  c++filt  连接器使用它来过滤 C++ 和 Java 符号,防止重载函数冲突。

Ø  gprof  显示程序调用段的各种数据。

Ø  ld  是连接器,它把一些目标和归档文件结合在一起,重定位数据,并连接符号引用。通常,建立一个新编译程序的最后一步就是调用ld。

Ø  nm  列出目标文件中的符号。

Ø  objcopy  把一种目标文件中的内容到另一种类型的目标文件中。

Ø  objdump  显示一个或者更多目标文件的信息。使用选项来控制其显示的信息,它所显示的信息通常只有编写编译工具的人才感兴趣。

Ø  ranlib  产生归档文件索引,并将其保存到这个归档文件中。在索引中列出了归档文件各成员所定义的可重分配目标文件。

Ø  readelf  显示elf格式可执行文件的信息。

Ø  size  列出目标文件每一段的大小以及总体的大小。默认情况下,对于每个目标文件或者一个归档文件中的每个模块只产生一行输出。

Ø  strings  打印某个文件的可打印字符串,这些字符串最少4个字符长,也可以使用选项-n设置字符串的最小长度。默认情况下,它只打印目标文件初始化和可加载段中的可打印字符;对于其它类型的文件它打印整个文件的可打印字符。这个程序对于了解非文本文件的内容很有帮助。

Ø  strip  丢弃目标文件中的全部或者特定符号。

Ø  libiberty  包含许多GNU程序都会用到的函数,这些程序有getopt、obstack、strerror、strtol和strtoul。

Ø  libbfd  二进制文件描述库。

Ø  libopcode  用来处理opcodes的库,在生成一些应用程序的时候也会用到它。

Binutils工具安装依赖于Bash、Coreutils、Diffutils、GCC、Gettext、Glibc、Grep、Make、Perl、Sed、Texinfo等工具

下面将分步介绍安装binutils-2.19.2的过程。

[root@localhost  script]# cd $PRJROOT/src-dir

[root@localhost  src-dir]# tar jxvf ../setup-dir/binutils-2.19.tar.bz2

[root@localhost  src-dir]# cd $PRJROOT/build-dir/build-binutils

创建Makefile:

[root@localhost  build-binutils]../../src-dir/binutils-2.19/configure --target=$TARGET --prefix=$PREFIX

   在build-binutils目录下面生成Makefile文件,然后执行make,make install。完成后可以在$PREFIX/bin下面看到我们的新的binutil。

注意:每个工具的文件名的前缀都是前面为TARGET变量设定的值。如果目标板arm-linux,那么这些工具的文件名前缀就会是arm-linux-。这样就可以根据目标板类型找到正确的工具程序。

  

1.1.4.      建立内核头文件

在这里我们使用时2.6.29的内核版本,因为交叉工具链工具链是针对特定的处理器和操作系统的,因此在编译之前就需要对linux内核进行配制,可以通过“make config”或“make menuconfig”命令对内核进行配制,配制完成后,在linux源文件的目录下就会生成一个.config文件,这就是我们所需要的文件。

Note: 目标板的内核版本是2.6.29

 

[root@localhost  embedded- toolchains] #cdkernel

[root@localhost  kernel] #tar jxvf../setup-dir/ linux-2.6.29.tar.bz2               

[root@localhost  kernel] #bunzip2../setup-dir/ patch-2.6.29.bz2 

[root@localhost  kernel] #cd linux-2.6.29

给Linux内核打补丁:

[root@localhost  linux-2.6.29] #patch–p1  <  http://www.cnblogs.com/setup-dir/patch-2.6.29

然后就是配置内核,第一步是修改Makefile

修改 Makefile:

ARCH =arm                         

CROSS_COMPILE = arm-linux- menuconfig  

接着使用makemenuconfig进入内核配置菜单

或者直接写:

# make ARCH=arm CROSS_COMPILE=arm-linux-menuconfig ,注意在配置时一定要选择处理器的类型,比如我的目标机使用的处理器是OMAP类型的,就选TI OMAP:

System Type -à

         ARMSystem Type -à

         (x)TI OMAP

配置完退出并保存。

配置完须执行make,参数如下:

[root@localhost linux-2.6.29]# make ARCH=armCROSS_COMPILE=arm-linux- (执行过程中有错误出现也没关系,主要目的是产生头文件version.h和autoconf.h)

执行完检查一下内核目录中的/kernel/linux-2.6.29/include/linux/version.h和autoconf.h文件是不是生成了,这是编译glibc要用到的。version.h 和 autoconf.h 文件的存在,说明你生成了正确的头文件。

接下来建立工具链需要的include目录,并将内核头文件过去。

[root@localhost  linux-2.6.29] #cd include

[root@localhost  include] #ln -s asm-arm asm

可以查看一下,经过编译可以自动生成。如果已经生成链接,则不必重新链接。(2.6.29已自动生成)

[root@localhost  include]#cd asm

[root@localhost  asm]#ln -s arch-epxa arch  

[root@localhost  asm]#ln -s proc-armv proc

可以查看一下,经过编译可以自动生成。如果已经生成链接,则不必重新链接。

头文件到交叉编译工具链的安装目录:

[root@localhost  asm]#mkdir –p $TARGET_PREFIX/include

[root@localhost asm]#cp –r $PRJROOT/kernel/linux-2.6.29/include/linux $TARGET_PREFIX/include

[root@localhost  asm]#cp –r $PRJROOT/ kernel /linux-2.6.29/include/asm-arm$TARGET_PREFIX/include/asm

[root@localhost  asm]#cp –r $PRJROOT/ kernel /linux-2.6.29/include/asm-generic$TARGET_PREFIX/include

root@localhost  asm]#cp –r $PRJROOT/ kernel /linux-2.6.29/arch/arm/include/asm  $TARGET_PREFIX/include

root@localhost  asm]#cp –r $PRJROOT/ kernel /linux-2.6.29/arch/arm/mach-omap2/include/mach$TARGET_PREFIX/include/asm

Note: mach-xxx是根据目标板所用的cpu类型来选择的

 

1.1.5.      建立初始编译器 (boot strap gcc)

这一步的目的主要是建立arm-linux-gcc工具,注意这个gcc没有glibc库的支持,所以只能用于编译内核、BootLoader等不需要C库支持的程序,后面创建C库也要用到这个编译器,所以创建它主要是为创建C库做准备,如果只想编译内核和BootLoader,那么安装完这个就可以到此结束。安装过程如下:

 [root@localhost  setup-dir] #cd$PRJROOT/src-dir

[root@localhost  src-dir]#tar jxvf ../setup-dir/gcc-4.4.4.tar.bz2

从 GCC-4.3起,安装GCC将依赖于GMP-4.1以上版本和MPFR-2.3.2以上版本。如果将这两个软件包分别解压到GCC源码树的根目录下,并分别命名为"gmp"和"mpfr",那么GCC的编译程序将自动将两者与GCC一起编译。建议尽可能使用最新的GMP和MPFR版本。

[root@localhostsrc-dir]# tar jxvf ../setup-dir/mpfr-2.4.0.tar.bz2

[root@localhostsrc-dir]# tar jxvf ../setup-dir/gmp-4.2.tar.bz2

[root@localhostsrc-dir]# mv mpfr-2.4.0 gcc-4.4.4/mpfr

[root@localhostsrc-dir]# mv gmp-4.2.0 gcc-4.4.4/gmp

l 因为是交叉编译器,还不需要目标板的系统头文件,所以需要使用 --without-headers这个选项。否则会有很多*.h头文件找不到的报错

l --enable-language=c用来告诉配置脚本,需要产生的编译器支持何种语言,现在只需支持C语言。虽然配置为c,c++也可以的

l --disable-threads 是因为threads需要libc的支持。

l --disable-decimal-float,需要libc的支持,而我们在初步编译的时候尚未生成libc,否则出现以下的报错:../gcc-4.3.1/libgcc/config/libbid/bid_decimal_globals.c:52:18:error: fenv.h: No such file or directory ../gcc-4.3.1/libgcc/config/libbid/bid_decimal_globals.c:In function '__dfp_test_except':../gcc-4.3.1/libgcc/config/libbid/bid_decimal_globals.c:64:error: 'FE_INEXACT' undeclared (first use in this function)../gcc-4.3.1/libgcc/config/libbid/bid_decimal_globals.c:64:error: (Each undeclared identifier is reported only once../gcc-4.3.1/libgcc/config/libbid/bid_decimal_globals.c:64:error: for each function it appears in.)

l  --disable-shared,既然是第一次安装ARM交叉编译工具,那么本机的glibc支持的应该是本机的编译工具库,而不是ARM交叉编译工具库。forces GCC to link its internal libraries statically,没有这个选项,会有 crti.o: No such file: No such file or directorycollect2: ld returned 1 exit status

注:由于没有arm的glibc,需要使用--disable-libmudflap--disable-libssp,禁止两个边界检查使用的库。

同样,由于第一次安装ARM交叉编译工具,那么支持的libc库的头文件也没有,src-dir/gcc-4.4.4/gcc/config/arm/t-linux文件,在TARGET_LIBGCC2_CFLAGS中添加两个定义:-Dinhibit_libc  –D__gthr_posix_h

原文:

TARGET_LIBGCC2_CFLAGS= -fomit-frame-pointer –fPIC

改后:

TARGET_LIBGCC2_CFLAGS= -fomit-frame-pointer -fPIC -Dinhibit_libc -D_gthr_posix.h

 

编译:

[root@localhost  src-dir]#cd $PRJROOT/build-dir/build-gcc

[root@localhostbuild-gcc]# ../../src-dir/gcc-4.4.4/configure --target=$TARGET --prefix=$PREFIX--without-headers --enable-languages=c  --disable-shared --disable-threads--disable-decimal-float –disable-libmudflap –disable-lipssp

 [root@localhostbuild-gcc]# make all-gcc

 [root@localhostbuild-gcc]# make install-gcc

 [root@localhostbuild-gcc]# make all-target-libgcc

 [root@localhost build-gcc]# make install-target-libgcc

注:很多资料中之有前面两项,这只建立了gcc,没有建立libgcc.a,这样会在glibc的编译中出现-lgcc没有找到的错误。报告:

……/build-tools/build-glibc/libc_pic.a

i586-linux-gcc   -nostdlib-nostartfiles -r -o/home/wei/workspace/mywork/moblin/build-tools/build-glibc/elf/librtld.map.o'-Wl,-(' /home/wei/workspace/mywork/moblin/build-tools/build-glibc/elf/dl-allobjs.os/home/wei/workspace/mywork/moblin/build-tools/build-glibc/libc_pic.a -lgcc'-Wl,-)'-Wl,-Map,/home/wei/workspace/mywork/moblin/build-tools/build-glibc/elf/librtld.mapT

/workspace/wei/mywork/moblin/tools/bin/../lib/gcc/arm-linux/4.4.4/http://www.cnblogs.com/http://www.cnblogs.com/ram-linux/bin/ld:cannot find -lgcc

在glibc的编译中,还需要libgcc_eh.a(否则出现错误:-lgcc_eh没有找到……bin/ld: cannot find-lgcc_eh),使用了--disable-shared的选项,将不会生成libgcc_eh.a,可以通过对libgcc.a的链接来实现。

[root@localhostbuild-gcc]#  ln -vs libgcc.a `arm-linux-gcc  -print-libgcc-file-name | sed's/libgcc/&_eh/'`

  Note:arm-linux-gcc与-print-libgcc-file-name之间有一个空格

 运行报告:

“/workspace/wei/mywork/moblin/tools/bin/../lib/gcc/i586-linux/4.3.3/libgcc_eh.a”-> “libgcc.a”

装完成后,查看结果:

[root@localhost  build-gcc] #ls$PREFIX/bin 

 

如果arm-linux-gcc等工具已经生成,表示boot trap gcc工具已经安装成功

1.1.6.      编译glibc

  这一步是最为繁琐的过程,目标板必须靠它来执行或者是开发大部分的应用程序。glibc套件常被称为C链接库,但是glibc实际产生很多链接库,其中之一是C链接库libc。因为嵌入式系统的限制,标准GNU C链接库显得太大,不适合应用在目标板上。所以需要寻找C链接库的替代品,在这里现以标准GNU C为例建立工具链。

[root@localhost  build-gcc]#cd $PRJROOT/src-dir

[root@localhost  src-dir]# tar jxvf ../setup-dir/glibc-2.11.2.tar.bz2

[root@localhost  src-dir]# tar jxvf ../setup-dir/glibc-ports-2.11.tar.bz2

[root@localhost  src-dir]# mv –v glibc-ports-2.11 glibc-2.11.2/ports

[root@localhost  src-dir]# cd glibc-2.11.2

[root@localhost  glibc-2.11.2]# patch –Np1 -i  ../../setup-dir/glibc-2.11.2-gcc_fix-1.patch

[root@localhost  glibc-2.11.2]# patch –Np1 -i  ../../setup-dir/glibc-2.11.2-makefile_fix-1.patch

[root@localhost  glibc-2.11.2]# cd $PRJROOT/build-dir/build-glibc

配置环境变量

[root@localhostbuild-glibc] # CC=arm-linux-gcc AR=arm-linux-ar RANLIB=arm-linux-ranlib

配置

[root@localhostbuild-glibc]../../src-dir/glibc-2.11.2/configure /

--host=arm-linux  --prefix=$PREFIX/$TARGET  --with-tls  --disable-profile

--enable-add-ons  --with-headers=$PREFIX/$TARGET/include

libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes  libc_cv_arm_tls=yes

编译

 [root@localhostbuild-glibc] # make

[root@localhostbuild-glibc] # make install

 

   注:以上完成后,请查看一下$TARGET_PREFIX/lib目录下的文件libc.so,看看GROUP的内容是否指定到可以用于交叉编译的库,如果不是请修改,如下:

   libc.so 文件(所在目录是$TARGET_PREFIX/lib),将GROUP ( /lib/libc.so.6 /lib/libc_nonshared.a)改为GROUP (libc.so.6 libc_nonshared.a)

这样连接程序 ld 就会在 libc.so 所在的目录查找它需要的库,因为你的机子的/lib目录可能已经装了一个相同名字的库,一个为编译可以在你的宿主机上运行的程序的库,而不是用于交叉编译的。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 经过查看,发现libc.so中的GROUP已经是交叉编译链的目录,所以不用更改

对 libc.so 的修正·

 vi$PREFIX /${TARGET}/lib/libc.so

 去掉绝对路径,修改后的内容如下:

 /*GNU ld script

     Usethe shared library, but some functions are only in

     thestatic library, so try that secondarily. */

 OUTPUT_FORMAT(elf32-littlearm)

 GROUP( libc.so.6 libc_nonshared.a AS_NEEDED ( ld-linux.so.3 ) )

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

1.1.7.      建立全套编译器 (full gcc)

[root@localhost  build-gcc]#../../src-dir/gcc-4.4.4/configure --target=$TARGET--prefix=$PREFIX  --enable-languages=c,c++  --enable-shared

[root@localhost  build-gcc]#make all

[root@localhost  build-gcc]#make install

  

我们再来看看 $PREFIX/bin 里面多了哪些东西。你会发现多了 arm-linux-g++ 、和 arm-linux-c++ 几个文件。

G++-gnu的 c++ 编译器。

C++-gnu 的 c++ 编译器。

1.1.8.      完成工具链的设置

 root@localhost  build-gcc] # cd$TARGET_PREFIX/bin

查看文件是否为二进制文件:

[root@localhost  bin] # file as ar gccld nm ranlib strip   

查看缺省的搜寻路径:

[root@localhost  bin] #arm-linux-gcc-print-search-dirs  

1.1.9.      测试和验证交叉编译工具

    下面编写一个简单的C程序,使用建立的工具链。、

[root@localhost  bin]#cd $PRJROOT/program

[root@localhost  program]#vi hello.c

#include

int main(void)

{

           printf("hellolinux/n");

           return0;

}

[root@localhost  program]#arm-linux-gcc hello.c -o hello –static (制作静态可执行文件)

 制作的可执行文件hello可以直接在目标机上运行。

关键字:arm  gcc  交叉编译  工具链 引用地址:arm gcc交叉编译工具链建立

上一篇:ARM Linux 交叉编译 工具链 制作攻略
下一篇:arm linux交叉编译工具的安装

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

LPC2XXX系列ARM带CAN的波特率计算
最近正在学习ARM的CAN部分,发现CAN的波特率计算方法网上竟然查不到,我就自己推到一个吧,有什么不对的地方大家指正啊。 当VPB时钟为4*11059200Hz时,常用波特率与总线时序器对照表(周立功给的,11059200kHz的波特率都是近似的,有误差) BPS = (SAM 23)|(TSEG2 20)|(TSEG1 16)|(SJW 14)| BRP #define BPS_5K (1 23)|(1 20)|(6 16)|(0 14)| 879 #define BPS_10K (1 23)|(1 20)|(6 16)|(0 14)| 439 #defin
[单片机]
LPC2XXX系列<font color='red'>ARM</font>带CAN的波特率计算
STM32学习008_ARM产品浅析
ARM是英国Acorn有限公司设计的基于RSIC的一款微处理器,全称为Acorn RISC Machine,ARM处理器本身是32位设计,但也配备16位指令集,一般来讲比等价32位代码节省达35%,却能保留32位系统的所有优势。 ARM处理器的三大特点是:耗电少功能强、16位/32位双指令集和合作伙伴众多。 1、体积小、低功耗、低成本、高性能; 2、支持Thumb(16位)/ARM(32位)双指令集,能很好的兼容8位/16位器件; 3、大量使用寄存器,指令执行速度更快; 4、大多数数据操作都在寄存器中完成; 5、寻址方式灵活简单,执行效率高; 6、指令长度固定。 ARM处理器共有37个寄存器,被分为若干个组(BANK),这
[单片机]
STM32学习008_<font color='red'>ARM</font>产品浅析
基于ARM9和MPC56x的燃料电池发动机主控制器
随着清洁能源需求的增加,燃料 电池 发动机及其在 汽车动力系 统中的应用越来越重要。燃料电池按电化学原理直接将等温的化学能转化为电能。由于不受热机卡诺循环的限制,目前各类燃料电池实际的能量转化率均可达40%~60%;燃料电池环境友好、工作安静、噪声很低。燃料电池发动机由空气系统、氢气系统、水热管理系统、增湿系统和电堆等几部分组成,其结构如图1所示。 1 分布式燃料电池发动机控制系统 针对燃料电池发动机的上述要求,清华大学和大连化学物理研究所合作,研制了分布式燃料电池控制系统。整个系统以燃料电池发动机主控制器为核心,包括了2个发动机的独立控制子系统,每个发动机控制系统包括电堆控制器节点、增湿控制器节点、风机控制器节点
[单片机]
ARM平台下无线网卡的配置
前言 看了下上次博客时间,大概是毕业后到目前两个多月了没有更新博客,突然发现自己正在变得越来越懒,这可不是一个好的征兆。除过找工作一个礼拜的时间,算起来已经工作了快2个月了,目前也正在试用期,对工作也慢慢有所适应。曾经在大学听老师说“上班后第一天、第一个礼拜、第一个月都是很难受的”,这次有所体会,慢慢的对周围各种事物熟悉下来也就不会觉得难受了。 ARM平台下无线网卡的配置和平时在windows或者linux下有点不太一样,对于热衷于window的朋友可能会觉得吃力,完全没有图像界面点击,只能靠一些命令来完成。刚好周末有时间,总结下这段时间调试无线网卡相关的操作。 网卡介绍 项目中暂时调试使用的无线网卡型号是:HLK-3M0
[单片机]
<font color='red'>ARM</font>平台下无线网卡的配置
ARM处理器模式及寄存器
一、ARM处理器模式: ARM微处理器支持7种运行模式,分别为: 用户模式(usr): ARM处理器正常的程序执行状态。 快速中断模式(fiq):用于高速数据传输或通道处理。 外部中断模式(irq):用于通用的中断处理。 管理模式(svc): 操作系统使用的保护模式。软中断和复位 数据访问中止模式(abt): 当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。 系统模式(sys): 运行具有特权的操作系统任务。 未定义指令中止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件协处理器
[单片机]
<font color='red'>ARM</font>处理器模式及寄存器
迎接计算第五次浪潮,Arm推出三大领域重要革新
日前,Arm开启了一年一度的Tech Symposia亚洲区技术巡展,巡展中,Arm反复提到了一个内容,就是如何迎接计算的“第五次浪潮”,Arm IP产品事业群战略副总裁Noel Hurley详细解读了Arm将如何迎接第五次计算浪潮。 Hurley表示,此前四代计算浪潮的典型代表产品包括了第一代大型机、第二代PC、第三代互联网、第四代手机,而如今第五次计算浪潮则很难是一个以单一产品或技术为代表,包括了物联网、5G和人工智能的融合。 Hurley认为,这种融合的时代来临既给产业界带来了巨大机遇,但同时也给行业带来了挑战,需要建立一套完整的安全体系。 Arm IP产品事业群战略副总裁Noel Hurley 构件完整的
[嵌入式]
迎接计算第五次浪潮,<font color='red'>Arm</font>推出三大领域重要革新
微软将导入ARM服务器芯片可能撼动英特尔独大地位
eeworld网消息:微软(Microsoft)与英特尔(Intel)在PC领域的密切合作让外界常以“Wintel”称呼这两家公司,不过两者的关系早在几年前便开始褪色,日前微软透露计划将Azure云端服务器改为ARM架构处理器,更是对两者合作关系的当头棒喝。 据The Wired报导,微软的这项宣示在经济上的意义远大于技术,高通和Cavium虽已开始送样给客户,但ARM服务器芯片最快也要等到2018年才会正式推出,Moor Insights and Strategy分析师表示,这项声明与技术没有太大关联,而是微软对于英特尔在服务器芯片市场主导地位和价格的反弹。 在手机和开放原始码的潮流趋势中,Windows作业系统已不再拥有以往的
[手机便携]
基于嵌入式系统arm2210开发板的移动机器人人机界面设计
  摘要: 移动机器人人机界面为移动机器人的运动控制提供直观的路径图形、运动速度和角度、障碍物信息等。通过arm2210的串口uart0接收中心处理器pc104的运动信息,利用东芝公司的液晶控制器t6963c驱动stn液晶屏yl240128a,以及zlg/gui软件包提供的基本绘图和菜单操作函数设计了基于嵌入式系统arm2210开发板的移动机器人人机界面,并利用arm2210的i2c器件zlg7290提供的i2c接口功能和键盘中断信号实现菜单选择,具有很强的实用性。   引言   嵌入式系统以其高性能、低功耗、低成本的优点,已经在很大程度上改变了人们的生活。如,mp3播放器、智能手机、数码相机产品等已经渗入人们生活的各个方面。
[工业控制]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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