embedded - 在哪里可以了解有关低级编程的更多信息?例如设备驱动程序

标签 embedded microcontroller drivers low-level

来自http://www.altdevblogaday.com/2011/08/06/demise-low-level-programmer/ :

“当我开始编程时,我们现在认为理所当然的许多元素并不存在。当时没有 DirectX,也没有很多兼容的库可用于当时的免费编译器。所以我必须编写自己的代码最基本的程序、键盘处理程序、鼠标处理程序、视频内存访问器、光栅化器、纹理映射器、位 block 传输器……我当时编写的程序 100% 是我自己的代码,我必须能够处理任何事情。”

我正在寻求有关如何了解更多底层编程的建议。例如,编写键盘/鼠标驱动程序、vga 驱动程序或诸如 malloc 之类的基本函数。

解决这个问题的最佳方法是什么?我是一名计算机科学本科生,学过有关计算机体系结构/汇编的类(class),我们在 DE0-nano FPGA 上用 VHDL 编写了一个简单的流水线处理器。我有相当不错的 C 编程知识。

在我看来,在现代 x86 计算机上学习这些东西很困难。微 Controller 更好吗(比如arduino板)?或者FPGA(但我的DE0-nano似乎有限)?或者也许买一台像 Commodore 64 这样的旧电脑来像当时的人一样学习?

有没有关于这个主题的资源,例如书籍?

最佳答案

我会推荐一种微 Controller 方法,msp430、avr 或众多 ARM 之一。您可以花大约 10-20 美元从 ti 购买 msp430 或 ARM 启动板之一,也可以花 10-20 美元找到基于 stm32 的发现板,stm32f0 (cortex-m0) 很简单、基本。 stm32f4 加载了缓存和 FPU 等内容,但仍然是一个微 Controller 。

我认为微 Controller 方法将带你回到根源,非常基本的东西,硬件通常没有视频或硬盘驱动器或任何东西,但你确实学习如何掌握工具(编译器、链接器等)以及如何阅读手册等。

您可以快进到支持 Linux 的硬件,例如树莓派或 beaglebone。在各个级别,尤其是Linux能力级别,除了视频芯片、USB芯片等的手册之外,您还需要使用Linux源代码来学习。了解 Linux 驱动程序通常非常通用,并且通常包含驱动来自一个供应商的整个系列或整个硬件历史的代码,因此一堆代码可能与手册中的任何内容都不匹配,但有些代码会匹配,这就是您将要找到的地方克服理解手册内容的困难。并不意味着您必须重新编写 linux 才能使用此信息。

从小事做起,一步一个脚印,从头开始单独的 PCIE 和视频是一项重大任务,如果你从那里开始,你很可能会失败,除非你已经具备了知识和经验(如果你这样做了,你就不会在这里询问)。

您还可以采用 bochs 或模拟旧 8086 DOS 系统的方法,如果您能找到一些好的、旧的、基于 dos/8086 的手册,您可以查看寄存器、cga 模式、vga 模式等。光盘 Controller 仍然很困难,等等......

有大量的arm、avr、msp430、mips等(还有x86,但我稍后才会去那里)指令集模拟器,它们可以避免硬件成本,也可以避免损坏硬件和拥有硬件的成本。购买更多(即使有丰富的经验也会发生),甚至更好地编写自己的指令集模拟器...vba一些nds模拟器,逐步升级到qemu。

关于embedded - 在哪里可以了解有关低级编程的更多信息?例如设备驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19333954/

相关文章:

debugging - 使用 SysTick_Config 后无法调试

c++ - ARM STM32需要兼容的编译器

C51 编译器 - 写入 xdata

c++ - 针对不同目标MCU开发C/C++代码的区别

c++ - UMDF,无法为 Microsoft 定义的类指定 [ClassInstall32] 部分

printing - 如何安装pscript/unidrv渲染插件? DDK/WDK print/oemdll 样本表现得很奇怪

programming-languages - F35 Lightning II飞机使用的主要编程语言是什么?

c - 微 Controller 89c52 - 7 段复用显示

linux - 较新版本的 Linux 是否使用与 libata-core.h 不同的包含?

c - 调试时从寄存器中提取单个位