嵌入式Linux的分析及其在LED异步卡中的应用(3)

2019-06-11 22:49

第二章uc“∞x及其开发环境的建立

i n第二章uCLux及其开发环境的建立

2.1 uCLinu盖的特点

在ucLinux这个英文单词中u表示Micro,小的意思,C表示control,控制的意思,所以uCLinux 就是Micr0—contro卜Linux,字面上的理解就是’针对微控制领域而设计的Linux系统。。ucLinux脱 胎于标准Linux,它继承了标准Linux的诸多优点,如支持多种文件系统,强大的网络功能等,但 同时为了适应嵌入式应用环境的要求,在很多方面区别于标准Linux。特别是在小型化方面。

2.1.1 uCLinux的小型化 具体的来说,ucLinⅡ是通过以下几种方

法来达到小型化的目的的1

1.

重新编译内核:Linux内核采用模块化的设计,即很多功能块可以独立的加上或卸载,

开发人员在设计内核时把这些内核模块作为可选的选项,可以在编译系统内核时指定。 因此这是一种较通用的做法.即在编译时仔细的选择所需要的功能支持模块,同时删 除不需要的功能。通过对内核的重新配置,可以使系统运行所需要的内核显著减小,

从而缩减资源使用量。

2.

ucLinux的根文件系统采用r∞fs文件系统:这种文件系统相对于标准的Linux采用 的ext2文件系统要求更少的空间。空间的节约来自于两个方面.首先内核支持roⅢfs 文件系统比支持ext2文件系统需要更少的代码,其次romfs文件系统相对简单,在建 立文件系统超级块(superblock)需要更少的存储空间。不足之处在于Romfs文件系 统不支持动态擦写保存,即对于系统需要动态保存数据的要求无法满足,当然这种中 要求可以采取其它办法来解决,例如采用虚拟r∞盘的方法进行处理(r∞盘将采用 ext2文件系统)等。

重写应用程序库:ucLinux小型化的另一个做法是重写了应用程序库,相对于标准

3.

Linux的越来越大且越来越全的glibc库,uclibc对libc做了精简。ucLinux对用户 程序采用静态连接的形式,这种做法会使应用程序变大。但是基于ucLinux内存管理 (下面有讲解)的问题,不得不这样做,同时这种做法也更接近于通常嵌入式系统的 做法。

2.1.2ucLinux在内存管理上的特点

着重需要提到的是,ucLinux与标准Linux最大也是最显著的区别就在于内存管理上,这也是 在uCLinux中能够引发一些标准Linux所不会出现的问题的根本原因!下面具体来讨论两者在内存

管理的问题!

标准的Linux采用的是虚拟存储器技术,虚拟存储器由存储器管理机制及一个大容量的快速硬

盘存储器支持。为了支持虚拟存储管理器的管理,Linux系统采用分页(paging)的方式来载入进 程。分页即是把实际的存储器(硬盘和内存)分割为相同大小的段,例如每个段1024个字节,这样 1024个字节大小的段便称为一个页面(page)。下面是虚拟存储器技术实现的简介:当一个程序在 运行之前,没有必要全部装入内存,而是仅将那些当前要运行的那些部分页面或段装入内存运行 (copy-on—"ite).其余暂时留在硬盘上程序运行时如果它所要访问的页(段)已存在,则程序继 续运行,如果发现不存在的页(段),操作系统将产生一个页错误(page f¨lt),这个错误导致操

东南大学硕士学位论文

作系统把需要运行的部分加载到内存中。必要时操作系统还可以把不需要的内存页(段)交换到磁 盘上。利用这样的方式管理存储器,便可把一个进程所需要用到的存储器以化整为零的方式,视需 求分批载入,而核心程序则凭借属于每个页面的页码来完成寻址各个存储器区段的工作。

这其中有个关键的环节.即内存和硬盘之间的数据传输,这就需要内存管理单元(删)的参与, 删的功能可以简单地说为把虚拟地址映射为物理地址。删一般有一组寄存器来标识当前运行的

进程的转换表。在当前进程将CPu放弃给另一个进程时(一次上下文切换),内核通过指向新进程地

址转换表的指针加载这些寄存器。删寄存器是有特权的,只能在内核态才能访问。这就保证了一

个进程只能访问自己用户空间内的地址。而不会访问和修改其它进程的空间。这样通过赋予每个任 务不同的虚拟一物理地址转换映射,支持不同任务之间的保护。

所以,标准Linux在内存管理上采用的虚拟存储器技术是针对有内存管理单元的处理器.这种 设计的好处也是显而易见的,它至少可以实现以下几个功能:运行比内存还要大的程序,理想情况 下应该可以运行任意大小的程序;可以运行只加载了部分的程序,缩短了程序启动的时问;可以使 多个程序同时驻留在内存中提高cPu的利用率;可以运行重定位程序。即程序可以放于内存中的任 何一处.而且可以在执行过程中移动:写机器无关的代码,程序不必事先约定机器的配置情况;减 轻程序员分配和管理内存资源的负担;可以进行共享一例如,如果两个进程运行同一个程序.它们 应该可以共享程序代码的同一个副本;提供内存保护,进程不能以非授权方式访问或修改页面,内 核保护单个进程的数据和代码以防止其它进程修改它们,否则,用户程序可能会偶然(或恶意)的 破坏内核或其它用户程序。当然,虚存系统并不是没有代价的。内存管理需要地址转换表和其他一 些数据结构,留给程序的内存减少了。地址转换增加了每一条指令的执行时问,而对于有额外内存 操作的指令会更严重。当进程访问不在内存的页面时,系统发生失效。系统处理该失效。并将页面 加载到内存中,这需要极耗时间的磁盘I/0操作。总之内存管理活动占用了相当一部分cpu时间(在 较忙的系统中大约占10%)。

而ucLinux采用的是实存储器管理策略,保留了存储器的分页管理技术,这是针对没有内存管

理单元(删)的设计。这种实存储器管理策略具体体现在下列三个方面:一是ucLinux系统对于内

存的访问是直接的,(它对地址的访问不需要经过舢。而是直接送到地址线上输出)。所有程序中

访问的地址都是实际的物理地址;二是系统对内存空间没有保护(这实际上是很多嵌入式系统的特 点),各个进程实际上共享一个运行空间(没有独立的地址转换表);三是一个进程在执行前,系统 必须为进程分配足够的连续地址空间,然后全部载入主存储器的连续空间中。与标准Linux相比较 而言.标准Linux系统在分配内存时没有必要保证实际物理存储空间是连续的,而只要保证虚存地 址空间连续就可以了。而ucLinux系统必须为进程分配足够的连续地址空间,然后全部载入主存储 器的连续空间中;另外一个方面ucLinux的程序加载地址与预期(1d文件中指出的)通常都不相同, 这样relocation过程就是必须的。此外uCLinux的磁盘交换空间也是无法使用的,系统执行时如果 缺少内存将无法通过磁盘交换来得到改善。

ucLinux的这种基于实存储器管理策略带来很多不便,首先从易用性上讲,uCLinux的内存管理 是一种倒退,退回了到了IJNIX早期或是Dos系统时代。开发人员不得不参与系统的内存管理。从编 译内核开始,开发人员必须告诉系统这块开发板到底拥有多少的内存(假如你欺骗了系统,将出现 意想不到的错误),从而系统将在启动的初始化阶段对内存进行分页,并且标记已使用的和未使用的 内存。系统将在运行应用时使用这些分页内存。其次从硬件要求上讲,由于应用程序加载时必须分

配连续的地址空间,而针对不同硬件平台的可一次成块(连续地址)分配内存大小限制是不同(有

的处理器没有这样的限制),所以开发人员在开发应用程序时必须考虑内存的分配情况并关注应用程 序需要运行空间的大小。同时由于用户程序同内核以及其它用户程序在一个地址空间,程序开发时 要保证不侵犯其它程序的地址空间,以使得程序不至于破坏系统的正常工作,或导致其它程序的运 行异常。另外从内存访问角度来看,开发人员的权利增大了(开发人员在编程时可以访问任意的地 址空间),但与此同时系统的安全性也大为下降。

从以上几点看出,ucLinux对内存管理的减少也就给开发人员提出了更高的要求。但应该讲这 是嵌入式系统的普遍选择,因为在嵌入式设备中,由于成本等敏感因素的影响,许多场合采用不带

第二章ucIj眦及其开发环境的建立 有MMU的处理器。这决定了系统没有足够的硬件支持实现虚拟存储

管理技术。从嵌入式设备实现的 功能来看,嵌入式设备通常在某一特定的环境下运行,只要实现

特定的功能,其功能相对简单,内

存管理的要求完全可以由开发人员考虑。

2.2 Hit001开发工具

要实现ucLin“在某个系统中的应用,建立一个良好的开发环境是必不可少的!就目前来讲, 获得ucLinux的开发环境不外乎两种情况:一是购买商家发行的套件;二是利用网上资源自己组建。 本课题在这两个方面都有涉及。商家发行的套件是实验室购买的由Mic酏ek公司开发的新一代ARM 方面的开发工具HitoolforARM(Suppoftuclinux):下面对其作一些简介,详细情况请参考相关手册。

2.2.1 Hit001开发工具的特点

HioDolfbrAllM(Supportud.mu)与传统开发方式相比,其优势体现在以下几个方面:一。Hio∞l^M ARM(SupportudinⅡ)的所有开发都可以在windows平台下进行,这是其最突出也是比较吸引用户的 特点。这样就不需要很熟悉Unllx的平台命令及桌面系统的使用(当然完全不学是不可能的.因为 在应用开发过程中会涉及一些常用的命令),对于不熟悉IjnⅡ操作系统使用的开发者来说可以节省 时间和精力。而传统方式一般都是基于unll)【平台的。二,前者集成了完整的内核,编译器,而后 者还需寻找Gcc编译器,并要学习其复杂的设定来配置。三,前者可以直接在windows下进行内核 配置,裁减,编译和调试,而后者要自己配置和裁减ⅡnⅡ内核,寻找GDB或类似的开发工具,学 习其复杂的操作。四,前者提供在线烧入Fl∞h RoM,而后者必须自己编写相应的软件。五,程序

forARM调试方面,这也是开发者很看重的方面。Hi000lsupp嘣u锄n“可调试ucIjnIlx的内核,用

户可以看到uaj¨x的内核并可调试,可以自己裁减或修改内核,所以是内核级调试器;同时也可以 调试用户的自己的任务,可以看到所有的任务的信息,所以也是任务级调试器。这些调试是通过内置 MDB,直接通过网络或串口调试程序。而传统的在Linu平台下的开发方式无法调试ua血H的内 核,而在调试应用程序时通常只能用打印消息的方式,即通过串口输出需要查看的信息。

6皤ARM下面介绍一下Hi☆00llajnIlx调试的具体特点。首先起提供了直观的用户界面, S叩ponlisual swin32多线程应用程序,类似MSvtudio的用户界面,同时内置源程序编辑器(对于不同的 语法显示相应的颜色),可在调试过程中修改源文件,支持多文件查找,编辑程序比较方便。其次, 提供了高级的调试功能。具有项目管理功能,用户可以项目为基础存储调试环境:提供了多种仿真

intoc功能,如Go,FreeRun,Restart,Reset。stepinto,stepover,stepout.stepontinuously, utcontinuouslstep oy,goto cursor,90 to,jIllnp to支持断点记数,条件断点,查看点等;可 以把存储器和寄存器作为变量查看;变量即时显示;支持以s—Record。Binary和Disass∞bly格式 上载或下载至存储器空间支持源程序,反汇编程序和混合窗口显示;如果用户熟悉常用的软件开发

工具如vc等,对IIibool缸ARMsupportuajnux开发环境上手就比较容易。

2.2.2 Hit001开发工具的调试功能介绍

MaIc曲呔公司给碰tD0lRjnllx配套了两种仿真调试功能:即软件仿真和硬件 ”AIu“supportu仿真。软件仿真模拟了目标硬件在您的主机上的实际或理论的操作,这样,您就无需硬件或您的主

机不必与目标硬件连接便可进行调试。而硬件仿真器机是指主机和目标硬件之间连接有仿真器调试 硬件,仿真器控制主机和目标系统的通信,这样调试时您就可以不占用目标系统的资源了。这里 Micetek公司提供的是两种J1AG仿真器,一是并口到J1.AG口的简易仿真器,只能支持ARM7系列

的a,U:二是J删仿真器,可以通过网络或串口的连接,支持ARM7和ARM9系列的CPU,在使

用网络连接时,还提供了高速檫写n“h存储器的功能。

东南大学硕士学位论文

同时在开发套件中,还提供了裁减并测试过的ucLinll】【全部原代码,原代码中包括内核,文件系 统。及针对该公司推出的不同型号的开发板所写的接口驱动程序,如网络,usB和语音等。这些源 码给开发者提供了便利,缩短了产品的开发周期1

2.3本课题中使用的另一开发环境的组建

2.3.1商业开发环境的不便

商业性的开发环境在功能和技术支持上都是比较吸引用户的,但其价格成本也是用户不得不顾

fbrARM虑的!同时商业软件的一些限制使得开发过程中存在不便,以HitoolCnⅡⅡ为例, Supponu首先因为需要加密狗存在,一套软件不能同时多人使用。给实验室里的学习开发带来了不便。其次, 其ucIjnux内核版本不能给用户及时更新,而网上下载的又不能直接使用。所以,在本课题进行中, 参考一些资料。自己动手组建开发环境。

2.3.2自己组建开发环境的具体步骤

具体步骤如下: 第一步:准备主机平台:

即需要linux操作系统,本人在主机上安装了reallat9.0,具体安装过程参见相关资料。 第二步:准备内核原代码和交叉编译工具:

ucLinⅡ的原代码可以到ucLinux的官方网站上(http://ww.ucliMx.org)下载,随 着标准Linu】【内核的升级,该网站也不断推出新版本的ucLinIlx内核版本,同时还有某些硬 件体系的针对型版本。即无需移植!因为没有针对本课题使用的s∞sun944肋x的ucLinux版 本,故选用了相对接近的s∞sun酿510的ucLinux版本,即ucLinux—dist一20030522.tar.gz 压缩包,然后用以下命令解压内核源码包:t”xzfucLinux—S∞sung_20020522.tar.gz, 这样就产生ucLinux-dist子目录,所有的内核源码都在此目录下。 有了内核源代码,还要根据目标平台到上述网站下载交叉编译器。交叉编译器的作用是 实现在主机上编译而在目标平台上运行的代码的生成。在本课题中。下载的交叉编译器是 arm_elf_t00ls一20030314.sh压缩包,该压缩包包含了内核代码和应用程序编译,连接以及 调试用的大部分工具,例如C编译器8m—elf_gcc,连接器arm-elf-1d,目标格式工具geⅡromfs 和elf2flt等。接下来需要安装交叉编译器,即用下列命令:sh arm—elf_t001s一20030314.sh,这样就会自动在/usr/10cal/bin目录下建立整套的A跚的ELF 交叉编译器工具。

第三步:配置和编译内核:

有了源码和交叉编译器就可以开始配置和编译内核了。下在解压源码时生成的 uCLinu】【一dist目录下用命令mkemnuconfig开始配置内核: 首先在弹出的一个对话框中

latform 单击Target PSelection,进入顶级配置界面,具

体如下:

[Target P1atfo瑚Selection]

vendor/product:即厂商/产品,ucLinux支持很多厂商的标准评估板,可以根据自己的 实际情况进行选择,这里暂时选择s栅sun94510;

KenlelVersion:内核版本,有两个版本可以选择,1inux吃.0.x和1inux一2.4.x,这里 选择后者;

Libc Version:库函数的版本,有uclibc和uc一1ibc两种库函数,前者内容更丰富,支

10

第二章ua抽u及其开发环境的建立

持多线程,但选择后者编译生成的内核相对小了很多,这里暂时选择后者。

ll settings:打上Y标识后,表示选择该项,即表示在mke调用 []Default auCLinux—dist/vendors/下相应的微处理器的默认配置文件来设置所有的选项,因为选择该项

后,以前的选择将丢失,故一般打上N表示不选。

[]Customize Kernel settings:自定义内核,一般选择该项。

endor/user S口Cust0Ⅲize Vettings:自定义用户程序和库函数设置。

endor Sefault V[]update Dettings:更新厂家默认设置,一般不选。

nd exit,如果顶级设置中cust∞izeKernel s顶级配置完成后,选择save aetting,则接下来进入KernelconfigIlration,否则跳过该配置.如果对内核配置不熟s 选择了Y

悉, 那省事的办法就是不做改动,选择默认设置。

ndE内核配置完成后选择Saveaxit。如果项级设置中CustomizeVendor/UserSettings 选择了Y,则接下来进入Applicationconfiguration,否则跳过该配置,如果对系统应用配 nd Exit。 置不熟悉,同样省事的办法就是不做改动,选择默认设置。然后选择Savea配置完后,按顺序执行以下命令进行编译:

make dep;

kmake clean: melakib-0nly; me user.-only; ake romfs: make image; make。

在执行mkeiⅢage时会出现错误报告,可忽略继续执行下面的命令。这样当Ⅲake命令 执行完后,在uCLin“一dist/i∞ges目录中生成三个新文件:r∞fs.iⅢg;image.r铀: imge.r∞;r∞fs.iⅢg是文件系统的二进制文件,iaⅢge.r∞文件是未经压缩的ucLinux系 统文件,把它拷贝到内存中就可以直接从入口运行了,而ia唱e.r∞文件是压缩的ucLinux 系统文件.把它烧录在作为启动的flash芯片中,上电后i∞ge.rom就通过内置的引导程序 启动ucLinux,需要注意的是,这里生成的ucLi¨x是s∞sun94510版本的。

2.4 ucLinux的移植

要生成s∞suIl944box版本的ucLinux,在上述组建开发环境的步骤中还需插入一步,即三星4510

的ucLinII)【版本到三星4480X的uCLinux版本的移植1

2.4.1内核移植的必要性 因为ucLinux没有现成的针对4480x的版本,所以ucLiMx在44Box

系统上的开发应用中,都

需要cLinux的移植。按照通常的做法,在移植内核前,一般先进行bootloader的移植,有了 u

bootload打就可以通过串口或网口甚至uSB口把uCLinux内核倒到RAM中直接启动,无须烧写 flash(flash的烧写次数有限,且操作麻烦),这样给应用程序的开发调试带了极大的方便!移植

bootloader同样是先找个接近的版本,目前常见的bootloader有AR鳓、R即B00T、D叫G、BLoB,

其中BLOB因其良好的移植性和强大的功能而在网上被广泛讨论,在网站 http://wwnst8rtlreb.net/tpu/上有文件名为b10b-mba44bO.tgz压缩包,是针对S344B似的开发 板移植的BLoB版本,当然要应用在自己的系统上。还需作些修改!因为本课题中购买的MIcETEK开 发的ucLinux套件中有个现成bootloader0仍L,根据AIiMB00rr修改而成的),故对bootloader的移


嵌入式Linux的分析及其在LED异步卡中的应用(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:业务培训开班讲话

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: