LinuxKernel操作系统(OS)的概念一个系统管理程序,管理计算机的资源,给用户一个使用这种资源的平台一个服务程序,操作系统都是为用户应用程序服务的linux操作系统结构,服务的方法是通过系统调用systemcallLinux是一个多任务,跨平台的现代操作系统为何要有操作系统多任务的要求统一的服务插口linux操作系统结构,合理使用资源,如显存管理并发时对资源使用冲突减轻开发的难度安全性的要求网路(TCP/IP)的使用GUI的使用要求应用程序移植性的要求用户操作的便捷性操作系统的组成进程管理模块显存管理模块文件系统管理模块设备管理模块异常和中断管理模块网路合同模块进程管理进程(process)的概念系统的第一个进程Init用户进程怎么运行和退出记录进程的信息,进程控制块PCB系统调度,不同的系统有不同的策略用户进程步入系统的惟一途径,systemcall显存管理显存是系统资源的一种显存的分类SRAM,SDRAM,FB,Registers,外设片上显存化学显存的管理虚拟显存的管理,内核空间与用户空间内核与用户显存的分配显存碎片的形成和防止文件系统管理永久性储存设备,disk,flash,sd,cf分区、格式化及文件一个简单的文件系统的事例系统看储存地址是线性进程看待文件的统一化和具象化设备管理HAL层的概念,开放性的理念设备的驱动系统要记录和管理设备的存在安全使用设备设备是一种特殊的文件进程怎样使用设备,open/close,read/write,ioctl历史1991年由当时的英国中学生linustorvalds编撰并以GNUGPL的形式发布到Internet上,称为0.11版1994年,出1.0.0版本1996年,出2.0版本1999年,出2.2版本2001年,出2.4版本2003年,出2.6版本,至今都稳定在该版本的特性支持好多的体系结构,如X86,Arm,Mips等等,有极强的平台可伸缩性OpenSource(GNUGPL)设备独立性,系统把所有外部设备统一当成成文件来看待及操作系统软件层次结构中处理器的运行LinuxKernel初始化完毕后,程序运行在以下的上下文空间中:1)运行于用户空间linux定时器,执行用户程序2)运行于内核空间,处于当前进程的上下文3)运行于中断,处于中断上下文,与进程无关,由于中断的不可预知()文件的执行举例用户进程在用户空间,使用C库fread()读文件Fread()调用read()系统调用,步入系统空间,执行系统代码系统按照文件对储存设备进行数据恳求,在数据没打算就绪是让出CPU使其他进程运行。
储存设备数据打算就绪,向CPU发出中断恳求,CPU响应步入中断上下文,并唤起该文件的读进程在某时刻,读文件的进程再度运行,取到数据,返回用户空间获取Linux内核源代码从官方网站获取:,主要是X86平台的版本以BSP包的形式获取,主要在嵌入式的平台上用的方法补丁,从版本2.6.20升级到2.6.21#cd到2.6.20linux目录#patch–p1patch-2.6.21内核源码目录结构内核配置与编译交叉编译器:运行在一种体系的CPU(一般是X86)的编译器,对其编译的程序形成另外一种体系(如ARM/MIPS)的指令的编译器叫交叉编安装ARM交叉编译器#tarxzvfcrass-3.3.2.tgz把解开的目录的bin/目录的绝对路径降低到环境变量$PATH内核配置与编译安装ARMLinux2.6源码包#tarxzvfgec_linux-2.6.8.1.tgz内核配置与编译内核配置系统:配置命令#makeconfig(基于文本的最为传统的配置界面,不推荐使用)#makemenuconfig(基于文本菜单的配置界面,字符终端下推荐使用)#makexconfig(基于图形窗口模式的配置界面linux 安装,Xwindow下推荐使)#makegconfig(基于gtk的图形配置界面)这种命令形成的配置选项给用户,用户选择->退出->保存后形成.config文件,文件中包含有各类选择了的配置选项,以供Makefile使用,Makefile在会依照.config的选项来形成autoconf.h,autoconf.h是以C语言的方式定义的各编译选项,供kernel的源文件include内核配置与编译选择相应的配置时,有三种选择,它们分别代表的涵义如下:Y--将该功能编译进内核N--不将该功能编译进内核M--将该功能编译成模块,可以在须要时动态插入到内核中makexconfig,使用键盘就可以选择对应的选项。
makemenuconfig,则须要使用空格键进行选定。假如有不明白的地方,按[shift]+?的组合键来查看说明内核配置与编译配置的原则1)大部份选项可以使用其缺省值或则BSP选用缺省值,只有小部份须要依照用户不同的须要选择。2)将与内核其它部份关系较远且不常常使用的部份功能代码编译成为可加载模块。有利于减少内核的宽度,减少内核消耗的显存;3)不须要的功能就不要选;4)与内核关心紧密并且常常使用的部份功能代码直接编译到内核中。内核配置与编译配置工作过程:Makefile分布在Linux内核源代码中的Makefile,定义Linux内核的编译规则;顶楼目录的Makefile管理整个Linux内核的配置编译。配置工具不同的内核配置方法,通过不同的配置工具完成。script目录下提供了这种配置工具。如menuconfig目标使用mconf。Kconfig文件arch/$(ARCH)/Kconfig文件是主Kconfig文件,主Kconfig文件调用其他目录的Kconfig文件。这种Kconfig文件产生树形关系-->树形菜单。内核配置与编译配置工作过程:当用户执行配置命令,Makefile调用配置工具mconf,mconf从arch/$(ARCH)/Kconfig开始搜索各目录中的Kconfig文件,并按照这种文件形成图形化的配置界面,给用户进行配置Kconfig文件是形成.config文件的输入文件,也就是说.config中的选项是由Kconfig决定的这是Linux2.6内核独有的配置系统用户可以按照须要降低和更改其中的配置选项Linux2.6内核配置与编译配置的注意选项Codematurityleveloptions应当选择incompletecode/drivers这将会在设置界面中显示还在开发或则还没有完成的代码与驱动.由于有许多设备可能必需选择这个选项能够进行配置,实际上它是安全2.6内核配置与编译配置的注意选项Generalsetupanonymousmemory(swap)该选择这个选项将使你的内核支持虚拟显存。
Pc上应当选择,而嵌入式上通常不选IPC应当选择为进程提供通讯机制。有些程序只有在选Y的情况下才会运行,这儿一定要选。POSIXMessageQueuesPOSIX的消息队列,它同样是一种IPC,应当选择hot-pluggabledevices支持热拔插的,若是为普通笔记本配置内核,则最好选择Linux2.6内核配置与编译配置的注意选项LoadablemodulesupportEnableloadablemodulesupport应当选择这个选项可以让你的内核支持模块。通常一些不常用到的驱动或特点可以编译为模块以降低内核的容积。Moduleunloading应当选择这个选项可以让你卸载不再使用的模块,倘若不选的话你将不能卸载任何模块Forcedmoduleunloading强行卸载模块,可以把正在使用中的模快卸载掉。做内核开发或则驱动开发的时侯,有一定的用处。但通常用户不应当选择。Linux2.6内核配置与编译配置的注意选项ExecutablefileformatsKernelsupportELFbinaries一定要选DeviceDriversMemoryTechnologyDevices(MTD)储存设备层,大部份的flash芯片驱动都基于MTD。
用于嵌入式系統。BlockdevicesLoopbackdevicesupport可以将一个文件挂成一个文件系统。mountiso文件Linux2.6内核配置与编译配置的注意选项filesystems必须将根文件系统直接编译到内核中。而且在这儿选择系统支持的文件系统。Linux2.6内核配置与编译cd到ARMLinux2.6的安装目录中#make在当前目录上将形成vmlinux即为内核文件#makemodules#makemodules_install将形成在内核代码树中以模块形式编译的模块Linux内核启动流程init/main.cstart_kernel()中断系统初始化trap_init(),init_IRQ()各设备驱动和网路初始化do_basic_setup()构建系统第一个init进程exec(“/sbin/init”,…)