




已阅读5页,还剩591页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ARM嵌入式LINUX应用程序设计,课程介绍,嵌入式程序设计是嵌入式系统概论后修课程。该课程基于ARM+linux硬软件平台进行程序开发,具体的开发平台是EDUK4;该课程重点是在掌握嵌入式系统开发流程的基础上,搭建嵌入式交叉编译平台,实现基于平台的基本应用程序设计,接口驱动程序设计和高级应用程序设计。,2019/12/6,2,教材,弓雷.ARM嵌入式Linux系统开发详解(第2版).清华大学出版社.2014,2.,2019/12/6,3,参考资料,基于S3C2410嵌入式Linux开发实验与实践,实验开发平台的实验指导书,深圳市英蓓特信息技术有限公司从实践中学嵌入式LINUX应用程序设计,华清远见嵌入式学院,培训规划教材ARM嵌入式linux培训班视频教学(14.4G)深入LINUX设备驱动程序内核机制嵌入式linux系统工程师培训标准教材,2019/12/6,4,第1章LINUX开发基础,2019/12/6,5,内容摘要,Linux的诞生与发展Linux的内核结构Linux存储管理Linux进程管理Linux内核启动与初始化进程,2019/12/6,6,Linux的诞生与发展,2019/12/6,7,UNIX操作系统是美国贝尔实验室于1969年夏在DECPDP-7小型计算机上开发的一个分时操作系统,Linux操作系统的诞生、发展和成长过程始终依赖着以下五个重要支柱:,MINIX系统是由AndrewS.Tanenbaum(AST)1987年开发的,主要用于学生学习操作系统原理,GNU计划旨在开发一个类似Unix、并且是自由软件的完整操作系统:GNU系统。,POSIX可移植操作系统接口标准是由IEEE开发的,由ISO/IEC标准化的一簇标准。该标准是基于现有的UNIX实践和经验,描述了操作系统的调用服务接口,用于保证编制的应用程序可以在源代码一级上在多种操作系统上移植运行。,如果没有Internet网,没有遍布全世界的无数计算机黑客通过网络的无私奉献,那么Linux绝对不可能发展到现在的水平。,Linux的诞生与发展,从Linux诞生开始,Linux内核就从来没有停止过升级,从0.02版本到1999年具有里程碑意义的2.2版本,一直到我们现在看到的4.0版本。,2019/12/6,8,Linux内核版本有两种:稳定版和开发版Linux内核的命名机制:num.num.num第一个数字是主版本号第二个数字是次版本号第三个数字是修订版本号,Linux的应用领域,2019/12/6,9,服务器,桌面系统,嵌入式应用,Linux,Linux嵌入式系统开发平台,2019/12/6,10,系统软件平台,系统硬件平台,嵌入式Linux系统需要下面三个基本元素:系统引导工具用于机器加电后的系统定位引导。Linux微内核内存管理、程序管理。始化进程但如果要它成为完整的操作系统并且继续保持小型化,还必须加上硬件驱动程序、硬件接口程序和应用程序组。,选定硬件平台前,首先要确定系统的应用功能和所需要的速度,并制定好外接设备和接口标准。这样才能准确地定位所需要的硬件方案,得到性价比最高的系统。,应用功能速度,1,外接设备接口标准,2,+,=,性价比,第1节Linux操作系统概述,2019/12/6,11,建立交叉开发环境,交叉编译和链接,交叉调试,系统测试,建立交叉开发环境,2019/12/6,12,商业类型,ARMSoftwareDevelopmentToolkit,SDSCrosscompiler,MetrowerksCodeWarrior,交叉开发环境,GNU工具链,交叉开发环境是指编译、链接和调试嵌入式应用软件的环境。它与运行嵌入式应用软件的环境有所不同,通常采用宿主机/目标机模式。,常用的交叉开发环境主要有开放和商业两种类型。开放的交叉开发环境的典型代表是GNU工具链。,开放类型,交叉编译和链接,在完成嵌入式软件的编码之后,就是进行编译和链接,以生成可执行代码。由于开发过程大多是在Intel公司x86系列CPU的通用计算机上进行的,而目标环境的处理器芯片却大多为ARM、MIPS、PowerPC、DragonBall等系列的微处理器这就要求在建立好的交叉开发环境中进行交叉编译和链接。,2019/12/6,13,建立交叉开发环境,交叉编译和链接,交叉调试,系统测试,交叉调试,2019/12/6,14,硬件调试:如果不采用在线仿真器,可以让CPU直接在其内部实现调试功能,并通过在开发板上引出的调试端口,发送调试命令和接收调试信息,完成调试过程。,软件调试:在Linux内核中设置一个调试桩用作调试过程中和宿主机之间的通信服务器。然后在宿主机中通过调试器的串口与调试桩进行通信,应用软件的调试:嵌入式上层应用软件的调试可以使用本地调试和远程调试两种方法。,嵌入式Linux交叉调试,系统测试,2019/12/6,15,测试技术指的是软件测试的专门途径,以及能够更加有效地运用这些途径的特定方法。在嵌入式软件测试中,常常要在基于目标机的测试和基于宿主机的测试之间做出折衷。基于目标机的测试需要消耗较多的时间和经费,而基于宿主机的测试虽然代价较小,毕竟是在仿真环境中进行的。,嵌入式软件测试中经常用到的测试工具:内存分析工具性能分析工具覆盖分析工具缺陷跟踪工具,嵌入式Linux面临的挑战,2019/12/6,16,Linux的实时扩充性,改变Linux内核体系结构,完善Linux的集成开发环境,1,2,3,Solution,扩展Linux的实时性能向外扩展向上扩展,Linux的内核体系采用的是Monolithic,内核体系结构Microkernel,一个完整的嵌入式系统的集成开发环境一般需要提供的工具是:编译/连接器内核调试/跟踪器集成图形界面开发平台编辑器调试器软件仿真器监视器,整体集成开发环境还有待提高和完善,嵌入式Linux的发展及应用前景,由于Linux具有对各种设备的广泛支持性,因此,能方便地应用于机顶盒、IA设备、PDA、掌上电脑、WAP手机、寻呼机、车载盒以及工业控制等智能信息产品中。与PC相比,手持设备、IA设备以及信息家电的市场容量要高得多,而Linux嵌入式系统的强大的生命力和利用价值,使越来越多的企业和高校表现出对它极大的研发热情。Linux嵌入式操作系统所具有的技术优势和独特的开发模式给业界以新异,有理由相信,它能成为Internet时代嵌入式操作系统中的最强音。,2019/12/6,17,Linux内核特点,2019/12/6,18,Linux内核,编程容易,可移植性,可量测性,模块化,稳定性和可靠性,安全性,标准化和互用性,完善的网络支持,Linux内核既能支持32位体系结构又能支持64位体系结构。,Linux内核全部源代码是遵守GPL软件许可的免费软件,开发者可以免费得到社区的贡献、支持、检查代码和测试。驱动程序可以免费发布给其他人,可以静态编译进内核。,以源码形式发布驱动程序,可以不必为每一个内核版本和补丁版本都提供二进制的程序,Linux内核的组成,2019/12/6,19,进程调度程序(SCHED)负责控制进程访CPU。保证进程能够公平地访问CPU,同时保证内核可以准时执行一些必需的硬件操作;内存管理程序(MM)使多个进程可以安全地共享机器的主存系统,并支持虚拟内存;虚拟文件系统(VFS)通过提供一个所有设备的公共文件接口,VFS抽象了不同硬件设备的细节。此外,VFS支持与其他操作系统兼容的不同的文件系统格式;网络接口(NET)提供对许多建网标准和网络硬件的访问;进程间通信(IPC)子系统为进程与进程之间的通信提供了一些机制。,这5部分之间是相互依赖的关系,存储管理,2019/12/6,20,内存管理,任务,屏蔽各种硬件的内存结构并向上层返回统一的访问界面,页式存储管理机制,每个页面的大小随处理机芯片而异支持虚拟内存,硬件无关部分进程的映射和逻辑内存的对换硬件相关部分为内存管理硬件提供了虚拟接口,分类,页表,每个进程保留一张页表,用于将本进程空间中的虚拟地址变换成物理地址。,进程调度,2019/12/6,21,当需要选择下一个进程运行时,由调度程序选择最值得运行的进程,依据每个进程的task_struct结构,policy是进程的调度策略两类Linux进程:普通进程与实时进程实时进程的优先级高于其他进程,priority是调度管理器分配给进程的优先级是进程允许运行的时间,rt_priority用于实时进程间的选择调度器使用这个域给每个实时进程一个相对优先级可以通过系统调用来改变实时进程的优先级。,counter是进程剩余的时间片,内核源代码目录结构,2019/12/6,22,内核源代码目录结构,Linux存储管理,2019/12/6,23,进程虚存空间的管理虚存空间的映射和虚存区域的建立Linux的分页式存储管理物理内存空间的管理内存的分配与释放内存分配与释放的数据结构内存分配函数kmalloc()虚拟内存的申请和释放,进程虚存空间的管理,2019/12/6,24,每一个进程,用一个mm-struct结构体来定义它的虚存用户区。mm_struct结构体首地址在任务结构体task-struct成员项mm中:structmm-struct*mm。,Linux的存储管理主要是管理进程虚拟内存的用户区,Linux操作系统采用了请求式分页存储管理方法。系统为每个进程提供4GB的虚拟内存空间。各个进程的虚拟内存彼此独立。,进程运行时能访问的存储空间只是它的虚拟内存空间。对当前该进程而言只有属于它的虚拟内存是可见的。,mm_struct结构定义在/include/linux/schedul.h中,进程虚存空间的管理,2019/12/6,25,structmm_structintcount;pgd_t*pgd;unsignedlongcontext;unsignedlongstart_code,end_code,start_data,end_data;unsignedlongstart_brk,brk,start_stack,start_mmap;unsignedlongarg_start,arg_end,env_start,env_end;unsignedlongrss,total_vm,locked_vm;unsignedlongdef_flags;structvm_area_struct*mmap;structvm_area_struct*mmap_avl;structsemaphoremmap_sem;,mm_struct结构定义在/include/linux/schedul.h中,进程虚存空间的管理,2019/12/6,26,structvm_area_structstructmm_struct*vm_mm;unsignedlongvm_start;unsignedlongvm_end;pgprot_tvm_page_prot;unsignedshortvm_flags;shortvm_avl_height;structvm_area_struct*vm_avl_left;structvm_area_struct*vm_avl_right;structvm_area_struct*vm_next;structvm_area_struct*vm_next_share;structvm_area_struct*vm_prev_share;structvm_operations_struct*vm_ops;unsignedlongvm_offset;structinode*vm_inode;unsignedlongvm_pte;,定义在/include/linux/mm.h中,每个虚拟区域用一个vm-area-struct结构体进行描述,虚存空间的映射和虚存区域的建立,2019/12/6,27,虚拟存储技术用户的代码和数据(可执行映像)等并不是完整地装入物理内存,而是全部映射到虚拟内存空间。在进程需要访问内存时,在虚拟内存中“找到”要访问的程序代码和数据等unsignedlongdo_mmap(structfile*file,unsignedlongaddr,unsignedlonglen,unsignedlongprot,unsignedlongflags,unsignedlongoff),Linux使用do_mmap()函数完成可执行映像向虚存区域的映射,Linux的分页式存储管理,2019/12/6,28,页表是从线性地址向物理地址转换中不可缺少的数据结构,而且它使用的频率较高。页表必须存放在物理存储器中。,Linux采用了三级页表结构,以利于节省物理内存。三级分页管理把虚拟地址分成四个位段:页目录、页中间目录、页表、页内编址。,系统设置三级页表系列页目录PGDPaGeDirectory页中间目录PMDPageMiddleDirectory页表PTEPageTablE,物理内存空间的管理,2019/12/6,29,物理内存的页面管理,空闲页面的管理Buddy算法,Linux对物理内存空间按照分页方式进行管理,把物理内存划分成大小相同的物理页面。Linux设置了一个mem_map数组管理内存页面。mem_map在系统初始化时由free_area_init()函数创建,它存放在物理内存的底部(低地址部分),内存空闲空间的管理采用Buddy算法Buddy算法是把内存中的所有页面按照2n划分,其中n=05,对一个内存空间按1个页面、2个页面、4个页面、8个页面、16个页面、32个页面进行六次划分。对于每种页面块按前后顺序两两结合成一对Buddy“伙伴”。,内存分配与释放的数据结构,2019/12/6,30,Linux中用于内存分配和释放的函数主要是kmalloc()和kfree(),它们用于分配和释放连续的内存空间,kmalloc()和kfree()分配和释放内存是以块(block)为单位进行的可以分配的空闲块的大小记录在blocksize表中,它是一个静态数组,加在页面块前部的信息头称为页描述符,Linux设置了sizes数组,对页面块进行描述数组元素是size_descriptor结构体blocksize与sizes元素数目相同,它们一一对应,由sizes管理的各个页面块中每个块的头部还有一个对该块进行描述的块头block_header,内存分配函数kmalloc(),2019/12/6,31,void*kmalloc(size_tsize,intpriority)voidkfree(void*_ptr),参数size是申请分配内存的大小,priority是申请优先级,ptr是kmalloc分配的内存空间的首地址,GFP_KERNEL,GFP_ATOMIC,GPF_DMA,虚拟内存的申请和释放,2019/12/6,32,在申请和释放较小且连续的内存空间时,使用kmalloc()和kfree()申请和释放较大的内存空间时,使用vmalloc()和vfree(),void*vmalloc(unsignedlongsize),voidvfree(void*addr),用法和kmalloc()和kfree()一样,由vmalloc()申请的内存空间在虚拟内存中是连续的,它们映射到在物理内存时,可以使用不连续的物理页面,而且仅把当前访问的部分放在物理页面中由vmalloc()分配的虚存空间称为虚拟内存块(虚存块),Linux进程管理介绍,2019/12/6,33,Linux是一个多用户多任务的操作系统。,指多个用户可以在同一时间使用计算机系统,多任务是指Linux可以同时执行几个任务,操作系统监控着一个等待执行的任务队列,这些任务包括用户作业操作系统任务邮件打印作业操作系统根据每个任务的优先级为每个任务分配合适的时间片,进程与作业,2019/12/6,34,Linux系统上所有运行的东西都有可以看成进程在自身的虚拟地址空间运行的一个单独的程序,随时都可能发生变化的,使用系统运行资源的,动态的,+,+,程序,+,进程,进程和作业的概念也有区别:一个正在执行的进程称为一个作业作业可以包含一个或多个进程,尤其是当使用了管道和重定向命令,作业控制指的是控制正在运行的进程的行为。,手工启动,2019/12/6,35,启动一个进程有两个主要途径:手工启动调度启动,由用户输入命令,直接启动一个进程便是手工启动。手工启动进程又分为前台启动和后台启动,前台启动是手工启动一个进程的最常用的方式。一般用户键入一个命令“lsl”,这就已经启动了一个进程,而且是一个前台的进程,直接从后台手工启动一个进程用得比较少一些,除非是该进程甚为耗时,且用户也不急着需要结果的时候。,调度启动,2019/12/6,36,有时候需要对系统进行一些比较费时而且占用资源的维护工作,这些工作适合在深夜进行,要使用自动启动进程的功能,就需要掌握以下几个启动命令:,at命令,cron命令,crontab命令,用户使用at命令在指定时刻执行指定的命令序列。也就是说,该命令至少需要指定一个命令、一个执行时间才可以正常运行。,可以不断重复一些命令cron命令是不应该手工启动的,crontab命令用于安装、删除或者列出用于驱动cron后台进程的表格。每个用户都可以有自己的crontab文件。,进程的挂起与恢复,2019/12/6,37,作业控制允许将进程挂起并可以在需要时恢复进程的运行,被挂起的作业恢复后将从中止处开始继续运行。只要在键盘上按【Ctrl+Z】,即可挂起当前的前台作业。使用jobs命令可以显示Shell的作业清单,包括具体的作业、作业号以及作业当前所处的状态。恢复进程执行时,有两种选择:用fg命令将挂起的作业放回到前台执行;用bg命令将挂起的作业放到后台执行。,进程管理,2019/12/6,38,由于Linux是个多用户系统,同时也是一个多进程系统,经常需要对这些进程进行一些调配和管理,就要知道当前的进程情况。,who命令,w命令,ps命令,top命令,kill命令,该命令主要用于查看当前线上的用户情况,可以显示出当前用户当前正在进行的工作,是非常强大的进程查看命令,top命令和ps命令的基本作用是相同的,该命令可以终止后台进程,nohup命令,使进程在用户退出后仍继续执行,Linux内核启动和初始化进程,2019/12/6,39,开机自检核心引导阶段bootsect阶段setup阶段head.S阶段main.c阶段init进程和inittab引导脚本确定用户登录模式执行内容/etc/rc.d/rc.sysinit启动内核的外挂模块及各运行级的脚本,开机自检,2019/12/6,40,在刚开机时,根据X86CUP的特性,代码段寄存器的值为全1,指令计数器的值为全0,即CS=FFFF、IP=0000。这时CPU根据CS和IP的值执行FFFF0H处的指令,FFFF0H处的指令一般总是一个JMP指令,这个地址通常是ROMBIOS的入口地址。接着,ROMBIOS进行开机自检,如检查内存,键盘等。在自检过程中,ROMBIOS会在上位内存中进行扫描,看看是否存在合法的设备控制卡ROMBIOS(如:SCSI卡上的ROM),如果有,就执行其中的一些初始化代码。最后,ROMBIOS读取磁盘上的第一个扇区并将这个扇区的内存装入内存。,核心引导阶段,2019/12/6,41,在Grub或者Lilo等引导程序成功完成引导Linux系统的任务之后,Linux就可从它们手中接管了CPU的控制权。在这个过程中主要用到该目录下的这几个文件:bootsect.S、setup.S以及compressed目录下head.S等。,首先要介绍一下,Linux的内核通常是压缩过后的,包括如上述提到的那几个重要的汇编程序,它们都是在压缩内核vmlinuz中的。因为Linux中提供的内核包含了众多驱动和功能,因而比较大,所以采用压缩内核可以节省大量的空间。,bootsect阶段,2019/12/6,42,当grub读入vmlinuz后,会根据bootsect,把它自身和setup程序段读到不大于0 x90000开始的内存里,然后grub会跳过bootsect那512bytes的程序段,直接运行setup里的第一条指令。就是说bzImage里bootsect的程序没有再被执行了,而bootsect.S在完成了指令搬移之后就退出了。之后执行权就转到了setup.S的程序中。,内核启动过程,setup阶段,2019/12/6,43,setup.S的主要功能就是利用ROMBIOS中断读取机器系统数据,并将系统参数保存到0 x900000 x901FF开始的内存中位置。此外,setup.S还将video.S中的代码包含进来,检测和设置显示器和显示模式。最后,它还会设置CPU的控制寄存器CR0,从而进入32位保护模式运行,并跳转到绝对地址为0 x100000,同时执行startup_32。,CPU,0 x100000,startup_32,head.S阶段,2019/12/6,44,当运行到head.S时,系统已经运行在保护模式,而head.S完成了一个重要任务就是将内核解压。就如本节前面提到的,内核是通过压缩的方式放在内存中的,head.S通过调用misc.c中定义的decompress_kernel()函数,将内核vmlinuz解压到0X100000的。接下来head.S程序完成寄存器、分页表的初始化工作,但要注意的是,这个head.S程序与完成解压缩工作的head.S程序是不同的,它在源代码中的位置是arch/i386/kernel/head.S程序与完成解压缩工作的head.S程序是不同的在完成了初始化之后,head.S就跳转到start_kernel()函数中去了。,main.c阶段,2019/12/6,45,start_kernel()是“init/main.c”中的定义的函数,start_kernel()调用了一系列初始化函数,进行内核的初始化工作。要注意的是,在初始化之前系统中断是被屏蔽的,另外内核也处于被锁定状态,以保证只有一个CPU用于Linux系统的启动。在start_kernel()的最后,调用了init()函数,输出Linux版本信息,设置与体系结构相关的环境,页表结构初始化,使用“arch/alpha/kernel/entry.S”中的入口点设置系统自陷入口,使用alpha_mv结构和entry.S入口初始化系统IRQ,printk(linux_banner),setup_arch(),paging_init(),trap_init(),Init_IRQ(),init进程和inittab引导脚本,2019/12/6,46,init进程是系统所有进程的起点,内核在完成内核引导以后,即在本线程(进程)空间内加载init程序,它的进程号是1。inittab是以行为单位的描述性(非执行性)文本,每一个指令行都具有以下格式:id:runlevel:action:process,入口标识符,运行级别,运行级别,具体的执行程序,id一般要求4个字符以内,对于getty或其他login程序项,要求id与tty的编号相同,否则getty程序将不能正常工作。runlevel是init所处于的运行级别的标识,一般使用06以及S或s。initdefault是一个特殊的action值,用于标识缺省的启动级别,sysinit、boot、bootwait等action将在系统启动时无条件运行,,确定用户登录模式,2019/12/6,47,在“/etc/inittab”中列出了登录模式,其中的单人维护模式是类似于Windows中的“安全模式”,在这种情况下,系统不加载复杂的模式,从而使系统能够正常启动。其中本系统中默认的为5,也就是X-Windows多用户模式。,单人维护模式,多用户无网络模式,文字界面多用户模式,X-Windows多用户模式,登录模式?,执行内容/etc/rc.d/rc.sysinit,2019/12/6,48,rc.sysinit中最常见的动作就是:激活交换分区检查磁盘加载硬件模块如果没有其他boot、bootwait动作运行级别3/etc/rc.d/rc将会得到执行命令行数3/etc/rc.d/rc3.d/目录下的文件rc3.d下的文件都是指向/etc/rc.d/init.d/目录下各个Shell脚本的符号连接。,getty和login,2019/12/6,49,mingetty程序能打开终端,设置模式。同时它会显示一个文本登录界面,这个界面就是经常看到的登录界面,在这个登录界面中会提示用户名,而用户输入的用户名将作为参数传给login程序来验证用户的身份。login程序在getty的同一个进程空间中运行,接受getty传来的用户名参数作为登录的用户名。当用户登录通过了这些检查后,login将搜索/etc/passwd文件用于匹配密码、设置主目录和加载shell在设置好shell的uid、gid,以及TERM,PATH等环境变量以后,进程加载shell,login的任务也就完成了,mingetty,username:passwd:,login,等待用户登录,2019/12/6,50,系统初始化完毕后,INIT为每一个虚拟控制台和终端启动一个GETTY进程。GETTY进程负责接受和检验用户的登录要求。至此,LINUX系统的启动工作全部完成。不同核心版本的LINUX的启动过程有一定的差异,不同发行版本的LINUX的启动也可能稍有不同,但基本过程是类似的。另外,在“BOOT:”后,利用“LINUXSINGLE”命令可以迫使LINUX进入单用户模式,除不要求用户登录和不启动虚拟终端以外,启动过程的其它部分也基本类似。,Linux常用命令,2019/12/6,51,Linux命令格式,2019/12/6,52,Linux命令的组成部分命令字命令选项命令参数,命令格式举例,2019/12/6,53,$ls-l/home,命令中的其他组成,2019/12/6,54,命令提示符表示命令输入的状态管理员root用户的提示符“#”rootlocalhost#普通用户提示符“$”teacherlocalhost$命令的各组成部分之间用空格分隔命令的输入以回车键结束,获得命令帮助,2019/12/6,55,help命令$helppwd“-help”命令选项$touch-help使用man命令阅读手册页$manls使用info命令阅读信息页$infols,文件、目录操作命令,2019/12/6,56,目录操作命令lspwdcdmkdirrmdir文件操作命令filetouchcprmmvfind文本文件查看命令catmorelessheadtail,目录命令实例,2019/12/6,57,列目录$ls$ls-l显示当前目录名称$pwd更改当前目录$cd/etc$cd./bin建立和删除目录$mkdirmydir$rmdirmydir,路径的表示,2019/12/6,58,相对路径是以“.”或“.”开始的目录路径表示形式cd./testls./bin绝对路径是以“/”开始的路径表示形式ls/cd/home,文件操作命令,2019/12/6,59,文件命令实例,2019/12/6,60,检测文件类型$file/etc/passwd建立空文件$touchtfile文件查找按文件名进行查找$find.-namefile*按文件属主进行查找$find.-userteacher,复制和删除文件$cpfileafileb$rmfilea文件移动与重命名$mvfileafileb$mvfileadira/,文本文件查看命令,2019/12/6,61,文本查看实例,2019/12/6,62,显示文本$cat/etc/passwd分页显示文本$more/etc/passwd分页文本浏览$less/etc/passwd显示文件首$head-5/etc/passwd显示文件尾$tail-5/etc/passwd,用户系统命令,2019/12/6,63,网络相关命令,2019/12/6,64,光盘的基本使用,2019/12/6,65,光盘驱动器设备文件/dev/cdrom挂载光盘使用mount命令#mount-tiso9660/dev/cdrom/media/cdrom/光盘内容的读取使用命令访问光盘挂载点目录#ls/media/cdrom/卸载光盘使用umount命令#umount/dev/cdrom,光盘驱动器托盘的弹出与收回,2019/12/6,66,弹出光盘驱动器托盘#eject收回光盘驱动器托盘#ejectt,光盘镜像文件操作,2019/12/6,67,使用cp命令制作光盘镜像文件#cp/dev/cdrommydatacd.iso使用mount命令挂载光盘镜像文件#mount-oloop-tiso9660mydatacd.iso/media/cdrom/通过挂载点目录访问ISO镜像文件的内容#ls/media/cdrom/使用umount命令卸载光盘镜像文件#umount/media/cdrom/,U盘的使用方法,2019/12/6,68,识别USB存储设备包括USB硬盘、U盘、MP3播放器等/dev/sda/dev/sdb#fdisk-l使用mount命令挂载U盘#mount-tvfat/dev/sda1/mnt/通过挂载点目录访问U盘的内容#ls/mnt使用umount命令卸载U盘#umount/mnt,tar命令建立归档,2019/12/6,69,对文件和目录进行归档$tarcfmyfiles.tarfiles/对文件和目录进行压缩归档$tarczfmyfiles.tar.gzfiles/,查看归档中的文件列表,2019/12/6,70,查看归档文件中的目录列表$tartfmyfiles.tar.gz查看压缩归档文件中的目录列表$tartzfmyfiles.tar,恢复归档文件,2019/12/6,71,恢复归档文件$tarxfmyfiles.tar恢复压缩的归档文件$tarxzfmyfiles.tar.gz恢复归档文件到指定目录$tarxzfmyfiles.tar.gz-Crestore/,创建、查看、恢复归档和压缩文件,2019/12/6,72,归档和压缩tarcvfredhat.tarredhattarz(j)cvfredhat.tar.gz(bz2)redhat查看归档和压缩文件tartvfredhat.tartartz(j)vfredhat.tar.gz(bz2)恢复归档文件和压缩文件tarxvfredhat.tartarz(j)xvfredhat.tar.gz(bz2),Linux软件的安装,目前在Linux界软件安装方式最常见方法是:dpkg最早是由DebianLinux社群所开发出来的,透过dpkg的机制,Debian提供的软件就能够简单的安装起来,同时还能提供安装后的软件信息。只要是衍生于Debian的其他Linux发行版大多使用dpkg这个机制来管理软件,如B2D、Ubuntu等等。RPM最早是由RedHat这家公司开发出来的,很多Linux发行版使用该机制来作为软件安装的管理方式,如Fedora、CentOS、SuSE等等。,2019/12/6,73,Linux软件的在线升级,2019/12/6,74,目前新的Linux开发商都有提供这样的线上升级机制,透过这个机制,原版光盘(ISO)就只有第一次安装时需要用到而已,其他时候只要有网路,妳就能够取得原本开发商所提供的任何软件了呢!在dpkg管理机制上就开发出APT的线上升级机制,RPM则依开发商的不同,有RedHat系统的yum,SuSE系统的YastOnlineUpdate(YOU),Mandriva的urpmi软件等。,Linux软件包安装,2019/12/6,75,Linux软件包信息查询,2019/12/6,76,Linux软件包卸载,2019/12/6,77,Debian下使用alien处理RPM包,2019/12/6,78,alien可处理.deb、.rpm、.slp、.tgz等格式文件的格式转换或安装。在Debian系Linux下安装非Debian系包时,可使用alien进行安装。安装alien包:apt-getinstallalien在Debian安装RPM包:alien-iquota-3.12-7.i386.rpm制作成deb的包格式:alien-dquota-3.12-7.i386.rpm制作成rpm的包格式:alien-rquota_3.12-6_i386.deb,APT,2019/12/6,79,YUM,2019/12/6,80,Ubuntu常用ROOT命令,2019/12/6,81,用户管理命令,2019/12/6,82,用户帐号管理,2019/12/6,83,建立用户帐号#adduserst01设置用户口令#passwdst01删除用户帐号#userdel-rst01设置用户帐号属性锁定用户帐号禁止登录#usermod-Lst01,用户组管理命令及文件,2019/12/6,84,用户组帐号管理,2019/12/6,85,添加用户组#groupaddclass1在建立用户时指定用户组#adduser-gclass1st03更改用户的组帐号#usermod-gclass1st01删除用户组#groupdelclass1,用户帐号相关文件和目录,2019/12/6,86,用户帐号信息保存在passwd文件中/etc/passwd用户的加密口令保存在shadow文件中/etc/shadow用户的宿主目录是home目录中与用户名称相同的目录/home/teacher用户的初始配置文件来在skel目录(配置模版)/etc/skel,查看文件的权限属性,2019/12/6,87,文件权限(-rw-r-r-),#ls-linstall.log-rw-r-r-1rootroot26195Dec1710:42install.log,使用chmod命令更改文件属性,2019/12/6,88,chmod命令用于更改文件对于某类用户的操作权限chmodugoa.+-=rwxFILE.,文件权限设置实例,2019/12/6,89,使用chmod命令设置文件权限查看文件权限$ls-lafile-rw-rw-r-1st01class10Apr316:52afile增加文件属主st01的执行权限(x)$chmodu+xafile去除文件属组class1的写权限(w)$chmodg-wafile设置其他用户的文件权限为可执行$chmodo=xafile,设置文件属主和属组,2019/12/6,90,chown命令用于设置文件的属主和属组命令格式chownOWNER:GROUPFILE.设置文件afile的属主为用户st01#chownst01afile设置文件afile的属组为用户组class1#chown:class1afile设置文件afile的属主为st03,并设置文件的属组为class2#chownst03:class2afile,文本编辑器vi,2019/12/6,91,vi是在Linux操作系统的字符界面下使用的全屏幕文本编辑器。和常用的图形界面下的文本编辑器不同,它只能编辑字符,不能对字体和段落进行排版,没有菜单,只有命令,而且命令繁多。但是,由于在字符界面下操作Linux可以使用户更好地了解Linux的运行状况,保证各项设定的正确执行,因此,常用vi来编辑和修改文件内容,实现系统管理、系统设定、服务器参数设定等工作。vi仍旧是Unix/Linux系列操作系统中非常重要的文本编辑器,也可以说是一款非常经典的字处理软件。提示:Linux系统中的参数文件几乎都是ASCII码的纯文本文件,因此利用任何一款文本编辑软件都可以修改Linux的参数文档。,文本编辑器vi的三种模式,命令模式(又称为一般模式):当用vi打开一个文件时,默认的工作模式就是命令模式。编辑模式:按下“i,I,o,O,a,A,r,R”等字母之后可以进入编辑模式。最后行模式(又称为末行模式):在命令模式中输入“:”就可以将光标移动到屏幕最后一行。,2019/12/6,92,vi三种工作模式的相互转换关系,2019/12/6,93,命令模式,编辑模式,最后行模式,ESC,自动返回,i,o,a,:/,移动光标,查找,替换,删除字符,删除整列,复制整列,粘贴整列。,可输入任何字符。,保存文件,退出vi。,vi三种模式,进入vi的命令模式,启动vi的命令格式为:vi文件说明:如果不指定文件或者指定的文件不存在,则新建一个文件;如果指定的文件存在,则打开该文件在vi的命令模式下所有输入的字母都被当作编辑命令解释并执行,而不会在屏幕上显示。如果行首有“”符号,则表示此行为空行。,2019/12/6,94,进入vi的命令模式,举例:建立一个名为test.txt的文件roottestroot#vitest.txt打开的vi界面分为两部分:编辑区和命令/状态区最后一行左下角显示这个文件的当前状态:如果是新建文件,则显示“文件名”NewFile;如果是已存在文件,则显示当前文件的名称,行数和字符数,如“文件名”XL,XXC,2019/12/6,95,进入vi的编辑模式,在命令模式下,只要输入i,I,o,O,a,A任何一个字母就可以进入编辑模式。在编辑模式中,最后一行的左下角会出现-INSERT-字样,这表明此时在编辑区可以输入任意字符要想退出编辑模式,只需要按下ESC键即可,2019/12/6,96,进入最后行模式,在命令模式下输入“:”,光标会移动到最后一行,在该模式下,可以实现字符的替换,设置行号,保存文件并退出vi等操作例如“:wq”表示存盘并退出当前vi,2019/12/6,97,VI命令模式下有关光标移动的命令,2019/12/6,98,VI命令模式下有关光标移动的命令,2019/12/6,99,命令模式下有关查找和替换的命令,2019/12/6,100,命令模式下的删除、复制和粘贴,2019/12/6,101,VI编辑模式下有关光标移动的命令,vi编辑器中“上下左右”变为“ABCD”的问题先卸载vim-tiny:sudoapt-getremovevim-common再安装vimfull:sudoapt-getinstallvim这是因为ubuntu预装的是vimtiny版本,安装vimfull版本即可解决。,2019/12/6,102,编辑模式下的常用命令,2019/12/6,103,最后行模式下的常用命令,2019/12/6,104,最后行模式下的常用命令,2019/12/6,105,第2章嵌入式Linux编程基础,2019/12/6,106,Linux程序开发过程,2019/12/6,107,编辑,编译,链接,运行,调试,对源代码进行编辑,VI(GEDIT),对源代码编译,生成目标程序,GCC,将分散的模块组成一个可执行的整体,运行编译好的程序./目标文件名,调试运行时的错误GDB,初识GCC,GNUprojectCandC+CompilerGNUCompilerCollectiongcc是一个全功能的ANSIC兼容编译器,它是所有UNIX系统可用的C、C+编译器。gcc是可以在多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器相比平均效率要高20%30%。,2019/12/6,108,GCC安装,确认网络正常连接;在终端界面中输入指令:sudoapt-getinstallbuild-enssential或sudoapt-getinstallgcc中间需要输入两次或一次:Y后就会自动安装。安装完毕后输入以下指令查看GCC是否安装成功。gccversion或gcc-v,2019/12/6,109,GCC与G+的关系,GCC用于编译多种语言编写的程序,主要是C;G+用于编译C+程序,以GCC为基础,编译过程中加入了C+的支持库,参数与GCC基本一致;可以利用GCC编译C+程序,但是需要在参数中加入引用的C+库,比如libstdc+(如gcc-ooutlstdc+main.cc)。,2019/12/6,110,GCC编译处理流程,预处理(Preprocessing):分析各种预处理命令,如#define,#include,#if等;编译(Compilation):根据输入文件产生汇编语言程序;汇编(Assembly):将汇编语言输入,产生扩展名为.o的目标文件;链接(Linking):以.o目标文件,库文件作为输入,生成可执行文件(在Linux系统中,可执行文件没有统一的后缀,其主要由文件的属性来区分)。,2019/12/6,111,源程序文件(.h,.c,.cc,.etc),经预处理的文件(.i,.ii),汇编语言文件(.s),目标文件(.o),可执行程序(.out),GCC文件类型,.c为后缀的文件,C语言源代码文件;.a为后缀的文件,是由目标文件构成的静态库文件;.so为后缀的文件,是由目标文件构成的动态库文件;.C,.cc或.cxx为后缀的文件,是C+源代码文件;.h为后缀的文件,是程序所包含的头文件;.i为后缀的文件,是已经预处理过的C源代码文件;.ii为后缀的文件,是已经预处理过的C+源代码文件;.m为后缀的文件,是Objective-C源代码文件;.o为后缀的文件,是编译后的目标文件;.s为后缀的文件,是汇编语言源代码文件;.S为后缀的文件,是经过预编译的汇编语言源代码文件。,2019/12/6,112,GCC的常用选项,2019/12/6,113,GCC的常用选项,2019/12/6,114,GCC的常用选项,2019/12/6,115,GCC的常用选项,2019/12/6,116,常见的预编译指令,#include指令:头文件包含指令#define指令:宏定义指令#if、#else和#endif指令:条件编译指令,2019/12/6,117,#include指令:头文件包含指令,该指令指示编译器将xxx.xxx文件的全部内容插入此处。若用括起文件则在系统的INCLUDE目录中寻找文件,若用括起文件则在当前目录中寻找文件。一般来说,该文件是后缀名为“h”或“cpp”的头文件。一般为/usr/include路径注意:不会在当前目录下搜索头文件,如果我们不用而用把头文件名扩起,其意义为在先在当前目录下搜索头文件,再在系统默认目录下搜索。,2019/12/6,118,#define指令:宏定义指令,该指令常用有二种用法:第一种是定义标识,标识有效范围为整个程序,形如#defineXXX,常与#if配合使用;第二种是定义常数,如#definemax100,则max代表100;注意:这
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农业无人机租赁市场2025年行业竞争格局与市场趋势研究报告
- 光伏电站智能化运维与发电量提升策略在光伏电站智能优化中的应用报告
- 汽车行业营销策略规划
- 2025年生态旅游区社会稳定风险评估及应对策略报告
- 2025年汽车共享出行平台运营成本控制与用户流失率降低策略报告
- 2025年财富管理行业客户需求与服务升级财富管理平台优化策略报告
- 生鲜零售企业2025年供应链冷链物流与冷链物流管理研究报告
- 2025年新能源安全生产标准化建设技术创新与行业规范
- 共享民宿行业2025年城市旅游住宿市场互联网+背景下的项目可行性分析报告
- 农业绿色发展政策与技术:2025年节水农业技术研究报告
- 生育津贴相关管理办法
- 2023-2025年中考语文试题分类汇编:记叙文阅读(辽宁专用)解析版
- 2025年公路检测工程师《水运结构与地基》试题及答案
- 数控机加工技术知识培训课件
- 隔爆水棚替换自动隔爆装置方案及安全技术措施
- (2025年标准)菜地赔偿协议书
- 郎飞结相关性疾病
- 2025年事业单位工勤技能-广西-广西造林管护工三级(高级工)历年参考题库含答案解析(5卷套题【单选100题】)
- 2025年苏教版新教材数学二年级上册教学计划(含进度表)
- 泌尿外科规培生入科宣教
- 支气管镜入门图谱
评论
0/150
提交评论