问题标签 [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 投票
0 回答
120 浏览

linux-kernel - uclinux中/proc/pid/status中的slack字段的用途是什么

查看 /proc/pid/status 文件中的进程状态文件。已找到以下详细信息。

有人可以查看并解释状态文件中松弛字段的目的是什么。它是内核的错误,它必须是堆栈或其他东西。

当我们对进程 Mem Size 和 slack get 进行任何操作时,还有一个问题总是增加,只是想知道为什么内存使用量总是增加。添加更多信息:像 uclinux 一样,我们有扁平的内存架构。上述原因是否是因为进程的内存大小不断增加。

请提出您的意见。

问题:或松弛必须是堆栈>>但错误的代码是写松弛。?? ??

谢谢卡恩维尔辛格

0 投票
0 回答
45 浏览

uclinux - 我在找uClinux下载

我正在寻找 st32f429 发现的 uClinux 版本 我在哪里可以免费下载 uclinux?

你有任何信息我可以如何将 uclinux 安装到 st32f429 discoveey board 吗?感谢您的开发。

0 投票
0 回答
96 浏览

c - 运行时检测 nommu Linux 不显眼

我正在寻找一种可靠的、不显眼的运行时检查进程是否可以在没有 mmu 的情况下在 Linux 上运行。不显眼,我的意思是对进程状态的副作用最小或没有。例如,get EINVALfromfork是一种指示,但如果测试失败,则会创建一个子进程。尝试引起故障并捕获信号是不可能的,因为它涉及更改全局信号配置。任何涉及/proc/sys不可靠的东西,因为它们可能不被挂载/可见(例如,在chroot或挂载命名空间中)。

mprotectwith的失败ENOSYS似乎是可靠的,并且可以在没有任何副作用的情况下完成,除了需要映射一个测试页面来尝试它。但我不确定依靠这个是否安全。

有没有更好/推荐的方法来解决这个问题?

在任何人试图挑战这个前提并回答这是在编译时静态已知的之前,不,它不是。假设您为架构的 mmu-ful 和 mmu-less 变体都支持的 ISA 级别构建与位置无关的可执行文件,它可以在任何一个上运行。(我是完成这项工作的内核提交的作者。)

0 投票
1 回答
235 浏览

linux - uClinux“make menuconfig”在 Ubuntu 18.04 上构建错误

有相当古老的 uClinux-dist-20080808和 uClinux-dist-20080808-20090112 和 uClinux_on_stm32 补丁用于STM32F10x MCU,如AN3012所述。

我使用 Ubuntu 18.04(在 VirtualBox 内)构建 uClinux 并逐步完成 AN3012。

因此,我运行“make menuconfig”,输入第 15 页 (AN3012) 所示的设置,然后退出菜单。终端中有许多消息,最后我得到了这个:

配置写入 .config

make[2]: 离开目录'/home/maksim/Projects/STM/uClinux-dist/config' make[1]: 离开目录'/home/maksim/Projects/STM/uClinux-dist' make[1]: 进入目录 '/home/maksim/Projects/STM/uClinux-dist' Makefile:228: *** 混合隐式和普通规则:不推荐使用的语法

Makefile:245: *** 混合隐式和普通规则:不推荐使用的语法

KCONFIG_NOTIMESTAMP=1 make ARCH=arm CROSS_COMPILE=arm-uclinuxeabi- -C linux-2.6.x menuconfig

make[2]:进入目录'/home/maksim/Projects/STM/uClinux-dist/linux-2.6.x'

Makefile:434: *** 混合隐式和普通规则:不推荐使用的语法

Makefile:1563: *** 混合隐式和普通规则:不推荐使用的语法

make[2]: *** 没有规则来制作目标'menuconfig'。停止。

make[2]: 离开目录'/home/maksim/Projects/STM/uClinux-dist/linux-2.6.x'

Makefile:183: 目标“linux_menuconfig”的配方失败

make[1]: *** [linux_menuconfig] 错误 2

make[1]: 离开目录'/home/maksim/Projects/STM/uClinux-dist'

Makefile:127:目标“menuconfig”的配方失败 make:*** [menuconfig] 错误 2

请帮助了解问题所在并进行修复。非常感谢您的帮助!

对于那些想要重现该问题的人的注意事项:

1)您需要修复 uCLinux-dist/kconfig/config/zconf.hash.c(在第 165 行插入下面的代码段)

2) uClinux uClinux-dist-20080808 在这里可用

3) uClinux-dist-20080808-20090112 补丁在这里可用

4) uClinux_on_stm32 补丁在这里可用

0 投票
0 回答
207 浏览

i2c - 为什么 `i2c_smbus_write_byte_data` 在 uClinux 2.4 上会返回“不允许操作”?

我正在编写一个 C 程序,目的是通过 Dante Brooklyn II 的 I2C 接口配置外围设备(CS5368 ADC),这是一个基于运行 uClinux 2.4 的 Microblaze 软核处理器的板。

我已经按照 Dante OEM 文档的指导实施了配置,但是在运行我的程序时,我EPERM在尝试使用i2c_smbus_write_byte_data.

这是包含罪魁祸首调用的代码部分i2c_smbus_write_byte_data

这是小程序完整源代码的上下文中的代码。该程序首先通过 GPIO 引脚重置 CS5368,然后通过 I2C 进行配置。

EPERM无论我是否连接了 CS5368,都会返回。我已经能够使用 Arduino Uno 的 I2C 接口成功配置 CS5368,因此问题似乎与 CS5368 无关。

telnet要运行程序,我通过as登录到开发板root,所以我怀疑该错误与用户权限有关。

OEM 文档状态:

Brooklyn II 模块可以作为以 100Khz 运行并使用 7 位寻址模式的 I2C 控制器运行。它支持多主机操作。可以从 Brooklyn II 模块上运行的用户应用程序访问 I2C 设备。该接口支持 SMBus(系统管理总线)协议,它是 I2C 协议的子集。

它继续列出支持的i2c_smbus_*功能,包括i2c_smbus_write_byte_data,因此该问题似乎与缺乏对 SMBus 或 I2C 的支持无关。

我遇到了一个相关问题EPERM,即用户在尝试使用 I2C API 时收到错误代码write,但解决方案似乎是使用i2c_smbus_*我已经在做的 API。

任何有关可能导致返回此错误代码或如何进一步调试问题的建议将不胜感激!


编辑:如果有帮助,这里是完整的输出,从将 exe 移动到/tmp通过 ftp 后通过 telnet 登录到板开始:

0 投票
0 回答
75 浏览

filesystems - MTDBLOCK1 似乎被嵌入式 Linux 系统上的 SD 卡内容覆盖

背景

我正在维护一个产品,它有一个 Analog Devices ADSP-BF547 Blackfin 微处理器,它运行 ADI 的 2011R1-RC3 uCLinux 发行版,它使用 Busybox。处理器安装一个 SD 卡,它会定期向其中写入一些加密的 TAR 文件报告。注意,uCLinux 适用于没有 MMU 的处理器。

以下是有关 uImage 分区和挂载内容的一些详细信息:

问题

我从外地取回了一些无法启动的设备。U-Boot 报告没有有效的 uImage。我在 uImage 应该在的位置开始时从 U-Boot 读取内存,发现它已大部分被擦除。写入的内容似乎与写入 SD 卡的内容相同。但是,该区域与 FAT 文件系统不同。

我基于以下假设:

  1. 转储的 ASCII 中存在的文件名与我们在 SD 卡上使用的相同约定
  2. 字符串“reports”在转储中,也就是我们在 SD 卡上写入的目录
  3. 报告包含的唯一 ASCII 信息是字符串 REPORTDATA

这是显示这些功能的转储的开头:

当我们构建这些报告时,我们使用 RAM ( /tmp/) 中的临时文件。在将报告复制到 SD 卡并为其命名之前,我们检查 SD 卡是否已安装。最后,我们使用mv命令的系统调用来移动文件。

在我们检查它是否存在并且我试图弹出它之后,我试图立即卸载它。我也尝试在运行mv命令之前立即执行相同的操作。在任何一种情况下,都会打印一条有意义的错误消息,例如:

问题

  1. 损坏区域中的文件系统是否类似于任何东西,例如 tempfs?
  2. 对 的写入/mnt/sd,即mmcblk0p1,怎么会最终出现在mtdblock1甚至没有安装的 NAND 中?

我还没有尝试创建内存外场景。但它在我要尝试的事情清单上。

编辑,这是一个线索

我能够查看写入 NAND 的加密 tar 文件中的一些日志数据。从这个日志数据中,我可以看出设备认为 SD 卡已安装,但在/mnt/sd/reports生成 tar 文件之前该目录不存在。我在多个单位中始终看到这一点。

0 投票
0 回答
73 浏览

c - STM32f769 上的 noMMU UcLinux 内存不足

我正在尝试在具有 16MB RAM 的 STM32F769 (cortex m7) 平台上运行基于 noMMU UcLinux buildroot 的发行版。

最后,似乎有超过 4MB 的可用内存,但它似乎被分组为许多较小的块,而不是几个更大的块。

当我以平面格式运行一些更大的编译二进制文件时,我会遇到段错误,因为无法分配内存来启动应用程序。

我在 strace、openssl、蚊子上遇到了类似的错误(而且似乎在任何更大的应用程序上):

和 dmesg 显示:

我不确定我是否理解正确,但最后一行解释了可用的分配可能性。

总体看来内存是足够的,但我不明白为什么它如此碎片化并分组为许多较小的块。

这是否是内存碎片的结果并且无法改进?

或者是否有可能获得更大的可用内存块,因此我的二进制文件将能够进入内存以在没有段错误的情况下执行?我记得较旧的内核有 BIGALOCS 配置选项,但它似乎不再存在。

有什么建议、经验、例子或文档可以学习吗?

提前致谢,

问候,

抢。

0 投票
1 回答
139 浏览

embedded-linux - 从闪存 (XIP) 运行内核和用户空间应用程序?

我有基于在 ARM Cortex M7(noMMU、STM32F769 DISCO 板)上运行的 Buildroot 的 Uclinux 环境。

我有非常简单的内核,只有几个用户空间应用程序。我在 qspi 接口上有很多闪存。

我想从 Flash 运行内核和用户空间应用程序(硬件支持 XIP)。

任何建议,您的示例,经验或指向更多信息的指针都会对我有很大帮助。

在此先感谢,罗布。

0 投票
0 回答
24 浏览

usb - 通过自定义 c++ 应用程序从 uClinux 2.6.17 接口/访问基于 STM32 的板

这可能是一个很难且非常具体的问题。我必须将 2 个嵌入式硬件连接在一起,并从我的自定义 c++ 应用程序交换数据。一块板基于 STM32,并使用 cdc-acm 串行 over usb 和同时使用 usb hid 接口。另一个(主要单元)是基于 uClinux 2.6.17 的嵌入式设备。我看到并且可以在 PC Win10 下使用 STM32 板没有问题。

将基于 STM32 的板插入主机后,到目前为止我得到了什么:

dmesg:


usb 1-1.2:找到新的 USB 设备,idVendor=16c0,idProduct=27d9

usb 1-1.2:新的 USB 设备字符串:Mfr=1、Product=2、SerialNumber=3

usb 1-1.2:产品:USB按钮

usb 1-1.2:制造商:Sinftech ltd.

USB 1-1.2:序列号:1

USB 1-1.2:uevent

USB 1-1.2:usb_probe_device

usb 1-1.2:配置 #1 从 1 个选项中选择

USB 1-1.2:添加 1-1.2:1.0(配置 #1,接口 0)

USB 1-1.2:1.0:uevent

usb 1-1.2:添加 1-1.2:1.1(配置 #1,接口 1)

USB 1-1.2:1.1:uevent

usbhid 1-1.2:1.1:usb_probe_interface

usbhid 1-1.2:1.1:usb_probe_interface - 得到 id

generic-usb 0003:16C0:27D9.0003:输入、hiddev 和 hidraw 均未声明

USB 1-1.2:添加 1-1.2:1.2(配置 #1,接口 2)

USB 1-1.2:1.2: uevent

usb 1-1.2:添加 1-1.2:1.3(配置 #1,接口 3)

USB 1-1.2:1.3: uevent

驱动程序/usb/core/inode.c:创建文件'006'

集线器 1-1:1.0:状态 7 端口 2 chg 0000 evt 0004


$ cat /proc/bus/usb/devices

T: Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh= 1

B: Alloc= 0/800 us ( 0%), #Int= 1, #Iso= 0

D: Ver= 2.00 Cls=09(hub) Sub=00 Prot=01 MxPS=64 #Cfgs= 1

P:供应商=1d6b ProdID=0002 Rev= 2.06

S:制造商=uClinux 2.6.29 ehci_hcd

S:产品=飞思卡尔片上 EHCI 主机控制器

S:序列号=fsl-ehci.0

C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA

I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub

E: Ad=81(I) Atr=03(Int.) MxPS= 4 Ivl=256ms

T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 4 Spd=12 MxCh= 2

D: Ver= 2.00 Cls=09(hub) Sub=00 Prot=00 MxPS=64 #Cfgs= 1

P:供应商=04cc ProdID=1520 Rev= 2.00

C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA

I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub

E: Ad=81(I) Atr=03(Int.) MxPS= 1 Ivl=255ms

T: Bus=01 Lev=02 Prnt=04 Port=01 Cnt=01 Dev#= 6 Spd=12 MxCh= 0

D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1

P:供应商=16c0 ProdID=27d9 Rev= 1.00

S: 制造商=Sinftech ltd.

S:产品=USB按钮

S:序列号=1

C:* #Ifs= 4 Cfg#= 1 Atr=c0 MxPwr=100mA

A: FirstIf#= 2 IfCount= 2 Cls=02(comm.) Sub=02 Prot=00

I:* If#= 0 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)

我:* 如果#= 1 Alt= 0 #EPs= 1 Cls=03(HID) Sub=00 Prot=00 Driver=usbhid

E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=125ms

I:* If#= 2 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=02 Prot=00 Driver=(none)

E: Ad=83(I) Atr=03(Int.) MxPS= 8 Ivl=128ms

I:* If#= 3 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=(none)

E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms

E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms $

/proc/devices 没有新路径;

但看起来usbhid驱动程序已设置。

cdc-acm 也有问题。我确实运行 modprobe cdc-acm。然后: modprobe g_serial use_acm=1 ALL 执行正常。cat /rpoc/devices 现在为我提供了 166 ttyACM 的新路径正如主单元的硬件开发人员告诉我的那样,我的 /dev/ 是静态的,所以我现在必须创建自己的路径:mknod /tmp/myusb c 166 0 一切都很好,但是这不起作用: echo "123\r" > /tmp/myusb 错误 - /tmp/myusb 无法创建

dmesg 新信息:usbcore:已注册新接口驱动程序 cdc_acm cdc_acm:v0.26:USB 调制解调器和 ISDN 适配器的 USB 抽象控制模型驱动程序 ** 825 ** u_serial.c 调用 tty_register_driver g_serial 小工具:Gadget Serial v2.4 g_serial 小工具:g_serial准备好 fsl-usb2-udc:绑定到驱动程序 g_serial $

我尝试类似: echo "123\r" > /dev/ACM0 或 ACM1,2,3 或 ttyUSB0 并且总是有错误 - 无法创建。

===============

我的第一个问题是 - 我如何从我的 c++ 代码访问设备的 usbhid ?

我的第二个问题是 - 如果有任何想法可能会在尝试获取串行路径时遗漏

连接到驱动程序。

抱歉格式化 - 到目前为止,我一直在为粗体和从 linux 控制台复制的文本而苦苦挣扎。