问题标签 [uclinux]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1057 浏览

c++ - uClinux中的动态分配

我是嵌入式开发的新手,我发现传统 Linux 和 uClinux 之间的最大区别是 uClinux 缺少 MMU。

这篇文章

如果没有 VM,每个进程都必须位于内存中可以运行的位置。在最简单的情况下,这个内存区域必须是连续的。一般来说,它不能扩展,因为它上面和下面可能还有其他进程。这意味着 uClinux 中的进程无法像传统 Linux 进程那样在运行时增加其可用内存的大小。

对我来说,这听起来像是所有数据都必须驻留在堆栈上,而且堆分配是不可能的,这意味着 malloc() 和/或“new”是不可能的……这准确吗?也许有允许管理“静态堆”(即可以请求“动态”分配的基于堆栈的区域)的技术/库?

还是我想多了?还是过度简化?

0 投票
1 回答
1517 浏览

linux-kernel - 链接器脚本浪费了我的记忆

这是我的问题。我有这个链接器脚本链接标准 arm7nommu-uClinux 内核:

我的硬件模拟器的内存架构由一个 sdram 和一个闪存组成。我想拆分我的代码部分,并将(例如)闪存中的 .text 部分和 sdram 中的 .data 部分放在一个特定的地址。为此,我以这种方式修改了我的链接器脚本:

它工作正常,因为所有部分都映射到我想要的位置,但是当正常输出文件(与以前的链接器脚本链接)约为 800Kb 时,输出文件约为 429Mb!...为什么?请帮我!

提前致谢。

0 投票
1 回答
1547 浏览

c - 为什么这个 ioctl 的 access_ok 失败

编辑:关于为什么我在这里失败了,我还没有一个好的答案......所以让我重新表述一下。我什至需要 verify_area() 检查吗?那有什么意义呢?我已经测试了我的结构成功传递给这个 ioctl 的事实,我正在考虑只是删除失败的检查,但我不是 100% 它在那里做的事情。想法? 结束编辑

我正在努力更新一些较旧的 linux 内核驱动程序,在测试一个时我遇到了一个失败,这对我来说似乎很奇怪。开始了:

我在用户空间有一个简单的 ioctl 调用:

Config_par_t 定义在 can4linux.h 文件中(这是 uCLinux 自带的 CAN 驱动):

在内核方面,ioctl 函数调用 verify_area,这是失败的过程:

现在我知道 verify_area() 不再使用了,所以我在头文件中用这个宏将它更新为 access_ok:

我在 x86 平台上,所以我很确定实际调用的 access_ok() 宏是 /usr/src/linux/arch/x86/include/asm/uaccess.h 中定义的宏:

我想对我来说这看起来应该可以工作。如果检查,为什么我从这个 verify_area 得到 1 回报的任何想法?或者关于如何缩小问题范围的任何想法?

0 投票
1 回答
470 浏览

c - 从 CGI 调用重新启动脚本未完全重新启动

我正在尝试从用 C 编写的 CGI 脚本中重新启动 Boa Web 服务器。这是在 ucLinux 系统上。对 system("/etc/init.d/boa.sh restart") 的调用成功运行,我从日志中看到 Boa 已停止,但从未启动。从 CLI 运行 boa.sh restart 确实可以正常工作。boa.sh 脚本如下所示。关于为什么它没有完全重启的任何想法?请注意,CGI 脚本本身在 Boa 中运行。

0 投票
0 回答
226 浏览

gdb - 奇怪的 gdbserver 输出显示在我的目标设备上

当我在 uclinux 目标设备 blackfin bfin537/stamp 上运行 gdbserver 时,它工作得很好,但它总是会产生烦人的输出 Request to get for unknown register 232 Request to get for unknown register 236

这是非常烦人的,因为 gdb 客户端的每一步都会在输出屏幕终端 RS232 上导致几个该错误我被建议更改 bfin 编译器版本并使用不同版本的 uclinux 重建 gdb 服务器,....没有一个工作,甚至用不同版本的 bfin-uclinux-gcc 编译我的代码都没有解决我的问题。

我决定重新编译 gdbserver.c 并消除产生错误的行,但实际上该行在任何用于编译的 gdbserver 相关文件中都不存在。

我决定通过运行 gdbserver :3298 process 1>/dev/null 2>/dev/null 来抑制 gdb 服务器的 stderr 输出,但这并没有解决它如何配置我的 gdb 客户端以请求特定的寄存器(bfin- uclinux-gdb) 与 bfin537-stamp 相关吗?

我认为这个错误起源于 uclinux 系统后台系统进程中的其他地方。我想找到哪个进程在 stderr,stdout 中写入我不知道它并且我想抑制它的输出?

我应该在busybox shell 或/bin/bash 中更改某些内容以消除所有stderr 输出,这意味着如果我将所有父shell 输出或stderr 发送到/dev/null 谢谢

0 投票
1 回答
524 浏览

fpga - 如何在 uClinux 上安装 SD 卡和以太网

我刚刚在 Altera DE2-115 (FPGA BOARD) 安装了 uCLinux,我可以完全访问终端,发生的事情:

我想为我的 eth0 设置一个 IP 和 MASK,当我执行“ifconfig”时,它只显示:

没有 eth0 或 eth1,并且有两个以太网端口,eth0 插入了一根以太网电缆(完全可以与互联网和局域网一起使用)。

为什么没有 eth0 或 eth1?

另外:当我想安装我的 SD 卡驱动器时,我会执行以下操作:

我得到:

好像没有 SD 卡设备...在我的开发文件夹中有以下内容:

我已经尝试过安装它们中的每一个,SD卡驱动器也支持FAT16,这就是我目前在我的SD卡上使用的文件系统。

我该怎么做才能访问以太网“eth0”和/或“eth1”以及 SD 卡?

0 投票
1 回答
3985 浏览

embedded - Initrd, Ramdisk, Initramfs, uclinux

我正在冷火板 M5272C3 上进行 uclinux 移植。现在,我的内核从 RAM 运行,并使用 romfs 作为我的根文件系统。我不清楚几个术语的含义以及何时使用它们....

请以最简单的方式向我解释:

Q1:什么是initrd?为什么我们需要那个?

Q2:什么是内存盘?为什么以及在哪里需要这个?

Q3:什么是initramfs?我们为什么以及在哪里使用它?

Q4:什么是 ramfs?我们为什么以及在哪里使用它?

另请参阅文档/参考书以深入了解这些术语....

谢谢 Phogat

0 投票
3 回答
1566 浏览

embedded - 如何将 uclinux linux 移植到任何微控制器

我有 Stellaris LM4f232 评估板。我已将免费的 rtos、sysbios 移植到 Stellaris lm4f232 板上,并成功开发了一个 gps 跟踪应用程序。但我一直想为我的主板移植 uc linux。我的问题是

i) 是否有任何材料可以将 uclinux 移植到任何控制器

ii)我需要哪些必要的知识来做同样的事情

我用谷歌搜索了很多。我没有得到正确的信息,但我看到了很难的帖子,但我无法实现同样的。任何帮助????

iii)实现它的路线图是什么,实现它需要哪些知识

0 投票
0 回答
772 浏览

c - 线程在带有 SIGILL 信号的 pthread_mutex_lock 中死亡

我正在嵌入式 linux 操作系统(uclinux,mips CPU)上开发一个项目,它偶尔会崩溃。当我尝试使用 gdb 检查 coredump 时,我可以看到它收到了 SIGILL 信号。

有时我可以看到回溯,这表明它在 pthread_mutex_lock 中死亡。但大多数时候,回溯是无效的。

有效的回溯

无效回溯

我使用 pthread_attr_setstackaddr 为每个线程初始化一个堆栈,这样我就可以通过检查它的堆栈来看到它的调用帧。另外,我发现它死在 pthread_mutex_lock 中。

我使用包装器进行锁定和解锁,例如

所有这些互斥锁都是在使用它们之前启动的。

我试过 gdb 运行程序,它没有死。

我写了一个简单的程序,11个线程什么都不做,只是在死循环中锁定和解锁。它没有死。

有什么建议吗?

0 投票
0 回答
1000 浏览

c - 带有 linux 内核的嵌入式系统上的 C - 神秘的 adc 读取问题

我正在运行 uClinux 的 AD Blackfin BF537 DSP 上进行开发。我总共有 32MB 的 SD-RAM 可用。我连接了一个 ADC,我可以使用对read().

我的代码中最有趣的部分如下。运行程序似乎工作得很好,我得到了一个很好的数据包,我可以从 SD 卡中获取并绘图。但是,如果我注释掉浮点计算部分(如代码中所述),我在 ft_all.raw 文件中只得到零。如果我将优化级别从 -O3 更改为 -O0,也会发生同样的情况。

我已经尝试过无数种各种事物的组合,有时它可以工作,有时它不能 - 早些时候(对下面的小修改),代码只有在禁用优化时才能工作。如果我在文件中进一步添加其他内容,它也可能会中断。

我的怀疑是read()-function 传输的数据可能没有完全传输(这可能吗,即使它返回正确的字节数?)。这也是我第一次使用直接内存地址初始化指针,我不知道编译器对此有何反应——也许我错过了什么,在这里?

我现在已经在这个问题上花了几天时间,而且我越来越绝望 - 我真的很感谢在这个问题上提供一些帮助!提前致谢。

编辑:如果我使用 read() 从简单文件而不是 ADC 读取数据,代码似乎工作得很好。这让我相信,在提取输入的 I 和 Q 部分时,看起来相当 hacky 的代码正在按预期工作。检查编译器生成的程序集证实了这一点。

我正在尝试与 ADC 驱动程序的开发人员取得联系,看看他是否对此行为有解释。

ADC 通过 SPORT 连接,并按如下方式打开:

以下是配置 SPORT 时使用的选项:

还包括来自 Analog Devices 的 bfin_sport.h 文件:https ://gist.github.com/tausen/5516954

更新 在与项目的前任开发人员进行了一夜的调试后,结果发现问题与上面显示的代码完全无关。正如 Chris 所建议的,这确实是 SPORT 驱动程序和 ADC 配置的问题。

调试时,只要数据“损坏”,就会出现此错误消息:bfin_sport: sport ffc00900 status error: TUVF。虽然这在应用程序中没有多大意义,但从打印数据中可以清楚地看出,有些东西是不同步的:缓冲区中的数据在表单上,0x12000000,0x34000000,...​​而不是0x00000012,0x00000034,...在显示状态错误时。那么似乎很清楚,为什么 buf16I 和 buf16Q 只包含零(因为我正在提取 12 个 LSB)。

在 ADC 初始化和配置阶段之间进行几次调用usleep()似乎已经解决了这个问题 - 我希望它保持这种状态!