- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想在 Intel Galileo 板上编写一个小的“hello world”裸机 应用程序。使用 UEFI 打印文本(到 UART-1)当然效果很好,但我想“手动”访问 UART,而无需 UEFI 的任何帮助。
在 QEMU 中我的代码运行良好:
#define COM1_PORT (0x03F8)
#define UART_PORT (COM1_PORT)
enum uart_port_offs_t
{ // DLAB RW
THR = 0, // 0 W Transmitter Holding Buffer
RBR = 0, // 0 R Receiver Buffer
DLL = 0, // 1 RW Divisor Latch Low Byte
IER = 1, // 0 RW Interrupt Enable Register
DLH = 1, // 1 RW Divisor Latch High Byte
IIR = 2, // - R Interrupt Identification Register
FCR = 2, // - RW FIFO Control Register
LCR = 3, // - RW Line Control Register
MCR = 4, // - RW Modem Control Register
LSR = 5, // - R Line Status Register
MSR = 6, // - R Modem Status Register
SR = 7, // - RW Scratch Register
};
void uart_init(void)
{
outb(UART_PORT + IER, 0x00); // Disable all interrupts
outb(UART_PORT + LCR, LCR_DLAB);
outb(UART_PORT + DLL, BAUD_LL); // Set divisor (lo byte)
outb(UART_PORT + DLH, BAUD_HL); // (hi byte)
outb(UART_PORT + LCR, LCR_WORD_BITS_8 | LCR_PAR_NONE | LCR_STOP_BITS_1);
outb(UART_PORT + FCR, FCR_ENABLE | FCR_CLR_RECV | FCR_CLR_SEND | FCR_TRIGGER_16);
outb(UART_PORT + MCR, MCR_DSR | MCR_RTS | MCR_AUX2);
}
ssize_t uart_write(const char *buf, size_t len)
{
size_t written = 0;
while (written < len) {
while (!is_output_empty()) {
asm volatile ("pause");
}
outb(UART_PORT + THR, buf[written]);
++written;
}
return written;
}
SystemTable->ConOut->OutputString(SystemTable->ConOut, L"Exiting EFI boot services ...\r\n");
SystemTable->BootServices->ExitBootServices(ImageHandle, map_key);
uart_init();
while (1) {
const char s[] = "UART\r\n";
uart_write(s, sizeof (s) - 1);
}
规范对我帮助不大。我猜想英特尔 Galileo 板上的 UART 不使用/模拟普通/传统 COM 端口 3F8h、2F8h、3E8h 或 2E8h。
谁能告诉我我做错了什么,或者甚至可以发布一个最小的裸机 hello world 示例?
最佳答案
我假设您的目标是串行端口,它是 Intel Galileo 板上的“类音频”连接器。
这里有一些应该有帮助的资源:
关于此串口的注意事项:
由于第 18 章有很多内容需要阅读(约 67 页有用信息),我不打算在这里重新输入所有内容,请阅读数据表并相应地配置寄存器。
一般注意事项:
对于裸机方法,首先确保您的 Bootstrap 是正确的,配置所有时钟选项、GPIO 默认模式和值、计时器(如果有)等。对于引导 list ,请阅读 X1000 UEFI Firmware Writer’s Guide 中的第 4.12 章| (启动该芯片需要做 18 件事)。之后,我将使用 GPIO 上的简单“LED 闪烁”应用程序对其进行验证。
修补 3F8h 和类似的端口对这个 SoC 的“裸机”没有帮助。您需要直接处理寄存器,或者找到并使用合适的库或框架(也许是 UEFI BIOS?)。
特定平台的编程资源应该是一本很好的例子。例如,在 Board Support Package Sources for Intel Quark 中文件 Quark_EDKII_v1.0.0.tar.gz
是 Quark/Galileo 的 UEFI 源代码。在那里,Serial.c 和 Serial.h 文件可能正是您要查找的内容:
Quark_EDKII_v1.0.0/QuarkSocPkg/QuarkSouthCluster/Uart/Dxe/Serial.*
关于c - Intel Galileo 裸机 UART,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22571379/
我已经在 Yocto 上运行的 Galileo 上编译并安装了 screen 工具。 http://www.gnu.org/software/screen/ 当我运行该工具时,一切正常,我可以创建许多
当我使用以前版本的 Eclipse(例如 Ganymede/Europa)时,如果我编辑了一个文件然后尝试构建,Eclipse 会提示我先保存。 自从我更新到 Galileo(构建 ID:200909
构建路径 > 添加库 > JUnit 无法添加 JUnit3 或 JUnit4 组件。 我在.log 中看到这样的消息 !MESSAGE No property tester contributes
我开发了动态网络项目。我多次执行该应用程序。但目前,当我尝试清理项目(项目->清理->我的项目)时,它显示出一些内部问题。项目验证失败。 这是因为 spring beans 实例化时发生了内存不足。错
我使用 Intel Galileo 已经有一段时间了,并且创建了一个我永远运行的 node.js 和 express 服务器。我现在正试图让我的命令在机器启动时触发,但我很挣扎。我已经使用了下面的方法
我在网站上找不到任何关于此的描述。 Eclipse Galileo 相对于其先前版本有哪些新功能/改进/更改?特别适用于 Java 编程。 最佳答案 打开欢迎页面(帮助 -> 欢迎)并单击标有“新增功
我刚刚为 Java 开发人员安装了 Eclipse Galileo,并注意到更新站点列表是空的。还有其他人有同样的问题吗?我不知道更新站点的 URL。 最佳答案 在this page , 还有 rec
简而言之,当我尝试将vmargs设置为合理的值(例如-Xms512m -Xmx2048m)时,我有8G的内存,并且在启动屏幕后eclipse / java快死了。 总而言之: 我正在运行XP Pro
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
在 Airticket Universal API 部分我有以下请求: K82F4Q
我有 Eclipse Galileo。我创建了一个新的 Java 项目,但无法运行该应用程序。我收到以下启动错误: Selection does not contain a main type 最佳答
我无法在 Eclipse GALILEO 中配置 tomcat 7.0.11。我无法获得服务器选项。 是 Eclipse 问题还是什么?我无法理解。 最佳答案 在 Eclipse 中,转到 Windo
我正在使用 Eclipse Galileo....我无法在其中找到服务器选项。我如何从 eclipse 运行 tomcat 服务器? 最佳答案 Tomcat 服务器连接器与 Eclipse Galil
我是一名技术计算专业的学生。 我有一个问题,我想在微芯片上制作一个汽车识别程序。我想在 SD 卡上使用 Linux 图像的 Intel Galileo 和 OpenCV。 Linux 镜像正在运行,我
我正在使用 Intel Galileo 主板(Linux 在主板上运行)并使用 arduino 作为开发环境。 现在获得特定的 gpio 引脚(比如数字引脚 6)逻辑 1,我想自动重置我的代码。我想通
我正在使用 Eclipse Gallieo 并尝试使用 Android 插件。但我收到以下错误。 Cannot complete the install because one or more req
编辑:jldupont 的建议(见下文)成功了 Window -> Preferences -> General -> Editors -> Text Editors -> Show line num
我需要为 Travelport Galileo uAPI 开发 python soapclient。 这是 Travelport 通用 API 的 30 天试用凭证 通用 API 用户 ID:通用 A
我想在 Intel Galileo 板上编写一个小的“hello world”裸机 应用程序。使用 UEFI 打印文本(到 UART-1)当然效果很好,但我想“手动”访问 UART,而无需 UEFI
如何在 ubuntu 中连接到串行电缆上的 galileo? 我已经安装了腻子并将波特率设置为115200。我如何知道板子在哪个端口上?有命令吗?是/dev/ttys0 吗? 谢谢 C 最佳答案 Ga
我是一名优秀的程序员,十分优秀!