Linux内核裁剪的具体过程和方法
- 格式:doc
- 大小:166.51 KB
- 文档页数:26
内核配置与裁剪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)检查编译器的版本
进入系统内核源代码目录查看
删除过时的目标文件
使用X图形来运行系统内核,此方法采用图形窗口按钮进行人机交换
配置完成后,保存并退出:
2)编译新内核
A.执行make dep 命令
B.执行make clean 命令
运行以上两条命令没有出现错误,则执行命令make bzImage,生成一个全新内核
查看产生的bzImage文件
运行命令make modules
运行命令make modules_install
3)使用新内核启动系统
备份正在使用的系统内核
因为要用GRUB配置文件启动,必需修改grub.conf文件
重新启动。
Linux内核裁剪实例从零开始配置内核是不明智的,建议在某一个默认配置的基础上进行修改,以达到自己产品的实际需求。
裁剪和配置内核的基本原则:⏹基于某一个最接近的主板配置来修改;⏹必须的、能确定的选项选中;⏹不能确定的则不要改变原来配置;⏹可选可不选的,建议根据help信息决定或者不选;⏹一次改动不要太多,渐进式修改和验证;⏹注意及时备份配置文件,出现意外可以回退恢复。
下面给出一些常见功能的配置裁剪实例,很多功能与所采用的主板硬件相关,与其它不同主板的内核配置上不一定完全相同,但还是有一些参考意义。
1.1.1 GPIO子系统配置Linux 2.6以上内核引入了子系统,GPIO子系统将全部GPIO的操作接口都通过“/sys/class/gpio/”目录导出,非常方便用户使用。
输入下列命令,进入内核配置菜单:$ make ARCH=arm menuconfig在主菜单界面中选择“Device Drivers”:[*] Networking support --->Device Drivers --->File systems --->Kernel hacking --->进入“Device Drivers”界面,选择并进入“GPIO Support”:[*] SPI support --->PPS support --->PTP clock support-*- GPIO Support ---><*> PWM Support --->在“GPIO Support”中选中“/sys/cla ss/gpio…”:--- GPIO Support[*] /sys/class/gpio/... (sysfs interface)*** Memory mapped GPIO drivers: ***…配置后重新编译内核,使用新内核的系统即可通过“/sys/class/gpio/”访问系统的GPIO 了。
linux ko裁剪方法【原创实用版2篇】目录(篇1)1.Linux KO 裁剪方法的背景和意义2.Linux KO 裁剪方法的具体步骤3.Linux KO 裁剪方法的优点和局限性4.结论正文(篇1)1.Linux KO 裁剪方法的背景和意义Linux KO(Kernel Organization)是指 Linux 内核组织,负责维护Linux 内核的开发和发布。
Linux KO 裁剪方法是指在内核开发过程中,对不需要的代码进行裁剪,以减小内核的大小,提高系统的性能和稳定性。
这对于嵌入式系统、实时操作系统等对系统资源有限制的场景具有重要意义。
2.Linux KO 裁剪方法的具体步骤(1)熟悉内核结构:在进行裁剪之前,需要对 Linux 内核的结构有一定的了解。
Linux 内核主要分为核心(kernel)、驱动(driver)、系统调用(system call)、模块(module)等部分。
(2)确定裁剪目标:根据系统的需求,确定需要裁剪的功能模块。
例如,对于嵌入式系统,可能不需要支持所有网络协议,因此可以裁剪掉不需要的网络驱动。
(3)查找并删除相关代码:在确定裁剪目标后,查找相应的代码并在内核源码中进行删除。
这一步需要对内核代码有一定了解,以避免误删其他功能模块的代码。
(4)重新编译内核:完成代码裁剪后,重新编译内核,生成新的内核镜像文件。
(5)测试和调试:将新的内核镜像文件刷入目标系统,进行功能测试和性能测试。
如果发现问题,需要进行调试和修复。
3.Linux KO 裁剪方法的优点和局限性优点:通过 Linux KO 裁剪方法,可以减小内核的大小,降低系统资源的占用,提高系统的性能和稳定性。
此外,裁剪后的内核更加精简,便于维护和升级。
局限性:Linux KO 裁剪方法需要对内核代码有一定了解,对于新手来说,学习成本较高。
同时,裁剪过程中可能出现误删代码、编译失败等问题,需要具备一定的调试能力。
此外,裁剪后的内核可能会导致某些功能的缺失,需要根据实际需求进行权衡。
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;。
linux ko裁剪方法【最新版】目录1.Linux KO 裁剪方法概述2.Linux KO 裁剪方法的具体步骤3.Linux KO 裁剪方法的注意事项和技巧4.Linux KO 裁剪方法的实际应用案例5.总结正文【1.Linux KO 裁剪方法概述】Linux KO 裁剪方法是一种在 Linux 操作系统中对 KO(Kernel Object)进行裁剪的方法,旨在通过裁剪不必要的 KO,优化 Linux 内核,提高系统性能。
KO 是 Linux 内核中的一种重要数据结构,用于表示内核中的各种设备、驱动等。
通过裁剪 KO,可以使 Linux 内核更加精简,减少系统开销,提高系统运行效率。
【2.Linux KO 裁剪方法的具体步骤】Linux KO 裁剪方法的具体步骤如下:(1)找到需要裁剪的 KO:首先,需要确定哪些 KO 是可以被裁剪的。
这需要对 Linux 内核有一定的了解。
通常来说,可以裁剪的 KO 包括:不使用的设备驱动、不使用的文件系统驱动、不使用的网络协议等。
(2)编写裁剪脚本:根据第一步的结论,编写一个 shell 脚本,用于裁剪指定的 KO。
裁剪脚本需要使用 Linux 内核提供的命令行工具,如:insmod、lsmod、rmmod 等。
(3)执行裁剪脚本:将编写好的裁剪脚本执行,裁剪掉指定的 KO。
在执行过程中,需要小心谨慎,以免裁剪掉必要的 KO,导致系统崩溃。
(4)重启系统:裁剪完成后,需要重启系统,使裁剪生效。
【3.Linux KO 裁剪方法的注意事项和技巧】在进行 Linux KO 裁剪时,需要注意以下几点:(1)谨慎裁剪:裁剪 KO 需要谨慎,以免裁剪掉必要的 KO,导致系统崩溃。
对于不熟悉的 KO,建议先查阅相关资料,了解其作用,再决定是否裁剪。
(2)备份系统:在进行 KO 裁剪之前,建议备份系统,以防止裁剪失败,导致系统崩溃。
(3)测试:裁剪完成后,需要对系统进行测试,确保裁剪后的系统能够正常运行。
Linux内核的裁剪和移植的过程就是:根据硬件平台资源等需求来修改一套完整linux源码,添加与硬件资源等相关的功能模块,除去与硬件资源等不相关的功能模块,然后经过交叉编译生成简化的功能齐全的linux内核zImage。
Linux内核裁剪的必备工具:1、make menuconfig,基于图形界面的内核配置工具,可使配置linux内核更加便捷,为此需要安装libncurses5-dev软件包,这个软件包可在root用户下利用apt-get install libncurses5-dev命令来下载并安装。
2、arm-linux-gcc,交叉编译工具,将配置好的linux内核经过交叉编译生成zImage,使其可以在arm平台上运行。
为此需下载arm-linux-gcc-4.3.2.tgz 软件包,使用tar zxvf arm-linux-gcc-4.3.2.tgz -C /命令解压安装,安装完整后为相gcc命令一样使用arm-linux-gcc,则需要在系统环境变量中添加arm-linux-gcc的路径。
方法在.bashrc文件中添加export PATH=$PATH: /usr/local/arm/4.3.2/bin。
准备好以上两个工具之后即可完成对linux内核的裁剪,移植就是一个download 的过程。
Linux内核配置选项:1、下载linux-2.6.39源码,首先修改内核源码根目录的Makefile文件,将第195行修改为ARCH ?= arm ,此处修改说明linux内核将运行在arm平台上,将第196行修改为CROSS_COMPILE ?= /usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-, 此处指出使用arm-none-linux-gnueabi-对内核进行交叉编译,也可直接使用arm-linux-,但是在实际编译时提示无法找到arm-linux-编译不通过,原因暂时不明,因此将整个的编译器执行文件的路径给出。
Linux内核裁剪的具体过程和方法根据部分网摘资料和实际烧录结果进行整理:内核功能:在能够实现AT91SAM9260开发板基本功能的基础上,通过串口连接上读卡器后能进行一系列的操作和控制功能等,将读卡器的相应数据进行存储或者通过网络传输到远程的PC 机上。
远程PC机能够通过网络方式在开发板上对所连接的读卡器参数进行更新配置,如设置天线接口、设置读卡方式等。
(待与读卡器配套使用后再对内核的功能描述进行补充和完善。
)编译环境:源代码解压完成后,进入linux 2.6.19目录下,使用VI命令编辑Makefile。
确定编译环境为arm交叉编译工具与本机的安装路径一致ARCH = armCROSS_COMPILE = /opt/timesys/toolchains/armv5l-linux/bin/armv5l-linux-内核版本是linux 2.6.19 ,开发板的版本是AT91SAM9260 BOARD V1.01 ,主机系统是ubuntu11.10内核配置:内核配置的方法很多,make config、make xconfig、make menuconfig、make oldconfig 等等,它们的功能都是一样的,区别应该从名字上就能看出来,只有make oldconfig是指用系统当前的设置(./.config)作为缺省值。
这里用的是make menuconfig。
需要牢记:不必要的驱动越多,内核就越大,不仅运行速度慢、占用内存多,在少数情况下、还会引发其他问题。
具体步骤如下:首先确定shell是bash。
然后$make menuconfig。
有一些默认的符号其含义如下:"[ ]"表示该选项有两种选择方式;[*] 直接编译进内核;[] 不编译;"<>"表示该选项有三种选择方式; <*>直接编译进内核; <M>编译成模块形式,但不编译进内核;<> 不编译。
在menuconfig中配置:(详细介绍内核配置选项及删改情况)第一部分:Code maturity level options ---> 代码成熟等级选项[]Prompt for development and/or incomplete code/drivers 默认情况下是选择的,这将会在设置界面中显示还在开发或者还没有完成的代码与驱动。
当内核中含有不成熟的代码或驱动,需要选上,主要用在测试阶段。
(产品成熟后,再去掉此选项)这里选上第二部分:General setup ---> 通用的一些选项2.1 () Local version - append to kernel release 在内核版本后追加的字符串,字符串不得超过64字节2.2 [ ] Automatically append version information to the version string 自动在内核版本后追加的字符串,这个选项是与git库相关的,通常可以不选这里不选2.3 [ ] Support for paging of anonymous memory (swap) 支持交换内存,没有特殊要求请选择这里不选2.4 [*] System V IPC 进程间通信(IPC)支持,许多程序需要这个功能.必选,除非有自己的其他要求这里选上2.5 [ ] IPC Namespaces IPC命名空间支持,不确定可以不选这里不选2.6 [*] POSIX Message Queues POSIX消息队列,通常需要配置这里选上2.7 [ ] BSD Process Accounting 可以将行程资料记录下来,通常建议配置《在读卡器项目中没用到此项功能,其后选项以后再进行相关说明》这里不选2.8 [ ] Export task/process statistics through netlink (EXPERIMENTAL) 通过netlink接口向用户空间导出任务/进程的统计信息,与BSD Process Accounting的不同之处在于这些统计信息在整个任务/进程生存期都是可用的《在读卡器项目中没用到此项功能,其后选项以后再进行相关说明》这里不选2.9 [ ] UTS Namespaces UTS名字空间支持,不确定可以不选这里不选2.10 [*] Auditing support 审计支持,某些内核模块(例如SELinux)需要它,只有同时选择其子项才能对系统调用进行审计这里选上2.11 <*> Kernel .config support 把内核的配置信息编译进内核中,以后可以通过scripts/extract-ikconfig脚本来提取这些信息这里选上2.12 [*] Enable access to .config through /proc/config.gz 允许通过/proc/config.gz访问内核的配置信息这里选上2.13 [ ] Kernel->user space relay support (formerly relayfs) 在某些文件系统上(比如debugfs)提供从内核空间向用户空间传递大量数据的接口这里不选2.14 () Initramfs source file(s) initrd已经被initramfs取代,如果你不明白这是什么意思,请保持空白这里不选2.15 [*] Optimize for size (Look out for broken compilers!) 编译时优化内核尺寸(使用"-Os"而不是"-O2"参数编译),有时会产生错误的二进制代码这里选上2.16 Configure standard kernel features (for small systems) --->配置标准的内核特性(为小型系统)2.16.1 --- Configure standard kernel features (for small systems) 配置标准的内核特性(为小型系统)2.16.2 --- Load all symbols for debugging/kksymoops 装载所有的调试符号表信息,仅供调试时选择2.16.3 [ ] Do an extra kallsyms pass 除非你在kallsyms中发现了bug并需要报告这个bug才打开该选项这里不选第三部分:Loadable module support --->提供系统模块的选择配置3.1 [*] Enable loadable module support 启用模块支持这个选项可以让你的内核支持模块,模块是什么呢?模块是一小段代码,编译后可在系统内核运行时动态的加入内核,从而为内核增加一些特性或是对某种硬件进行支持。
一般一些不常用到的驱动或特性可以编译为模块以减少内核的体积。
在运行时可以使用modprobe命令来加载它到内核中去(在不需要时还可以移除它)。
一些特性是否编译为模块的原则是,不常使用的,特别是在系统启动时不需要的驱动可以将其编译为模块,如果是一些在系统启动时就要用到的驱动比如说文件系统,系统总线的支持就不要编为模块了,否在无法启动系统。
这里选上3.2 [*] Module unloading 提供模块卸载功能。
如果模块不需要卸载,可以不选择本选项这里选上3.3 [ ] Forced module unloading 强迫模块卸载这里不选3.4 [ ] Module versioning support 模块版本,如果选中,则该模块可以支持多种版本的内核这里不选3.5 [ ] Source checksum for all modules 源文件的校验和,可以不选这里不选3.6 [*] Automatic kernel module loading 自动装载模块的功能这里选上第四部分:Block layer --->该菜单选项(Block layer)主要提供系统调度方式的选择4.1 --- Enable the block layer4.2 [ ] Support for tracing block io actions 支持追踪块I/O调度的动作这里不选4.3 IO Schedulers ---> 选择I/O调度方式4.3.1 <*> Anticipatory I/O scheduler 占先式调度方式这里选上4.3.2 < > Deadline I/O scheduler 比Anticipatory更为小巧,在数据吞吐量非常大的数据库系统中表现得更有优势这里不选(在后期实验后再定)4.3.3 < > CFQ I/O scheduler 桌面系统适用,采用平均分配策略的调度4.3.4 Default I/O scheduler (Anticipatory) ---> 选择默认的调度方式4.3.4.1 (X) Anticipatory 这里选上4.3.4.2 ( ) No-op 这里不选第五部分:System Type ---> 主要提供处理器型号及其特性的配置5.1 ARM system type (Atmel AT91) ---> 从中选择适合的处理器型号,如我们选择Samsung S3C2410。
当然下面一系列选项都是仅针对S3C2410处理器而设计的。
它们的配置文件在arch/arm/mach-s3c2410/Kconfig文件中5.1.5 (X) Atmel AT91 选择Atmel AT91系列,前面选项和后面选项都不选5.2 Atmel AT91 System-on-Chip ---> 选择Atmel AT91系列芯片5.2.1 Atmel AT91 Processor (AT91SAM9260) --->5.2.1.2 (X) AT91SAM9260 《针对读卡器项目选择》,其他选项都不选5.2.2 [*] Atmel AT91SAM9260-EK Evaluation Kit 这里选上5.2.3 [ ] Enable DataFlash Card support 这里不选5.2.4 [ ] Enable 16-bit data bus interface to NAND flash 这里不选5.2.5 [*] Programmable Clocks 这里选上5.3 [*] Support ARM926T processor 这里选上5.4 [ ] Support Thumb user binaries 如果希望内核支持用户空间的thumb程序就选择该选项这里不选5.5 [ ] Disable I-Cache (I-bit) 这里不选5.6 [ ] Disable D-Cache (C-bit) 用于开启或关闭I-Cache 这里不选5.7 [ ] Force write through D-cache 强制通过D-Cache写入这里不选5.8 [ ] Round robin I and D cache replacement algorithm 这里不选第六部分:Bus support ---> 主要选择总线PCCARD接口支持,大多数嵌入式系统可以不选择。