ubuntu 9.04 + crosstool

去年开始看arm的时候做过的了,成功是成功了。。但是编译出的二进制文件运行似乎有问题。。。还是乖乖用厂家给的toolchain吧

参考链接:

步骤:

1.保证你的ubuntu9.04下安装了以下软件开发工具

Bison,flex,build-essential,patch,libncurses5-dev

我并没有试过没装这些工具的后果,都是网上的经验,你要是不信这个邪,就自己吃吃这个螃蟹

2.编译器选择

因为ubuntu9.04自带的是gcc-4.3.x无法用crosstool正常编译交叉编译器,所以必须安装gcc-4.1,但是不必卸载原有的4.3.x。

可以用新立得软件包管理器安装gcc-4.1,或者直接在终端输入:

sudo apt-get install gcc-4.1

然后:

sudo rm /usr/bin/gcc    (删除GCC,它只是个到gcc-4.3.2的软连接文件) sudo ln -s /usr/bin/gcc-4.1 /usr/bin/gcc   (建立GCC到gcc-4.1的软连接)

交叉工具链编译完成后可以运行以下命令修改回来

sudo rm /usr/bin/gcc sudo ln -s /usr/bin/gcc-4.3 /usr/bin/gcc
3. Shell的选择

如果你运行

ls -la /bin/sh

命令看到/bin/sh其实是一个指向dash的软链接,则请运行以下命令,将/bin/sh链接到bash。

sudo mv /bin/sh /bin/sh.old sudo ln -sf bash /bin/sh
4. crosstool方案选择

参考http://kegel.com/crosstool/crosstool-0.43/buildlogs/的结果,选择如下方案

crosstool-0.43 gcc-3.3.6 gcc-4.1.1 glibc-2.3.2 binutils-2.16.1 linux-libc-headers-2.6.12.0 linux-2.6.27.6

修改demo-arm9tdmi.sh、gcc-4.1.1-glibc-2.3.2.dat,最后运行demo-arm9tdmi.sh.

修改 crosstool-0.43 目录下 demo-arm9tdmi.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.txt set -ex TARBALLS_DIR=$HOME/downloads RESULT_TOP=/home/pino/crosstool //这两行是需要修改的参数,TARBALLS_DIR是下载的工具源码压缩包的存放目录。 //RESULT_TOP是要生成的工具链的存放目录,一定要改到有写权限的目录,不然无法编译。 //以上是我的修改,他人可以根据实际情况修改。 export TARBALLS_DIR RESULT_TOP GCC_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 arm9tdmi.dat gcc-3.2.3-glibc-2.2.5.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-3.2.3-glibc-2.3.2.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-3.2.3-glibc-2.3.2-tls.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-3.3.6-glibc-2.2.5.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-3.3.6-glibc-2.3.2.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-3.3.6-glibc-2.3.2-tls.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.2.5.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.2.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.2-tls.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.5.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.5-tls.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.6.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.6-tls.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.2.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.2-tls.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.5.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.5-tls.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.6.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.6-tls.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-4.1.0-glibc-2.3.2.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-4.1.0-glibc-2.3.2-tls.dat` sh all.sh --notest eval `cat arm9tdmi.dat gcc-4.1.1-glibc-2.3.2.dat` sh all.sh --notest //上面表示要选工具链的版本号!"#"起注释功能!可以选择一行! //这行是默认的工具链的版本号(最新的),我就是用这一行,也可以选别的。 echo Done.

根据你所选的工具链的版本号,打开相应的.dat文件,例如:我在demo-arm9tdmi.sh中选的是eval `cat arm9tdmi.dat gcc-4.1.1-glibc-2.3.2.dat` sh all.sh –notest ,那么我就打开arm9tdmi.dat gcc-4.1.1-glibc-2.3.2.dat,并作修改,其内容如下:

BINUTILS_DIR=binutils-2.16.1 GCC_CORE_DIR=gcc-3.3.6 GCC_DIR=gcc-4.1.1 GLIBC_DIR=glibc-2.3.2 LINUX_DIR=linux-2.6.27.6 //此处为修改的地方 LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0 GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2 GDB_DIR=gdb-6.5
5. 执行./demo-arm9tdmi.sh 开始编译

官方提示:

Edit the script if you want to change any of these settings or versions. Then (as root) create the directory      /opt/crosstool and make it writable by you, and finally (as yourself) run the demo scrip

该脚本不要用root权限执行,否则会出现一些错误,就使用普通帐号执行

6. 修改环境变量&测试

等待一段不长不短的时间编译就会完成了,编译完成后应该在你所设的工作目录下的 gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/bin 下找到 arm-9tdmi-linux-gnu-gcc

添加目录 在终端中输入以下命令 sudo gedit /etc/environment

在PATH结尾的分号前添加 Crosstool 的 bin 目录

然后就好了。可以开始测试使用了。测试的方法很简单,随便找个程序源码编译一下就好了。这里用的这些编译器生成的是二进制文件,和平时的gcc生成的可执行文件并不相同。例如我测试时的文件是test.c,

  #include<stdio.h>   int main()   {       printf("Hello!");       return 0;   }

调用新的arm-linux-gcc来编译:arm-S3C2410-linux-gnu-gcc -o test test.c,这时生成的test文件是一个二进制的可执行文件,并不是我们平时常用的,所以在PC上执行这个文件的话是不行的,系统会提示:bash: ./test: cannot execute binary file。所以不能用这种方法来测试交叉编译是否成功。而应改采用file命令,例如我的是这样的:

file test

结果如下:

test: ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.4.3, dynamically linked (uses shared libs), for GNU/Linux 2.4.3, not stripped

如果出现这样的结果说明交叉编译环境已经安装成功。

分数阶傅里叶变换(Fractional Fourier Transform, FRFT)是对传统傅里叶变换的拓展,它通过非整数阶的变换方式,能够更有效地处理非线性信号以及涉及时频局部化的问题。在信号处理领域,FRFT尤其适用于分析非平稳信号,例如在雷达、声纳和通信系统中,对线性调频(Linear Frequency Modulation, LFM)信号的分析具有显著优势。LFM信号是一种频率随时间线性变化的信号,因其具有宽频带和良好的时频分辨率,被广泛应用于雷达和通信系统。FRFT能够更精准地捕捉LFM信号的时间和频率信息,相比普通傅里叶变换,其性能更为出色。 MATLAB是一种强大的数值计算和科学计算工具,拥有丰富的函数库和用户友好的界面。在MATLAB中实现FRFT,通常需要编写自定义函数或利用信号处理工具箱中的相关函数。例如,一个名为“frft”的文件可能是用于执行分数阶傅里叶变换的MATLAB脚本或函数,并展示其在信号处理中的应用。FRFT的正确性验证通常通过对比变换前后信号的特性来完成,比如评估信号的重构质量、信噪比等。具体而言,可以通过计算原始信号与经过FRFT处理后的信号之间的相似度,或者对比LFM信号的关键参数(如初始频率、扫频率和持续时间)是否在变换后得到准确恢复。 在MATLAB代码实现中,通常包含以下步骤:首先,生成LFM信号模型,设定其初始频率、扫频率、持续时间和采样率等参数;其次,利用自定义的frft函数对LFM信号进行分数阶傅里叶变换;接着,使用MATLAB的可视化工具(如plot或imagesc)展示原始信号的时域和频域表示,以及FRFT后的结果,以便直观对比;最后,通过计算均方误差、峰值信噪比等指标来评估FRFT的性能。深入理解FRFT的数学原理并结合MATLAB编程技巧,可以实现对LFM信号的有效分析和处理。这个代码示例不仅展示了理论知识在
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值