我在嵌入式开发中遇到了一个串口问题./ 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) 我刚刚在我的主板上为恩智浦RTC芯片编写了一个RTC驱动程序,效果很好.这个芯片还有一些电池支持的RAM,我想提供给用户空间应用程序.RTC框架不支持这一点.它只有512个字节,但我在做一个可寻找的CHAR驱动程序或一个完整的BLOCK驱动程序之间徘徊.我之前从未做过块驱动程序,但它似乎需要比简单的CHAR更多的信息.
我也可以与IOCTLS接口,但感觉不尽如人意.什么感觉是让这些字节可供用户使用的最佳方式?
[编辑]我忘了提到RTC芯片悬挂在I2C端口上,它没有映射到内存中,因此不能成为mmaping的好选择.[/编辑]
我正在嵌入式设备上测试Linux内核,并希望找到Linux内核会发出恐慌的情况/场景.
你能建议一些测试步骤(手动或代码自动化)来创建内核恐慌吗?
我看到valgrind有一个ARM7目标,但我发现有关valgrind是否支持ARM9的相互矛盾的信息.我正在使用的ARM9目标是运行linux.
有没有人专门成功地在ARM9目标上使用valgrind?如果是这样,你可以提供的任何指针都会有所帮助,包括"你是如何构建它的?".
谢谢
-z
我想在进程控制块结构(task_struct)中添加一个条目.让我们说一种标记某个过程的方法.我想将此字段初始化为0,除了"一些特殊进程"之外的所有进程,稍后通过调用sched_setscheduler()我将为"特殊进程"设置此标志.
有人知道如何为成员变量分配默认值task_struct吗?
我希望找到一些帮助,即使这个问题可能是硬件而不是软件相关(我们会看到).我正在开发基于Freescales P1021处理器(ppc,e500v2核心)的定制电路板.外部PCB将连接,可由SPI配置.该外部PCB的规格读取为全双工模式下的2字节命令,并且只有最后一个字节用于在MISO上传输数据.
知道这一点,我目前正在准备一些软件来测试这个设备.所以我从众所周知的spi_test程序开始.
root@p1021rdb:~# ./spi_test -D /dev/spidev32766.3
spi mode: 0
bits per word: 8
max speed: 500000 Hz (500 KHz)
00 00 00 00 00 00
00 00 00 00 00 00
00 00 00 00 00 00
00 00 00 00 00 00
00 00 00 00 00 00
00 00 00 00 00 00
00 00
root@p1021rdb:~#
Run Code Online (Sandbox Code Playgroud)

信号显示608个时钟,似乎上半部分只有数据.我决定用loopback调查和测试它 - 切割MOSI-MISO将数据循环回rx缓冲区.结果:
root@p1021rdb:~# ./spi_test -D /dev/spidev32766.3
spi mode: 0
bits per word: 8
max speed: 500000 Hz (500 …Run Code Online (Sandbox Code Playgroud) 我正在使用ST微控制器开发一个ttyACM设备,并且使用相同的代码,我的主机有时可以成功地枚举它(下面),但有时它只是转储下面的消息.错误-32是什么意思?
[未能注册]
usb 1-2.1: new full speed USB device number 62 using ehci_hcd
usb 1-2.1: device descriptor read/64, error -32
usb 1-2.1: device descriptor read/64, error -32
usb 1-2.1: new full speed USB device number 63 using ehci_hcd
usb 1-2.1: device descriptor read/64, error -32
usb 1-2.1: device descriptor read/64, error -32
usb 1-2.1: new full speed USB device number 64 using ehci_hcd
usb 1-2.1: device not accepting address 64, error -32
usb 1-2.1: new full speed USB device number …Run Code Online (Sandbox Code Playgroud) 类似于系统调用的工作方式int 0x80,是否可以在内核中实现自己的ISR,以便在softirq上假设int 0x120或与任何其他softirq程序计数器一起从用户空间跳转到内核空间?
正在进入特权模式内核只与有关int 0x80,或与任何软中断实现我可以自动或禁用保护模式并进入我们必须通过编写其相关的标志做手工特权模式进入特权模式?
还有一两件事,如果能够实现这种类型的ISR的,是数据交换的最佳方法是使用寄存器EBX,ECX,EDX,ESI,EDI和EBP或任何其他方式仍然存在?
我已经看过如何在linux内核中定义和触发我自己的新softirq?但没有得到我想要的解决方案.
我会更明确一些,为什么我需要这个
我实现了很少的内核函数,它们直接与硬件外设交谈,我希望它们使用软件中断从用户空间触发.不能使用具有可用驱动程序体系结构的系统调用,因为我需要减少执行时间.
问题
我的问题是,linuxrc做什么?我需要它在我的吗rootfs?systemd它与使用vs有什么关系吗initd?
背景
rootfs我目前正在尝试使用 Yocto 为 ARM 7 处理器构建一个。我对原始 BSP 项目所做的唯一修改是我指定要用作systemd我的初始化管理器(在 参考资料中完成local.conf)。构建rootfs( bitbake core-image-minimal) 并使用Mgftool2我将其加载到板上。当我尝试启动映像时,出现以下错误:
VFS: Mounted root (ext3 filesystem) readonly on device 179:2.
devtmpfs: mounted
Freeing unused kernel memory: 272K (80816000 - 8085a000)
Kernel panic - not syncing: Requested init /linuxrc failed (error -2).
CPU: 0 PID: 1 Comm: swapper/0 Tainted: G W 4.4.15-v4.4.15+g017b90c #1
Hardware name: Freescale i.MX6 Ultralite (Device …Run Code Online (Sandbox Code Playgroud) 我刚刚开始了解 Yocto。我没有找到太多关于类 (.bbclass) 文件的信息。我知道 .bb 文件是一个包含构建包指令的配方。我们什么时候必须写菜谱,什么时候写一个类或者两者之间有什么区别
embedded-linux ×10
linux-kernel ×5
linux ×3
c ×2
yocto ×2
arm ×1
arm9 ×1
powerpc ×1
softirq ×1
spi ×1
system-calls ×1
usb ×1
valgrind ×1