问题标签 [bare-metal]

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 投票
2 回答
1314 浏览

assembly - 我在哪里可以学习如何编写裸机 ARM 程序集?

我在这里有一个基于 XScale/ARMv5 的小型设备,尽管 ARM 是一种流行的架构,但我找不到不基于中间操作系统的 ARM 程序集的教程或任何简单的东西。例如,有一些 X86“Hello World”教程展示了在哪里存储字符串以及如何中断 CPU 以刷新屏幕,但我找不到 ARM 的类似内容。

在哪里可以找到与编程裸机 ARM 处理器(基于系统)相关的信息?我想写一个简单的“Hello World”程序开始,但我不知道如何继续。

0 投票
0 回答
981 浏览

usb - U-boot:通过USB加载内核

我正在为一个ARM板写一个小操作系统,我有点厌倦了通常的“移除SD卡,复制内核,插入SD卡,开机”的模式,所以我开始关注u-boot,并且现在我可以使用 u-boot 和 kermit 通过串口加载内核:我不必再移除/插入 SD 卡了。

然而,这非常慢(2.5 Mo 大约 5 分钟),我想知道我是否可以使用主板的 USB 端口做同样的事情(我知道 u-boot 支持 tftpt 引导方法,但我没有设法设置网络到目前为止正确)。

最好的,

五。

0 投票
1 回答
2940 浏览

bare-metal - 错误:未找到多重引导标头

这一天发现了一些引起我注意的事情。是构建一个简单的裸操作系统

我阅读了如何使多重引导兼容,我正在使用 NASM 和 GCC,我需要制作一个具有多重引导头的加载器并调用我系统的主要点,因为我有两个文件 loader.asm 和 loader.ld

loader.asm loader.ld main.c

我正在使用的构建

最后的链接

我用 grub-mkrescue 构建了一个简单的 iso 并用 qemu 运行,但我总是得到

在此处输入图像描述

我认为问题出在文件中,loader.ld但我找不到在哪里

0 投票
5 回答
1706 浏览

c - 使用中断处理程序作为事件侦听器有什么问题

我的系统很简单,可以在没有操作系统的情况下运行,我只需使用中断处理程序,就像在桌面程序中使用事件监听器一样。在我在线阅读的所有内容中,人们试图在中断处理程序中花费尽可能少的时间,并将控制权交还给任务。但是我没有操作系统或真正的任务系统,也找不到关于无操作系统目标的设计信息。

我基本上有一个中断处理程序,它从 USB 读取一大块数据并将数据写入内存,还有一个中断处理程序读取数据,在 GPIO 上发送数据并再次在硬件计时器上安排自己。

以我的方式使用中断并使用 NVIC(我使用 cortex-M3)来管理工作层次结构有什么问题?

0 投票
4 回答
354 浏览

c++ - 如何通过流插入运算符调用成员函数?

使用启用了 C++11 的 gcc 4.8,我有一个这样的类:

当我通过直接调用运算符来使用这个类时,它按我的预期工作:

输出:

现在,我想获得相同的输出,但使用<<流式表示法,可能是这样的:

当然,这不会编译,因为没有这样的运算符来流式传输我的OutStream.format()方法。

可能有一个解决方案,其中format()有一个返回字符串的自由函数,但这需要首先将所有输出写入format()缓冲区。我需要一个不std::string使用或使用其他堆或缓冲区的解决方案——充其量是一个创建与直接调用运算符时几乎相同的代码的解决方案。

有什么建议么?

编辑,2014 年 10 月 20 日:

  • 为了更好地理解我的要求:我正在使用gcc-arm-embedded gcc cross toolchain进行裸机嵌入式开发。
  • 我需要将解决方案应用于一些不同的嵌入式目标系统(大多数是 Cortex-M0/M3/M4)。其中一些资源非常有限(Ram 和 Flash),我的一部分目标系统必须在不使用任何堆的情况下运行。
  • 由于某些原因,我没有使用Stl iostream. 但是,iostream标签已经被 seh edit 设置了;由于主题匹配,我会保持设置,并且为我的问题找到的解决方案也可能适用于Stl iostream.
0 投票
0 回答
197 浏览

assembly - 自己在树莓派上实现 memset

我一直在尝试为 Raspberry Pi B+ 编写自己的内核,并尝试编写自己的简单实现memset. 我能想到的最好的解决方案(不是任何接近汇编语言的专家)涉及

stm r0!, {r1,r1,r1,r1,r1,r1,r1,r1}

wherer0包含目标数组地址和r1我填充数组的数字。它似乎有效,但编译器不断给我关于那里重复寄存器的警告。是否有更清洁/更安全/更好的方法来实现这一目标?

0 投票
1 回答
731 浏览

ld - 如何将节的起始地址写入 ROM 中的专用位置

在裸机项目中,我需要将 ROM 部分的起始地址写入专用地址。到目前为止,我发现链接器脚本中的定义类似于此定义:

并定义要放置在 0x10001014 的值,我可以将其添加到 C++ 文件中的某处:

有人知道我如何避免必须声明常量整数并使用链接器直接将代码部分的 startadress 写入0x10001014

0 投票
0 回答
638 浏览

beagleboneblack - 使用 LWIP 和 StarterWare 的 Beaglebone 数据包嗅探器

我一直在做一个项目,我计划使用 BeagleBone Black 作为本地网络的数据包嗅探器(和记录器)。我已经使用了 Starterware 示例 echo_server 和 http_server,并且它们工作正常。但是,由于不太熟悉 TCP/IP 的内部操作,我不知道如何修改现有的 Starterware 代码库来实现混杂模式数据包嗅探。是否有人对 LWIP 的此端口可能或可能不适用于预期用途有任何建议或理由?谢谢,

0 投票
2 回答
1778 浏览

powerpc - 如何为 PowerPC 编写裸机 hello world 程序

我需要在裸机 PowerPC 系统上编写一个程序。作为一个没有 OS/bootloader 的裸机编程新手,我决定编写一个 hello world 程序来开始。我在谷歌上搜索了一些关于这个的帖子,发现了一些关于 ARM 的信息,比如Beagleboard bare metal programmingHello world, bare metal Beagleboard

我不太清楚它们是否适合移植到 PowerPC 平台。我找不到适用于初学者的 PowerPC 的 hello world 示例。任何人都有 PowerPC 裸机开发的经验,没有引导加载程序或操作系统?

谢谢。

0 投票
1 回答
63 浏览

arm - 根设备在哪里?

我正在为我的 Raspberry Pi 从头开始​​编写一个小内核(代码如下:https ://github.com/yrakcaz/RasPiK/ )

一切似乎都很好,但我有一个小问题:我想要一个文件系统,但我不知道如何获取根设备地址。我知道,在 x86 架构上,我们可以使用传递给 main 函数的参数中的标签来获取 ROM 地址,但我已经解析了 atags 并且没有什么有趣的......

我怎样才能得到这个地址?