看图说话:学习Linux内核(1)-ver-1.0
- 格式:ppt
- 大小:858.50 KB
- 文档页数:62
Linux 内核修改与编译图文教程11、实验目的针对Ubuntu10.04中,通过下载新的内核版本,并且修改新版本内核中的系统调用看,然后,在其系统中编译,加载新内核。
2、任务概述2.1 下载新内核/2.2 修改新内核系统调用添加新的系统调用函数,用来判断输入数据的奇偶性。
2.3 进行新内核编译通过修改新版内核后,进行加载编译。
最后通过编写测试程序进行测试3、实验步骤3.1 准备工作查看系统先前内核版本:(终端下)使用命令:uname -r23.2 下载最新内核我这里使用的内核版本是3.3 解压新版内核将新版内核复制到“/usr/src”目录下在终端下用命令:cd /usr/src进入到该文件目录解压内核:linux-2.6.36.tar.bz2,在终端进入cd /usr/src目录输入一下命令:bzip2 -d linux-2.6.36.tar.bz2tar -xvf linux-2.6.36.tar文件将解压到/usr/src/linux目录中3使用命令:ln -s linux-2.6.36 linux在终端下输入一下命令:sudo apt-get install build-essential kernel-package libncurses5-dev fakerootsudo aptitude install libqt3-headers libqt3-mt-dev libqt3-compat-headers libqt3-mt453.5 内核修改3.5.1添加新的系统调用在文件:usr/src/ linux /arch//x86/kernel/syscall_table_32.S 最后增加一个系统表项:.long sys_mycall3.5.2 添加系统调用号usr/src/linux/include/ asm-generic /unistd.h 中添加: #define _NR_mycall 245 #define NR_syscalls(343为先前在系统调用表中占用的位置,即为新添加的系统调用分配系统调用号为343)3.5.3添加系统调用的处理函数在usr/src/linux/kernel/sys.c中添加以下处理函数:3.6 清除从前编译内核时残留的.o 文件和不必要的关联(如果从前没有进行内核编译的话,则可以省略这一步)终端下切换至cd /usr/src/linux输入以下命令:63.7 asm、linux和scsi等链接是指向要升级的内核源代码# cd /usr/include/# rm -r asm linux scsi# ln -s /usr/src/linux/include/asm-generic asm# ln -s /usr/src/linux/include/linux linux# ln -s /usr/src/linux/include/scsi scsi73.8配置内核,修改相关参数3.8.1 如何配置内核参数?y:将该功能编译进内核。
linux内核升级图文攻略一、Linux内核概览Linux是一个一体化内核(monolithic kernel)系统。
设备驱动程序可以完全访问硬件。
Linux内的设备驱动程序可以方便地以模块化(modularize)的形式设置,并在系统运行期间可直接装载或卸载。
1. linux内核linux 操作系统是一个用来和硬件打交道并为用户程序提供一个有限服务集的低级支撑软件。
一个计算机系统是一个硬件和软件的共生体,它们互相依赖,不可分割。
计算机的硬件,含有外围设备、处理器、内存、硬盘和其他的电子设备组成计算机的发动机。
但是没有软件来操作和控制它,自身是不能工作的。
完成这个控制工作的软件就称为操作系统,在Linux的术语中被称为“内核”,也可以称为“核心”。
Linux内核的主要模块(或组件)分以下几个部分:. 进程管理(process management) . 定时器(timer). 中断管理(interrupt management). 内存管理(memory management). 模块管理(module management). 虚拟文件系统接口(VFS layer). 文件系统(file system). 设备驱动程序(device driver). 进程间通信(inter-process communication). 网络管理(network management. 系统启动(system init)等操作系统功能的实现。
2. linux内核版本号Linux内核使用三种不同的版本编号方式。
. 第一种方式用于1.0版本之前(包括1.0)。
第一个版本是0.01,紧接着是0.02、0.03、0.10、0.11、0.12、0.95、0.96、0.97、0.98、0.99和之后的1.0。
. 第二种方式用于1.0之后到2.6,数字由三部分“A.B.C”,A代表主版本号,B代表次主版本号,C代表较小的末版本号。
教你如何学习linux内核毫不夸张地说,Kconfig和Makefile是我们浏览内核代码时最为依仗的两个文件。
基本上,Linux 内核中每一个目录下边都会有一个Kconfig文件和一个Makefile文件。
对于一个希望能够在Linux内核的汪洋代码里看到一丝曙光的人来说,将它们放在怎么重要的地位都不过分。
我们去香港,通过海关的时候,总会有免费的地图和各种指南拿,有了它们在手里我们才不至于无头苍蝇般迷惘的行走在陌生的街道上。
即使在内地出去旅游的时候一般来说也总是会首先找份地图,当然了,这时就是要去买了,拿是拿不到的,不同的地方有不同的特色,只不过有的特色是服务,有的特色是索取。
Kconfig和Makefile就是Linux Kernel迷宫里的地图。
地图引导我们去认识一个城市,而Kconfig 和Makefile则可以让我们了解一个Kernel目录下面的结构。
我们每次浏览kernel寻找属于自己的那一段代码时,都应该首先看看目录下的这两个文件。
利用Kconfig和Makefile寻找目标代码就像利用地图寻找目的地一样,我们需要利用Kconfig和Makefile来寻找所要研究的目标代码。
比如我们打算研究U盘驱动的实现,因为U盘是一种storage设备,所以我们应该先进入到drivers/usb/storage/目录。
但是该目录下的文件很多,那么究竟哪些文件才是我们需要关注的?这时就有必要先去阅读Kconfig和Makefile文件。
对于Kconfig文件,我们可以看到下面的选项。
config USB_STORAGE_DATAFABbool "Datafab Compact Flash Reader support (EXPERIMENTAL)"depends on USB_STORAGE && EXPERIMENTALhelpSupport for certain Datafab CompactFlash readers.Datafab has a web page at </>.显然,这个选项和我们的目的没有关系。
Linux内核简要介绍(doc 9页)更多企业学院:《中小企业管理全能版》183套讲座+89700份资料《总经理、高层管理》49套讲座+16388份资料《中层管理学院》46套讲座+6020份资料《国学智慧、易经》46套讲座《人力资源学院》56套讲座+27123份资料《各阶段员工培训学院》77套讲座+ 324份资料《员工管理企业学院》67套讲座+ 8720份资料《工厂生产管理学院》52套讲座+ 13920份资料《财务管理学院》53套讲座+ 17945份资料《销售经理学院》56套讲座+ 14350份资料《销售人员培训学院》72套讲座+ 4879份资料器提供文件传输机制,而用户可以使用任何客户端程序;命令行的客户端和图形化界面的客户端都存在,并且谁都可以为传输文件写一个新的用户界面。
只要涉及到驱动程序,就会运用这样的功能划分。
软盘驱动程序是设备无关的——这不仅表现在磁盘是一个连续读写的字节数组上。
如何使用设备是应用程序要做的事:tar要连续地写数据,而mkfs则为要安装的设备做准备工作,mcopy 依赖于设备上存在的特殊数据结构。
在写驱动程序时,程序员应该特别留心这样的基本问题:我们要写内核代码访问硬件,但由于不同用户有不同需要,我们不能强迫用户采用什么样的特定策略。
设备驱动程序应该仅仅处理硬件,将如何使用硬件的问题留给应用程序。
如果在提供获得硬件能力的同时没有增加限制,我们就说驱动程序是灵活的。
不过,有时必须要作一些策略决策。
可以从不同侧面来看你的驱动程序:它是位于应用层和实际设备之间的软件。
驱动程序的程序员可以选择这个设备应该怎样实现:不同的驱动程序可以提供不同的能力,甚至相同的设备也可以提供不同能力。
实际驱动程序设计应该是在众多需求之间的一个平衡。
例如,不同程序可以同时使用同一个设备,而驱动程序的开发者可以完全自由地决定如何处理同步机制。
你可以实现到设备上的内存映射,而完成独立于硬件的具体能力,或者你可以提供给用户函数库,帮助应用程序的程序员在可用原语的基础上实现新策略,或者诸如此类的方法。
linux0.01内核Linux0.01内核分析的一点心得linux(linux教程linux培训)0.01内核基本上分析完了,高版本的内核也看了一点。
有一点心得与大家分享一下吧!这里我并不打算说具体的技术方面的东西,而是针对读内核的方法,谈谈自己一点感受。
我前段时间主要看的是0.01版本的内核。
Linux0.01是Linux 的"祖师爷"Linus完成的最早的一个Linux版本,其内核编译后仅仅只有512K,麻雀虽小,五脏俱全,0.01包括了从软盘启动、文件系统、控制台管理的操作系统完整功能,并提供了不少标准的用户接口,具体有kernel, boot, fs, init,mm等几个部分,没有网络部分。
为什么选择Linux0.01?各位大虾一看到0.01肯定直摇头:哎呀,都什么时代的东东了,有看的必要么?笔者当初选择0.01并没有太多的想法,只是Tm-linux小组刚开始选择的是0.01,于是就开始读吧,现在仔细想想,读Linux0.01对于初学者来说可能更容易上手些。
可能有下面的几个好处吧1)0.01的代码量较小。
很多同学都曾有成为Linux高手的欲望,也曾抱回若干砖头书,但Linux的发展何其之快,而coder 又是黑客型高手,往往坚持不了多长时间而中途放弃!2)0.01的代码简单而精简(这个简单当然是相对于后续版本而言的)。
实际上0.01完成的就是一个操作系统的最初的要求,包括启动,进程调度,内存管理等,而这些往往与硬件结合,在看高版本的内核时往往还没有接触到这些硬件知识,层层下调已经把你搞糊涂了。
3)从低版本看更能看到技术进步的源动力,比如0.01的内核很小,其启动代码可以只放在一个扇区内,而后续版本的内核较大,无法放入一个扇区内,于是压缩核心的装入方法诞生了。
再如内存管理,0.01的内存管理比较简单,内存的申请释放直接通过使用前申请,使用后释放,但考虑以后的版本功能复杂,如何解决可能的"外碎片"问题,如何解决内存不足的问题,于是对后续版本采用的"伙伴算法",slab技术,页面守护进程有更好的理解。
目录Practice1 (4)一编译过程 (4)1 安装必要的软件 (4)2 下载linux内核源文件 (4)3 解压缩源文件 (5)4 复制config文件 (6)5 进行menucofig配置 (6)6 menuconfig配置页面 (7)7 对驱动设置进行简单配置 (8)8 选择cpu类型 (8)9 设置完成保存退出 (9)10 开始编译内核 (9)11 内核编译过程 (10)12 内核编译过程(3小时后) (11)13 内核编译成功 (12)14 安装新内核 (12)15 新内核安装过程 (13)16 比较两个内核 (14)17 重新启动系统 (14)18 登录新内核 (15)19 新内核登录成功 (15)20 查看新内核版本号号 (16)二、编译过程中遇到的问题 (16)1 错误VFS:Unable to mount root (16)2错误Driver ‘mdio-gpio’ (18)Practice2 (20)一、内核选项翻译及选择理由 (20)1. General setup 常规设置 (20)二、裁剪过程 (21)1.进入设置界面 (21)2. General setup页设置 (22)3. Enable the block layer页设置 (23)4. Processor type and features页设置 (24)5. Power Management and ACPI options页设置 (28)6. Bus options页设置 (29)7. Executable file formats页设置 (30)8. Networking options页设置 (31)9. Device Drivers 页设置 (34)10. Firmware Drivers页设置 (37)11. File systems页设置 (38)12. Kernel hacking页设置 (40)13 CryptographicAPI页设置 (41)14. 裁剪后内核运行截图 (42)15. 内核大小9.6M (43)感受和体会 (44)Practice1一编译过程1 安装必要的软件代码: $sudo apt-get install build-essential kernel-package libncurses5-dev2 下载linux内核源文件/下载2.6.38.8full版3 解压缩源文件代码:$ mkdir src && tar jfx linux-2.6.25.10.tar.bz2 -C src/4 复制config文件命令:cp /boot/config-`uname -r` ./.config5 进行menucofig配置代码:$sudo make menuconfig6 menuconfig配置页面7 对驱动设置进行简单配置8 选择cpu类型9 设置完成保存退出10 开始编译内核代码:$ sudo make-kpkg -initrd --initrd --append-to-version=bo100 kernel_image kernel-headers11 内核编译过程12 内核编译过程(3小时后)13 内核编译成功14 安装新内核代码:$ sudo dpkg -i linux-image-2.6.38bo10015 新内核安装过程16 比较两个内核17 重新启动系统18 登录新内核19 新内核登录成功20 查看新内核版本号号二、编译过程中遇到的问题1 错误VFS:Unable to mount root描述:内核安装成功后,启动内核出现如下图错误原因:在执行内核安装的时候,initrd可能没有被安装出现以下错误如图,新版本的initrd并没有安装成功,vmlinu有两份,而initrd只有一份。
Linux内核的发展简史与系统层次结构图1说明Linux内核的发展简史:图1 Linux内核发展简史图2是Linux系统的层次结构:图2 Linux系统层次结构最上面是用户(或应用程序)空间。
这是用户应用程序执行的地方。
用户空间之下是内核空间,Linux 内核正是位于这里。
GNU C Library (glibc)也在这里。
它提供了连接内核的系统调用接口,还提供了在用户空间应用程序和内核之间进行转换的机制。
这点非常重要,因为内核和用户空间的应用程序使用的是不同的保护地址空间。
每个用户空间的进程都使用自己的虚拟地址空间,而内核则占用单独的地址空间。
Linux 内核可以进一步划分成3 层。
最上面是系统调用接口,它实现了一些基本的功能,例如read 和write。
系统调用接口之下是内核代码,可以更精确地定义为独立于体系结构的内核代码。
这些代码是Linux 所支持的所有处理器体系结构所通用的。
在这些代码之下是依赖于体系结构的代码,构成了通常称为BSP(Board Support Package)的部分。
这些代码用作给定体系结构的处理器和特定于平台的代码。
Linux 内核实现了很多重要的体系结构属性。
在或高或低的层次上,内核被划分为多个子系统。
Linux 也可以看作是一个整体,因为它会将所有这些基本服务都集成到内核中。
这与微内核的体系结构不同,后者会提供一些基本的服务,例如通信、I/O、内存和进程管理,更具体的服务都是插入到微内核层中的。
每种内核都有自己的优点,不过这里并不对此进行讨论。
随着时间的流逝,Linux 内核在内存和CPU 使用方面具有较高的效率,并且非常稳定。
但是对于Linux 来说,最为有趣的是在这种大小和复杂性的前提下,依然具有良好的可移植性。
Linux 编译后可在大量处理器和具有不同体系结构约束和需求的平台上运行。
一。
Linux 系统⽤户态和内核态Unix/Linux 的体系架构如上图所⽰,从宏观上来看,Linux 操作系统的体系架构分为⽤户态和内核态(或者⽤户空间和内核空间)。
内核从本质上看是⼀种软件-----控制计算机的硬件资源,并提供上层应⽤程序运⾏的环境。
⽤户态即上层应⽤程序的活动空间,应⽤程序的执⾏必须依托于内核提供的资源,包括CPU 资源、存储资源、I/O 资源等。
为了使上层应⽤能够访问到这些资源,内核必须为上层应⽤提供访问的接⼝:。
简单来说::运⾏在内核空间的进程的状态:运⾏在⽤户空间的进程的状态系统调⽤是操作系统的最⼩功能单位,这些系统调⽤根据不同的应⽤场景可以进⾏扩展和裁剪,现在各种版本的Unix 实现都提供了不同数量的系统调⽤,如Linux 的不同版本提供了240-260个系统调⽤,FreeBSD ⼤约提供了320个。
我们可以把系统调⽤看成是⼀种不能再化简的操作(类似于原⼦操作,但是不同概念),有⼈把它⽐作⼀个汉字的⼀个“笔画”,⽽⼀个“汉字”就代表⼀个上层应⽤,我觉得这个⽐喻⾮常贴切。
⼀个汉字有很多笔画组成,因此有时候如果要实现⼀个完整的汉字就必须调⽤很多的系统调⽤。
这有时是⼀件很崩溃的事情,⽐如说这个字,你可能认识,但是有⼏个⼈会写呢?:系统调⽤的封装应⽤程序直接使⽤系统调⽤,这势必会加重程序员的负担,良好的程序设计⽅法是:重视上层的业务逻辑操作,⽽尽可能避免底层复杂的实现细节。
那么有没有优化空间呢?库函数正是为了将程序员从复杂的细节中解脱出来⽽提出的⼀种有效⽅法。
它实现对系统调⽤的封装,将简单的业务逻辑接⼝呈现给⽤户,⽅便⽤户调⽤,从这个⾓度上看,库函数就像是组成汉字的“偏旁”。
这样的⼀种组成⽅式极⼤增强了程序设计的灵活性,对于简单的操作,我们可以直接调⽤来访问资源,如“⼈”;对于复杂操作,我们借助于来实现,如“仁”。
库函数依据不同的标准也可以有不同的实现版本,如ISOC 标准库,POSIX 标准库等。
一张图看懂Linux内核1. 前言本文主要讲解什么是Linux内核,以及通过多张图片展示Linux内核的作用与功能,以便于读者能快速理解什么是Linux内核,能看懂Linux内核。
拥有超过1300万行的代码,Linux内核是世界上最大的开源项目之一,但是内核是什么,它用于什么?一张图看懂Linux内核Linux内核是什么2. 什么是内核内核是与计算机硬件接口的易替换软件的最低级别。
它负责将所有以“用户模式”运行的应用程序连接到物理硬件,并允许称为服务器的进程使用进程间通信(IPC)彼此获取信息。
3. 内核还要分种类?是的,没错。
3.1 微内核微内核只管理它必须管理的东西:CPU、内存和IPC。
计算机中几乎所有的东西都可以被看作是一个附件,并且可以在用户模式下处理。
微内核具有可移植性的优势,因为只要操作系统仍然试图以相同的方式访问硬件,就不必担心您是否更改了视频卡,甚至是操作系统。
微内核对内存和安装空间的占用也非常小,而且它们往往更安全,因为只有特定的进程在用户模式下运行,而用户模式不具有管理员模式的高权限。
微内核3.1.1 Pros•可移植性•安装占用空间小•小内存占用•安全3.1.2 Cons•通过驱动程序,硬件更加抽象•硬件可能反应较慢,因为驱动程序处于用户模式•进程必须在队列中等待才能获得信息•进程不能在不等待的情况下访问其他进程3.2 单内核单内核与微内核相反,因为它们不仅包含CPU、内存和IPC,而且还包含设备驱动程序、文件系统管理和系统服务器调用等内容。
单内核更擅长于访问硬件和多任务处理,因为如果一个程序需要从内存或运行中的其他进程中获取信息,那么它就有一条更直接的线路来访问信息,而不需要在队列中等待来完成任务。
但是,这可能会导致问题,因为在管理模式下运行的东西越多,如果行为不正常,就会有越多的东西导致系统崩溃。
单内核3.2.1 Pros•更直接地访问程序的硬件•流程之间更容易通信•如果支持您的设备,它应该不需要额外安装就可以工作•进程反应更快,因为没有等待处理器时间的队列3.2.2 Cons•较大安装体积•较大内存占用•不太安全,因为所有操作都在管理模式下运行内核对比monolithic_vs_microkernel4. 混合的内核混合内核能够选择在用户模式下运行什么,以及在管理模式下运行什么。
包你能学会的技术:Linux内核入门集转载自网络步骤一:获取内核代码这年头,Linux成了一个时髦词。
自诩对电脑玩的精通的学生和IT人士们,没有哪个不在自己的电脑上安装一、两个Linux,并自觉赶上了时髦。
然而,在Ubuntu或SUSE的论坛中,经常有这样的对话:“你学Linux学了这么久,都学到了什么?”“哦,我现在Linux的安装、升级、桌面美化都很熟练!你看我这是最新版的Ubuntu,桌面很漂亮吧!”“……”Linux社区中有一句名言:如果你进入你的操作系统不知道该做什么,那最好还是关掉电脑,一定有更重要的事等着你去做。
说真的,如果对Linux命令不熟练,真的不能算是学过Linux。
然而另一方面,Linux内核虽然是一般用户可学可不学的内容,但可以说却是Linux操作系统中最好玩的部分。
尤其对于开发者而言,Linux内核开发绝对是最理想的磨练场所。
51CTO编辑一直认为,国外之所以IT技术大拿林立,和他们从小接触类UNIX系统、把玩内核开发是脱不了关系的。
下面是Linux内核开发者Robert Love写的一篇入门文章,号称“包教会”,推荐对Linux 内核开发感兴趣的学生、Linux爱好者、开发者以及系统管理员们一定不要错过。
当然,虽然标题说是包教会,你可能需要一定的Linux命令以及C语言的基础。
以下是正文内容:Linux内核一直都被视为学习Linux最难的一块,相信大家也一定看过不少关于内核的文章,但扪心自问,你现在究竟掌握了多少?本文将从零开始介绍被视为高深的Linux内核,内容涉及内核源代码的下载,编译,安装,以及内核开发相关的内容。
如何获取Linux内核源代码下载Linux内核当然要去官方网站了,网站提供了两种文件下载,一种是完整的Linux 内核,另一种是内核增量补丁,它们都是tar归档压缩包。
除非你有特别的原因需要使用旧版本的Linux内核,否则你应该总是升级到最新版本。
使用Git由Linus领头的内核开发队伍从几年前就开始使用Git版本控制系统管理Linux内核了(参考阅读:什么是Git?),而Git项目本身也是由Linus创建的,它和传统的CVS不一样,Git是分布式的,因此它的用法和工作流程很多开发人员可能会感到很陌生,但我强烈建议使用Git下载和管理Linux内核源代码。