LINUX内核移植和编译Word下载.docx
- 文档编号:13830531
- 上传时间:2022-10-13
- 格式:DOCX
- 页数:30
- 大小:932.54KB
LINUX内核移植和编译Word下载.docx
《LINUX内核移植和编译Word下载.docx》由会员分享,可在线阅读,更多相关《LINUX内核移植和编译Word下载.docx(30页珍藏版)》请在冰豆网上搜索。
12280213
指导教师:
马维俊
成绩:
摘要
嵌入式系统是面向用户、面向产品、面向应用的,它必须与具体应用相结合才会具有生命力、才更具有优势。
因此可以这样理解上述三个面向的含义,即嵌入式系统是与应用紧密结合的,它具有很强的专用性,必须结合实际系统需求进行合理的裁减利用。
嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可定制,适用于不同应用场合,对功能,可靠性,成本,体积,功耗有严格要求的专用计算机系统。
它一般由嵌入式微处理器,外围硬件设备,嵌入式操作系统,用户应用程序4个部分组成。
它在于结合微处理器或微控制器的系统电路与其专用的软件,来达到系统运作效率成本的最优化。
用于实现对其他设备的控制,监视或管理等功能。
嵌入式系统已经广泛应用于科学研究,工业控制,军事技术,交通通信,医疗卫生,消费娱乐等领域,人们常用的手机,PDA,汽车,智能家电,GPS等均是嵌入式系统的典型代表。
而Linux内核移植是嵌入式系统不可缺少的步骤,一个真正的嵌入式系统要完成一些功能,必须有相应的程序支持。
关键词:
Linux内核、编译、程序
前言
操作系统是一个用来和硬件打交道并为用户程序提供一个有限服务集的低级支撑软件。
一个计算机系统是一个硬件和软件的共生体,它们互相依赖,不可分割。
计算机的硬件,含有外围设备、处理器、内存、硬盘和其他的电子设备组成计算机的发动机。
但是没有软件来操作和控制它,自身是不能工作的。
完成这个控制工作的软件就称为操作系统,在Linux的术语中被称为“内核”,也可以称为“核心”。
Linux内核的主要模块(或组件)分以下几个部分:
存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信,以及系统的初始化(引导)、系统调用等。
Linux内核本身并不是操作系统,它是一个完整操作系统的组成部分。
RedHat、Novell、Debian和Gentoo等Linux发行商都采用Linux内核,然后加入更多的工具、库和应用程序来构建一个完整的操作系统。
内核既是操作系统的心脏,也是它的大脑,因为内核控制着基本的硬件内核是操作系统的核心,具有很多最基本功能,如虚拟内存、多任务、共享库、需求加载、共享的写时拷贝(copy-on-write)可执行程序和TCP/IP网络功能。
一.基本原理
1.1.Linux发展历史
自1991年11月由芬兰的LinusTtorvalds推出Linux0.1.0版内核至今,Linux内核已经升级到Linux2.6.31(写本文档时,www.kernel.org发布的最新版Linux内核)。
其发展速度是如此的迅猛,是目前市场上唯一可以挑战Windows的操作系统。
如图1.1.1所示
图1.1.1Linux内核发展
Linux内核在其发展过程中得到分布于全世界的广大OpenSource项目追随者的大力支持。
尤其是一些曾经参与Unix开发的人员,他们把应用于Unix上的许多应用程序移植到Linux上来,使得Linux的功能得到巨大的扩展。
目前比较稳定的版本是Linux2.6.24。
在Linux的版本号中,第一个数为主版本号。
第二个为次版本号。
第三个为修订号。
次版本号为偶数表明是稳定发行版本,奇数则是在开发中的版本。
随着其功能不断加强,灵活多样的实现加上其可定制的特性以及开放源码的优势,Linux在各个领域的应用正变得越来越广泛。
目前Linux的应用正有舍去中间奔两头的趋势,即在PC机上Linux要真正取代Windows,或许还有很长的路要走,但在服务器市场上它已经牢牢站稳脚跟。
而随着嵌入式领域的兴起更是为Linux的长足发展提供了无限广阔的空间。
目前专门针对嵌入式设备的Linux改版就有好几种。
包括针对无MMU的uClinx和针对有MMU的标准LINUX在各个硬件体系结构的移植版本。
基于像S5PV210这样的S5PV210内核的ARM-LINUX使用了MMU的内存管理,对进程有保护,提高了嵌入式系统中多进程的保护能力。
使用户应用程序的可靠性得以提高,降低了用户的开发难度。
1.2.Linux内核目录结构
UP-CUP210-II型网关部分平台运行的Linux内核版本为linux-2.6.35.7,其源码目录结构如图:
Ø
arch
与体系结构相关的代码全部放在这里,如图所示,我们的实验设备中使用的是其中的arm目录。
Documentation
这里存放着内核的所有开发文档,如图所示,其中的文件会随版本的演变发生变化,通过阅读这里的文件是获得内核最新的开发资料的最好的地方。
Drivers
此目录包括所有的驱动程序,如图所示,下面又建立了多个目录,分别存放各个分类的驱动程序源代码。
下面的截图是drivers目录文件列表。
drivers目录是内核中最大的源代码存放处,大约占整个内核的一多半。
其中我们经常会用到的目录有:
Drivers/char
字符设备是drivers目录中最为常用,也许是最为重要的目录,因为其中包含了大量与驱动程序无关的代码。
通用的tty层在这里实现,console.c定义了linux终端类型,vt.c中定义了虚拟控制台;
lp.c中实现了一个通用的并口打印机的驱动,并保持设备无关性;
kerboard.c实现高级键盘处理,它导出handle_scancode函数,以便于其他与平台相关的键盘驱动使用。
我们的大部分实验也是放在这个目录下。
Driver/block
其中存放所有的块设备驱动程序,也保存了一些设备无关的代码。
如rd.c实现了RAM磁盘,nbd.c实现了网络块设备,loop.c实现了回环块设备。
Drives/ide
专门存放针对IDE设备的驱动。
Drivers/scsi
存放SCSI设备的驱动程序,当前的cd刻录机、扫描仪、U盘等设备都依赖这个SCSI的通用设备。
Drivers/net
存放网络接口适配器的驱动程序,还包括一些线路规程的实现,但不实现实际的通信协议,这部分在顶层目录的net目录中实现。
Drivers/video
这里保存了所有的帧缓冲区视频设备的驱动程序,整个目录实现了一个单独的字符设备驱动。
/dev/fb设备的入口点在fbmem.c文件中,该文件注册主设备号并维护一个此设备的清单,其中记录了哪一个帧缓冲区设备负责哪个次设备号。
Drivers/media
这里存放的代码主要是针对无线电和视频输入设备,比如目前流行的usb摄像头。
fs
此目录下包括了大量的文件系统的源代码,如图所示,其中在嵌入式开发中要使用的包括:
devfs、cramfs、ext2、,jffs2、romfs、yaffs、vfat、nfs、proc等。
文件系统是Linux中非常重要的子系统,这里实现了许多重要的系统调用,比如exec.c文件中实现了execve系统调用;
用于文件访问的系统调用在open.c、read_write.c等文件中定义,select.c实现了select和poll系统调用,pipe.c和fifo.c实现了管道和命名管道,mkdir、rmdir、rename、link、symlink、mknod等系统调用在namei.c中实现。
文件系统的挂装和卸载和用于临时根文件系统的initrd在super.c中实现。
Devices.c中实现了字符设备和块设备驱动程序的注册函数;
file.c、inode.c实现了管理文件和索引节点内部数据结构的组织。
Ioctl.c实现ioctl系统调用。
include
这里是内核的所有头文件存放的地方,如图5.1.6所示,其中的linux目录是头文件最多的地方,也是驱动程序经常要包含的目录。
init
linux的main.c程序,通过这个比较简单的程序,我们可以理解LINUX的启动流程。
ipc
systemV的进程间通信的原语实现,包括信号量、共享内存。
kernel
这个目录下存放的是除网络、文件系统、内存管理之外的所有其他基础设施,从下图的文件列表所示,我们大致可以看出,其中至少包括进程调度sched.c,进程建立fork.c,定时器的管理timer.c,中断处理,信号处理等。
lib
包括一些通用支持函数,类似于标准C的库函数。
其中包括了最重要的vsprintf函数的实现,它是printk和sprintf函数的核心。
还有将字符串转换为长整形数的simple_atol函数。
其文件列表如图所示。
mm
这个目录包含实现内存管理的代码,包括所有与内存管理相关的数据结构,如图所示,其中我们在驱动中需要使用的kmalloc和kfree函数在slab.c中实现,mmap定义在mmap.c中的do_mmap_pgoff函数。
将文件映射到内存的实现在filemap.c中,mprotect在mprotect.c,remap在remap.c中实现;
vmscan.c中实现了kswapd内核线程,它用于释放未使用和老化的页面到交换空间,这个文件对系统的性能起着关键的影响。
net
这个目录包含了套接字抽象和网络协议的实现,如图5.1.10所示,每一种协议都建立了一个目录,我们可以看到有26个目录,但是其中的core、bridge、ethernet、sunrpc、khttpd不是网络协议。
我们使用最多的是ipv4、ipv6、802、ipx等。
Ipv4、ipv6是ip协议的第4版本和第6版本。
Core目录中实现了通用的网络功能:
设备处理、防火墙、组播、别名等;
ethernet和bridge实现特定的底层功能:
以太网相关的辅助函数以及网桥功能。
Sunrpc中提供了支持NFS服务器的函数。
script
这个目录存放许多脚本,主要用于配置内核,其文件列表如图所示
1.3.Linux内核配置及裁剪
Linux内核的裁剪与编译看上去是个挺简单的过程。
只是对配置菜单的简单选择。
但是内核配置菜单本身结构庞大,内容复杂。
具体如何选择却难住了不少人。
因此熟悉与了解该菜单的各项具体含义就显得比较重要。
我们现在就对其作一些必要介绍:
Linux内核的编译菜单有好几个版本,运行:
1)makeconfig:
进入命令行,可以一行一行的配置,这个方式不友好所以我们不具体介绍。
2)makemenuconfig:
进入我们熟悉的menuconfig菜单,相信很多人对此都不陌生。
3)makexconfig:
在2.4.X以及以前版本中xconfig菜单是基于TCL/TK的图形库的。
所有内核配置菜单都是通过Config.in经由不同脚本解释器产生.config。
而目前刚刚推出的2.6.X内核用QT图形库。
由KConfig经由脚本解释器产生。
这两版本差别很大。
2.6.X的xconfig菜单结构清晰,使用也更方便。
但基于目前2.4.X版本比较成熟,稳定,用的最多。
所以这里我还是以2.4.X版本为基础介绍相关裁剪内容。
同时因为xconfig界面比较友好,大家容易掌握。
但它却没有menuconfig菜单稳定。
有些人机器跑不起来。
所以考虑最大众化角度,我们以较稳定,且不够友好的menuconfig为主进行介绍,它会用了,Xconfig就没问题。
2.4.X版本xconfig配置菜单,2.4.X版本menuconfig配置菜单,2.6.X版本xconfig配置菜单分别如图1.3.1,1.3.2,1.3.3所示:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LINUX 内核 移植 编译