嵌入式 Linux 开发入门,第 2 部分

作者:Richard Sevenich

在本系列的第 1 部分中,我们指出我们将使用 Engineering Technologies Canada Ltd.(http://engtech.ca)提供的带有 uClinux 的 LBox 作为我们的 SBC。回想一下,它具有 Motorola Coldfire MCF5272 处理器、闪存、一个串口、一个光纤端口以及最多三个 10/100 以太网端口。它无需构建到其他设备中即可立即使用——只需使用任何 5-12 伏范围内的合适电源为其供电即可。虽然我们在这个项目中使用的是特定的 SBC,但我们在此处进行的活动对应于任何典型 SBC 上的类似活动。 也就是说,从一个 SBC 到另一个 SBC,在更详细的层面上存在显着的具体差异。

我为我们的计算机科学系购买了大约 12 个这样的系统。 如果不是批量购买,基本板的价格约为 250 美元。 然后,您添加您需要的其他任何东西。

在使用实际的 LBox SBC 的同时,跟随本系列文章将是最佳选择。 然而,我组织了本系列文章,以便读者无需购买该板即可收集有用的信息。 另一种选择是使用其他 SBC 并与我们的活动并行。

为了避免在此处提供过多的细枝末节,我建议您参考 Engineering Technologies 网站的 FAQ 部分发布的信息。

当前文章的目标和后续章节是

  • 为 LBox 供电。

  • 建立 LBox 和工作站之间的串行通信,包括如果您的工作站没有串口该怎么办。

  • 通过以太网连接。

  • 安装交叉编译工具链。

  • 执行 NFS 挂载。

  • 为 LBox 编写程序并运行它。

最后两节非常通用,适用于大多数嵌入式 Linux 系统。

为 LBox 供电

我的特定设置包括

  • LBox SBC(来自 Engtech)

  • 电源(来自 Engtech)

  • 串行接头到 DB9 电缆(来自 Engtech)

  • 包含所有所需软件的 CD(来自 Engtech)

  • 我的笔记本电脑(工作站),安装了 Libranet 2.81,已更新到 2.4.27 内核

  • Belkin F5U409 USB 到 DB9 适配器,因为我的笔记本电脑没有外部 RS-232 DB9 端口,但有 USB 端口

我将笔记本电脑配置为使用广泛使用且久经考验的 Minicom 终端仿真器进行串行连接。 它随附大多数 Linux 发行版,对于连接到带有串口的 SBC,Minicom 是常见的选择。 Belkin F5U409 使用 mct_u232 驱动程序,该驱动程序在内核源代码中可用。 但是,它在 2.4.24 内核下对我来说无法正常工作,因此更新到 2.4.27。

在供电之前,我连接了以太网电缆和串行电缆。 LBox 上提供的以太网端口(如果已安装)具有预期的 RJ45 母座。 串行端口接头允许连接串行接头到 DB9 电缆,我通过 Belkin F5U409 将其连接到我的笔记本电脑。 此时,一切似乎都准备就绪,所以我通过插入电源适配器来供电。

建立 LBox 和工作站之间的串行通信

我使用笔记本电脑上的 Minicom 建立与 LBox 的串行连接。 详细信息可以在此 FAQ中找到。 正确配置 Minicom 后,我使用复位按钮(位于板边缘附近,串行端口接头的对角)复位 LBox。 然后,我笔记本电脑上的 Minicom 窗口喷出了 LBox 启动消息。 这些消息随后可能有用,所以我将它们粘贴到笔记本电脑上的编辑器中以便后续打印。

启动消息完成后,我看到了命令提示符。 然后我调查了系统以确定有哪些可用功能。 例如,检查 /bin 显示 Busybox 和 Tinylogin 都存在。 这暗示了一个小项目,即将 Busybox 更新到最新的 1.0 版本,该版本已合并了 Tinylogin 功能。 其他值得注意的事情

  • 来自uname -a的结果是

    uClinux lbox 2.4.20-uc0 #176 Mon Aug 16 11:25:42 ADT 2004 m68knommu unknown
    
    
  • 来自df的结果是

    Filesystem      1k-blocks      Used   Available  Use%     Mounted on
    rootfs            1113         1113         0      100%     /
    /dev/root         1113         1113         0      100%     /
    /dev/ram1          115            7       108        6%     /var
    /dev/mtdblock3    3008          336      2672       11%     /etc/config
    
    
  • 来自ls /bin,可以看出 Vi 的一个版本存在,等等。

通过以太网连接

如果在启动时连接到互联网,LBox dhcpcd 守护程序应协商 IP 地址。 如果没有发生这种情况——通过在 Minicom 窗口中输入以下内容进行检查ifconfig——我们可以手动分配它,或者通过在 LBox 命令行中输入以下内容再次尝试dhcpcd -p -a eth0 &.

LBox 支持 telnet,因此我现在可以从笔记本电脑上的 shell telnet 进入 LBox——如果我为 telnet 配置了笔记本电脑。 LBox 出厂时不支持 SSH。 但是,它确实有一个 HTTP 守护程序,因此我可以使用浏览器访问它。 LBox 上已经设置了一个网页(参见图 1),允许您打开、关闭或切换 LBox 板上的 LED; 它还提供了指向源代码的链接。 这很好地证明了您可以通过 Web 界面与 LBox 交互。

An Introduction to Embedded Linux Development, Part 2

图 1. LBox 网页

安装交叉编译工具链

对于任何 SBC,供应商要么提供工具链,要么告诉用户从哪里下载它们。 应提供并遵循明确的安装链的说明。 这些说明因供应商而异。

在我们的例子中,工具链在 LBox 随附的 CD 上可用。 CD 上还包含其他软件包,包括 uClinux 源代码层次结构,但我们稍后会处理这些软件包,并坚持手头的任务。 CD 还提供了一个 INSTALL 文件,其中包含安装工具链的说明。 这些说明非常简单。 特别是,有一个 shell 脚本要执行,它执行安装。

执行 NFS 挂载

本小节不是 LBox 特有的,并且具有普遍意义。 与工作站相比,LBox 的资源有限——没有硬盘驱动器。 对于开发人员来说,在工作站硬盘驱动器上创建一个工作区,然后将该工作区(NFS)挂载为 LBox 层次结构的一部分是很方便的。 挂载后,可以从工作站和 LBox 访问此工作区。 由于工作区存在于工作站上,因此可以轻松地创建定期存档备份,例如,在 CD-ROM 上。 并且由于工作区也挂载在 LBox 上,因此我们可以在 LBox 上运行在工作区中开发的代码来测试代码,而无需使用 LBox 的有限文件存储功能。

我们可以使用两种方法来创建工作区。 第一种方法假设 LBox 和工作站都连接到互联网; 然后我们可以将工作站目录挂载到 LBox 上。 第二种方法假设 LBox 和工作站未连接到互联网,但通过以太网电缆直接相互连接。 我们在此处讨论第二种方法。 第一种方法(以及 telnet 连接)在此 FAQ中讨论。

通过以太网电缆从 LBOX 直接连接到工作站使我们与更广泛的互联网隔离,这可能出于安全原因或当我们无法访问互联网时(例如,在偏远地区的路上)引起兴趣。 这就是我们在此处描述的内容。

我们这里的假设是 NFS 服务器在工作站上启动并运行,LBox 通过以太网电缆直接连接到工作站,并且 LBox 通过串行电缆连接到工作站。 在我的情况下,一些防火墙规则妨碍了,所以我关闭了防火墙——系统无论如何都与互联网隔离。

我们的步骤如下

  • 复位 LBox

  • 在工作站上启动 Minicom,以便 Minicom 窗口模拟 LBox 的终端

  • 使用以下命令为 LBox 配置 eth0(在 Minicom 窗口中)

    ifconfig eth0 192.168.1.1 netmask 255.255.255.0 broadcast 192.168.1.255
    
    
  • 使用工作站 shell 为工作站配置 eth0,如下所示

     ifconfig eth0 192.168.1.2 netmask 255.255.255.0 broadcast 192.168.1.255
    
    
  • 通过相互 ping 来测试每个——从工作站 shell 尝试ping 192.168.1.1并从 Minicom 窗口尝试ping 192.168.1.2

  • 假设一切正常,现在在工作站上建立您要挂载到 LBox 上的文件; 也就是说,在工作站上为您的 LBox 内容创建一个新目录; 假设它是 /home/fredsmith/lbox_stuff

  • 在您的工作站上创建一个包含以下行的 /etc/exports 文件/home/fredsmith/lbox_stuff *(rw,insecure)。 注意不要在括号中的选项列表中包含空格。

  • 为了扫描新的 /etc/exports,请在您的工作站上重新启动 NFS 服务器守护程序。 对于我的基于 Debian 的工作站,我将输入/etc/init.d/nfs-kernel-server restart。 几年前,我确实遇到了基于 Red Hat 的系统,在这些系统上我需要停止然后启动守护程序,因为重新启动不太等效。

  • 使用 Minicom 窗口创建一个挂载点mkdir /var/nfs.

  • 现在从 Minicom 窗口尝试 NFS 挂载命令,如下所示

      mount -t nfs -o nolock 192.168.1.2:/home/fredsmith/lbox_stuff /var/nfs
    
    
  • 通过检查 Minicom 窗口中 /var/nfs 的内容,调查挂载是否成功。

为 LBox 编写程序并运行它

在工具链可用且 NFS 挂载仍然活动的情况下,我可以在 NFS 挂载的目录中工作,编写一个独立的程序并交叉编译它。 然后,我可以在 Minicom 中运行它,同时它驻留在 NFS 挂载的目录中。

让我们尝试一下。 首先在工作站上工作,如下所示

  • 使用工作站上的 shell 窗口,在 /home/fredsmith/lbox_stuff 目录中输入一个简单的程序

    
      /* bye.c
      */
      int main() {
        printf("Lbox says goodbye.\n");
        exit(0);
      }
    
    
  • 使用交叉编译器编译程序

    m68k-elf-gcc -m5200 -msep-data -Wl,-elf2flt -o bye bye.c -lc
    
    
  • 通过输入以下内容,确保 LBox 可以执行结果chmod 755 bye.

接下来,我们通过 Minicom 窗口在 LBox 上工作。

  • 在 NFS 挂载的目录中导航到可执行文件所在的位置。 例如,如果它在挂载层次结构的顶部,则输入cd /var/nfs.

  • 输入ls -l以确保您在包含 bye 的目录中,并检查它是可执行文件。

  • 通过输入以下内容执行程序./bye,您应该看到以下输出Lbox 说再见。

在本系列的下一期中,我们将重新编译 LBox 内核并将其与根文件系统一起安装在 LBox 上。 这使您可以选择为您的特定需求定制内核和根文件系统。

加载 Disqus 评论