软件工程嵌入式Linux开发基础知识1Word文件下载.docx
《软件工程嵌入式Linux开发基础知识1Word文件下载.docx》由会员分享,可在线阅读,更多相关《软件工程嵌入式Linux开发基础知识1Word文件下载.docx(18页珍藏版)》请在冰点文库上搜索。
与传统的实时操作系统(RTOS)相比,采用像嵌入式Linux这样的开放源码的操作系统的另外一个好处是Linux开发团体看来会比RTOS的供应商更快地支持新的IP协议和其他协议。
例如,用于Linux的设备驱动程序要比用于商业操作系统的设备驱动程序多,如网络接口卡(NIC)驱动程序以及并口、串口驱动程序。
Linux操作系统本身的微内核体系结构相当简单。
网络和文件系统以模块形式置于微内核的上层。
驱动程序和其他部件可在运行时作为可加载模块编译到或者是添加到内核。
这为构造定制的可嵌入式系统提供了高度模块化的构件方法。
而在典型情况下该系统需结合定制的驱动程序和应用程序以提供附加功能。
嵌入式系统也常常要求通用的功能,为了避免重复劳动,这些功能的实现运用了许多现成的程序和驱动程序,它们可以用于公共外设和应用。
Linux可以在外设范围广泛的多数微处理器上运行,并早已经具备了现成的应用库。
Linux用于嵌入式的因特网设备也是很合适的,原因是它支持多处理器系统,该特性使Linux具有了伸缩性。
因而设计人员可以选择在双处理器系统上运行实时应用,提高整体的处理能力。
例如,可以在一个处理器运行GUI,同时在另一个处理器上运行Linux系统。
在嵌入式系统上运行Linux的一个缺点是Linux体系提供实时性能需要添加实时软件模块。
而这些模块运行的内核空间正是操作系统实现调度策略、硬件中断异常和执行程序的部分。
由于这些实时软件模块是在内核空间运行的,因此代码错误可能会破坏操作系统从而影响整个系统的可靠性,这对于实时应用将是一个非常严重的弱点。
尽管如此,已经有许多嵌入式Linux系统的示例,可以有把握地说,某种形式的Linux能在几乎任一台执行代码的计算机上运行。
1.2嵌入式Linux开发平台简介
嵌入式Linux可以运行的硬件平台十分广泛,从x86、MIPS、POWERPC到ARM,以及其他许多硬件体系结构。
目前在世界范围内,ARM体系结构的SOC逐渐占领32位嵌入式微处理器市场,并且在国内市场上很容易购买到ARM核的嵌入式处理器,我们所介绍的硬件平台也是基于ARM体系结构的,由北京博创兴业科技有限公司开发的UP-NetARM3000和UP-NetARM2410/UP-NetARM2410-S实验仪器。
UP-NetARM3000的CPU为AMR7TDMI内核的三星S3C44B0X01芯片,由于没有MMU,只能运行μCLinux,UP-NetARM2410的CPU为AMR920T内核的三星S3C2410芯片,由于有MMU,就可以运行标准的ARM-Linux内核。
通过这两个平台,可以学习嵌入式Linux中的针对有MMU和无MMU的不同开发过程。
UP-NetARM3000及其他产品的资料可以访问博创公司的网站www.up-获得。
这里针对UP-NetARM2410作详细的介绍。
1.硬件配置
UP-NetARM2410的硬件配置如表1-1所示,实物如图1-1所示。
表1-1UP-NetARM2410的硬件配置
配置名称
型号
规格
CPU
ARM920T结构芯片三星S3C2410X
工作频率为203MHz
以太网
AX88796
10/100Mbps自适应
Flash盘
SAMSUNGK29F2808
64MB
内存SDRAM
HY57V561620BT-H
32MB×
2=64MB
LCD
STN240×
320256色
TFT640×
48024位色
键盘LED数码管驱动器
ZLG7290
17键数字小键盘
触摸屏
FM7843驱动
USB主从接口
USB1.1
串口
RS232
2个
AD
3个电位器控制输入
调试接口
JTAG,14针、20针
JTAG烧写Flash
音频输出
IIS总线,UDA1341芯片,44.1kHz音频
扩展插槽
3个168Pin
总线直接扩展
DA扩展板
DA转换
SD卡扩展板
GPS_GPRS扩展板
SIMCOM的SIM100-E模块
支持双道语音通信
PS/2&
IC_CARD扩展板
外接键盘鼠标和IC卡
CAN扩展板
IDE_CF卡展板
图1-1UP-NetARM2410实物图
2.S3C2410芯片介绍
(1)S3C2410X芯片集成了大量的功能单元,包括:
⏹内部1.8V,存储器3.3V,外部I/O3.3V,16KB数据CACHE,16KB指令CACHE,MMU。
⏹内置外部存储器控制器(SDRAM控制和芯片选择逻辑)。
⏹LCD控制器,一个LCD专用DMA。
⏹4个带外部请求线的DMA。
⏹3个通用异步串行端口(IrDA1.0,16-ByteTxFIFO,and16-ByteRxFIFO),2通道SPI。
⏹一个多主I2C总线,一个I2S总线控制器。
⏹SD主接口版本1.0和多媒体卡协议版本2.11兼容。
⏹两个USBHOST,一个USBDEVICE(VER1.1)。
⏹4个PWM定时器和一个内部定时器。
⏹看门狗定时器。
⏹117个通用I/O。
⏹24个外部中断。
⏹电源控制模式:
标准、慢速、休眠、掉电。
⏹8通道10位ADC和触摸屏接口。
⏹带日历功能的实时时钟。
⏹芯片内置PLL。
⏹设计用于手持设备和通用嵌入式系统。
⏹16/32位RISC体系结构,使用ARM920TCPU核的强大指令集。
⏹带MMU的先进的体系结构支持WinCE、EPOC32、Linux。
⏹指令缓存(CACHE)、数据缓存、写缓冲和物理地址TAGRAM,减小了对主存储器带宽和性能的影响。
⏹ARM920TCPU核支持ARM调试的体系结构。
⏹内部先进的位控制器总线(AMBA)(AMBA2.0,AHB/APB)。
S3C2410X芯片其结构图如图1-2所示。
图1-2S3C2410X芯片
(2)系统管理
⏹小端/大端支持。
⏹地址空间:
每个BANK128MB(全部为1GB)。
⏹每个BANK可编程为8/16/32位数据总线。
⏹BANK0到BANK6为固定起始地址。
⏹BANK7可编程BANK起始地址和大小。
⏹一共8个存储器BANK。
⏹6个存储器BANK用于ROM、SRAM和其他。
⏹两个存储器BANK用于ROM、SRAM和同步DRAM。
⏹每个存储器BANK可编程存取周期。
⏹支持等待信号用以扩展总线周期。
⏹支持SDRAM掉电模式下的自刷新。
⏹支持不同类型的ROM用于启动(NOR/NANDFlash、EEPROM和其他)。
(3)芯片封装
272-FBGA封装图如图1-3所示。
图1-3272-FBGA封装图
1.3嵌入式Linux开发流程
在一个嵌入式系统中使用Linux开发,根据应用需求的不同有不同的配置开发方法,但是一般都要经过如下的过程:
1.建立开发环境
操作系统一般使用RedHat-Linux,版本从7到9都可以,选择定制安装或全部安装,通过网络下载相应的GCC交叉编译器进行安装(例如arm-Linux-gcc、arm-μclibc-gcc),或者安装产品厂家提供的交叉编译器。
2.配置开发主机
配置MINICOM,一般的参数为波特率为115
200bps,数据位为8位,停止位为1,无奇偶校验,软件硬件流控设为无。
在Windows下的超级终端的配置也是这样的。
MINICOM软件的作用是作为调试嵌入式开发板的信息输出的监视器和键盘输入的工具。
配置网络,主要是配置NFS网络文件系统,需要关闭防火墙,简化嵌入式网络调试环境设置过程。
3.建立引导装载程序BOOTLOADER
从网络上下载一些公开源代码的BOOTLOADER,如U-BOOT、BLOB、VIVI、LILO、ARM-BOOT、RED-BOOT等,根据自己具体的芯片进行移植修改。
有些芯片没有内置引导装载程序,例如三星的ARM7、ARM9系列芯片,这样就需要编写开发板上Flash的烧写程序,网络上有免费下载的Windows下通过JTAG并口简易仿真器烧写ARM外围Flash芯片的烧写程序,也有Linux下的公开源代码的J-Flash程序。
如果不能烧写自己的开发板,就需要根据自己的具体电路进行源代码修改。
这是系统正常运行的第一步。
如果购买了厂家的仿真器当然比较容易烧写Flash,这对于需要迅速开发自己产品的人来说可以极大地提高开发速度,但是其中的核心技术是无法了解的。
4.下载别人已经移植好的Linux操作系统
如μCLinux、ARM-Linux、PPC-Linux等,如果有专门针对所使用的CPU移植好的Linux操作系统那是再好不过的,下载后再添加自己的特定硬件的驱动程序,进行调试修改,对于带MMU的CPU可以使用模块方式调试驱动,对于μCLinux这样的系统则需编译进内核进行调试。
5.建立根文件系统
从下载使用BUSYBOX软件进行功能裁减,产生一个最基本的根文件系统,再根据自己的应用需要添加其他程序。
默认的启动脚本一般都不会符合应用的需要,所以就要修改根文件系统中的启动脚本,它的存放位置位于/etc目录下,包括:
/etc/init.d/rc.S、/etc/profile、/etc/.profile等,自动挂装文件系统的配置文件/etc/fstab,具体情况会随系统不同而不同。
根文件系统在嵌入式系统中一般设为只读,需要使用mkcramfs、genromfs等工具产生烧写映像文件。
6.建立应用程序的Flash磁盘分区
一般使用JFFS2或YAFFS文件系统,这需要在内核中提供这些文件系统的驱动,有的系统使用一个线性Flash(NOR型)512KB~32MB,有的系统使用非线性Flash(NAND型)8~512MB,有的两个同时使用,需要根据应用规划Flash的分区方案。
7.开发应用程序
应用程序可以放入根文件系统中,也可以放入YAFFS、JFFS2文件系统中,有的应用不使用根文件系统,直接将应用程序和内核设计在一起,这有点类似于μCOS-II的方式。
8.烧写内核、根文件系统、应用程序
9.发布产品
1.4建立嵌入式Linux开发环境
嵌入式Linux开发环境有以下几个方案:
(1)基于PC机Windows操作系统下的CYGWIN。
(2)在Windows下安装虚拟机后,再在虚拟机中安装Linux操作系统。
(3)直接安装Linux操作系统。
由于基于Windows的环境要么有兼容性问题,要么速度有影响,所以推荐读者使用纯Linux操作系统环境。
我们实际的开发环境为RedHat9.0,它已经支持中文,并且包含了绝大部分的开发工具,不用担心装了Linux就不能使用Windows的问题,一般的情况都是用户已经有了Windows操作系统,再安装Linux,Linux会自动安装一个叫做GRUB的启动引导软件,可以选择引导多个操作系统。
一、预备知识
绝大多数的Linux软件开发都是以native方式进行的,即本机(HOST)开发、调试,本机运行的方式。
这种方式通常不适合于嵌入式系统的软件开发,因为对于嵌入式系统的开发,没有足够的资源在本机(即嵌入式目标系统)运行开发工具和调试工具。
通常的嵌入式系统的软件开发采用一种交叉编译调试的方式。
交叉编译调试环境建立在宿主机(即一台PC机)上,对应的开发板叫做目标板。
运行Linux的PC(宿主机)开发时使用宿主机上的交叉编译、汇编及连接工具形成可执行的二进制代码(这种可执行代码并不能在宿主机上执行,而只能在目标板上执行)。
然后把可执行文件下载到目标机上运行。
调试时的方法很多,可以使用串口、以太网口等,具体使用哪种调试方法可以根据目标机处理器所提供的支持作出选择。
宿主机和目标板的处理器一般都不相同,宿主机为Intel处理器,而目标板如UP-NETARM2410开发板为三星S3C2410。
GNU编译器提供这样的功能,在编译器编译时可以选择开发所需的宿主机和目标机从而建立开发环境。
所以在进行嵌入式开发前第一步的工作就是要安装一台装有指定操作系统的PC机作为宿主开发机,对于嵌入式Linux,宿主机上的操作系统一般要求为RedHatLinux。
嵌入式开发通常要求宿主机配置有网络,支持NFS(为交叉开发时mount所用)。
然后要在宿主机上建立交叉编译调试的开发环境。
环境的建立需要许多的软件模块协同工作,这将是一项比较繁杂的工作,但现在已完全由博创嵌入式教学套件中光盘的安装而自动完成了。
二、对开发PC机的性能要求
由于RedHat9.0安装后占用空间约为2.4~5GB之间,还要安装ARMLinux开发软件,因此对开发计算机的硬盘空间要求较大。
硬件要求如下:
⏹CPU:
高于奔腾500MB,推荐高于赛扬1.7GB。
⏹内存:
大于128MB,推荐256MB。
⏹硬盘:
大于10GB,推荐高于40GB。
三、开发工具软件的安装与配置
1.RedHatLinux9.0的安装
在一台PC上安装RedHatLinux9.0,选择Custom定制安装,在选择软件包时最好将所有包都安装,需要空间约2.7GB,如果选择最后一项:
everything,即完全安装,将安装3张光盘的全部软件,需要磁盘空间大约5GB。
因此建议提前为RedHatLinux的安装预留大约5~15GB的空间,具体视用户的硬盘空间大小来确定,在安装完RedHat后还要安装Linux的编译器和开发库以及ARMLinux的所有源代码,这些包安装后总共需要的空间大约为800MB。
2.开发环境配置
配置网络,包括配置IP地址、NFS服务器和防火墙。
网络配置主要是要安装好以太网卡,对于一般常见的RTL8139网卡,RedHat9.0可以自动识别并自动安装好,完全不要用户参与,因此建议使用该网卡。
然后配置宿主机IP为192.168.0.121。
如果在有多台计算机使用的局域网环境使用该开发设备,IP地址可以根据具体情况设置,如图1-4所示。
图1-4网络配置
双击设备eth0的蓝色区域,进入以太网设置界面,如图1-5、图1-6所示。
图1-5以太网常规设置界面
图1-6以太网路由设置界面
对于RedHat9.0,它默认的是打开了防火墙,因此对于外来的IP访问它全部拒绝,这样其他网络设备根本无法访问它,即无法用NFSmount,许多网络功能都将无法使用。
因此网络安装完毕后,应立即关闭防火墙。
操作如下:
单击“红帽子”开始菜单,选择安全级别设置,选中“无防火墙”选项,如图1-7所示。
在系统设置菜单中选择服务器设置菜单,再选中服务菜单,将iptables服务取消,并确保nfs选项选中。
图1-7安全级别设置
配置NFS的步骤如下:
单击主菜单“系统设置”→“服务器设置”→“NFS服务器”命令(英文为:
SETUP→SYSTEMSERVICE→NFS),单击“增加”按钮出现如图1-8所示的界面在目录(Drictory)中输入需要共享的路径,在主机(Hosts)中输入允许进行连接的主机IP地址,并选择允许客户对共享目录的操作为只读(Read-only)或读写(Read/Write)。
图1-8NFS基本设置
如图1-9所示为一些常规选项设置,可以保留默认值。
图1-9NFS常规设置
如图1-10所示为对客户端存取服务器的一些其他设置,一般不需要设置,取默认值。
图1-10NFS用户访问设置
当将远程根用户当作本地根用户时,对于操作性比较方便,但是安全性较差。
最后退出时则完成NFS配置。
配置好后,应显示如图1-11所示的界面。
图1-11配置好的NFS界面
也可以手工编写/etc/exports文件,其格式如下:
共享目录可以连接的主机(读写权限,其他参数)
例如:
/arm2410192.168.0.*(rw,sync)
表示将本机的/arm2410目录共享给IP地址为192.168.0.1-192.168.0.254的所有计算机,可以读取和写入。
配置完成后,可用如下办法简单测试一下NFS是否配置好了:
在宿主机上自己挂载(mount)自己,看是否成功就可以判断NFS是否配好了。
例如在宿主机/目录下执行命令:
mount192.168.0.10:
/arm2410/mnt
其中192.168.0.10应修改为自己主机的IP地址。
然后到/mnt/目录下看是否可以列出/arm2410目录下的所有文件和目录,如果可以则说明mount成功,NFS配置成功。
3.开发工具软件的安装
将北京博创兴业科技有限公司提供的附带开发工具光盘插入CDROM,然后执行以下命令:
mount/dev/cdrom/mnt
若系统不识别/dev/cdrom,可以执行如下命令,假设CDROM为从盘,即为/dev/hdb,则:
mount–tiso9660/dev/hdb/mnt
cd/mnt(进入mount后的目录)
如果CDROM在安装RedHat的时候已经默认安装,以上命令不要执行,直接进入CDROM所在目录(一般为/mnt/cdrom)。
这种情况下,则执行命令:
cd/mnt/cdrom
./install.sh(运行安装脚本)
安装脚本程序将自动建立/arm2410目录,并将所有开发软件包安装到/arm2410目录下,同时自动配置编译环境,建立合适的符号连接。
四、Linux开发软件的安装目录结构
表1-2为Linux开发软件的安装目录说明,均以/arm2410目录为起点。
表1-2/arm2410下的文件说明
目录名
说明
busybox-1.00-pre10
Busybox-1.00源代码
editor
Linux下编辑编译器
doc
Arm2410forLinux使用说明书
microwindows-0.9
MicroWindows图形系统源代码
insight-6.0
Linux下源代码查看器
Rootfs
开发板中根目录下文件
Kernel
ArmLinux内核源代码
Demo
所有实验演示程序
mplayerdemo
多媒体演示程序
minigui_src
做minigui实验需要的资源,需要按照指导书安装
img
root.cramfs
根文件系统映像文件,可以直接写入Flash中
zImage.bin
ARMLinux-2.4内核压缩映象文件,可以直接写入Flash中
exp
所有实验的源代码
sh
install.sh安装脚本
uninstall.sh反安装脚本
mount-dos.shLinux下挂装Windows的分区示例脚本
mk_romfs_img.sh生成根文件系统映像文件示例脚本
mnt_udisk.shMOUNTU盘
编译器安装路径说明如表1-3所示。
表1-3编译器安装路径说明
编译器
安装路径
arm-elf-gcc-2.95.3
/opt/host/armv4l
应用开发库和头文件
Armv4l-unknown-Linux-gcc
/opt/host/armv4l/bin
主编译器
上述诸多程序的源代码都在光盘中提供。
在安装完成Linux后,就是对Linux的网络环境的配置,最主要是配置NFS服务器。