标签: embedded-linux

如何在嵌入式系统上调试内核oops

我在嵌入式开发中遇到了一个串口问题./ dev/ttyS0,/ dev/ttyS2和/ dev/ttyS3都可以正常工作而没有问题.但在某些情况下,访问/ dev/ttyS1会抛出以下两个"oops"消息.

我不知道在哪里开始追踪原因,你能帮忙吗?

1

Unable to handle kernel NULL pointer dereference at virtual address 0000013c
pgd = c0004000
[0000013c] *pgd=00000000
stopped custom tracer.
Internal error: Oops: 17 [#1] PREEMPT
Modules linked in: macb
CPU: 0    Not tainted  (2.6.24-rc5-rt1 #2)
pc : [<c01a9e60>]    lr : [<c01a9e90>]    psr: 60000093
sp : c3c25f10  ip : 0000012c  fp : c3c25f1c
r10: 00000000  r9 : 00000000  r8 : 00000000
r7 : 000000ac  r6 : 00000000  r5 : 0000012c  r4 : 00000000
r3 …
Run Code Online (Sandbox Code Playgroud)

embedded-linux

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

Valgrind交叉编译ARMv5tel

我使用以下选项运行configure:

./configure --target=armv5tel CC=arm-linux-gnueabi-gcc --host=i686-linux
Run Code Online (Sandbox Code Playgroud)

然后跑了make

我遇到以下错误:

m_cpuid.S: Assembler messages:
m_cpuid.S:40: Error: bad instruction `pushl %ebp'
m_cpuid.S:41: Error: bad instruction `movl %esp,%ebp'
m_cpuid.S:42: Error: bad instruction `pushl %ecx'
m_cpuid.S:43: Error: bad instruction `pushfl'
m_cpuid.S:44: Error: bad instruction `pushfl'
m_cpuid.S:45: Error: bad instruction `popl %eax'
m_cpuid.S:46: Error: bad instruction `movl %eax,%ecx'
m_cpuid.S:47: Error: bad instruction `xorl $0x200000,%eax'
m_cpuid.S:48: Error: bad instruction `pushl %eax'
m_cpuid.S:49: Error: bad instruction `popfl'
m_cpuid.S:50: Error: bad instruction `pushfl'
m_cpuid.S:51: Error: bad instruction `popl %eax'
m_cpuid.S:52: Error: …
Run Code Online (Sandbox Code Playgroud)

valgrind embedded-linux

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

在嵌入式Linux上安全地写入紧凑型闪存

我正在开发一个从紧凑型闪存和tmpfs运行的嵌入式Linux系统.闪存以只读方式安装,通常应保持这种状态,但偶尔我需要向闪存写入内容.

写入闪存(通过PATA接口)时应该采取哪些预防措施?由于我无法回想起的原因,我正在使用ext4安装的文件系统barrier=1,data=ordered,nodelalloc,noatime,ro是否是一个可怕的想法?系统需要在零干预的情况下快速启动.我很想做tune2fs -c 0 -i 0.这是一个更糟糕的想法吗?

另外,当我写东西时,我显然需要重新安装flash读写,执行写操作,然后重新安装只读.问题是有几个不同的进程(c ++二进制和shell脚本)可能需要这样做.很明显,每个进程不加选择地重新安装文件系统只读它是一个坏主意.

协调这个的最佳方法是什么?flock看起来很有希 这是最好的方式,我需要担心什么?我不希望过时的锁阻止写入或使文件系统无限期写入.

澄清:通过"偶尔"写作,我的意思是系统可以使用多年而不需要写任何东西.什么东西写,它可能是几百字节.与此同时,系统需要承受不可预测的电源循环而无需任何干预.

linux filesystems embedded locking embedded-linux

8
推荐指数
1
解决办法
5958
查看次数

保留一部分SDRAM以在U-Boot和Linux内核之间传递数据

如何保留SDRAM的一部分,比如4个字节,在U-Boot和Linux内核之间传递一个标志,以便链接器不会初始化这个保留的内存位置,并在热启动后保留该值?我试图避免使用bootargs来最小化嵌入式应用中使用的NAND闪存的磨损.我的问题可以被认为是对解决方案的扩展: 如何在ARM处理器上检测冷启动与热启动?

我使用下面的链接器脚本构建了u-boot.lds并使用以下命令构建它:-fno-zero-initialized-in-bss但没有成功.

OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS
{
 . = 0x00000000;
 . = ALIGN(4);
 .text :
 {
  cpu/arm926ejs/start.o (.text)
  *(.text)
 }
 . = ALIGN(4);
 .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
 . = ALIGN(4);
 .data : { *(.data) }
 . = ALIGN(4);
 .got : { *(.got) }
 . = .;
 __u_boot_cmd_start = .;
 .u_boot_cmd : { *(.u_boot_cmd) }
 __u_boot_cmd_end = .;
 . = ALIGN(4);
 __bss_start = .;
 _U_BOOT_FLAG = .;  . = . + 4;
 .bss (NOLOAD) : { *(.bss) …
Run Code Online (Sandbox Code Playgroud)

memory arm linux-kernel embedded-linux u-boot

8
推荐指数
1
解决办法
2167
查看次数

如何构建我的Linux c ++应用程序以链接到旧版本的libc?

我在Ubuntu 12.04上构建了一个应用程序,并尝试在嵌入式系统上运行它.我跑apt-cache show libc6了我的开发机器,显示(除其他外)

Package: libc6
Priority: required
Section: libs
Architecture: i386
Source: eglibc
Version: 2.15-0ubuntu10
Replaces: belocs-locales-bin, libc6-i386
Provides: glibc-2.13-1, libc6-i686
Run Code Online (Sandbox Code Playgroud)

嵌入式设备上存在的libc6版本为2.8.90.在\lib设备上的目录中,我有2个库

libc-2.8.90.so
libc.so.6
Run Code Online (Sandbox Code Playgroud)

当我将我的应用程序复制到嵌入式设备上时,我收到以下错误

/usr/lib/libc.so.6: version `GLIBC_2.15` not found (required by ./ServerSocketApp)
Run Code Online (Sandbox Code Playgroud)

我知道如果可能的话,当我在开发机器上构建应用程序时,我需要强制它链接到嵌入式设备上存在的相同版本的libc6.我遇到的问题是我根本不知道该怎么做.我发现的任何答案对我来说都毫无意义.是否有一些选项需要传递给g ++以使其链接到版本2.8.90 ??

绝望中我想是可以将我的开发机器上的libc复制到嵌入式设备上代替已经存在的东西并希望最好的??? 我似乎无法在网上找到任何文件,用简单的术语解释你如何解决这个问题,所以任何建议都会非常受欢迎,因为我在这里撕裂我的头发.

c++ linux linker g++ embedded-linux

8
推荐指数
2
解决办法
3896
查看次数

select(),poll()或epoll()?对于sysfs属性

我正在使用gpio中断.我在"/ sys/class/gpio/gpio38/value"中有一个文件.我想在属性发生变化时发出通知.那么我怎样才能在用户空间中实现这一目标.由于我已经收集了信息,我可以使用select(),poll()或epoll().那么这个应用哪个是正确的?或者请建议我,如果我可以使用/ proc/irq或其他东西.谢谢 :)

c linux epoll embedded-linux beagleboard

8
推荐指数
1
解决办法
7638
查看次数

ARM Cortex-A8中的Valgrind问题"配置:错误:不支持的主机架构"

我在ARM CortexA8的实际程序中找到了linux以下问题:

´*** glibc detected *** ./PRUssExternal: double free or corruption (top): 0x00024fe8 ***´
Run Code Online (Sandbox Code Playgroud)

我正在网上搜索它,我发现管理这个问题最有用的程序是Valgrind.

如何使用gdb跟踪C++中的双重释放或损坏错误

然后我尝试在交叉编译中编译到我的系统,在配置中使用以下选项.我正在使用Valgrind 3.8.1

@ -virtual-machine:〜/ valgrind-3.8.1 $ CC = arm-cortexa8-linux-gnueabi-gcc CFLAGS =" - pipe -Os -mtune = cortex-a8 -march = armv7-a -mabi = aapcs-linux -msoft-float -I/opt/OSELAS.Toolchain-2011.11.3/arm-cortexa8-linux-gnueabi/gcc-4.6.2-glibc-2.14.1-binutils-2.21.1a-kernel-2.6.39-sanitez/sysroot-arm-cortexa8-linux-gnueabi/usr/include"LDFLAGS =" - L/opt/OSELAS.Toolchain-2011.11.3/arm-cortexa8-linux-gnueabi/gcc-4.6.2-glibc-2.14.1 -binutils-2.21.1a-kernel-2.6.39-sanitez/sysroot-arm-cortexa8-linux-gnueabi/usr/lib"./ configure -prefix =/opt/valgrid -host = arm-cortexa8-linux-gnueabi - target = arm-none-linux-gnueabi -build = x86_64-ubuntu-linux

这个配置的输出是:

checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for arm-cortexa8-linux-gnueabi-strip... arm-cortexa8-linux-gnueabi-strip
checking for a …
Run Code Online (Sandbox Code Playgroud)

valgrind arm embedded-linux cortex-a8

8
推荐指数
1
解决办法
6720
查看次数

如何将以太网设备直接连接到linux中的交换机?

我们有一个嵌入式主板,其中以太网设备直接连接到交换机,两者之间没有phy.为了使事情变得更复杂,以太网设备的mdio总线连接到交换机的mdio进行控制.

我已设法使用固定的mdio/phy驱动程序启用以太网,并通过将交换机的默认配置与固定的phy匹配来工作.

我现在如何连接到mdio总线以更改开关设置?由于以太网设备附加的phy由固定的phy填充,我现在如何将真正的mdio总线连接到系统,以便我可以对其进行配置.似乎没有直接用户空间接口到mdio总线.我是否创建了一个假的以太网设备,其唯一目的是访问mdio总线或者以某种方式将它连接到以太网设备,然后将连接两个mdio总线?

PS:看起来物理mdio总线驱动程序找到了开关,但我该如何与它交谈?

linux ethernet linux-device-driver linux-kernel embedded-linux

8
推荐指数
1
解决办法
6670
查看次数

为什么在引导加载程序和内核源代码中都需要设备树结构(DTS)文件?

像U-Boot这样没有实现Open Firmware API的Bootloader,应该将平面设备树的二进制形式传递给内核 - LinuxFDTBlob

为什么DTS文件也存在于内核中?这不是多余的吗?

例如,U-boot源代码包含以下文件:
arch/arm/dts/tegra124-jetson-tk1.dts

此文件也可以在Linux源代码下找到:
arch/arm/boot/dts/tegra124-jetson-tk1.dts

虽然内核版本是U-boot版本的4倍,但我想知道这种冗余背后的原因.我相信维护人员和开发人员都很难维护和使用它们

arm linux-kernel embedded-linux u-boot device-tree

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

有没有办法检查Yocto映像中将安装的软件包的确切列表?

在基于Yocto的Embedded Linux发行版中,我真的很感兴趣,可以在执行映像构建配方之前,从将要构建并安装到映像文件的每个相关层中查找软件包/配方/内核模块的完整列表:

bitbake my-image-minimal
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?在这方面的任何指导是值得赞赏的。

提前致谢。

embedded-linux bitbake yocto

8
推荐指数
3
解决办法
6772
查看次数