嵌入式ARM开发中的杂项记

来源:互联网 发布:江苏省共创软件怎么样 编辑:程序博客网 时间:2024/05/17 23:25

嵌入式ARM开发中的杂项记录


一、Ubuntu下ARM交叉编译器的安装(暂不能用,编译无问题,执行时段错误,原因不明,请知情人告知)

    一直不知道Ubuntu在其官方的软件包中提供了arm交叉编译器。无意中访问到了“http://packages.ubuntu.com/”这个网站才在其软件包列表中发现了这一事实。这样一来,在Ubuntu上进行arm平台嵌入式开发环境的搭建就变得异常的简单了。
    直接执行命令“sudo apt-get install gcc-arm-linux-gnueabi(hf,硬浮点版)”所输出如下:
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
将会安装下列额外的软件包:
  binutils-arm-linux-gnueabi cpp-4.6-arm-linux-gnueabi cpp-arm-linux-gnueabi
  gcc-4.6-arm-linux-gnueabi gcc-4.6-arm-linux-gnueabi-base libc6-armel-cross
  libc6-dev-armel-cross libgcc1-armel-cross libgomp1-armel-cross
  linux-libc-dev-armel-cross
建议安装的软件包:
  binutils-doc gcc-4.6-locales cpp-doc gcc-4.6-multilib-arm-linux-gnueabi
  libmudflap0-4.6-dev-armel-cross gcc-4.6-doc libgcc1-dbg-armel-cross
  libgomp1-dbg-armel-cross libquadmath-dbg-armel-cross
  libmudflap0-dbg-armel-cross binutils-gold autoconf automake1.9 libtool flex
  gdb-arm-linux-gnueabi gcc-doc
下列【新】软件包将被安装:
  binutils-arm-linux-gnueabi cpp-4.6-arm-linux-gnueabi cpp-arm-linux-gnueabi
  gcc-4.6-arm-linux-gnueabi gcc-4.6-arm-linux-gnueabi-base
  gcc-arm-linux-gnueabi libc6-armel-cross libc6-dev-armel-cross
  libgcc1-armel-cross libgomp1-armel-cross linux-libc-dev-armel-cross
升级了 0 个软件包,新安装了 11 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。
需要下载 20.1 MB 的软件包。
解压缩后会消耗掉 40.8 MB 的额外空间。
您希望继续执行吗?[Y/n]n
中止执行。
    完成安装后我们来验证一下!
    测试使用的c文件内容:
#include <stdio.h>
int main(void) {
double a,b,c;
a=23.543;
b=323.234;
c = b/a;
printf("the 13/2 = %f\n", c);
printf("hello world !\n");
return 0;
}
    编译,命令“arm-linux-gnueabihf-gcc -v dummy.c”,使用“-v”选项以获取更详细的信息,信息量太大,下面列出编译选项。
COLLECT_GCC_OPTIONS='-v' '-march=armv7-a' '-mfloat-abi=hard' '-mfpu=vfpv3-d16' '-mthumb'
armv7-a,可以看出指令版本为armv7。-mfloat-abi=hard,可看出使用硬件浮点。vfpv3-d16,是硬件浮点的版本,这个我不懂
    反编译,查看生成的指令“arm-linux-gnueabihf-objdump -D a.out > uasm.txt ”
嗯,这里出现了段错误,编译生成的文件也不能在我开发板上运行!原因待查,如有知道的还烦请告知,谢谢!
    使用vim打开"uasm.txt",查找“main”,下面列出由dummy.c生成的汇编指令:

二、关于armel和armhf

    有过制作交叉编译工具的人都知道这个名字是不能乱取的,错误或不匹配(不同软件包之间)的名字将在制作的编译程中产生错误。
    在Ubuntu提供的arm平台相关的软件包中,部分使用了armel或armhf的命名,这两者代表什么意思呢?
    经过搜索从“http://blog.chinaunix.net/uid-9525959-id-3293283.html”上获得了以下信息:

指得是arm体系中有fpu(浮点运算单元)的,有的arm没有fpu,则不能有armel和armhf两种使用fpu的方式了。

armhf比armel硬件要求(确切的是指fpu硬件)高一点。

如果fpu硬件,达到要求的标准了就可以通过gcc的选项-mfloat-abi来指定使用哪种,如下三种值:

soft是不用​fpu计算,即使有fpu浮点运算单元也不用。

armel是softfp,用fpu计算,但是传参数用普通寄存器传,这样中断的时候,只需要保存普通寄存器,中断负荷小,但是参数需要转换成浮点的再计算。

armhf是hard,用fpu计算,传参数用fpu中的浮点寄存器传,省去了转换性能最好,但是中断负荷高。

kernel rootfs app编译的时候,指定的必须一直才行

三、双网卡,上内外网

    家里使用无线路由,但信号不是很好。况且老本本和开发板都没有内置wifi,因此要求本本使用无线USB网卡和路由连接上网查资料,而开发板与本本以有线连接以提供NFS文件系统及TFTP服务以下载内核。同时连接有线(eth0)和无线(wlan0)。
    使用命令进行配置:
sudo  route del default                                                     #删除默认转发路由
sudo route add default gw 192.168.0.1 dev wlan0         #添加条目,使用wlan0作为默认的转发端口


原创粉丝点击