我在 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) 我最近安装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 工具链:
gcc-arm-none-eabi以返回到工作版本gcc-arm-none-eabi并安装(gcc-arm-embedded从 PPA安装 gcc-arm-embedded)为了降级,gcc-arm-none-eabi我必须在我的包管理器中找到以前的版本。我首先用 更新了包列表sudo apt …
如何在 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 频率?
我需要在mini210s运行Linux 3.0.8 armv7l 的FriendlyARM上安装 Chromium
depot_tools按照这些指南安装获取代码和
Linux Chromium ARM得到后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) 我正在尝试在 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转换)
如果是这样,任何人都可以就如何做到这一点提出一些想法吗?
我正在尝试按照本指南在运行 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 系统复制它,但没有得到我任何地方。
我正在查看一个尝试指定不同节点的 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)
如果一个节点有&它的前缀,它表达了什么?将它们与根节点分开的必要性是什么,而它们可以存在于根节点本身中?有趣的是,上面的例子也有两个根节点,这怎么可能?
目前,我尝试使用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) 是否可以在 Ubuntu 14.04(最好使用 Python 等高级语言)上禁用 L1 和/或 L2 缓存?如果是这样,如何?
另外,在不同的架构之间禁用缓存会不会有很大的不同?如果是这样,我对 ARM Cortex-A15 更感兴趣。
编辑
在研究如何禁用缓存时,我确实从kernel.org 文档中找到了 /proc/sys/vm/ 中的“drop_caches”文件
“写入此内容将导致内核丢弃干净的缓存,以及可回收的平板对象,如 dentries 和 inode。一旦丢弃,它们的内存就会变得空闲。”
...
“这个文件不是控制各种内核缓存(inode、dentries、pagecache 等)增长的手段。当系统其他地方需要内存时,内核会自动回收这些对象。”
这似乎不是我正在寻找的,因为这不仅看起来不会禁用缓存,而且我认为虚拟内存驻留在操作系统中而不是硬件上。我的目标是禁用缓存,因此必须在其他地方寻找所需的内存,例如在 RAM 中。
编辑
澄清一下,我了解禁用缓存会对系统产生什么影响。但是,它是空间应用中常用的一种技术,可以提高安全关键应用的可靠性。以下是一些记录这种现象的资源:
甚至还有关于这个主题的书:
我目前正在尝试让 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)