一、目的:

1.搭建Linux操作系统项目所需的项目环境构件;
2.了解 Linux的组成,学会编译内核。

二、内容:

安装Red hat 9.0Linux操作系统;

三、步骤:

3.1 正确安装Redhat9.0操作系统。

3.2 rpm -Uvh *.rpm

当安装完linux操作系统后,接下来要安装交叉编译器。启动主机,必须以root用户名登录,在主机的根目录/下,创建linuette目录,如: mkdir /linuette。在/mnt/cdrom目录下找到光盘,将光盘中/项目软件syrj/tools/目录下的RPMS文件夹拷贝到/linuette目录下,打开系统工具下的终端,此时,系统将弹出终端框,在里面改变目录到/linuette/RPMS下,输入如下命令:
rpm -Uvh *.rpm

等待系统安装,如果所有的RPMS内的文件全部正确安装,将会在根目录下的/opt文件夹内生成一个host文件夹,我们所需的交叉编译库就在该目录下。所以,所需的交叉编译环境就搭建好了。

3.3NFS网络文件系统配置与使用

在Linux系统中,驱动程序可以以动态模块的形式加载,这为项目和调试带来了极大的便利。通常做法是将编译好的动态模块和应用程序放在主机上的共享文件夹中,启动NFS网络文件系统服务,以便在项目系统上进行调试和加载模块。

3.4 配置NFS网络文件系统

  1. 关闭防火墙(如果安装了防火墙)

    • 在Linux主机的终端上执行setup命令,弹出菜单界面后,选择Firewall configuration
    • 回车进入系统服务选项菜单,选择NO FIREWALL关闭防火墙。设置完成后,退出setup界面(setup里面显示防火墙设置为HIGH可以忽略)。
  2. 启动NFS服务

    • setup界面选择System services,回车进入系统服务选项菜单。
    • 选中[*]nfs,按F12键退出,再选择方向键,退出setup界面,返回到命令提示符下。
    • 编辑/etc/exports文件,将内容修改为:
      /    (rw)
      
    • 保存并退出。
    • 切换目录到/etc/rc.d/init.d/下,执行如下命令启动NFS服务:
      ./nfs start
      
    • 启动成功后终端会输出:
      Starting NFS services: [ 确定 ]
      Starting NFS quotas: [确定]
      Starting NFS daemon: [确定]
      Starting NFS mountd: [确定]
      

3.3. 主机与项目系统连接

  1. 硬件连接

    • 使用交叉网线将主机与项目系统连接。
  2. 配置minicom

    • 在终端下输入minicom -s,配置minicom为波特率115200,无奇偶校验,8位数据位。
    • 在minicom中,给项目系统上电,系统启动后,利用ifconfig eth0 xxx.xxx.xxx.xxx命令改变项目系统的IP地址,使该地址的前三段与主机的前三段一致,最后一段为不重复的小于255的任意值。
    • 例如,主机IP地址为192.168.0.1,则项目系统配置为:
      ifconfig eth0 192.168.0.5
      
  3. 测试连接

    • 在项目系统上执行ping命令,测试是否与主机连通:
      ping 192.168.0.1
      
  4. 挂载NFS共享目录

    • 确保主机上的NFS共享目录拥有读写权限,若没有则执行:
      chmod 777 /home/nfs
      
    • 如果/home目录下没有nfs文件夹,则创建此文件夹,将用于调试的驱动模块及应用程序放在该文件夹内。
    • 在项目系统的终端中,输入如下命令将主机的/home/nfs目录挂载到项目系统的/mnt/yaffs目录下:
      mount -o nolock 192.168.0.1:/home/nfs /mnt/yaffs
      

3.4 编译内核

1. 动态加载驱动模块

  • 利用NFS网络文件系统进行异地调试时,不需要重新编译内核,只需使用交叉编译器编译驱动模块和应用程序。
  • 将驱动模块和应用程序放在主机的共享文件夹内,通过mount命令挂载到项目系统中。

2. 编译驱动模块进内核

  • 需要将驱动模块编译进内核时,应进行以下步骤:
  1. 配置内核

    • 在内核目录下输入:
      make menuconfig
      
    • 选中新加入的驱动模块,保存配置并退出。
  2. 编译内核

    • 首次编译内核时,需依次执行以下命令:
      make dep    # 用于寻找各文件的依存关系
      make clean  # 清除以前构建内核时生成的所有目标文件、模块文件和临时文件
      make zImage # 编译内核中的文件,生成内核
      
    • 编译通过后,内核文件zImage会生成在/arch/arm/boot/目录下。

至此,您应对在Linux操作系统下的NFS网络文件系统配置、模块加载、及内核编译过程有一个大概的了解。

四、说明

1.关于linux-2.4.18.-rm7-pxa1

linux-2.4.18.-rm7-pxa1是linux移植到三星S3C2410处理器上的操作系统内核代码。一般在每个目录下,都有一个.depend 文件和一个 Makefile 文件,这两个文件都是编译时使用的辅助文件,仔细阅读这两个文件对弄清各个文件这间的联系和依托关系很有帮助;而且,在有的目录下还有Readme 文件,它是对该目录下的文件的一些说明,同样有利于我们对内核源码的理解。
Makefile 重构Linux内核可执行代码的make文件
Documention 有关Linux内核的文档
Arch arch 是内核中与具体CPU和系统结构相关的代码,具体的CPU对应具体的文件夹下的文件。相关的.h文件分别放在include/asm中。在每个CPU的子目录中,又进一步分为boot、mm、kernel、lib等子目录,分别包含与系统引导、内存管理、系统调用等相关的代码。
Drivers 设备的驱动程序。放置系统所有的设备驱动程序;每种驱动程序又各占用一个子目录:如,/block 下为块设备驱动程序,比如ide(ide.c)。
Fs 文件系统,每个子目录分别支持一个特定的文件系统,例如fat和 ext2。还有一些共同的源程序则用于虚拟文件系统。
Include 包含了所有的.h文件。和arch子目录一样,其下都有相应
CPU的子目录,而通用的子目录asm则根据系统的配置 “符号连接”到具体的CPU的专用子目录上。与平台无关的头文件在
include/linux子目录下,与ARM处理器相关的头文件在include/asm-arm子目录下,除此之外,还有通用的子目录linux,net等。
Init Linux内核的这个目录包含核心的初始化代码(注意:不是系统的引导代码),包含两个文件main.c和Version.c。
Ipc Linux内核的进程间的通信管理
Kernel Linux内核的进程管理和进程调度。主要的核心代码,此目录下的文件实现了大多数linux系统的内核函数,其中最重要的文件是sched.c;同样,和体系结构相关的代码在arch/*/kernel中;
Lib 此目录为通用的程序库。
Mm Linux内核的内存管理。这个目录包括所有独立于处理器体系结构的内存管理代码,如页式存储管理内存的分配和释放等。
Net 包含了各种不同网卡和网络的驱动程序。
Scripts 此目录包含用于配置核心的脚本文件。
以下是一个表格,用于概述Linux内核目录结构及其内容:

目录/文件 描述
Makefile 用于重构Linux内核可执行代码的make文件。
Documentation 包含有关Linux内核的文档。
Arch 包含与具体CPU和系统结构相关的代码,每个CPU的子目录下又分为boot、mm、kernel、lib等子目录,分别包含与系统引导、内存管理、系统调用等相关的代码。
Drivers 包含系统所有的设备驱动程序,每种驱动程序又各占用一个子目录,如/block下为块设备驱动程序。
Fs 包含文件系统相关的代码,每个子目录分别支持一个特定的文件系统,例如fat和ext2。
Include 包含所有的.h文件,与平台无关的头文件在include/linux子目录下,与ARM处理器相关的头文件在include/asm-arm子目录下。
Init 包含核心的初始化代码,不是系统的引导代码。
Ipc 包含Linux内核的进程间的通信管理。
Kernel 包含Linux内核的进程管理和进程调度,主要的核心代码。
Lib 包含通用的程序库。
Mm 包含Linux内核的内存管理。
Net 包含各种不同网卡和网络的驱动程序。
Scripts 包含用于配置核心的脚本文件。

2.关于RPMS交叉编译器包

RPMS是一个用于Linux-2.4.18-rmk7-pxa1内核的交叉编译器包,它其中包括交叉编译、汇编、链接、二进制文件转换工具、所需要的库函数等等。所谓交叉编译器就是一种在Redhat Linux操作系统 + X86的体系结构下,编译经过移植的linux操作系统,生成内核,该内核能够在另外一种软硬件环境下运行的编译工具,如linux操作系统 + ARM的体系结构。交叉编译其实就是在一个平台上生成能够在另一个平台上运行的代码。注意这里的平台,实际上包含两个概念:体系结构(Architecture)和操作系统(Operating System)。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。如我们常说的x86 Linux平台实际上是Intel x86体系结构和Linux for x86操作系统的统称;而x86 WinNT平台实际上是Intel x86体系结构和Windows NT for x86操作系统的简称。由于ARM硬件上无法安装我们所需的编译器,只好借助于宿主机,在宿主机上对即将运行在目标机上的应用程序进行编译,生成可在目标机上运行的代码格式,这就是安装交叉编译器真正意义所在。

3. 实现基于linux的应用系统的开发

建立或拥有一个完备的linux开发环境是十分必要的。基于linux操作系统的应用开发环境一般是由目标系统硬件系统和宿主PC机所构成。目标硬件系统(即本项目箱)用于运行操作系统和系统应用软件,而目标硬件系统所用到的操作系统的内核编译、应用程序的开发则需要通过宿主PC机来编译完成。双方之间通过以太网接口建立nfs网络文件系统关系,来调试编译好的驱动或应用程序。当编译、调试通过后,再添加到内核中去。
(1)开发环境构成
目标系统硬件系统:用于运行操作系统和系统应用软件。
宿主PC机:用于编译目标硬件系统所用到的操作系统的内核和应用程序。
网络文件系统(NFS):通过以太网接口建立宿主PC机和目标硬件系统之间的NFS关系,用于调试编译好的驱动或应用程序。
(2)开发流程
在宿主PC机上使用交叉编译器编译内核和应用程序。
将编译好的内核和应用程序通过NFS挂载到目标硬件系统上。
在目标硬件系统上调试和测试。
如果调试通过,将驱动或应用程序添加到内核中。

四、安装过程:

先安装虚拟机VMware

这里可更改安装路径:

一路Next即可

等待安装

安装成功:

重启电脑后打开VMware,并且新建虚拟机



加载镜像文件:

选择操作系统类型:

更改虚拟机安装位置

选择处理器的个数:

内存分配:

选择网络:

总线类型默认:

新建硬盘:

硬盘类型选择IDE:

分配硬盘大小:

选择硬盘文件目录:

配置完成,检查硬件

开始Linux安装:




选择skip跳过


















安装完成:

简述对嵌入式操作系统的认识。写出典型的嵌入式操作系统,并简述其特点。

五、嵌入式操作系统:

5.1 嵌入式操作系统的认识

嵌入式操作系统(Embedded Operating System, EOS)是一种专为嵌入式系统设计的操作系统。嵌入式系统通常是指那些被设计用来执行一项或几项特定功能的计算机系统,它们通常被集成到更大的设备或系统中,如家用电器、汽车电子、工业控制系统、医疗设备等。嵌入式操作系统需要满足以下特点:

  • 资源限制:嵌入式系统通常具有有限的内存和处理能力。
  • 实时性:许多嵌入式系统需要实时响应,即在确定的时间内完成任务。
  • 稳定性与可靠性:嵌入式系统往往需要长时间稳定运行,对可靠性的要求较高。
  • 专用性:嵌入式操作系统往往针对特定应用进行优化,功能较为专一。
  • 可裁剪性:用户可以根据需要选择和配置操作系统的功能,以适应不同的硬件和应用需求。

5.2 典型的嵌入式操作系统及其特点

  1. VxWorks

    • 特点:实时性强,广泛应用于航空航天、军事、工业控制等领域。它提供了丰富的中间件和开发工具,支持多种处理器架构。
  2. 嵌入式Linux

    • 特点:开源免费,社区支持广泛,可定制性强。适用于多种应用场景,包括消费电子、网络设备等。由于其开源特性,用户可以根据需要自由修改和定制内核。
  3. FreeRTOS

    • 特点:轻量级、实时性好,适用于资源受限的微控制器。它是一个开源的实时操作系统内核,支持多种处理器架构,易于移植和使用。
  4. Windows Embedded

    • 特点:微软提供的嵌入式操作系统,界面友好,易于开发。它包括多个版本,如Windows Embedded Compact(原Windows CE)和Windows Embedded Standard(基于Windows XP/7),适用于各种嵌入式设备。
  5. QNX

    • 特点:实时性强,微内核架构,具有良好的稳定性和可靠性。广泛应用于汽车、医疗、工业自动化等领域。QNX提供了丰富的中间件和开发工具。
  6. ThreadX

    • 特点:由Express Logic开发,适用于资源受限的嵌入式系统。它具有快速启动时间、低内存占用和实时性强的特点,广泛应用于消费电子和医疗设备。

这些嵌入式操作系统各有特点,适用于不同的应用场景和硬件平台。选择合适的嵌入式操作系统需要考虑系统的实时性要求、资源限制、开发成本和维护支持等因素。