我正在寻找为 ARM 系统创建 GCC 的本机版本,但遇到了一些麻烦。构建机器是 i686-linux。我看到的每个教程都告诉我如何设置实际的交叉编译套件(我已经使用 crosstools-ng 完成了)。但是,我没有看到与编译本机 ARM GCC 相关的任何内容。我使用的配置字符串如下,我只设置了带有标题的 sysroot。我还交叉编译并安装了 GMP 和 MPFR。
../../gcc-4.3.5/configure \
--host=arm-unknown-linux-gnueabi \
--build=i686-build_pc-linux-gnu \
--target=arm-unknown-linux-gnueabi \
--prefix=/home/vm/gcc-native/sysroot \
--with-sysroot=/home/vm/gcc-native/sysroot \
--enable-shared --enable-threads --disable-libmudflap --disable-libssp \
--disable-libgomp --disable-libstdcxx-pch --with-gnu-as --with-gnu-ld \
--enable-languages=c,c++ --enable-symvers=gnu --enable-__cxa_atexit \
--disable-nls --disable-multilib \
--with-gmp=/home/vm/gcc-native/sysroot/ \
--with-mpfr=/home/vm/gcc-native/sysroot/
Run Code Online (Sandbox Code Playgroud)
GCC 将构建一段时间,但随后会因以下原因而死亡:
检查目标文件的后缀...配置:错误:无法计算目标文件的后缀:无法编译。
我不确定这将如何在我的系统上运行,因为我在 i686-linux 上构建并且目标/主机都是 arm-linux。我现在的想法是找到一个 ltib 发行版并查看 GCC 的规范文件并尝试执行所有步骤。由于与 std 命名空间冲突,ltib 为我的电路板提供的 GCC 无法在我的系统上编译。
任何信息/链接将不胜感激!
我正在为自定义USB设备编写一个Linux内核驱动程序,它将使用批量端点,一切似乎工作正常,但是,我的数据速率非常慢.具体来说,写入和读取10MB的数据需要大约25秒.我在嵌入式系统和运行在合理PC上的Linux VM上尝试了这一点,结果相似.
我使用赛普拉斯的EZ-USB FX2开发套件作为目标板.它正在运行bulkloop固件,它设置了两个入口和两个出端点.每个端点都是双缓冲的,并支持512字节窗口.固件通过main()中的while(1)循环轮询出端点,没有睡眠,并且当使用自动打印机提供这些数据时,将数据从out复制到端点.有人告诉我,这可以使用他们的特定应用程序在Windows上公平地移动数据但是没有机会验证这一点.
我的代码(下面的相关部分)在设备探测例程中调用一个名为bulk_io的函数.此函数创建一个out urbs的数字(URB_SETS),尝试将512字节写入设备.将此数字更改为1到32之间不会改变性能.它们都是从同一个缓冲区复制的.每个对out端点的写操作的回调处理程序用于在端点中的相应端点上创建读取urb.读取回调创建另一个写入urb,直到我达到了我想要一次运行的写入/读取请求总数(20,000).我现在正在努力将回调函数中的大多数操作推送到下半部分,以防它们阻塞其他中断.我也在考虑重写赛普拉斯FX2的批量循环固件,以便使用中断而不是轮询.这里有什么东西看起来与众不同,使性能如此之低?先感谢您.如果您想查看更多代码,请告诉我,这只是测试赛普拉斯FX2 I/O的简单驱动程序.
这是out端点写回调函数:
static void bulk_io_out_callback0(struct urb *t_urb) {
// will need to make this work with bottom half
struct usb_dev_stat *uds = t_urb->context;
struct urb *urb0 = usb_alloc_urb(0,GFP_KERNEL);
if (urb0 == NULL) {
printk("bulk_io_out_callback0: out of memory!");
}
usb_fill_bulk_urb(urb0, interface_to_usbdev(uds->intf), usb_rcvbulkpipe(uds->udev,uds->ep_in[0]), uds->buf_in, uds->max_packet, bulk_io_in_callback0, uds);
usb_submit_urb(urb0,GFP_KERNEL);
usb_free_urb(urb0);
}
Run Code Online (Sandbox Code Playgroud)
这是端点读取回调函数:
static void bulk_io_in_callback0(struct urb *t_urb) {
struct usb_dev_stat *uds = t_urb->context;
struct urb *urb0 = usb_alloc_urb(0,GFP_KERNEL);
if (urb0 == NULL) {
printk("bulk_io_out_callback0: out of memory!"); …Run Code Online (Sandbox Code Playgroud)