内核配置与裁剪
- 格式:doc
- 大小:70.00 KB
- 文档页数:12
实验四内核裁减和编译一、实验目的1.了解和掌握内核源代码的目录结构;2.了解内核系统配置方式,了解Makefile和config.in脚本文件的作用;3.了解内核各项内容;4.熟悉make命令的使用。
二、实验环境预装redhat9.0(内核版本2.4.x)的PC机一台,XScale嵌入式实验箱一台(已构建嵌入式linux系统),以太网线一根,交叉编译工具链。
三、实验步骤①察看和了解Linux内核的目录及内容;②察看和了解Linux内核的Makefile文件及作用;③察看和了解Linux内核的config.in文件及作用;④使用menuconfig或xconfig察看内核编译选项及作用;⑤开关某些编译选项,自己裁剪一个Linux内核;A.[root @localhost ~]# cd XSBASE/xsbase/Kernel/2.4.18-rmk-pxal-XSBASE[root @localhost 2.4.18-rmk-pxal-XSBASE]# make menuconfigB.设置开发板上的鼠标不能操作。
进入Input Core device,然后敲空格键,取消屏幕上的鼠标操作。
退出时并保存。
C.[root @localhost 2.4.18-rmk-pxal-XSBASE]# make dep[root @localhost 2.4.18-rmk-pxal-XSBASE]# make zImage[root @localhost 2.4.18-rmk-pxal-XSBASE]# cd arch/arm/boot/[root @localhost 2.4.18-rmk-pxal-XSBASE]# cp zImage /tftpD.启动mini终端。
XSBase255> boot[root @XSBASE /root]$ tfp 192.168.0.77ftp>cd /ftp>get /tftp/zImageE.这个时候在重启板子一下,板子就不能执行触摸屏上的鼠标操作了。
实验7 裁减VxWorks的映像文件实验一实验原理实验2的内核采用系统缺省的配置,没有对VxWorks的内核进行配置和裁减,而通常的系统中则需要对VxWorks的内核进行不同的配置以适应不同的硬件和软件功能。
实验6在实验2的基础上加入了ping client组件。
本实验将ping功能从系统中裁减掉,并观察生成的二进制代码的变化情况。
二实验目标1. 掌握VxWorks中裁减内核的方法。
三实验步骤1. 本实验的内核是经过实验6修改后的内核,启动该内核。
在其VxWorks Target Shell 控制台下输入如下命令:-> ping "192.168.1.180"提示信息如下:-> ping "192.168.1.180"PING 192.168.1.180: 56 data bytes64 bytes from host (192.168.1.180): icmp_seq=0. time=0. ms64 bytes from host (192.168.1.180): icmp_seq=1. time=0. ms64 bytes from host (192.168.1.180): icmp_seq=2. time=0. ms64 bytes from host (192.168.1.180): icmp_seq=3. time=0. ms64 bytes from host (192.168.1.180): icmp_seq=4. time=0. ms该命令对主机192.168.1.180执行ping动作,由于此时的内核中已经包含ping命令,通过结果可发现ping动作执行成功。
(执行过程将持续进行,按下Ctrl+C键将中止执行)。
2. 配置内核功能去掉ping client命令以裁减VxWorks内核打开实验6修改后的Bootable工程。
下图所示是实验6的可启动工程的组件管理窗口。
内核裁剪流程
嘿,朋友们!今天咱就来讲讲这内核裁剪流程,这可不是一般的事儿哦!
想象一下,内核就好比是一个超级复杂的大机器,它里面有各种各样的零件和功能。
而我们要做的内核裁剪呢,就是要从这个大机器里精心挑选出我们真正需要的部分。
比如说你的手机系统吧,为啥有些手机跑得快,有些就慢吞吞的呢?这可就和内核裁剪大有关系啦!
那咋开始这裁剪流程呢?首先,你得像个侦探一样,仔细去研究这个内核,搞清楚它都有哪些“宝贝”藏在里面。
然后,根据你的实际需求,决定哪些要留,哪些可以舍弃。
这就像是你收拾房间,你总不会把所有东西都堆在那吧,得挑有用的留下呀,对吧?
在这个过程中可不能马虎哦,万一不小心剪掉了重要的东西,那可就麻烦啦!就像盖房子,要是不小心把承重墙给拆了,那房子不就塌了嘛!咱得小心翼翼地来。
我自己就经历过一次内核裁剪呢,那时候可真是费了不少心思。
我和小伙伴们一起,对着那些代码和功能,研究了好久好久。
有时候会为了一个小细节争论不休,“哎呀,这个到底要不要留啊”,“留着吧,说不定以后有用呢”。
但最后,我们还是成功地完成了裁剪,哇,那种成就感,简直太棒了!
内核裁剪流程真的很神奇,它能让一个复杂的内核变得更加简洁高效,就像给它瘦身一样。
这样一来,系统就能跑得更快,也能更好地为我们服务啦!所以啊,大家可不要小瞧了这个过程哦,它真的能带来意想不到的效果呢!。
内核卡死调试方法-概述说明以及解释1.引言1.1 概述内核卡死是指操作系统的内核无法继续执行下去,在特定的情景下,系统停止响应并无法正常运行。
这可能会导致系统崩溃、程序无法执行或者无法正常操作。
内核卡死调试方法是帮助我们解决这类问题的一种重要工具。
在本文中,我们将讨论内核卡死调试的方法和技巧,帮助读者更好地定位和解决内核卡死的问题。
首先,我们将介绍内核卡死的原因,包括硬件故障、软件错误和不兼容性等。
然后,我们将探讨内核卡死的常见表现,例如系统停止响应、屏幕冻结和错误信息等。
接着,我们将强调内核卡死调试的重要性。
内核卡死不仅会影响系统的稳定性和性能,还可能导致数据丢失和未完成的任务。
因此,在及时发现和解决内核卡死问题的同时,可以提高系统的可靠性和用户的体验。
最后,我们将总结内核卡死调试的方法和技巧。
这些方法包括使用系统日志和调试工具来分析和追踪系统状态,以及查找和修复可能的错误。
我们还将介绍一些常用的内核卡死调试工具和技术,如调试模式和堆栈跟踪。
通过本文的阅读,读者将能够更好地理解内核卡死调试的重要性和方法,使其能够快速解决内核卡死的问题,并提高系统的稳定性和可靠性。
1.2 文章结构文章结构是指对文章主要内容进行整体的组织和安排,以便读者能够清晰地了解文章的层次结构和脉络。
在讲述内核卡死调试方法的长文中,文章结构应该包括以下几个主要部分:1. 引言:在引言部分,我们将对内核卡死调试方法的重要性和必要性进行概述。
解释为什么需要调试内核卡死问题,以及通过本文能够掌握哪些相关的调试方法。
2. 内核卡死的原因:该部分将详细介绍导致内核卡死的各种原因,如硬件故障、软件错误、驱动冲突等。
通过对这些原因的分析,读者能够更好地理解内核卡死的根本问题。
3. 内核卡死的常见表现:在这一部分,我们将列举内核卡死的一些常见表现,如系统崩溃、黑屏、任务无响应等。
通过对这些表现的描述,读者能够判断出系统是否卡死,并能更好地定位具体问题。
内核配置与裁剪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命令看到。
Support for paging of anonymous memory(swap):这是使用交换分区或者交换文件来做为虚拟内存的,当然要选上。
System V IPC:表示系统5的Inter Process Communication,它用于处理器在程序之间同步和交换信息,如果不选这项,很多程序运行不起来的。
POSIX Message Queues:这是POSIX的消息队列,它同样是一种IPC。
建议最好将它选上。
BSD Process Accounting:这是允许用户进程访问内核将账户信息写入文件中的。
建议最好将它选上。
Sysctl support:这个选项能不重新编译内核修改内核的某些参数和变量,如果你也选择了支持/proc,将能从/proc/sys存取可以影响内核的参数或变量。
建议最好将它选上。
Auditing support:审记支持,用于和内核的某些子模块同时工作,例如SELinux。
只有选择此项及它的子项,才能调用有关审记的系统调用。
Support for hot-pluggable devices:是否支持热插拔的选项,肯定要选上。
不然USB、PCMCIA 等这些设备都用不了。
Kernel Userspace Events:内核中分为系统区和用户区,这里是系统区和用户区进行通讯的一种方式,选上。
Kernel .config support:将.config配置信息保存在内核中,选上它及它的子项使得其它用户能从/proc中得到内核的配置。
Configure standard kernel features(for small systems):这是为了编译某些特殊的内核使用的,通常你可以不选择这一选项,你也不用对它下面的子项操心了。
Load all symbols for debugging/kksymoops:是否装载所有的调试符号表信息,如果你不需要对内核调试,不需要选择此项。
Enable futex support:不选这个内核不一定能正确的运行使用glibc的程序,当然要选上。
Enable eventpoll support:不选这个内核将不支持事件轮循的系统调用,最好选上。
Optimize for size:这个选项使gcc使用-Os的参数而不是-O2的参数来优化编译,以获得更小尺寸的内核,建议选上。
Use full shmem filesystem:除非你在很少的内存且不使用交换内存时,才不要选择这项。
后面的这四项都是在编译时内存中的对齐方式,0表示编译器的默认方式。
使用内存对齐能提高程序的运行速度,但是会增加程序对内存的使用量。
(0) Function alignment(0) Label alignment(0) Loop alignment(0) Jump alignment. 可加载模块Loadable module support --->[*] Enable loadable module support[*] Module unloading[ ] Forced module unloading[*] Module versioning support (EXPERIMENTAL)[ ] Source checksum for all modules[*] Automatic kernel module loadingEnable loadable module support:支持模块加载。
Module unloading:不选这个功能,加载的模块就不能卸载。
Forced module unloading:这个选项能强行卸载模块,即使内核认为这样并不安全,也就是说你可以把正在使用中的模块卸载掉。
如果你不是内核开发人员,不要选择这个选项。
Module versioning support(EXPERIMENTAL):这个功能可以让你使用其它版本的内核模块,不过建议你不要选择这个选项。
Source checksum for all modules:这个功能是为了防止更改了内核模块的代码但忘记更改版本号而造成版本冲突。
如果你不是自己写内核模块,那就不需要这一选项了。
Automatic kernel module loading:这个选项能让内核自动的加载部份模块,建议你最好选上。
举个例子说明一下,如模块eth1394依赖于模块ieee1394。
如果选择了这个选项,可以直接加载模块eth1394;如果没有选择这个选项,必需先加载模块ieee1394,再加载模块eth1394,否则将出错。
. 总线支持配置Bus support --->PCCARD (PCMCIA/CardBus) support --->[ ] Enable PCCARD debugging[ ] 16-bit PCMCIA support (NEW)[ ] Load CIS updates from userspace (EXPERIMENTAL)(NEW)[ ] PCMCIA control ioctl (obsolete) (NEW)--- PC-card bridgesPCCard(PCMCIA/CardBus)support:你的计算机是否支持PCMCIA卡Enable PCCARD debugging:通常不需要选择调试PCMCIA设备,除非你是设备驱动的开发人员。
16-bit PCMCIA support:16位的PCMCIA总线支持。
. 支持的可执行文件格式Userspace binary formats -à[*] Kernel support for ELF binaries[*] Kernel support for a.out and ECOFF binaries[*] Kernel support for MISC binaries[*] RISC OS personalityKernel support for ELF binaries:ELF是开放平台下最常用的二进制文件,它支持不同的硬件平台。
Kernel support for a.out and ECOFF binaries:这是早期UNIX系统的可执行文件格式,目前已经被ELF格式取代。
Kernel support for MISC binaries:此选项允许插入二进制的封装层到内核中,当使用Java、.NET、Python、Lisp等语言编写的程序时非常有用。