系统开发快速入门课程

作者:Don Marti

System Development Jump Start Class

讲师:Ed Skinner

MontaVista Software 的培训课程仅对客户开放,这让我们很好奇。这些精选人士会学到什么秘诀呢?所以我礼貌地请求参加了为期四天的“使用 Hard Hat Linux 的系统开发快速入门”课程。

在上课之前,我签署了一份保密协议,以保护客户的身份以及他们可能泄露的任何公司机密。不过,所有其他学生都很谨慎,所以没有任何秘密被泄露。

讲师 Ed Skinner,他拥有 XYZZY 车牌,并在 pSOS 和 VxWorks 方面拥有多年的开发人员培训经验,他简要介绍了“什么是 Linux”,然后直接开始讲解如何在 Hard Hat 基于 NFS 的开发环境中找到方向。因此,下课时,我已经非常熟悉 Hard Hat 的布局和做事方式。

在整个课程中,Ed 在一般原则和具体实践之间交替进行。第一天,他介绍了两种主要的嵌入式系统开发策略:“一次性”策略,即构建整个镜像,将其下载到目标设备并进行测试;以及“增量式”策略,即一次完成一些工作。他确实指出,增量式方法需要一个重新配置步骤,即让目标设备独立于主机运行。但尽管如此,增量式方法还是更快。

像其他当前的嵌入式操作系统一样,Hard Hat Linux 绝对属于后者,并且似乎将增量式方法推向了逻辑上的极致,在开发过程中,目标设备上可以使用完整的 Linux 发行版,包括 gcc。

实验课程从一个简单的任务开始:连接主机和目标设备,并运行 Hard Hat 安装脚本。Ed 选择了一台 x86 笔记本电脑作为主机,一台 PowerPC SBC 作为目标设备,这样很容易判断是否为错误的架构进行了编译。每对学生获得一台主机和一台目标设备。

我们为目标设备编译了一个内核,这与常规 Linux 中的任务完全相同,只不过我们将最终镜像转换为 S 记录,并通过 TFTP 将它们传输到目标设备,而不是进行 LILO 安装。该镜像包含一个引导加载程序,但我们没有接触到将基本内容之外的任何东西放入 Flash 的过程。本课程全部在 NFS 环境中进行。我们启动了目标设备并登录了。我和我的实验伙伴在第一天下午 3:27 在目标设备上成功运行了“hello world”。

这门课程的宣传是需要精通 C 语言和 Linux 或类似的编程环境,但实际上似乎只需要 C 语言的基础知识和一点关于 make 的知识。如果您习惯于集成开发环境,您可能需要在上课前阅读 GNU 信息页面中关于 make 的内容,并编写几个练习 Makefile。

这些实验课为我们提供了相当多的 GNU 开发工具的指导实践,包括交叉编译器 gcc 和用于通过网络进行调试的客户端/服务器 gdb。总而言之,对于为期四天的课程来说,涵盖的材料量适中。有充足的时间提问,Ed 也有时间在实验期间帮助大家。每个人的程序都运行起来了。如果您从未为任何类型的 Linux 编写过任何程序,这将是一个很好的入门方式。

有一天专门讲授 pthreads 及其性能优势、POSIX 实时优先级、信号量和互斥锁。实验是一个上下文切换竞赛,学生两人一组,发布计数,表示他们的程序在两个线程之间交替读取和写入内存块的速度有多快。

Ed 特别赞赏 Source Navigator,这是一款用于浏览和搜索源代码的工具,后来他还用它来浏览内核。说到内核,对于入门课程来说,他讲解了很多内核内部原理,包括展示如何解释 /proc/*/maps 来查看进程的内存映射。

最后的练习是编写一个内核模块,该模块基本上可以被 insmod 和 rmmod,并且有一个 /proc 接口,仅此而已。驱动程序是下一门课程。

我们在本课程中获得的一些实用知识可能会让您在一周内感到困惑,如果您不知道这些知识的话。“对于嵌入式系统,始终更改 panic.c”,Ed 说。内核默认设置是为带有控制台的系统设计的,在这种系统中,操作员可能能够做一些事情来处理 panic。在嵌入式系统中,您可能希望立即重启,或者完全关闭而不重启。以 您自己的 方式处理 Panic。

内核树中的另一个可能不合适的文件是 oom_kill.c,即内存不足杀手。在嵌入式系统上,用户可能无法重启被杀死的内存占用大户进程,或者杀死某个进程可能是一个非常糟糕的主意。oom_kill.c 确定要杀死哪个进程的规则非常简单,自定义的 oom_kill.c 将比通用的 stock 版本更好地处理您系统的实际情况。

添加 printk() 以 выяснить 内核中正在发生的事情。如果您只是更改源代码而不是配置,重新编译并下载到目标设备真的很快。最后,“分步开发”——增量式方法是最好的。

我们仅从主机上 NFS 挂载的目标目录运行我们的程序。没有机会进行重新配置步骤,将完整的镜像加载到 Flash 中,看看我们是否可以在不连接主机的情况下让指示灯闪烁。

虽然许多开发人员可能会将几乎所有工作时间都花在使用 NFS 带来的舒适环境中,但在某些时候您必须在没有它的情况下进行测试。目前,MontaVista 没有关于重新配置步骤的课程,但 Ed 说这可能是未来课程的主题。

我从这门课程中学到了很多,并且会推荐它,除非是已经跳过这篇文章的经验丰富的嵌入式 Linux 高手。

System Development Jump Start Class

Don Marti 是 Embedded Linux Journal 的主编。

电子邮件:dmarti@zgp.org

加载 Disqus 评论