您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 第6章 Linux操作系统概述
嵌入式系统与应用第6章Linux操作系统概述2020/1/2022020/1/20嵌入式系统与应用教学要点1.Linux的内核代码结构2.Linux的内核结构3.Linux的设备管理4.Linux的模块机制32020/1/20嵌入式系统与应用内核装入(引导之前)引导扇内容:arch/i386/boot/boot.S紧随其后的内容:arch/i386/boot/setup.S。负责全部内核的读入及部分硬件初始化同时还有arch/i386/boot/video.S对显卡进行检测setup.S将整个内核读入后,进入保护模式,并用arch/i386/boot/compressed/head.S的decompress_kernel来解压缩内核然后加上arch/i386/kernel/head.S形成全部内核,并从此处开始,然后调用函数start_kernel(在/init/main.c中)1Linux的内核代码结构42020/1/20嵌入式系统与应用内核引导初始化Start_kernel(init/main.c)完成大量的初始化工作,包括各种数据结构的初始化,创建init进程(1号进程),而start_kernel函数本身以0号任务(空闲任务)形式继续,完成用cpu_idle调用idle的无限循环。init进程创建内核级进程:bdflush(fs/buffer.c中)和kswapd(mm/vmscan.c中),进程号为2,3。然后init进程调入/sbin/init可执行体。内核源代码的物理分布52020/1/20嵌入式系统与应用进程管理kernel目录Sched.c:调度程序,schedule函数进程控制:fork.c(do_fork())exit.csignal.c模块化:module.cksyms.c其它:time.cpanic.cresource.csys.cdma.csysctl.csoftirq.citimer.c62020/1/20嵌入式系统与应用内存管理mm目录分页和置换□swap.c处理命令swap□swap_state.c置换高速缓存□swapfile.c置换设备的管理□Vmscan.c分页(kswapd找置换页的守护进程)分配和释放□kmalloc.c内核空间的分配和释放□page_alloc.c分配页面□vmalloc.c虚拟空间的分配、释放vmalloc,vremap,vfree内存映射□filemap.c实现常规文件的映射□mmap.c:do_mmap,do_munmap,sys_brk72020/1/20嵌入式系统与应用fs目录及文件系统exec.c二进制文件格式(Exec)devices.c设备注册,取消注册(open,release)block_dev.c读写块设备的缺省方法super.c与超级块有关,定义VFS统一接口inode.c高速缓冲的实现,读写inode例程等dcache.c目录的高缓实现namei.c依据名字找到索引节点号file_table.c负责file结构的分配和释放,get_empty_filp被open,pipe,socket调用open.c包括sys_open,sys_close,chown,chmodread_write.c包含文件的读写read,writefcntl.c,ioctl.c控制函数ioctl系统调用82020/1/20嵌入式系统与应用其它IPC:util.c,sem.c,shm.c,msg.c设备驱动程序:drivers/char字符设备□n_tty.cmisc.c等drivers/block块设备□genhd.c分区表□ll-rw-block.c物理数据的传送drivers/sound声卡drivers/net网络net_init.c等92020/1/20嵌入式系统与应用更改系统内核变更系统内核的方法直接修改内核源代码,然后重新编译应用内核模块直接修改源代码Linux源代码就是一个大型的软件系统,其各文件及目录等由Makefile组织起来,所以Makefile用来控制这一系统102020/1/20嵌入式系统与应用内核重编译内核的配置:选择哪些模块要编译进内核,哪些不编译进去方法在源代码中#ifdefCONFIG_MOD1MOD1的代码#endif在Makefile中#ifdefCONFIG_MOD1OBJS=OBJSmod1.o#endif112020/1/20嵌入式系统与应用内核配置所谓内核配置就是提供用户接口,让用户来设置这些宏echoMOD1[y/n]?readyesnoifyesno==yCONFIG_MOD1=yendif在Linux下进行内核配置时敲入makeconfig(xconfig,menuconfig),在Makefile中存在这些目标其功能为列出配置选项,根据用户输入的y或n来设置相应的宏可以是否选择支持网络,支持哪些设备,支持哪些文件系统等122020/1/20嵌入式系统与应用开始编译准备工作makeclean:清除前一次编译时生成的中间文件makedep:确定文件间的依赖关系开始编译makezImage:产生内核映像文件makebzImage:如果是大内核模块支持makemodulesMakemodules_install编译完成后,会在arch/{ARCH}/boot下产生新的内核映像文件132020/1/20嵌入式系统与应用用新内核重新启动将内核映像文件拷贝到/boot下且起名为zImage修改/etc/lilo.conf文件添加:image=/boot/zImagelabel=new运行lilo命令,使这一设置生效重新启动,并在lilo处敲入new即可142020/1/20嵌入式系统与应用Makefile的分析内核源代码分布到各个目录中,如kernel,mm中。一般在每个目录下都有Makefile。Linux就是用这些Makefile的配合来完成对内核的管理。从zImage开始逐层自己分析152020/1/20嵌入式系统与应用2Linux的内核结构162020/1/20嵌入式系统与应用用户空间之下是Linux内核空间,可以进一步划分成3层。最上面是系统调用接口,它实现了一些基本的功能,系统调用接口之下是内核代码,可以更精确地定义为独立于体系结构的内核代码。在这些代码之下是依赖于体系结构的代码,构成了通常称为BSP(BoardSupportPackage)的部分。它提供了连接内核的系统调用接口,还提供了在用户空间应用程序和内核之间进行转换的机制。172020/1/20嵌入式系统与应用Linux内核的主要子系统Linux内核的一个体系结构:182020/1/20嵌入式系统与应用系统调用接口系统调用接口(SCI)层提供了某些机制执行从用户空间到内核的函数调用。这个接口依赖于体系结构。SCI实际上是一个非常有用的函数调用多路复用和多路分解服务。192020/1/20嵌入式系统与应用进程管理进程管理的重点是进程的执行。在内核中,这些进程称为线程,代表了单独的处理器虚拟化(线程代码、数据、堆栈和CPU寄存器)。在用户空间,通常使用进程这个术语,不过Linux实现并没有区分这两个概念(进程和线程)。202020/1/20嵌入式系统与应用2.4版调度器的特点:交互式作业优先轻载条件下调度/唤醒的高性能公平共享基于优先级调度高CPU使用率SMP高效亲和实时调度和CPU绑定等调度手段212020/1/20嵌入式系统与应用2.6调度系统从设计之初就把开发重点放在更好满足实时性和多处理机并行性上,并且基本实现了设计目标。新特性:O(1)调度算法,调度器开销恒定(与当前系统负载无关),实时性能更好高可扩展性,锁粒度大幅度减小新设计的SMP亲和方法优化计算密集型的批处理作业的调度重载条件下调度器工作更平滑子进程先于父进程运行等其他改进222020/1/20嵌入式系统与应用内存管理内核所管理的另外一个重要资源是内存。为了提高效率,如果由硬件管理虚拟内存,内存是按照所谓的内存页方式进行管理的(对于大部分体系结构来说都是4KB)。Linux包括了管理可用内存的方式,以及物理和虚拟映射所使用的硬件机制。Linux提供了对4KB缓冲区的抽象,例如slab分配器。这种内存管理模式使用4KB缓冲区为基数,然后从中分配结构,并跟踪内存页使用情况,比如哪些内存页是满的,哪些页面没有完全使用,哪些页面为空。这样就允许该模式根据系统需要来动态调整内存使用。232020/1/20嵌入式系统与应用虚拟文件系统虚拟文件系统(VFS)为文件系统提供了一个通用的接口抽象。VFS在SCI和内核所支持的文件系统之间提供了一个交换层。242020/1/20嵌入式系统与应用虚拟文件系统在VFS上面,是对诸如open、close、read和write之类的函数的一个通用API抽象。在VFS下面是文件系统抽象,它定义了上层函数的实现方式。文件系统层之下是缓冲区缓存,它为文件系统层提供了一个通用函数集。这个缓存层通过将数据保留一段时间从而优化了对物理设备的访问。252020/1/20嵌入式系统与应用网络协议栈Linux操作系统的最大特性之一就是它的网络栈。它最初源于BSD的网络栈,具有一套非常干净的接口,组织得非常好。其接口范围从协议无关层(例如通用socket层接口或设备层)到各种网络协议的具体层。262020/1/20嵌入式系统与应用网络协议栈272020/1/20嵌入式系统与应用网络协议栈最上面是用户空间层,或称为应用层,其中定义了网络栈的用户。底部是物理设备,提供了对网络的连接能力。中间是内核空间,即网络子系统。流经网络栈内部的是socket缓冲区sk_buffs),它负责在源和汇点之间传递报文数据。282020/1/20嵌入式系统与应用3Linux的设备管理系统中的所有硬件设备看起来都和一般的文件一样,它们可以使用处理文件的标准系统调用来打开、关闭和读写。系统中的每一个设备都由一个设备文件来代表,设备文件名由主设备号和从设备号组成。例如,主IDE硬盘的设备文件是/dev/hda。一个设备驱动程序控制的所有设备有一个相同的主设备号,通过不同的从设备号来区分设备和它们的控制器。例如,主IDE硬盘的每一个分区都有一个不同的从设备号,这样主IDE硬盘的第二个分区的设备文件是/dev/hda2。Linux系统使用主设备号和系统中的一些表来将系统调用中使用的设备文件映射到设备驱动程序中。292020/1/20嵌入式系统与应用设备的分类Linux系统支持三种类型的硬件设备字符设备:字符设备是直接读取的,不必使用缓冲区。块设备:块设备每次只能读取一定大小的块的倍数,通常一块是512或者1024字节。块设备通过缓冲区读写,并且可以随机地读写。块设备可以通过它们的设备文件存取,但通常是通过文件系统存取。只有块设备支持挂接的文件系统。网络设备:网络设备是通过BSD套接字接口存取的。302020/1/20嵌入式系统与应用Linux设备驱动的特点Linux系统支持多种设备,这些设备的驱动程序之间有一些共同的特点:内核代码:设备驱动程序是系统内核的一部分,所以如果驱动程序出现错误的话,将可能严重地破坏整个系统。内核接口:设备驱动程序必须为系统内核或者它们的子系统提供一个标准的接口。内核机制和服务:设备驱动程序利用一些标准的内核服务,例如内存分配等。可装入:大多数的Linux设备驱动程序都可以在需要时装入内核,在不需要时卸载。可设置:Linux系统设备驱动程序可以集成为系统内核的一部分,至于哪一部分需要集成到内核中,可以在系统编译时设置。动态性:当系统启动并且各个设备驱动程序初始化以后,驱动程序将维护其控制的设备。如果设备驱动程序控制的设备并不存在,也并不妨碍系统的运行。312020
本文标题:第6章 Linux操作系统概述
链接地址:https://www.777doc.com/doc-3203647 .html