一种看待它的方法 - 嵌入式Linux从桌面Linux开始,并抛弃嵌入式系统不需要的部分(这实际上是真的吗?),而eCos是从头开始为嵌入式系统设计的.
现在,假设一个ARM处理器,可能是ARM 7 - 性能是否有所作为?实际上,我们谈的是一个非常低负荷的系统,每天最多500笔交易.
一个优于另一个(或FreeRTOS等)的任何优点?稳定性,成熟度,性能,开发工具,还有其他什么?
我能想到的是,如果我确定我永远不会移植到另一个o/s,那么如果我使用嵌入式Linux,我不需要o/s抽象层来允许我进行单元测试主机(桌面Linux机箱).
有什么想法或意见吗?谢谢.
在我的中间件软件层中,由于消息,我收到了很多崩溃,
page allocation failure. order:10, mode:0xd1
据我所知,崩溃可能由于多种原因而发生,动态内存耗尽以进行进一步分配或内存碎片.
消息后面的回溯是不相关的,因为它来自第三方驱动程序模块,很可能问题是该驱动程序,但不幸的是,我既不能从该源代码获得任何调试信息.我想使用一些编程函数调用来描述我的源代码,以排除我上面提到的两种情况的可能性.
我无法使用,valgrind因为Val尚未完全支持ARM.
[更新:]添加堆栈跟踪,因为@caf的回答表明其中可能存在一些有价值的信息.
Application: page allocation failure. order:10, mode:0xd1
Backtrace:
[<c00297d0>] (dump_backtrace+0x0/0x114) from [<c02812b8>] (dump_stack+0x18/0x1c)
r7:0000000a r6:000000d1 r5:00000000 r4:00000000
[<c02812a0>] (dump_stack+0x0/0x1c) from [<c00716e4>] (__alloc_pages_nodemask+0x49c/0x4fc)
[<c0071248>] (__alloc_pages_nodemask+0x0/0x4fc) from [<c007175c>] (__get_free_pages+0x18/0x44)
[<c0071744>] (__get_free_pages+0x0/0x44) from [<bf021790>] (tsif_request_rx_buffer+0x74/0xf4 [tsif_data])
[<bf02171c>] (tsif_request_rx_buffer+0x0/0xf4 [tsif_data]) from [<bf021bd8>] (tsif_data_ioctl+0x17c/0x9d4 [tsif_data])
r7:be9e8604 r6:c0045319 r5:c3793400 r4:00000007
[<bf021a5c>] (tsif_data_ioctl+0x0/0x9d4 [tsif_data]) from [<c00a1c30>] (vfs_ioctl+0x78/0x94)
[<c00a1bb8>] (vfs_ioctl+0x0/0x94) from [<c00a22e0>] (do_vfs_ioctl+0x594/0x5f0)
r7:c2067e80 r6:00000021 r5:c2067e80 r4:00000021
[<c00a1d4c>] (do_vfs_ioctl+0x0/0x5f0) from [<c00a237c>] (sys_ioctl+0x40/0x64)
[<c00a233c>] (sys_ioctl+0x0/0x64) from [<c0025ec0>] (ret_fast_syscall+0x0/0x28) …Run Code Online (Sandbox Code Playgroud) 我编写了一个Linux内核模块,作为基于Freescale P2020RDB的定制板的FPGA驱动程序.驱动程序包含几个#defines指定各种地址,大小,总线宽度等.我想从驱动程序中访问板的扁平化设备树(FDT)来配置这些地址,因此驱动程序可以用于其他板,其中FPGA具有不同的大小或驻留在不同的地址.
我在模块的初始化函数中添加了以下简单代码,这是我在浏览Linux内核源代码树时找到的代码:
...
#include <linux/of_device.h>
#include <linux/of_platform.h>
static int __init fpga_init(void) {
struct device_node *dt_node;
const u8 *property;
int len;
printk(KERN_INFO "(I) FPGA module loaded at 0x%p\n", fpga_init);
dt_node = of_find_node_by_path("/fpga_dt@c0000000");
if (!dt_node) {
printk(KERN_ERR "(E) Failed to find device-tree node: /fpga_dt@c0000000\n");
return -ENODEV;
}
printk(KERN_INFO "(I) Found device-tree node. Now retrieving property.\n");
property = of_get_property(dt_node, "reg", &len);
printk(KERN_INFO "(I) reg=0x%08lX\n", (unsigned long) property[0]);
...
return 0;
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,插入模块会在尝试查找设备节点时产生分段错误.
# insmod fpga_drv.ko
(I) FPGA module loaded at …Run Code Online (Sandbox Code Playgroud) linux linux-device-driver linux-kernel embedded-linux device-tree
我正在做一个我需要在Linux中处理中断的项目.
我使用的板是一个ARM9Board由三星(臂11处理器)的基础上S3C6410 MCU和它具有以下的I/O接口:

如图所示,我有外部中断的EINTx引脚和GPIO引脚作为GPIO引脚,我不介意使用其中任何一个,但我没有他们的数字!
对于EINTx引脚:
我打电话的时候
int request_irq(unsigned int irq, void (*handler)(int, struct pt_regs *),
unsigned long flags, const char *device);
Run Code Online (Sandbox Code Playgroud)
我需要中断号作为函数的第一个参数传递它,那么如何获得irq数,例如EINT16引脚?
对于GPxx引脚: 与我需要GPIO引脚编号将其传递给这些功能的故事相同
int gpio_request(unsigned gpio, const char *label);
int gpio_direction_input(unsigned gpio);
int gpio_to_irq(unsigned gpio);
Run Code Online (Sandbox Code Playgroud)
即,我如何知道GPP8引脚的GPIO编号?
我搜索了董事会文件和数据表,但它没有包含任何关于如何获得这些数字,任何想法或帮助在哪里看?
我在Ubuntu 12.04上安装了gcc-arm-linux-gnueabihf交叉编译器,现在我可以为嵌入式设备构建一个程序.我在哪里可以找到交叉gdb进行调试?
gcc-arm-linux-gnueabihf引用包含相关包列表中的gdb-arm-linux-gnueabihf,它似乎是我正在寻找的调试器.但是这个套餐不可用.
我正在尝试从x86计算机到远程ARM设备执行跨平台远程调试.(例如:Beagle Bone Black)
我正在使用Ubuntu 14.04和Eclipse CDT.
我安装了包gcc-arm-linux-gnueabihf,但gdb调试器不在该包中.(http://packages.ubuntu.com/precise/gcc-arm-linux-gnueabihf)
因此,我想知道如果我应该使用Linaro的工具链(其包括臂-Linux的gnueabihf-GDB),或者如果我应该安装GDB-multiarch包.
gdb-multiarch和arm-linux-gnueabihf-gdb有什么区别?使用gdb-multiarch更好吗?
ssinfod
我正在尝试控制(打开/关闭)映射到GPIO引脚的电压调节器并为外部设备供电.调节器的设备树具有以下条目:
reg_usb1_vbus: usb1_vbus {
compatible = "regulator-fixed";
regulator-name = "usb1_vbus";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
gpio = <&gpio3 28 0>;
enable-active-high;
};
Run Code Online (Sandbox Code Playgroud)
当我阅读文档时,我对此感到困惑:
可选属性:
- gpio:用于启用控件的gpio
但是,我无法导出该GPIO的sysfs接口,并使用它来控制外部设备的电源(只是打开/关闭).此外,如果我gpio = <&gpio3 28 0>;从设备树中注释掉外部设备,则外部设备不会获得电源(如果没有注释,则设备始终处于通电状态).
监管机构已导出sysfs接口:
80090000.usb-vbus power suspend_standby_state
device state type
microvolts subsystem uevent
name suspend_disk_state
num_users suspend_mem_state
Run Code Online (Sandbox Code Playgroud)
但是我无法写入任何文件.
解释gpio:条目的正确方法是什么?
gpio用于启用控制
在这种情况下,我错过了我想要调节器电压的引脚之间的映射.
gpio将从调节器获得电压为某些外部设备供电
在这种情况下,我错过了打开和关闭它的方法
我的目标是将HDMI输入视频发送到Rasberry Pi,然后改变输入HDMI(通过C/C++或Java进行图像处理)并将其发送回HDMI输出端口.
问题是Rasberry Pi只有HDMI输出端口,因此没有使用扩展板就无法发送HDMI.
1)我找到了一个试图提供扩展板的启动项目,但是这还没有资金
2)我遇到了这款带有HDMI输入的Rasberry Pi x100扩展板
问题是,我可以以编程方式检测和拦截x100上的HDMI输入端口,而不是将更改的数据发送到实际PI上的常规HDMI输出吗?
请善意提供详细的方法.
谢谢
我刚刚制作了我的第一个驱动模块,跟随LDD3的hello world模块.但遗憾的是遇到了这个错误:
insmod: error inserting './hello.ko': -1 Invalid module format.
Run Code Online (Sandbox Code Playgroud)
我在Ubuntu 11.04和我的环境中这样做:
$ uname -r
2.6.38-8-generic
Run Code Online (Sandbox Code Playgroud)
我得到这样的内核源代码:
sudo apt-cache search linux-source
linux-source - Linux kernel source with Ubuntu patches
linux-source-2.6.38 - Linux kernel source for version 2.6.38 with Ubuntu patches
$sudo apt-get install linux-source-2.6.38
Run Code Online (Sandbox Code Playgroud)
我的/ usr/src:
$ls /usr/src/
linux-headers-2.6.38-8 linux-source-2.6.38 vboxguest-5.0.10
linux-headers-2.6.38-8-generic linux-source-2.6.38.tar.bz2
Run Code Online (Sandbox Code Playgroud)
然后我编译内核
$sudo cp /boot/config-2.6.38-8-generic ./.config
$sudo make menuconfig -- load the .config file
$make
$make modules
Run Code Online (Sandbox Code Playgroud)
然后我编译我的内核模块
$make -C /usr/src/linux-source-2.6.38/linux-source-2.6.38 M=`pwd` modules
Run Code Online (Sandbox Code Playgroud)
使用Makefile:
obj-m := hello.o
Run Code Online (Sandbox Code Playgroud)
然后最后当我插入模块时: …
linux kernel-module linux-device-driver linux-kernel embedded-linux
我正试图找出一个很好的公式来找出可用的内存量.我目前使用以下公式:freeMem = MemFree + Buffers + Cached - Shmem.但是,根据这个公式,我的嵌入式系统正在失去记忆.现在我想知道我是否有内存泄漏所以我kmemleak在内核中启用了.据mpatrol,valgrind和coverity我没有在用户空间中的任何泄漏.内核空间是否有泄漏或我的配方是否关闭?请注意,我没有任何交换此设备.
MYBOX> cat /proc/meminfo
MemTotal: 2073348 kB
MemFree: 1388180 kB
Buffers: 137016 kB
Cached: 88772 kB
SwapCached: 0 kB
Active: 589124 kB
Inactive: 44380 kB
Active(anon): 410236 kB
Inactive(anon): 1992 kB
Active(file): 178888 kB
Inactive(file): 42388 kB
Unevictable: 0 kB
Mlocked: 0 kB
HighTotal: 1310716 kB
HighFree: 811828 kB
LowTotal: 762632 kB
LowFree: 576352 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: …Run Code Online (Sandbox Code Playgroud) embedded-linux ×10
linux ×5
linux-kernel ×4
arm ×2
device-tree ×2
embedded ×2
gdb ×2
c ×1
c++ ×1
ecos ×1
gcc ×1
hdmi ×1
interrupt ×1
memory-leaks ×1
raspberry-pi ×1