标签: embedded-linux

嵌入式Linux还是eCos?

一种看待它的方法 - 嵌入式Linux从桌面Linux开始,并抛弃嵌入式系统不需要的部分(这实际上是真的吗?),而eCos是从头开始为嵌入式系统设计的.

现在,假设一个ARM处理器,可能是ARM 7 - 性能是否有所作为?实际上,我们谈的是一个非常低负荷的系统,每天最多500笔交易.

一个优于另一个(或FreeRTOS等)的任何优点?稳定性,成熟度,性能,开发工具,还有其他什么?

我能想到的是,如果我确定我永远不会移植到另一个o/s,那么如果我使用嵌入式Linux,我不需要o/s抽象层来允许我进行单元测试主机(桌面Linux机箱).

有什么想法或意见吗?谢谢.

embedded embedded-linux ecos

10
推荐指数
2
解决办法
6564
查看次数

如何以编程方式获取C/C++代码中当前可用的内存量?

在我的中间件软件层中,由于消息,我收到了很多崩溃,

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)

c c++ linux embedded-linux

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

如何从Linux驱动程序访问和调试FDT/DTS设备树(seg-fault)

我编写了一个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

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

如何知道linux中特定引脚的中断/ GPIO编号

我正在做一个我需要在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编号?

我搜索了董事会文件和数据表,但它没有包含任何关于如何获得这些数字,任何想法或帮助在哪里看?

linux embedded arm interrupt embedded-linux

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

需要跨设备的gdb

我在Ubuntu 12.04上安装了gcc-arm-linux-gnueabihf交叉编译器,现在我可以为嵌入式设备构建一个程序.我在哪里可以找到交叉gdb进行调试?

gcc-arm-linux-gnueabihf引用包含相关包列表中的gdb-arm-linux-gnueabihf,它似乎是我正在寻找的调试器.但是这个套餐不可用.

gdb embedded-linux

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

arm-linux-gnueabihf-gdb与gdb-multiarch

我正在尝试从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

gcc gdb arm embedded-linux

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

解释gpio:在固定调节器设备树入口?

我正在尝试控制(打开/关闭)映射到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将从调节器获得电压为某些外部设备供电

    在这种情况下,我错过了打开和关闭它的方法

linux-device-driver linux-kernel embedded-linux device-tree

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

Rasberry Pi HDMI输入和HDMI输出,用于图像处理

我的目标是将HDMI输入视频发送到Rasberry Pi,然后改变输入HDMI(通过C/C++或Java进行图像处理)并将其发送回HDMI输出端口.

问题是Rasberry Pi只有HDMI输出端口,因此没有使用扩展板就无法发送HDMI.

1)我找到了一个试图提供扩展板的启动项目,但是这还没有资金

(https://www.kickstarter.com/projects/1419380698/connect-your-hd-camcorder-to-your-raspberry-pi?ref=discovery).

2)我遇到了这款带有HDMI输入的Rasberry Pi x100扩展板

(http://www.cnx-software.com/2013/12/21/x100-raspberry-pi-expansion-board-adds-vga-output-rtc-and-more/)

问题是,我可以以编程方式检测和拦截x100上的HDMI输入端口,而不是将更改的数据发送到实际PI上的常规HDMI输出吗?

请善意提供详细的方法.

谢谢

image-processing embedded-linux hdmi raspberry-pi

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

insmod错误:插入'./hello.ko': - 无效的模块格式"

我刚刚制作了我的第一个驱动模块,跟随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

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

Linux总可用内存

我正试图找出一个很好的公式来找出可用的内存量.我目前使用以下公式:freeMem = MemFree + Buffers + Cached - Shmem.但是,根据这个公式,我的嵌入式系统正在失去记忆.现在我想知道我是否有内存泄漏所以我kmemleak在内核中启用了.据mpatrol,valgrindcoverity我没有在用户空间中的任何泄漏.内核空间是否有泄漏或我的配方是否关闭?请注意,我没有任何交换此设备.

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)

linux memory-leaks linux-kernel embedded-linux

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