QNX实时操作系统学习笔记之嵌入式系统(一)
(2011-03-21 08:31:28)
转载
一、开发嵌入式系统概述
1.简介
本节将从整体的角度来介绍开发一个完整的基于Neutrino嵌入式系统的步骤,首先,将会看运行一个Neutrino系统所需要的部件。接下来会看这些部件和他们如何操作,最后,将会学习配置某些部分时要完成的步骤。
从软件的角度,当系统启动时下列流程将会发生:
(嵌入式系统开发是什么1)处理器开始从复位向量执行代码。初始化程序装载(IPL)会将OS镜像装载并传递控制到镜像中的startup程序。
(2)startup程序配置系统并传送控制到neutrino 微内核和进程管理器(procnto)。
(3)procnto模块装载附加的驱动和应用程序。
2.IPL的角
软件执行的第一步便是装载OS镜像。这是由IPL来完成的。
IPL的初始化工作是以最简的方式配置硬件来产生一个允许startup,进而是neutrino微内核程序执行的环境。特别地,这个工作至少包含以下几步:
(1)从复位向量开始执行;
(2)配置存储控制器,这可能会包含配置芯片选择和(或)PCI控制器(Peripheral Component Interconnect,一种由英特尔(Intel)公司1991年推出的用于定义局部总线的标准)。
(3)配置时钟。
(4)设置一个堆栈来允许IPL库执行OS认证和启动(镜像下载、扫描、启动、jump)
3.IPL的热启动和冷启动
IPL有两种类型:热启动和冷启动。热启动IPL是由ROM监视器或BIOS激活,硬件和处理器配置的某些部分已经被启动。
另一方面,冷启动IPL则是在任何部分都没有被配置或初始化——CPU和硬件刚刚被复位。一般来说,在热启动中需要完成的工作都是在冷启动IPL中的子集。
在最后我们将讨论IPL的责任,并描述在镜像的第一个部件启动前全部就绪的状态。根据目标的设计,要完成的步骤可能从0(例如,在一个带有ROM监视器或BIOS的标准平台上运行,并且已经通过disk或network boot完成了IPL热启动;引导ROM已经完成了下面描述的工作)到很多步(例如,一个不带有firmware[泛指直接控制硬件的软件,也指固化在硬件中用来控制硬件的软件,比如BIOS]的嵌入式系统,镜像是在一个特定的硬件中存储)。
最后的状态(镜像的第一个部件开始运行前)具有以下的特性:
(1)存储控制器已经配置为允许系统中的存储进入。
(2)最基本的硬件配置已经完成(例如,芯片选择EPROM的信息已经被程序化)
(3)整个镜像已经被放在线性可寻址的存储空间。
(4)镜像的第一部分,startup,现在应该在RAM中(注意到startup代码相对很小,当startup代码完成后RAM区域将被重新声明)
不管是IPL或BIOS/ROM监控器代码都负责将镜像传送到线性可寻址存储空间。OS镜像必须以一种IPL或ROM监视器代码能够理解的方式开发,以使它能知道该把镜像放在哪里,镜像装载之后应该把控制送到什么地址。
例如,一个IBM PC BIOS系统通常装载一个原始的二进制,然后跳转到第一个地址。其他的系统可能接受ELF格式【 Executable and Linkable Format,可执行连接格式,是UNIX系统实验室(USL)作为应用程序二进制接口(Application Binary Interface,ABI)而开发和发布的。扩展名为elf。】的镜像,用ELF头文件信息来决定镜像和启动地址放置的位置。参考你的硬件资料确定IPL可以接受的镜像格式。
一旦IPL已经装载了镜像,整个镜像已经处于线性可寻址存储空间,控制也被传送到startup程序。此时,IPL已经完成了使命。
4.startup程序的角:
软件执行的第二步是配置处理器和硬件,检测系统资源,启动OS。这些是由startup程序完成的。
当IPL完成了基本的最小配置,使系统到一个startup程序可以运行的状态,startup程序的任务是结束配置。如果IPL检测到不同的资源,它可能与startup程序交流这个信息(这样它就不会重复检测相同的资源)。
为了使neutrino能够尽量可配置,我们已经使startup程序可以编写基本定时器、中断控制器、缓存控制器等等程序。它也可以提供kernel callouts,它们是内核可以调用来执行硬件具体化功能的代码片段。例如,当一个硬件中断被激发,代码的一些片段必须决定中断源,而另一些代码片段则必须能清除中断源。
注意到startup程序不会配置串口波特率之类的东西。它也不会初始化标准周边设备,例如以太网控制器或EIDE硬件disk控制器——这些都留给驱动稍后启动以后来完成。
一旦startup代码初始化了系统,并把系统信息放在系统页(一个内核稍后会查看的专用的存储片)后,startup代码负责将控制传送到neutrino内核和过程管理器,它们将完成最后的装载步骤。
5.startup的责任:
看一下startup代码的完整的任务和流程:
(1)复制并解压镜像,如果必要的话。如果镜像不在RAM中的最终目的地址,startup代码就将它复制到那。如果镜像没有被解压,startup代码会自动解压。
(2)配置硬件。这儿的主要任务是启动能够决定系统配置的最小配置,然后执行系统配置。
(3)决定系统的配置。根据嵌入式系统的特性,可能希望动态地决定startup中的配置,或者(万一是一个深度的嵌入式系统)仅仅是hardcode【指将可变变量用一个固定值来代替的方法】配置信息。
抛开信息源不管,startup代码的配置部分需要储存这个信息到一个定义好的数据结构中,之后,当OS启动时会查看它们。所谓系统页区域,这些数据结构包含以下信息:
存储配置、硬件设备配置、处理器类型、时间。
确定callouts:为了使neutrino内核更加轻便(不仅是对不同的处理器,也是对这些处理器不同的硬件配置),一些callouts必须由startup代码提供。不是所有的callouts都要求你写代码。以下的callouts函数的类由neutrino提供:debug接口、clock/timer接口、中断控制器接口、缓冲控制器接口、电源管理器、miscellaneous(多种多样的,混杂的)。
(4)启动内核。startup的最后一步是启动操作系统。
startup库:QNX支持的处理器和开发板在bsp_working_dir/src/hardware/startup/boards中到,或者是QNX文档、BSP文档,如果使用QNX支持的处理器,将会省掉大量的代码编写工作。如果没有标准的嵌入式系统,可以到最接近的资源,clone合适的功能。
6.Neutrino的角:
软件执行的第三步是启动你想要运行的任何可执行程序。OS通过读取和处理存在startup脚本中的信息来完成这个工作,这些信息是在镜像中保存的一系列命令。
基本上,OS处理startup脚本文件,它们看起来像是shell脚本。在startup脚本文件中,最好是规定好哪些可执行文件将要被启动以及它们的启动顺序,它们运行时的命令行选项等等。
7.硬件因素:
从硬件的角度来看,以下的部分组成了系统:处理器、初始化和配置信息的源文件、存储媒介、I/O设备。
处理器的选择:支持的处理器家族有ARM(包括XScale)、MIPS、PowerPC、SH-4、x86.
初始化和配置信息的源文件:当处理器启动(重启)时,必须能够执行指令。这是通过把一些不挥发的存储媒介放在处理器复位向量完成的。防燃,可以选择由谁来提供这个特殊的软件片:
QNX软件系统——选择了一个标准的受支持硬件平台。
第三方——一个BIOS或者ROM监视器或者
你——一个定制的IPL程序。
通常来说,一个最简单的开发系统就是做最少的工作量。如果你已经这样完成了工作,说明你用的是标准的受支持的硬件平台,这样只需要你完成少量的工作。如果第三方只提供BIOS或ROM监视器,你的任务就要增加了,需要写一个软件来启动OS,这就是之前提到的热启动,因为系统已经热身完成,各种设备已经被配置并初始化。如果是你定制一个IPL,你的任务就更多了,要处理硬件的配置。这是冷启动,因为你要做所有的初始化和配置工作。
文件系统的选择:已经弄清楚如何启动系统,现在仍然需要决定系统的存储能力:
不需要;只读;读写不长久的;读写持久。
如果你不需要任何附加的存储器(也就是说你的系统完全是自包含而且运行以后不需要进入其他文件),到这你的工作就完成了。
如果需要只读存储器,最简单的文件系统脚本要求进入只读文件。没有工作需要你完成,OS自己会提供这个功能,只需要把你想执行或进入的问津放入镜像,OS便可以进入他们。
如果需要写文件,存储器也不必持久(也就是说它不需要经受复位),这个工作OS也会帮你完成。
Neutrino允许系统中的RAM被用作RAM-disk,没有任何附加的代码或设备驱动。这个RAM-disk通过进程管理器完整,只需要建立一个进程管理器链接(用ln命令)。例如,要安装/tmp路径作为RAM-disk,执行下列的命令:
ln -Ps /dev/shmem/tmp
或者将下面一行放在buildfile中:[type=link] /tmp=/dev/shmem
这条指令引导进程管理器把任何文件安置在/tmp下,并且使它们能够共享存储子系统。例如/p成为对/dev/p的请求。
如果是要求存储器必须能够经受掉电或处理器复位,就需要运行一个附加的驱动。我们提供了这些文件系统的类:flash文件系统、rotating(循环)disk文件系统、网络文件系统。以上这些文件系统都需要附加的驱动。附录的sample buildfiles讲述了如何建立这些文件系统驱动。
flash文件系统和媒介:flash驱动可以接口到全组合总线宽度(8,16,32位)的flsh存储设备(启动程序块块和常规)和插入因素。
循环媒介和文件系统:目前neutrino支持几种文件系统,包括DOS,Linux,Macintosh,HFS,HFS Plus,Windows
NT,QNX4,power-safe,universal disk format(UDF)等等。许多面向程序块的设备驱动可以获得。
网络媒介和文件系统:可以使某个设备中的文件爱你系统进入到别的设备的文件系统中。
I/O设备:串/并行口;网络接口;数据获取/产生;多媒体。
在开发时,想法的证明应该是基于以下问题:
1.需要多少内存?
2.CPU需要的运行速度?
3.现有的标准硬件是否能满足?
本节将从整体的角度来介绍开发一个完整的基于Neutrino嵌入式系统的步骤,首先,将会看运行一个Neutrino系统所需要的部件。接下来会看这些部件和他们如何操作,最后,将会学习配置某些部分时要完成的步骤。
从软件的角度,当系统启动时下列流程将会发生:
(嵌入式系统开发是什么1)处理器开始从复位向量执行代码。初始化程序装载(IPL)会将OS镜像装载并传递控制到镜像中的startup程序。
(2)startup程序配置系统并传送控制到neutrino 微内核和进程管理器(procnto)。
(3)procnto模块装载附加的驱动和应用程序。
2.IPL的角
软件执行的第一步便是装载OS镜像。这是由IPL来完成的。
IPL的初始化工作是以最简的方式配置硬件来产生一个允许startup,进而是neutrino微内核程序执行的环境。特别地,这个工作至少包含以下几步:
(1)从复位向量开始执行;
(2)配置存储控制器,这可能会包含配置芯片选择和(或)PCI控制器(Peripheral Component Interconnect,一种由英特尔(Intel)公司1991年推出的用于定义局部总线的标准)。
(3)配置时钟。
(4)设置一个堆栈来允许IPL库执行OS认证和启动(镜像下载、扫描、启动、jump)
3.IPL的热启动和冷启动
IPL有两种类型:热启动和冷启动。热启动IPL是由ROM监视器或BIOS激活,硬件和处理器配置的某些部分已经被启动。
另一方面,冷启动IPL则是在任何部分都没有被配置或初始化——CPU和硬件刚刚被复位。一般来说,在热启动中需要完成的工作都是在冷启动IPL中的子集。
在最后我们将讨论IPL的责任,并描述在镜像的第一个部件启动前全部就绪的状态。根据目标的设计,要完成的步骤可能从0(例如,在一个带有ROM监视器或BIOS的标准平台上运行,并且已经通过disk或network boot完成了IPL热启动;引导ROM已经完成了下面描述的工作)到很多步(例如,一个不带有firmware[泛指直接控制硬件的软件,也指固化在硬件中用来控制硬件的软件,比如BIOS]的嵌入式系统,镜像是在一个特定的硬件中存储)。
最后的状态(镜像的第一个部件开始运行前)具有以下的特性:
(1)存储控制器已经配置为允许系统中的存储进入。
(2)最基本的硬件配置已经完成(例如,芯片选择EPROM的信息已经被程序化)
(3)整个镜像已经被放在线性可寻址的存储空间。
(4)镜像的第一部分,startup,现在应该在RAM中(注意到startup代码相对很小,当startup代码完成后RAM区域将被重新声明)
不管是IPL或BIOS/ROM监控器代码都负责将镜像传送到线性可寻址存储空间。OS镜像必须以一种IPL或ROM监视器代码能够理解的方式开发,以使它能知道该把镜像放在哪里,镜像装载之后应该把控制送到什么地址。
例如,一个IBM PC BIOS系统通常装载一个原始的二进制,然后跳转到第一个地址。其他的系统可能接受ELF格式【 Executable and Linkable Format,可执行连接格式,是UNIX系统实验室(USL)作为应用程序二进制接口(Application Binary Interface,ABI)而开发和发布的。扩展名为elf。】的镜像,用ELF头文件信息来决定镜像和启动地址放置的位置。参考你的硬件资料确定IPL可以接受的镜像格式。
一旦IPL已经装载了镜像,整个镜像已经处于线性可寻址存储空间,控制也被传送到startup程序。此时,IPL已经完成了使命。
4.startup程序的角:
软件执行的第二步是配置处理器和硬件,检测系统资源,启动OS。这些是由startup程序完成的。
当IPL完成了基本的最小配置,使系统到一个startup程序可以运行的状态,startup程序的任务是结束配置。如果IPL检测到不同的资源,它可能与startup程序交流这个信息(这样它就不会重复检测相同的资源)。
为了使neutrino能够尽量可配置,我们已经使startup程序可以编写基本定时器、中断控制器、缓存控制器等等程序。它也可以提供kernel callouts,它们是内核可以调用来执行硬件具体化功能的代码片段。例如,当一个硬件中断被激发,代码的一些片段必须决定中断源,而另一些代码片段则必须能清除中断源。
注意到startup程序不会配置串口波特率之类的东西。它也不会初始化标准周边设备,例如以太网控制器或EIDE硬件disk控制器——这些都留给驱动稍后启动以后来完成。
一旦startup代码初始化了系统,并把系统信息放在系统页(一个内核稍后会查看的专用的存储片)后,startup代码负责将控制传送到neutrino内核和过程管理器,它们将完成最后的装载步骤。
5.startup的责任:
看一下startup代码的完整的任务和流程:
(1)复制并解压镜像,如果必要的话。如果镜像不在RAM中的最终目的地址,startup代码就将它复制到那。如果镜像没有被解压,startup代码会自动解压。
(2)配置硬件。这儿的主要任务是启动能够决定系统配置的最小配置,然后执行系统配置。
(3)决定系统的配置。根据嵌入式系统的特性,可能希望动态地决定startup中的配置,或者(万一是一个深度的嵌入式系统)仅仅是hardcode【指将可变变量用一个固定值来代替的方法】配置信息。
抛开信息源不管,startup代码的配置部分需要储存这个信息到一个定义好的数据结构中,之后,当OS启动时会查看它们。所谓系统页区域,这些数据结构包含以下信息:
存储配置、硬件设备配置、处理器类型、时间。
确定callouts:为了使neutrino内核更加轻便(不仅是对不同的处理器,也是对这些处理器不同的硬件配置),一些callouts必须由startup代码提供。不是所有的callouts都要求你写代码。以下的callouts函数的类由neutrino提供:debug接口、clock/timer接口、中断控制器接口、缓冲控制器接口、电源管理器、miscellaneous(多种多样的,混杂的)。
(4)启动内核。startup的最后一步是启动操作系统。
startup库:QNX支持的处理器和开发板在bsp_working_dir/src/hardware/startup/boards中到,或者是QNX文档、BSP文档,如果使用QNX支持的处理器,将会省掉大量的代码编写工作。如果没有标准的嵌入式系统,可以到最接近的资源,clone合适的功能。
6.Neutrino的角:
软件执行的第三步是启动你想要运行的任何可执行程序。OS通过读取和处理存在startup脚本中的信息来完成这个工作,这些信息是在镜像中保存的一系列命令。
基本上,OS处理startup脚本文件,它们看起来像是shell脚本。在startup脚本文件中,最好是规定好哪些可执行文件将要被启动以及它们的启动顺序,它们运行时的命令行选项等等。
7.硬件因素:
从硬件的角度来看,以下的部分组成了系统:处理器、初始化和配置信息的源文件、存储媒介、I/O设备。
处理器的选择:支持的处理器家族有ARM(包括XScale)、MIPS、PowerPC、SH-4、x86.
初始化和配置信息的源文件:当处理器启动(重启)时,必须能够执行指令。这是通过把一些不挥发的存储媒介放在处理器复位向量完成的。防燃,可以选择由谁来提供这个特殊的软件片:
QNX软件系统——选择了一个标准的受支持硬件平台。
第三方——一个BIOS或者ROM监视器或者
你——一个定制的IPL程序。
通常来说,一个最简单的开发系统就是做最少的工作量。如果你已经这样完成了工作,说明你用的是标准的受支持的硬件平台,这样只需要你完成少量的工作。如果第三方只提供BIOS或ROM监视器,你的任务就要增加了,需要写一个软件来启动OS,这就是之前提到的热启动,因为系统已经热身完成,各种设备已经被配置并初始化。如果是你定制一个IPL,你的任务就更多了,要处理硬件的配置。这是冷启动,因为你要做所有的初始化和配置工作。
文件系统的选择:已经弄清楚如何启动系统,现在仍然需要决定系统的存储能力:
不需要;只读;读写不长久的;读写持久。
如果你不需要任何附加的存储器(也就是说你的系统完全是自包含而且运行以后不需要进入其他文件),到这你的工作就完成了。
如果需要只读存储器,最简单的文件系统脚本要求进入只读文件。没有工作需要你完成,OS自己会提供这个功能,只需要把你想执行或进入的问津放入镜像,OS便可以进入他们。
如果需要写文件,存储器也不必持久(也就是说它不需要经受复位),这个工作OS也会帮你完成。
Neutrino允许系统中的RAM被用作RAM-disk,没有任何附加的代码或设备驱动。这个RAM-disk通过进程管理器完整,只需要建立一个进程管理器链接(用ln命令)。例如,要安装/tmp路径作为RAM-disk,执行下列的命令:
ln -Ps /dev/shmem/tmp
或者将下面一行放在buildfile中:[type=link] /tmp=/dev/shmem
这条指令引导进程管理器把任何文件安置在/tmp下,并且使它们能够共享存储子系统。例如/p成为对/dev/p的请求。
如果是要求存储器必须能够经受掉电或处理器复位,就需要运行一个附加的驱动。我们提供了这些文件系统的类:flash文件系统、rotating(循环)disk文件系统、网络文件系统。以上这些文件系统都需要附加的驱动。附录的sample buildfiles讲述了如何建立这些文件系统驱动。
flash文件系统和媒介:flash驱动可以接口到全组合总线宽度(8,16,32位)的flsh存储设备(启动程序块块和常规)和插入因素。
循环媒介和文件系统:目前neutrino支持几种文件系统,包括DOS,Linux,Macintosh,HFS,HFS Plus,Windows
NT,QNX4,power-safe,universal disk format(UDF)等等。许多面向程序块的设备驱动可以获得。
网络媒介和文件系统:可以使某个设备中的文件爱你系统进入到别的设备的文件系统中。
I/O设备:串/并行口;网络接口;数据获取/产生;多媒体。
在开发时,想法的证明应该是基于以下问题:
1.需要多少内存?
2.CPU需要的运行速度?
3.现有的标准硬件是否能满足?
硬件设计:参考附录system design consideration
QNX实时操作系统学习笔记之嵌入式系统(二)
(2011-03-21 09:00:19)
转载
一个BSP一般包括:IPL,startup,默认的buildfile,网络支持,具体开发板设备驱动,系统管理器,公用工程等。一般情况下BSP是以源代码的形式给出的,除非对源代码有限制的,只会以二进制形式给出。
一般把安装BSP的路径成为bsp_working_dir,包含以下子路径:src,prebuit,install,images.
—————————————————————————————————————————————————
images路径是最终boot images存放的地址,它包含了运行image(s)的makefile。这个路径中的其他文件包括了custombuildfiles(for flash等),EFS buildfiles,IPL build scripts。
prebuilt路径包含prebuilt二进制文件以及和BSP一起的头文件。在BSP被build之前,prebuilt路径中的所有文件都被复制到install路径中,包括路径结构。
一般把安装BSP的路径成为bsp_working_dir,包含以下子路径:src,prebuit,install,images.
—————————————————————————————————————————————————
images路径是最终boot images存放的地址,它包含了运行image(s)的makefile。这个路径中的其他文件包括了custombuildfiles(for flash等),EFS buildfiles,IPL build scripts。
prebuilt路径包含prebuilt二进制文件以及和BSP一起的头文件。在BSP被build之前,prebuilt路径中的所有文件都被复制到install路径中,包括路径结构。
install路径在BSPbuild过程的开始得到安置,prebuilt中所有的文件都被复制,所有产生的二进制文件在compile的同时都被安装到这。当mikifs执行的时候,install路径中的文件首先被使用。
——————————————————————————————————————————————-——
以上部分是在使用command来编译BSP的时候需要用的。
将OS镜像下载到开发板:
——————————————————————————————————————————————-——
以上部分是在使用command来编译BSP的时候需要用的。
将OS镜像下载到开发板:
编译好OS镜像后,就要将它下载到开发板。可以用IDE通过串口将镜像下载,或者用TFTP网络接口,
如果开发板没有ROM监视器,可能就不能使用IDE的下载功能。可以使用别的方式下载,例如JTAGflash文件系统:flash文件系统驱动在NORflash存储设备上补充一个POSIX-like文件系统。对于不同的嵌入式系统硬件例如PCMCIA存储卡,有很多种文件系统驱动的版本。命名方式是devf-系统名。例如devf-800fads驱动就是800FADS PowerPC评估板的驱动。
flash文件系统驱动支持一种以上的逻辑闪存驱动。每一种逻辑驱动成为一个socket,由相邻的同类闪存区域组成。例如,在一个在不同的地址中包含两种类型的闪存设备的系统,一个是用来启动镜像,另一个是flash文件系统,每一个闪存设备将会出现在不同的socket中。每个socket可能被分为一个或多个分区。QNX支持两种分区,裸分区(raw partitions)和flash文件系统分区。
裸分区是socket中不包含flash文件系统的任意分区,flash文件系统驱动不会识别除了flash文件系统的任何文件系统类型,一个裸分区可能包含了一个镜像文件系统或一些应用专用的数据。
flash文件系统分区包含了POSIX-like闪存文件系统,它用QNX专有的格式将文件系统数据保存在flash设备中。这个格式和MicrosoftFFS2或PCMCIA FTL规格是不兼容的。
flash文件系统允许文件和路径随意创建删除。它支持所有标准的POSIX公用工程,如ls,mkdir,rm,ln,mv,cp,也有一些用于管理flash文件系统的QNX Neutrino公用工程。
flashctl:擦除,格式化和列出flash分区。
deflate:压缩flash文件系统的文件。
mkefs:创建flash文件系统镜像文件。
裸分区是socket中不包含flash文件系统的任意分区,flash文件系统驱动不会识别除了flash文件系统的任何文件系统类型,一个裸分区可能包含了一个镜像文件系统或一些应用专用的数据。
flash文件系统分区包含了POSIX-like闪存文件系统,它用QNX专有的格式将文件系统数据保存在flash设备中。这个格式和MicrosoftFFS2或PCMCIA FTL规格是不兼容的。
flash文件系统允许文件和路径随意创建删除。它支持所有标准的POSIX公用工程,如ls,mkdir,rm,ln,mv,cp,也有一些用于管理flash文件系统的QNX Neutrino公用工程。
flashctl:擦除,格式化和列出flash分区。
deflate:压缩flash文件系统的文件。
mkefs:创建flash文件系统镜像文件。
flash文件系统支持所有标准的POSXI I/O函数,例如open()close()read()write().特殊的功能也是被支持的,例如擦除使用devctl().
flash文件系统源:每一个BSP包含了合适的flash文件系统驱动的二进制和源代码,但是QNX软件开发平台包含了相关了头文件和库文件。
如何创建一个分区:
启动flash文件系统驱动;
擦除整个flash;
格式化分区;
slay(杀死,杀戮)flash文件系统驱动;
重启flash文件系统驱动。
以下是Renesas Biscayne 开发板的例子,它可以从DMON或flash启动:
1.要从DMON开始启动,输入以下的命令启动flash文件系统驱动:
devf-generic -s0xe800000,32M &
2.要从flash启动,输入以下命令:
devf-generic -s0x0,32M
flash文件系统源:每一个BSP包含了合适的flash文件系统驱动的二进制和源代码,但是QNX软件开发平台包含了相关了头文件和库文件。
如何创建一个分区:
启动flash文件系统驱动;
擦除整个flash;
格式化分区;
slay(杀死,杀戮)flash文件系统驱动;
重启flash文件系统驱动。
以下是Renesas Biscayne 开发板的例子,它可以从DMON或flash启动:
1.要从DMON开始启动,输入以下的命令启动flash文件系统驱动:
devf-generic -s0xe800000,32M &
2.要从flash启动,输入以下命令:
devf-generic -s0x0,32M
现在应该可以看到一个fs0p0入口在/dev下面。
3.要为分区准备区域,必须擦除整个flash。输入以下命令:
flashctl -p/dev/fs0 -ev
4.格式化分区,输入以下命令:
flashctl -p/dev/fs0p0 -f
5.slay flash文件系统驱动:
slay devf-generic
6.最后,重启驱动:devf-generic &
现在,可以看到以下入口:
/dev/fs0p0 OS镜像(32MB)
/dev/fs0p1 flash文件系统分区(32MB)
3.要为分区准备区域,必须擦除整个flash。输入以下命令:
flashctl -p/dev/fs0 -ev
4.格式化分区,输入以下命令:
flashctl -p/dev/fs0p0 -f
5.slay flash文件系统驱动:
slay devf-generic
6.最后,重启驱动:devf-generic &
现在,可以看到以下入口:
/dev/fs0p0 OS镜像(32MB)
/dev/fs0p1 flash文件系统分区(32MB)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论