如何在裸机ARM汇编中使用键盘?

3
我正在编写我的第一个Forth(在ARM上)。我希望它能够运行在裸机上,因为我认为这就是Forth的全部意义。然而,我无法找到关于如何在没有Linux系统调用的情况下编写KEY、EMIT和其他处理键盘的信息和示例。我也尝试阅读引导加载程序源代码(U-Boot),但显然超出了我的深度。
你能否帮助我编写一个裸机ARM汇编键盘处理循环和REPL?类似于那样,但适用于ARM。我正在使用Cortex-A8 CPU (ARMv7)。

4
取决于你的计算机如何支持键盘,但可能涉及编写USB堆栈。请注意,答案中提供的示例并非“裸机”,而是使用固件(BIOS)读取键盘。 - Ross Ridge
1
引导程序通常专门负责将内核二进制文件加载到内存中,它们几乎不提供任何服务。在x86世界中,它们通常还会将机器切换到目标模式并进行一些基本的内存映射设置等,但是引导程序越少与特定操作系统相关,它就能支持更多不同的内核。你的机器没有BIOS固件提供USB键盘驱动程序吗?那样会简单得多,编写自己的USB固件是相当大的项目...(如果你有USB键盘,但我猜你可能有?或者默认键盘连接方式不同?) - Ped7g
1
@Ped7g 我正在尝试使用BeagleBone Black。它有一个可闪存的引导扇区,似乎引导加载程序处理外围设备(根据我所读的)。 - Raoul
4
我认为你对裸机(baremetal)的概念有所混淆。这意味着如果没有现成的东西,你需要自己编写代码。如果你只是想调用某些 API,那么就在上面安装一个操作系统。u-boot 简直就是一个操作系统,它正在做很多你可能会在裸机上做的工作。但由于特定供应商的 NDA 原因,u-boot 中的许多内容都没有记录文档,因此你必须反向工程 u-boot 的源代码或者从其他人那里获取信息。 - old_timer
5
如果你想要裸机输入,请使用串口和一个简单的终端。 - old_timer
显示剩余3条评论
1个回答

5
考虑到您的目标是BeagleBone Black(在评论中提到),我假设您正在考虑一个USB键盘。如果是这样,old_timer的评论说您“混淆了什么是裸机”是完全正确的。如果您真的在裸机上编码,那么您没有USB驱动程序堆栈,因此您将无法从USB键盘读取。
可能您选择使用的任何引导加载程序都可以包括板上硬件组件的驱动程序,但那时您就不再处于裸机状态了。
如果您想坚持使用裸机,您将直接与硬件外设交互,迄今为止最简单的通信外设是串行端口(UART),您可以从另一台机器连接到该端口。这也将解决输出问题,尽管您没有提到,但它可能比输入问题更重要(从裸机驱动屏幕是一项挑战!)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接