嵌入式Linux开发基础一、Linux操作系统基础1.1Linux的起源与版本1.2Linux的特性和功能1.3Linux的内核体系结构1.4Linux常用命令1.5vi编辑器的使用1.1.1LINUX的起源Linux最早是LinusTorvalds(李纳斯·托沃兹)于1991年在芬兰赫尔辛基大学原创开发的。Linux是一种类Unix的操作系统,是一个完全免费的操作系统。1.1.2LINUX的版本Linux内核版本有两种:稳定版和开发版。Linux内核的命名机制:内核版本由3部分数字构成的(主版本号.次版本号.修订版本号,例如:2.4.18)如果次版本号是偶数,那么该内核就是稳定版;若是奇数,则是开发版。*查看内核版本命令:cat/proc/version或cat/etc/issue或uname-a国内外主要发行版本国外:1.RedHatLinux(fedoraLinux)2.UbuntuLinux3.SuSELinux4.MandrakeLinux5.GentooLinux国内:1.红旗Linux2.中标普华Linux3.共创Linux4.冲浪Linux5.蓝点Linux1.2Linux的特性1.多任务、多用户2.支持多种文件系统3.采用虚拟内存管理技术4.良好的可移植性5.丰富的网络功能6.提供全部源代码1.3Linux的内核体系结构Linux系统大致可分为3层:靠近硬件的底层是常驻内存的内核中间层是内核之外的系统程序(Shell)最高层是应用层即用户程序1.4Linux常用命令1.4.1Shell简介:shell是用户和Linux操作系统之间的接口,Linux中有多种shell,其中缺省使用的是bash。Linux系统的shell作为操作系统的外壳为用户提供使用操作系统的接口。它是一个命令语言解释器,拥有自己内建的shell命令集。Linux命令行的一般格式为:命令名[选择项][参数](字母大小写敏感)1.4.1启动登录命令系统启动成功后(屏幕显示localhostlogin:)输入超级用户名“root”然后键入回车键;(屏幕显示Password:)输入口令,口令不会在屏幕上显示出来;重新启动系统命令:reboot关闭系统命令:shutdown1.4.2文件目录操作命令ls列出文件目录命令:相当于dos下的dir。常用的参数:-a(显示所有文件,包括隐藏的)-l(以详细格式列出文件内容)pwd显示用户当前工作路径;cd进出目录命令:与dos下一样使用。mkdir建立新的目录命令:mkdirnewrmdir删除已存在的空目录命令:rmdirnewcp复制命令:相当于dos下的copy。cp–r源文件目的文件(参数r是指连同源文件中的子目录一同拷贝)文件目录操作命令rm删除文件命令:rm-rftest(选项r是指连子目录一块删除;f是指不经确认强制删除)mv移动目录或文件命令:mv/home/a.tar/root;也有重命名功能mvold.tarnew.tarcat文件显示命令:显示或连结一般的ascii文本文件。catfile1显示file1这个文件的内容;catfile1file2顺序显示file1,file2的内容;catfile1file2file3把file1,file2连接再重定向到file3。more显示一般文本文件命令:一般用于分页显示1.4.3用户管理命令useradd:创建一个新的用户帐号;useraddnewuser–p123456指定密码userdel:删除一个已存在的帐号;passwd:改变口令命令;su:切换用户(超级用户切换不需要密码);su–newuser1.4.4进程及任务管理命令ps进程查看命令。常用选项:-e显示所有进程-f全格式-l长格式。top显示系统当前的进程和其他状况。执行过程中可以使用交互命令:空格立即刷新显示;h或者?显示帮助;m切换显示内存信息;t切换显示进程和CPU状态信息;c切换显示命令名称和完整命令行;M根据驻留内存大小进行排序;P根据CPU使用百分比大小进行排序;q退出。kill终止进程命令。格式:kill[-s信号]进程号例如:kill123命令将终止PID(进程号)为123的进程1.4.5磁盘及文件系统管理命令df显示各分区磁盘空间使用情况。mount挂载文件系统命令。格式:mount[选项]设备目录-a把/etc/fstab中列出的文件系统都挂载上。umount卸载文件系统命令。格式:umount[选项]目录-f强制执行卸载操作,可能会造成数据丢失。gzip文件压缩命令。格式:gzip[选项]压缩(解压缩)的文件名gzipramdiskgunzipramdisk.gz1.4.6软件安装命令tar文件压缩和软件包解压命令。格式:tar[选项]文件名.tar.gz-z采用压缩方式;-x解压软件包内容;-v显示过程信息;-f指定软件包名称;-t查看软件包内容;-c创建一个软件包;例如:tar–xzvfabc.tar.gz将软件包解压到当前路径中。rpm软件包功能命令。-i安装软件包:rpm-iabc.rpm;-U升级软件包:rpm–Uabc.rpm;-qa查看已安装的全部软件包:rpm-qa|grepabc;(grep是文件内容查找命令)-e删除已安装的软件包:rpm-eabc。1.4.7网络配置命令ping查看网络主机是否工作。ping[选项]主机名/IP地址ifconfig查看和配置网卡命令。格式:ifconfig[选项][interfaceaddress][netmaskaddress][up|down]-a查看所有网卡状态;-V查看该命令版本信息;-s查看统计信息;例如:ifconfigeth0192.168.0.1up1.5vi编辑器的使用Vi是一个高级文本编辑器。它可以执行输出、删除、查找、替换等众多文本操作而且用户可以根据自己的需要对其进行定制,这是其他编辑程序所没有的。Vi有三种基本工作模式:命令行模式,文本输入模式,末行模式。1.5.1Vi三种工作模式命令行模式:不管处于何种模式,只要按一下ESC键即可使vi进入命令行模式;此时从键盘上输入的任何字符都被当作编辑命令来解释。文本输入模式:在命令模式下输入插入命令i等都可以进入文本输入模式;在该模式下输入的任何字符都被当做文件内容保存起来。末行模式:在命令模式下按“:”键即可进入末行模式;此时会在显示窗口的末行显示一个冒号作为末行模式的提示符,等待用户输入命令。1.5.2vi的进入与退出进入vi:在shell模式下键入vi及需要编辑的文件名即可。例如:viexample.txt退出vi:首先按ESC键进入命令模式,然后输入:进入末行模式,末行模式下输入q直接退出;wq(或x)保存后退出;q!不保存强制退出。二、嵌入式Linux开发基础2.1嵌入式Linux简介2.2Linux与uC/OS-II的区别2.3Linux交叉开发模式2.4Linux开发环境的建立2.5Linux编译环境和源代码的安装2.1嵌入式Linux简介Linux原本被设计为桌面系统,现在广泛应用于服务器领域。而更大的影响在于它正逐渐应用于嵌入式设备。最早的嵌入式Linux发行版本是为没有MMU的处理器而设计的,进而发展了一个完整的开发平台,包括编译、调试等工具。具有大量的开源的linux应用程序和驱动程序,并可以方便地移植到各种平台,包括ARM平台。2.2Linux与uC/OS-II的区别1.功能性Linux包含一整套的编译、调试等开发工具、内核源代码、各种文件系统、图形接口、各种协议、驱动程序以及丰富的应用程序。而uC/OS-II确切的来说只是一个微内核,仅仅包含多任务调度、简单内存管理等基本的多任务操作系统元素,且多任务调度算法和内存管理等都比较简单。对于想实现GUI、协议等都必须另外购买或者移植,对于设备驱动程序没有提供专门统一的接口。Linux与uC/OS-II的区别2.开发工具Linux发布中包含了编译器和调试器等工具,它们都采用GCC编译器,汇编语法一致。uC/OS-II没有指定编译器,在不同的平台下使用不同的编译器,而各个编译器,其汇编语法不同,因此,在不同类型平台下,汇编程序不一致。Linux与uC/OS-II的区别3.开发资源在开发上,Linux采用统一的API调用,接口文档齐全,书籍、网上资源也比较多。uC/OS-II虽没有标准的API接口,但是其内核非常简单、简洁,且书籍、网上资源也非常丰富。Linux与uC/OS-II的区别4.移植性Linux发布中包含了多种平台下的移植,可以通过配置内核选择体系结构和裁剪内核。uC/OS-II的不同平台下的移植通过不同的移植代码独立发布,没有一个统一的界面,通过宏定义进行内核裁剪。Linux与uC/OS-II的区别5.实时性Linux内核不关心实时性问题,可以通过和RTLinux配合来实现实时。RTLinux处理实时任务,非实时任务由linux完成RTLinux是为linux提供实时性的方法,同样也适用于Linux。通过RTLinux的patch,可以满足Linux对实时性的需求uC/OS-II采用抢占式内核,实时性好。2.3Linux交叉开发模式Linux交叉开发采用宿主机和目标机的模式进行。宿主机是一台运行Linux(如RedHat)的PC机,目标机即JXARM9-2410教学实验系统。开发时使用宿主机上的交叉编译、汇编及连接工具形成可执行的二进制代码,这种代码并不能在宿主机上执行,而只能在目标机上执行。然后把可执行文件下载到目标机上运行。文件下载,可以使用串口,以太网口等。GNU交叉编译器Linux采用GNU交叉编译器GNU的交叉编译器,包括以下组件:1.Gcc交叉编译器,即在宿主机上开发、编译目标机上可运行的二进制文件;2.Binutils辅助工具,包括objdump、objcopy等;3.Gdb调试器。对于ARM可以采用如下两个版本的编译器:arm-elf-和arm-linux-2.3.1Linux内核的开发Linux交叉开发包括Linux内核的开发和Linux应用程序的开发。Linux内核的开发:在主机的RedHatLinux操作系统下安装Linux发行包以及交叉编译器arm-linux-gcc。然后对Linux进行配置(makemenuconfig),然后编译生成Linux映像文件zImage。最后通过u-boot的tftp命令将该文件下载到目标板并执行。Linux内核开发流程2.3.2Linux应用程序的开发Linux应用程序的开发在宿主机一端的操作与内核开发类似,都使用arm-linux-gcc编译器编译应用程序,所不同的是,编译生成的是elf格式的文件,而不是Linux映像文件。编译生成的应用程序可以通过多种方式进行调试;如下:常用的调试方式1、Linux应用程序以文件的方式直接将elf格式的文件加入到文件系统中,更新整个文件系统,然后运行目标机Linux系统并运行应用程序。2、运行目标机Linux系统,然后在目标机Linux系统中通过一些工具软件将宿主机中的应用程序通过以太网下载到目标机,如NFS、FTP、TFTP等。3、在宿主机端将Linux应用程序拷贝到U盘,然后运行目标机Linux系统,然后在目标机Linux系统中通过挂载U盘,在U盘上运行应用程序。2.4Linux开发环境建立单机模式(一台计算机)1.Linux环境,推荐RedHat9.02.Windows环境+VMWare虚拟机(安装RedHat9.0)双机模式(两台计算机)Windows+Linux在linux环境下进行Linux开发Linux的程序编辑、编译、调试都在Linux环境进行。调试信息的打印可以通过串口完成,使用linux下的minicom超级终端程序,接收并显示目标板传送的打印信息(在windows下可以使用超级终