嵌入式开发
导语
近年来,“嵌入式设备”对Linux的采用越来越多。
Linux标准拥有的许多功能都符合嵌入式产品的目的,这是最大的原因。
安装在嵌入式设备上的Linux通常被称为“嵌入式Linux”,并使用与传统PC上运行的Linux不同的表达式。
但是,Linux和嵌入式Linux没有明显的区别也是事实,在某种程度上环境完备的状态的话,特别是意识不到嵌入式Linux的软件开发可能。
但是,从环境整备没有实现的状态开始开发嵌入式Linux,必须把握嵌入式这个词的意思。
嵌入式基础概念
交叉开发和自助开发
“交叉开发”,这是嵌入式开发的基本方法。
自助开发:开发环境和执行环境相同。
交叉开发:开发环境和执行环境不同。
也就是说,在PC世界中,使用Visual C++等开发PC应用程序的形式是自我开发。另一方面,交叉开发意味着在另一个设备(其他架构)上运行创建的可执行文件。
那么,为什么在嵌入式开发中交叉开发是基本方法呢?最大的原因是执行环境中的处理器(CPU)和操作系统是不同的。如你所知,Windows可执行文件不会在Linux上运行(操作系统不同)。即使在相同的Linux应用程序中,PC/AT兼容机的可执行文件也不会在Macintosh(编注)上运行(CPU不同)。在不同的环境中运行软件需要相应的工作。嵌入式设备使用各种CPU和操作系统,因此交叉开发势在必行。
Macintosh是苹果公司开发和销售的PC的品牌名称。
1984年第一台机器发布。通常被称为“Mac”。
另外,嵌入式设备的CPU功率和内存安装量等资源有限,很多情况下不可能像PC这样的开发方法。在可以使用相对较多资源的PC和工作站上开发,可以缩短编译时间,高效。
嵌入式开发相关术语
在嵌入式开发中,出现了PC软件开发中不常用的独特术语。在了解交叉开发的地方,也请记住其他的关键词。
1.开发计算机(又名:主计算机)
指的是实际创建程序的PC。
2.目标计算机(又名:目标板、目标)
指嵌入式设备。在交叉开发中运行创建的可执行文件的环境。
3.交叉编译器/汇编程序/链接器
交叉编译器/汇编程序/链接器用于编译所创建的程序(主要以C语言等编写)为目标。
4.交叉库(又名:目标库)
在用术语3中所示的工具编译程序时,需要交叉库。例如,如果您创建了hello.c,那么如果您认为其中使用的printf()本身是存储的,那么就很容易理解了。
如果您准确地描述交叉库,您将为目标操作系统提供两个交叉库和一个独立于OS的交叉库。存储在库中的许多函数都是通过结合操作系统的功能来实现的。要连接到OS本身的库和稍后将描述的引导加载器使用OS独立交叉库。
5.交叉调试器
虽然实际创建的可执行文件将直接在目标上运行,但是如果有调试器来查明问题的原因,这是非常有用的。
除此之外,关于交叉开发的关键词有很多,经常使用的是上述的5个左右吧。
嵌入式开发的流程
那么,让我们来看看实际嵌入式Linux的开发步骤。
步骤1:开发引导加载程序
首先要做的是开发引导加载程序来在目标上运行Linux本身。内置领域的引导加载程序相当于PC/AT兼容机的BIOS(编注)。
PC世界中使用的“引导加载程序”通常被写入MBR中,通常指的是BIOS调用的程序。LILO、GRUB、Windows的OS Loader等很有名。
引导加载程序的作用是随着设备的打开,从任意位置取出内核映像,并将其部署到目标内存中并运行。
我们没有安排这个“任何地方”,但大多数设备都使用闪存ROM等作为内存。
因此,为了维护等,除了原来的功能以外,还可以编入对ROM的程序写入功能等。