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

linux - 使用 initramfs 在启动时运行程序

作为大学团队的一部分,我正在 SmartFusion2 上运行 uClinux,该团队构建了一个小型立方体卫星。但是,我在 Linux 内核方面并不是很有经验,这个问题让我难过了几天。我试图让 SmartFusion 在启动时运行程序。目前,唯一能做到这一点的 .uImage 是测试“hello”文件。我正在尝试为另一个程序重新创建该过程,但遇到了一些困难。

在我的 hello 目录中,我有以下文件:hello.busybox、hello.kernel.M2S、help.txt、hello.uImage、Makefile、hello.initramfs、hello(目录)

在 hello 子目录 (projects/hello/hello) 中:

你好(可执行文件)、hello.c、hello.gdb、hello.h、hello.o、Makefile

为了尝试让 uImage 启动并运行不同的程序,我复制了我的 projects/hello/hello 目录并将其重命名为“goodbye”,并在 .h 和 .c 文件中进行了一些小的更改以用于测试目的。现在我正在尝试让项目/hello/goodbye 中的可执行文件“hello”在启动时运行。

我的 initramfs 文件最初看起来像这样:

但是当我在重新制作 uImage 后尝试启动 SmartFusion2 时,我得到了这个,底部没有错误:

有人可以帮助解释为什么会发生这种情况以及我需要对我的 initramfs 做什么以使其在启动时运行正确的程序吗?谢谢!!

0 投票
0 回答
987 浏览

stm32 - 卡在 stm32f429 定制板上的启动内核(uclinux)

我最近使用github上的robotest文件在我的DISCO板(stm32f429-disco)上移植了uboot和uclinux。现在我正在尝试将它们移植到我的自定义板上,它使用:

  • UART6 代替 UART3
  • 一个 12 MHz 振荡器,而不是 DISCO 中使用的 8 MHz
  • 一个 128 Mb SDRAM,而不是 DISCO 中使用的那个
  • 使用 SDRAM bank 1 而不是 bank2(起始地址是 0xC0000000 而不是 0xD0000000)。

所以我对uboot树做了一些改变:

  • u-boot-master\board\stm\stm32429-disco\board.c
  • u-boot-master\cpu\arm_cortexm3\stm32\clock.c
  • u-boot-master\cpu\arm_cortexm3\stm32\fmc.c
  • u-boot-master\include\asm-arm\arch-stm32\fmc.h
  • u-boot-master\include\configs\stm32429-disco.h

我还对 ucliux 树进行了一些更改:

  • uclinux-master\config.rubotest
  • uclinux-master\arch\arm\mach-stm32

当我制作图像并将它们加载到我的板上时,我得到了以下结果:

内核卡在这里,然后什么也没有发生。我想知道问题是否与uboot或内核有关,它是什么!!!伙计们,我在这个项目上工作已经一个多月了,我真的筋疲力尽。任何帮助将不胜感激。此致。

我将加载地址和输入点更改为 0x08008000 和 0x08008001,结果如下:

这是printenv的结果:

loadaddr 最初0x90000000,黑客使用memrmp寄存器将其重新映射到0xD000000(在 DISCO 板上0xD0000000是 SDRAM bank 的开始)。我在 fmc.c 中评论了 memrmp 行,并且不再有任何重新映射。我还在include/config/stm32f429 文件中将#define CONFIG_SYS_RAM_BASE0x90000000 更改0xC0000000 。我也在 fmc.h 文件中将SDRAM 组地址从0xD0000000更改为0xC0000000 。

0 投票
0 回答
103 浏览

kernel - 在我的板上移植 emcraft stm-som uclinux

我正在尝试在使用 stm32f429 的自定义板上运行 uclinux。该板的配置看起来像 stm-som 板。所以我下载了树并在我的板上安装了 u-boot。现在我遇到了内核问题。我运行了make,rootfs.uimage 现在就制作好了!但它是 6.1Mb(这是因为我不需要繁忙的盒子),而我指望处理器的 2Mb 闪存!第二个问题是我必须使用 jtag 在我的板上加载.bin文件,但我不知道我必须在哪个地址加载图像。现在我有两个问题:

  1. 如何减少内核映像的占用空间(如何丢弃busybox或任何其他额外文件)?
  2. 如何将图像加载到我的板上(在哪个地址上)?

第 1 版 故事是这样的:9 个月前,我有一个项目,他们让我在 dico board 上运行 uclinux,一个名叫 tmk 的人已经为 disco board 移植了内核和 u-boot,可以在这里访问。我制作了图像,项目完成了。大约 6 个月前,我得到了另一个项目,这次我被要求在他们自己的板上运行相同的操作系统,它有一个 12 MHz 振荡器,使用 bank1 SDRAM 和 uart 6。起初我尝试移植我那天晚上询问的 uslinux 中使用的相同图像,然后我发现 STM-SOM 板具有相同的结构,除了我使用的 UART部分并解决了它。现在我有一个大问题,som 板有一个大的 NOR 闪存,而我的板没有。这个新的内核大小超过 6 MB,而我只有 2Mb 闪存。我想知道是否有办法减小尺寸?如果有,怎么做?顺便说一句,这块板的串口工作不正常,当 u-boot 倒计时到自动启动时,端口发送垃圾数​​据并没有'不要让我进入引导环境来键入 printenv 或其他任何命令。

0 投票
1 回答
118 浏览

image - 如何减小 uCLinux 镜像大小?

我正在使用 Emcraft STM-SOM uCLinux。它有一个 16Mb NOR 闪存,但我想使用 2MB 的 STM32F4 内部闪存。我已经制作了图像,它大约有 6 MB。
如何减小 uCLinux 内核映像的大小?

0 投票
2 回答
742 浏览

c - fscanf 在读取空文件时崩溃

我正在开发一个具有读取数据文件功能的大型项目。然而,在某些测试代码中,该文件不存在,因此在创建它时,它会创建一个空文本文件。我编写了以下代码来补偿此事件:

我知道 fscanf 返回它读取的东西的数量,但是当我运行这个程序并且它到达空文件时,我的程序只是冻结了。我错过了我应该用 EOF 做的事情吗?谁能帮我吗?

0 投票
0 回答
831 浏览

arm - 将 ELF ARM 可执行文件转换为 uClinux 的 BFLT 可执行文件

我有一个小问题:

我需要在固件中添加一个程序,该程序将在我办公室的嵌入式 IP 摄像机中使用。它的CPU是ARM7TDMI。所以,话虽如此,我在 Debian x64 机器上交叉编译了我的程序并获得了我的 ELF 可执行文件:

但是相机上的 uClinux 只执行 BFLT 二进制文件!Down 是我从中提取的一个程序的示例:

我需要将我的 ELF 二进制文件转换为 BFLT。我找到了 elf2flt 工具,但我无法编译它,你知道将我的二进制文件放入 BFLT 的更简单方法吗?或者也许我需要另一个交叉编译器来直接编译它 BFLT'ed ?

感谢您提供任何相关的答案

0 投票
2 回答
65 浏览

bash - 在 microblaze uclinux 上:将 IP 地址放入变量

是的,这与将 IP 地址放入 bash 变量有关。有没有更好的方法,但在 microblaze uclinux 上没有对我有用的想法。我希望将我的 eth0 ip 地址存储到一个 shell 变量中,我可以使用它编写一个脚本。我需要替代想法如何做到这一点。
如果有帮助,ifconfig 可用。我发现在文件 /etc/config/dhcp0.conf 中存储了正确的 IP 地址,这是文件的内容:

如何在使用以下命令的情况下删除 1 和空格

  • grep
  • sed
  • 这也不起作用: echo ${variable:2}
0 投票
1 回答
3658 浏览

shell - 控制台显示 if 语句中的“未知操作数”

我正在尝试为运行 uClinux 的嵌入式系统编写自动 md5sum 检查脚本。该脚本是在我的计算机上生成的,也是我要检查的 tar 文件。

脚本是这样的:

md5sum 检查按预期运行,即当校验和错误时脚本停止,否则执行到最后。但是当校验和正确时,我会从控制台收到此消息:

我不明白为什么会这样,而且我认为让我的脚本这样是不准确的。有人可以解释一下外壳在做什么以及如何摆脱此消息吗?

谢谢

0 投票
1 回答
146 浏览

java - 在 uClinux 上更新 java

我想将我们的 uClinux 产品的 Java 更新到 Java 8。问题是 Java 7 及更高版本似乎依赖于 glibc-2.4,而安装的 glibc 版本是 2.3.6。在终端中运行 java -version 时,我收到以下消息:

我们正在使用crosstool 工具链来构建自 2006 年以来未更新的 uClinux 映像,并且它支持的最新 glibc 是 glibc 2.3.6。我想知道我是否可以将 uClinux glibc 库更新到 2.4。是否有可能某些应用程序不适用于较新版本的 glibc?另一个问题是我们是否需要与 crosstool toolcain (2.3.6) 使用的 glibc 版本相同。

最后一个问题是 java 8 是否也依赖于 linux 内核版本?目前我们使用的内核版本是linux 2.6.24。我在这里看到嵌入式 java 需要 linux 内核 2.6.28 或更高版本。我们在 java se 中是否有相同的依赖关系?

感谢帮助

0 投票
0 回答
238 浏览

linux-kernel - uCLinux Maxim14830 驱动程序未探测

我正在尝试让 Maxim14830 评估板与我的 Emcraft STM32F4 SOM 一起使用。我的 SOM在 github 上运行 Emcraft uClinux 内核 2.0.0(从内核 4.4 分叉)(我也计划在内核版本 4.5 上尝试此操作)。

驱动程序没有注册 4 个 ttyMAX[n] 设备。经过进一步检查,max310x.c 驱动程序代码实际上并没有根据我添加的 printk 执行。我至少希望探测功能在引导期间运行。

maxim14830(协议?)驱动程序在 github 上的源代码在这里max310x.c

spi(控制器?)驱动程序在 github 上的源代码在这里spi-stm32.c

我已经能够很好地添加一个spidev设备,所以我相信这是maxim14830独有的问题。

我在这里看到一个 spi 设备:

我在这里看到了 max310x 驱动程序:

我看到以下设备树条目:

我的设备树看起来像这样:

我能够编译我的设备树 blob,并很好地引导相应的 linux 映像。从我的 printk 中,stm32_spi_probe 是从“控制器驱动程序”中调用的,但据我所知,之后没有调用 max310x.c 驱动程序代码。

我应该去哪里进一步调试?这是我的第一个嵌入式 linux 项目,我可以使用一些指针..