标签: arm

为我的 ARM SoC 交叉编译 GLIBC

我在 chroot-ed Debianarmel环境中看到了一些非常奇怪的东西。

但首先,有点背景故事......这很长,但问题很复杂,任何潜在的帮助都取决于了解完整的故事。

我有一个运行 Linux 的嵌入式 ARM SoC - 更具体地说,armel是 2.6.17 内核上的Debian Lenny。Debian的发行版本身易于升级到更高版本(sudo apt-get dist-upgrade),因此可以升至速度,到armel的版本 squeeze或甚wheezy

问题是内核是自定义的......有问题的 ARM SoC 不是主线内核的一部分,所以它在 2.6.17 几乎被放弃了。

如果您知道 Linux 和 GLIBC 是如何工作的,那么您已经可以看到问题了——GLIBC 版本是用最低支持的内核版本编译的……这已经超过了 2.6.17。因此,如果我们尝试将 chroot 转换为 Debian 压缩...

$ # From inside the little ARM machine running Debian Lenny
$ sudo debootstrap --arch armel squeeze /squeeze \
     http://ftp.whateverCountry.debian.org/debian
$ sudo -i
# mount -t proc none /squeeze/proc
# mount -t sysfs none /squeeze/sys …
Run Code Online (Sandbox Code Playgroud)

arm cross-compilation glibc

14
推荐指数
1
解决办法
7203
查看次数

如何在 Ubuntu 18.04 (Bionic Beaver) 上安装功能强大的 ARM 跨 GCC 工具链

语境

我最近安装Ubuntu 18.04, Linux foobar-VirtualBox 4.15.0-23-generic #25-Ubuntu SMP Wed May 23 18:02:16 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux在虚拟机上。我想为带有硬浮点的Cortex-M4F CPU 交叉编译应用程序,因此我已经安装了包gcc-arm-none-eabi版本15:6.3.1+svn253039-1build1以及 libnewlib-arme-none-eabi版本2.4.0.20160527-3.

问题

由于使用硬浮点数的目标文件与使用软浮点数的库之间存在冲突,因此出现链接器错误。一些研究表明这是一个已知的Ubuntu 18.04 (Bionic Beaver) 问题:

请注意,我确实提供了正确的编译器和链接器标志,并且该项目使用来自GNU ARM Embedded的 Windows 交叉工具链正确构建。我认为在这里粘贴完整的错误是没有意义的。如果有人认为这是必需的,我很乐意编辑这个问题。

我已经尝试过的

根据我的基本理解,我有两种解决方案来获得功能性 GCC ARM 工具链:

  1. 降级gcc-arm-none-eabi以返回到工作版本
  2. 从团队 GCC ARM 嵌入式 PPA 中删除gcc-arm-none-eabi并安装(gcc-arm-embedded从 PPA安装 gcc-arm-embedded

降级 gcc-arm-none-eabi,但降级到什么程度?

为了降级,gcc-arm-none-eabi我必须在我的包管理器中找到以前的版本。我首先用 更新了包列表sudo apt …

ubuntu arm gcc apt cross-compilation

13
推荐指数
1
解决办法
4万
查看次数

如何在 Ubuntu 上获取 ARM 处理器的当前 CPU 频率?

如何在 Ubuntu 上获取 ARM 处理器的当前 CPU 频率?既不帮助/proc/cpuinfo也不/sys/devices/system/cpu/cpu*/cpufreq帮助。

事实上,/sys/devices/system/cpu/cpu*/cpufreq我的Ubuntu系统上没有目录。并且/proc/cpuinfo两者中都没有 CPU MHz 信息。

平台规格为:NVIDIA® Jetson™ TX2、ubuntu16.04、linux 4.9.18。

有人可以就获取 ARM 处理器的当前 CPU 频率给出一些提示吗?

是否有任何内核配置可能会影响获取当前 CPU 频率?

<code>cat /proc/cpuinfo</code> 的部分输出

ubuntu kernel arm cpu-frequency

13
推荐指数
1
解决办法
6174
查看次数

如何为 ARM 交叉编译 Chromium?

目标

我需要在mini210s运行Linux 3.0.8 armv7l 的FriendlyARM上安装 Chromium

环境

工具链 depot_tools

得到后depot_tools

vagrant@vagrant:~/depot_tools$ fetch chromium
Run Code Online (Sandbox Code Playgroud)

环境变量

export GYP_CROSSCOMPILE=1
export GYP_DEFINES="target_arch=arm arm_float_abi=hard"
Run Code Online (Sandbox Code Playgroud)

依赖关系

vagrant@vagrant:~/depot_tools/src$  ./chrome/installer/linux/sysroot_scripts/install-debian.wheezy.sysroot.py --arch=arm 
Installing Debian Wheezy arm root image: /home/vagrant/depot_tools/src/chrome/installer/linux/debian_wheezy_arm-sysroot
Downloading http://storage.googleapis.com/chrome-linux-sysroot/toolchain/285950/debian_wheezy_arm_sysroot.tgz

build/install-build-deps.sh --arm
build/install-build-deps-android.sh
gclient sync
Run Code Online (Sandbox Code Playgroud)

编译

build/gyp_chromium -Goutput_dir=out_arm 
ninja -C out_arm/Debug chrome
Run Code Online (Sandbox Code Playgroud)

错误

vagrant@vagrant:~/depot_tools/src$ ninja -C out_arm/Debug chrome
ninja: Entering directory `out_arm/Debug'
[222/18316] CXX obj/third_party/webrtc/modules/audio_coding/codecs/audio_encoder_interface.audio_encoder.o
FAILED: ../../third_party/llvm-build/Release+Asserts/bin/clang++ -MMD -MF …
Run Code Online (Sandbox Code Playgroud)

arm chrome cross-compilation assembly

12
推荐指数
1
解决办法
2万
查看次数

在 armv7 上运行 X86 二进制文件

我正在尝试在 Raspberry Pi2 上运行 SNBC USB 打印机。

为此,我需要将 SNBC USB 打印机的过滤器二进制文件复制到/usr/lib/cups/filter. 但是过滤器二进制文件是使用 x86 处理器编译的(制造商没有兴趣支持 arm),而我使用armv7. 我知道这行不通,但出于好奇,我试过了,cups 说/usr/lib/cups/filter/rasterorp3150 failed

我在互联网上寻找解决方案,人们建议使用 Qemu。但它是针对完整的 x86 来武装平台的。有没有办法以简单不复杂的方式将 x86 二进制文件转换为 arm 二进制文件?

顺便说一句,使用hexedit工具将 x86 二进制文件转换为等效的armv7二进制文件是个好主意吗?(opcode转换)

如果是这样,任何人都可以就如何做到这一点提出一些想法吗?

arm x86 qemu

12
推荐指数
1
解决办法
3万
查看次数

通过 qemu 在 Debian armel 上运行 Debian i386 二进制文件

我正在尝试按照本指南在运行 Debian armel 的 SheevaPlug 上设置 Ventrilo 服务器。这个页面指出我可以使用 QEMU 在我的 arm 系统上运行为 i386 制作的二进制文件。

qemu 的设置说我需要安装 qemu、qemu-user 和 qemu-libc-i386。我在apt-get 中找到了前两个,但qemu-libc-i386不是一个包。所以我尝试运行 qemu 来运行 ventrilo 服务器,如下所示:

# qemu-i386 ./ventrilo_srv
/lib/ld-linux.so.2: No such file or directory
Run Code Online (Sandbox Code Playgroud)

这似乎ld-linux.so.2是我在 armel as 中所拥有的 i386 版本ld-linux.so.3

所以我知道操作方法适用于不同的 Linux 发行版,但如果他们可以在他们疯狂的发行版中运行,我似乎应该能够在 Debian 中运行它。是否有我可以获得的软件包可以安装libc-i386以便我可以运行它(类似于x64 系统的ia32-libs?)我还尝试so.2从另一个 i386 系统复制它,但没有得到我任何地方。

embedded arm debian qemu

11
推荐指数
1
解决办法
9064
查看次数

设备树中与号前缀的含义

我正在查看一个尝试指定不同节点的 DTS 文件,但有趣的是我发现一些节点具有不同的命名方式。

/ {
    model = "TI AM335x BeagleBone Black";
    compatible = "ti,am335x-bone-black", "ti,am335x-bone", "ti,am33xx";
};

&ldo3_reg {
    regulator-min-microvolt = <1800000>;
    regulator-max-microvolt = <1800000>;
    regulator-always-on;
};

&mmc1 {
    vmmc-supply = <&vmmcsd_fixed>;
};

&mmc2 {
    vmmc-supply = <&vmmcsd_fixed>;
    pinctrl-names = "default";
    pinctrl-0 = <&emmc_pins>;
    bus-width = <8>;
    status = "okay";
};

/ {
    hdmi {
        compatible = "ti,tilcdc,slave";
        i2c = <&i2c0>;
        pinctrl-names = "default", "off";
        pinctrl-0 = <&nxp_hdmi_bonelt_pins>;
        pinctrl-1 = <&nxp_hdmi_bonelt_off_pins>;
        status = "okay";
    };
};
Run Code Online (Sandbox Code Playgroud)

如果一个节点有&它的前缀,它表达了什么?将它们与根节点分开的必要性是什么,而它们可以存在于根节点本身中?有趣的是,上面的例子也有两个根节点,这怎么可能?

drivers boot-loader arm linux-kernel device-tree

11
推荐指数
1
解决办法
2988
查看次数

如何为 Beagleboard 从头开始​​(CLFS)为跨 Linux 构建 GCC 交叉编译器?

目前,我尝试使用Cross Linux from Scratch 中的说明从头开始构建嵌入式 Linux 。

一切正常,直到我尝试编译 GCC 交叉编译器。我想为 Beagleboard-xM 构建 Linux...所以我选择了以下设置:

export CLFS_ABI="aapcs-linux"
export CLFS_HOST="x86_64-cross-linux-gnu"
export CLFS_TARGET="armv7a-unknown-linux-uclibceabi"
export CLFS_ARCH="arm"
export CLFS_ENDIAN="little"
export CLFS_ARM_ARCH="armv7"
export CLFS_ARM_MODE="arm"
export CLFS_FLOAT="hard"
export CLFS_FPU="neon"
Run Code Online (Sandbox Code Playgroud)

不,只要我尝试运行此页面上的说明,命令就会make all-gcc all-target-libgcc出错。

checking for armv7a-unknown-linux-uclibceabi-gcc...  /mnt/clfs/sources/gcc-build/./gcc/xgcc -B/mnt/clfs/sources/gcc-build/./gcc/ -B/mnt/clfs/cross-tools/armv7a-unknown-linux-uclibceabi/bin/ -B/mnt/clfs/cross-tools/armv7a-unknown-linux-uclibceabi/lib/ -isystem /mnt/clfs/cross-tools/armv7a-unknown-linux-uclibceabi/include -isystem /mnt/clfs/cross-tools/armv7a-unknown-linux-uclibceabi/sys-include   
checking for suffix of object files... configure: error: in `/mnt/clfs/sources/gcc-build/armv7a-unknown-linux-uclibceabi/libgcc':
configure: error: cannot compute suffix of object files: cannot compile
See `config.log' for more details.
make: *** [configure-target-libgcc] Error …
Run Code Online (Sandbox Code Playgroud)

embedded arm gcc cross-compilation

10
推荐指数
1
解决办法
3308
查看次数

如何禁用处理器的 L1 和 L2 缓存?

是否可以在 Ubuntu 14.04(最好使用 Python 等高级语言)上禁用 L1 和/或 L2 缓存?如果是这样,如何?

另外,在不同的架构之间禁用缓存会不会有很大的不同?如果是这样,我对 ARM Cortex-A15 更感兴趣。

编辑

在研究如何禁用缓存时,我确实从kernel.org 文档中找到了 /proc/sys/vm/ 中的“drop_caches”文件

“写入此内容将导致内核丢弃干净的缓存,以及可回收的平板对象,如 dentries 和 inode。一旦丢弃,它们的内存就会变得空闲。”

...

“这个文件不是控制各种内核缓存(inode、dentries、pagecache 等)增长的手段。当系统其他地方需要内存时,内核会自动回收这些对象。”

这似乎不是我正在寻找的,因为这不仅看起来不会禁用缓存,而且我认为虚拟内存驻留在操作系统中而不是硬件上。我的目标是禁用缓存,因此必须在其他地方寻找所需的内存,例如在 RAM 中。

编辑

澄清一下,我了解禁用缓存会对系统产生什么影响。但是,它是空间应用中常用的一种技术,可以提高安全关键应用的可靠性。以下是一些记录这种现象的资源:

通过高速缓存减少嵌入式软件辐射引起的故障

空间辐射环境中微处理器的地面辐射测试指南

甚至还有关于这个主题的书:

电子产品中的电离辐射效应:从存储器到成像器

linux ubuntu cache arm python

10
推荐指数
1
解决办法
7352
查看次数

.so 文件中的链接器脚本?(libc.so) 是吗?

我目前正在尝试让 python 在我的 NAS 上运行,这是一个 Zyxel NSA325。

我确实设法让 python 2.7 和 pip 运行,并且我能够使用 pip 成功安装看门狗模块。我按照这些说明让 python 和 pip 运行 btw。

当我运行一个使用 watchdog 模块的 python 脚本时,我得到了一个非常错误的错误,很难。

/usr/local/zy-pkgs/ffproot/ffp/bin/python2.7: '/ffp/lib/libc.so' is not an ELF file
Run Code Online (Sandbox Code Playgroud)

我用谷歌搜索了 ELF 文件的标题应该是什么样子,显然它以7f 45 4c 46转换为.ELF. 所以我做了一个快速cat /ffp/lib/libc.so的结果是:

/* GNU ld script
 * Use the shared library, but some functions are only in
 * the static library, so try that secondarily. */
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
         "elf32-littlearm")
GROUP ( libc.so.0 …
Run Code Online (Sandbox Code Playgroud)

linux arm python linker elf

10
推荐指数
1
解决办法
2158
查看次数