Linux内核裁剪和定制方法
- 格式:pdf
- 大小:921.19 KB
- 文档页数:8
内核配置与裁剪1. Linux内核配置内核配置的方法很多,make config、make xconfig、make menuconfig、make oldconfig 等等,它们的功能都是一样的。
这里用的是make menuconfig。
过去基于2.x的内核为用户提供了四种基本的内核设置编辑器:✧. config 服务于内核设置的一个冗长的命令行界面;✧. oldconfig 一个文本模式的界面,主要包含一个已有设置文件,对用户所发现的内核资源中的设置变量进行排序;✧. menuconfig 一个基于光标控制库的终端导向编辑器,可提供文本模式的图形用户界面;✧. xconfig 一个图形内核设置编辑器,需要安装X-Window系统。
前三种编辑器在设置2.6内核时仍可使用,在运行“make xconfig”后,原有的界面被两个新的图形设置编辑器所代替。
这需要具体的图形库和X-Window系统的支持。
另外,用户还可以通过“make defconfig”命令,利用所有内核设置变量的缺省值自动建立一个内核设置文件。
下面具体介绍Linux内核配置选项:. 代码成熟度选项Code maturity level options --->[*] Prompt for development and/or incomplete code/drivers[*] Select only drivers expected to compile cleanly在内核中包含了一些不成熟的代码和功能,如果我们想使用这些功能,想打开相关的配置选项,就必需打开这一选项。
. 通用设置选项General setup --->() Local version - append to kernel release[*] Automatically append version information to the version string[*] Support for paging of anonymous memory (swap)[*] System V IPC[*] POSIX Message Queues[*] BSD Process Accounting[*] BSD Process Accounting version 3 file format[*] Sysctl support[ ] Auditing support[*] Support for hot-pluggable devices[*] Kernel Userspace Events[*] Kernel .config support[*] Enable access to .config through /proc/config.gz() Initramfs source file(s)[*] Configure standard kernel features (for small systems) ---> --- Configure standard kernel features (for small systems) [ ] Load all symbols for debugging/kksymoops[ ] Do an extra kallsyms pass[ ] Enable support for prinlk[ ] BUG()support[ ] Enable full-sinzed data structures for core[*] Enable futex support[*] Enable eventpoll support[*] Optimize for size[*] Use full shmem filesystem(0) Function alignment(0) Label alignment(0) Loop alignment(0) Jump alignmentLocal version - append to kernel release:这里填入的是64字符以内的字符串,在这里填上的字符串可以用uname -a命令看到。
Linux内核裁减及根文件系统定制目录:一、内核编译二、根文件系统定制三、内核选项说明一、内核编译1、准备工作(1)整理出系统需要支持的硬件、文件系统类型以及网络协议等内容。
(2)建议用命令uname –r 查看一下系统的版本号,如果你的系统版本与将要编译的内核版本一致,建议将/lib/modules下的内容备份,否则将来的make modules_install 步骤产生的文件会覆盖这个路径下的内容。
(3)下载并解压linux内核。
以下假设你已经下载了内核的为linux-x-y-z.tar.gz。
一般都将linux内核源代码放在/usr/src下,这里仍然遵守这个习惯,如果你的这个路径下已经存在这个版本的内核,建议将已有的改个名称。
2、开始编译(1)make mrproper确保源代码目录下没有不正确的.o文件和文件依赖关系,执行该命令后,内核选项会回到默认的状态下。
如果你是下载的内核源码,而且是第一次编译,就没有必要执行这一步操作(2)make menuconfig以文本菜单方式选择内核选项(与它功能相同的命令还有makeconfig;make xconfig;make oldconfig),不同版本的内核,选项可能会有一些差异。
{注:#make config(基于文本的最为传统的配置界面,不推荐使用)#make menuconfig(基于文本选单的配置界面,字符终端下推荐使用)#make xconfig(基于图形窗口模式的配置界面,Xwindow下推荐使用)#make oldconfig(如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦)这三个命令中,make xconfig的界面最为友好,如果你可以使用Xwindow,那么就推荐你使用这个命令。
}这一步是内核编译的关键,根据需要支持的硬件、文件系统和协议等内容,选择不同的选项。
配置选项时,有三种选择方式,它们代表的含义如下:Y-将该功能编译进内核N-不添加功能M-将该功能编译成模块,在需要时动态加载到内核选择的原则:是与内核关心紧密而且经常使用的部分功能代码直接编译到内核中;将与内核系较远且不经常使用的部分功能代码编译成为可加载模块,有利于减小内核的长度,减小内核消耗的内存,简化该功能相应的环境改变时对内核的影响;不需要的功能就不要选。
1,获得源码,解压,进入解压后的目录;命令;2,修改makefile;为了能让此目录被执行所以在顶级目录的makefile中同时也进行修改;3,得到.config文件;命令;编译内核时对.config文件的依赖比较大,我们需要一个自己的.config文件,又因为我们的板子和smdk2410的很像,仅需将smdk2410的.config 文件复制到顶级目录即可不用修改;4;修改nandflash 分区;此系统启动时从nandflash 中启动而我们的板子不是的所以对其进行必要的修改;5,添加网卡驱动;arch/arm/mach-s3c2410/mach-smdk2410.c开发板上已经配置要的相应的网卡,并且内核中也有相应的实现代码我们只需做一下简单的修改;6添加yaffz文件系统支持将yaffz 源码包考到和linux-2.6.24 同一级目录下解压;在给内核打上补丁;命令是;7、配置和编译内核到现在,一个简单的内核就准备好了,我们还需要做一些配置,然后编译,内核才能正常使用。
在内核源代码的根目录下运行make menuconfig命令,进入配置界面:8,用u-boot启动内核;编译U-Boot时在源代码的tools目录下会生成一个mkimage可执行文件,用这个工具可以对前面编译内核时生成的zImage进行处理,以供U-Boot启动。
cd linux-2.6.24.4/arch/arm/bootcp /up-Star2410/kernel/linux-2.6.24.4/mkimage . 获取mkimage工具./mkimage -A arm -T kernel -C none -O linux -a 0x30008000 -e 0x30008040 -d zImage -n 'Linux-2.6.24' uImage9,最后把生成的uimage 放到主机tftp同目录下,启动开发板;用u-boot的tftp命令下载到sdram;。
目录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内核裁剪与移植内核,即操作系统。
它为底层的可编程部件提供服务,为上层应用程序提供执行环境。
内核裁剪就是对这些功能进行裁剪,选取满足特定平台和需求的功能。
不同的硬件平台对内核要求也不同,因此从一个平台到另一个平台需要对内核进行重新配置和编译。
操作系统从一个平台过渡到另一个平台称为移植。
Linux是一款平台适应性且容易裁剪的操作系统,因此Linux在嵌入式系统得到了广泛的应用。
本章将详细讲解内核裁剪与移植的各项技术。
4.1 Linux内核结构Linux内核采用模块化设计,并且各个模块源码以文件目录的形式存放,在对内核的裁剪和编译时非常方便。
下面介绍内核的主要部分及其文件目录。
4.1.1 内核的主要组成部分在第1章中已经介绍了Linux内核主要的5个部分:进程调度、内存管理、虚拟文件系统、网络接口、进程通信。
在系统移植的时候,它们是内核的基本元素,这5个部分之间的关系,如图4.1所示。
图4.1 Linux内核子系统及其之间的关系进程调度部分负责控制进程对CPU的访问。
内存管理允许多个进程安全地共享主内存区域。
内存管理从逻辑上分为硬件无关部分和硬件相关部分。
硬件无关部分提供了进程的映射和逻辑内存的对换;硬件相关部分为内存管理硬件提供了虚拟接口。
虚拟文件系统隐藏了不同类型硬件的具体细节,为所有的硬件设备提供了一个标准的接口,VFS提供了十多种不同类型的文件系统。
网络接口提供了对各种网络标准的存取和各种网络硬件的支持。
进程通信部分用于支持进程间各种不同的通信机制。
进程调度处于核心位置,内核的其他子系统都要依赖它,因为每个子系统都存在进程挂起或恢复过程。
* 进程调度与内存管理之间的关系:这两个子系统为互相依赖关系。
在多道程序环境下,程序要运行必须为之创建进程,而创建进程首先就是要将程序和数据装入内存。
另外,内存管理子系统也存在进程的挂起和恢复过程。
* 进程间通信与内存管理之间的关系:进程间通信子系统要依赖内存管理支持共享内存通信机制,通过对共同的内存区域进行操作来达到通信的目的。
嵌入式Linux操作系统裁剪和定制研究摘要嵌入式Linux的研究之所以成为当今操作系统研究的热点,是因为它的应用蕴含着巨大的商业价值。
嵌入式系统之间差别很大,掌上电脑(PDA)、机顶盒、手机、数码相机、数字电视、家用电器、工业控制设备,等等,都是典型的嵌入式应用。
和桌面操作系统相比,由于嵌入式应用环境之间的差别很大,难于开发出适应于各种嵌入式应用环境的通用嵌入式操作系统。
当前流行的各种嵌入式操作系统,仅仅在某些特定领域获得成功,其原因就在于此。
嵌入式Linux操作系统也存在这方面的问题。
因此,研究嵌入式操作系统的裁剪和定制技术就显得非常必要。
作者从致力于开发自己的嵌入式操作系统和商业应用的目的出发,进行了嵌入式Linux内核的裁剪与定制研究,力求创造出具有我国自主产权的操作系统。
而任何的裁减都是基于对内核的准确理解之上的,作者首先系统介绍了一个完整的Linux内核的总体结构并就其主要子系统,如初始化、中断处理子系统、进程调度进行了详细分析;然后从嵌入式Linux现代设计特点出发,提出了一种基于调用图的裁剪Linux方法并对各部分的具体裁减从实例出发进行了说明。
同时又从定制角度,讨论了内存管理子系统、文件予系统的优化和选择方法。
最后,文章针对DSP应用的特点,分析了如何将Linux内核加以裁剪、改造,使其适合DSP应用,形成通用的DSP操作系统。
移植后的Linux内核,大小可以控制在200K以下.减小了DSP平台上应用软件的开发难度,大大降低了DSP系统的开发成本。
设备驱动程序运行在核心态,是Linux内核重要组成部分。
它出现的闯题会直接影响嵌入式Linux的稳定,严重时会导致操作系统崩溃。
文章利用虚拟字符设备来最大限度地封装硬件设备驱动的具体细节和其特定信息模式,以降低嵌入式Linux应用系统程序开发调试的难度,增强系统的可配置性。
并总结了两种虚拟字符设备用以实际的嵌入式开发。
文章最后对嵌入式Linux系统开发尚需解决的问题提出了自己的看法。