实验5 linux内核的裁剪移植
Linux内核裁剪移植——内核的主要组成部分
接口。 虚拟文件系统隐藏了不同类型硬件的具体细节,为所有的硬件设备提供了一个标准的接口,
VFS提供了十多种不同类型的文件系统。
Linux内核裁剪移植——内核的主要组成部分 5
网络接口提供了对各种网络标准的存取和各种网络硬件的支持。 进程通信部分用于支持进程间各种不同的通信机制。 进程调度处于核心位置,内核的其他子系统都要依赖它,因为每个子系统都存在进程挂起或恢
Linux内核裁剪移植 ——内核的主要组成部分
Linux内核裁剪移植——内核的主要组成部分 2
内核,即操作系统。它为底层的可编程部件提供服务,为上层应用程序提供执行环境。 内核裁剪就是对这些功能进行裁剪,选取满足特定平台和需求的功能。不同的硬件平台对内核
要求也不同,因此从一个平台到另一个平台需要对内核进行重新配置和编译。 操作系统从一个平台过渡到另一个平台称为移植。 Linux是一款平台适应性且容易裁剪的操作系统,因此Linux在嵌入式系统得到了广泛的应用。
Linux内核裁剪移植——内核的主要组成部分 3
Linux内核主要的5个部分:进程调度、内存管理、虚拟文件系统、网络接口、进程通信。在系 统移植的时候,它们是内核的基本元素。
Linux内核裁剪移植——内核的主要组成部分 4
进程调度部分负责控制进程对CPU的访问。 内存管理允许多个进程安全地共享主内存区域。内存管理从逻核的主要组成部分 7
虚拟文件系统与网络接口之间的关系: ➢ 虚拟文件系统通过依赖网络接口支持网络文件系统(NFS) ➢ 也通过依赖内存管理支持RAMDISK设备。
内存管理与虚拟文件系统之间的关系: ➢ 内存管理利用虚拟文件系统支持交换 ➢ 交换进程定期地由调度程序调度,这也是内存管理依赖于进程调度的唯一原因。 ➢ 当一个进程存取的内存映射被换出时,内存管理将会向文件系统发出请求,同时,挂起当 前正在运行的进程。
linux内核裁剪、编译与烧写
linux内核裁剪、编译与烧写实验日志实验题目:linux内核裁剪、编译与烧写实验目的:1、了解linux内核移植的相关知识2、熟练掌握linux内核裁剪的一般过程3、完成一个自己linux内核裁剪4、熟练掌握内核烧写实验步骤及结果:1、硬件连接连接好实验箱电源线、串口线、网线,并打开实验箱电源。
2、打开桌面上的超级终端arm打开超级终端后,并敲回车键,直到出现开发板的启动界面[/mnt/yaffts]3、测试自带avi文件[/mnt/yaffts] cd mplayer。
mplayer test.avi这时可以看得见在lcd上有图像显示,并且伴有声音没有声音出现。
4、内核裁剪从linux终端到/arm2410cl/kernel/linux-2.4.18-2410cl/目录,输入命令make memuconfig 回车,即可打开裁剪的主界面,根据自己情况对裁剪选项进行选择,不清楚的选项就选择默认选项。
在裁剪选择时,上下箭头可以上下选择,进入某一层用回车键,用空格键对其进行选择切换。
我们这里至少要把满足根文件系统的linux内核要求选项选上:(1) 配置MTD·要使用Cramfs和YAFFS文件系统,首先需要配置MTD.在Memory Technology Devices (MTD) --->选项中选中如下选项(图略):<*> Memory Technology Device (MTD) support MTD支持[*] MTD partitioning support MTD分区支持<*> Direct char device access to MTD devices 字符设备的支持<*> Caching block device access to MTD devices 块设备支持NAND Flash Device Drivers ---> 对NAND Flash的支持<*> SMC Device Support<*> Simple Block Device for Nand Flash(BON FS)<*> SMC device on S3C2410 SMDK[*] Use MTD From SMC(2) 配置文件系统(图略)。
linux内核裁剪
《Linux操作系统》实验报告
实验序号:实验项目名称:内核裁减
1 在虚拟机上裁减系统内核
1)检查编译器的版本
进入系统内核源代码目录查看
删除过时的目标文件
使用X图形来运行系统内核,此方法采用图形窗口按钮进行人机交换
配置完成后,保存并退出:
2)编译新内核
A.执行make dep 命令
B.执行make clean 命令
运行以上两条命令没有出现错误,则执行命令make bzImage,生成一个全新内核
查看产生的bzImage文件
运行命令make modules
运行命令make modules_install
3)使用新内核启动系统
备份正在使用的系统内核
因为要用GRUB配置文件启动,必需修改grub.conf文件
重新启动。
linux内核裁剪的具体步骤(Linuxkernelcuttingspecificsteps)
linux内核裁剪的具体步骤(Linux kernel cutting specific steps)Configuration in menuconfig:The kernel configuration options and delete detailsPart 1: delete allCode maturity level options I code maturity level options[]Prompt for development and/or incomplete code/drivers is chosen by default, which will display code or drivers that are still under development or have not been completed in the setup interface.The second part: delete all but the following options General, setup -System V IPC (IPC:Inter Process Communication) is a group system call and function library, it allows the program to exchange information synchronously with each other. Some programs and the DOS simulation environment need it. Providing communication mechanisms for processes that enable the exchange of information and synchronization between processes in the system. Some programs run only in the case of Y, so don't worry about it.The third part: delete all but the following optionsLoadable module support I can support the proposal to the kernel boot module as a moduleEnable loadable module support [] this option allows your kernel support module, what is a module? The module is a small piece of code that can be dynamically added to the kernel when the system kernel is run, thus adding some features to the kernel or supporting some hardware. Generic drivers or features that are not commonly used can be compiled into modules to reduce kernel size. At run time, you can use the modprobe command to load it into the kernel (remove it when you don't need it). Some properties are compiled for the module principle is rarely used, especially when the system starts to drive can be compiled as a module, if it is in the drive system when you start to use such as file system, system bus support is not for a module, or unable to start system.[]Automatic kernel module loading in general, if our kernel in some tasks to use some is compiled as a module driver or characteristics, we need to use the modprobe command to load it, you can use the kernel. However, if you choose this option, when the kernel needs some modules, it automatically calls the modprobe command to load the required modules, which is a great feature, of course, choose Y.The fourth part: delete allBlock layer----- block deviceThe fifth part: delete all but the following optionsProcessor type and features processor type ISubarchitecture Type (PC-compatible) this option his main purpose is to make the Linux can support a variety of PC standard, we use the general PC machine is to follow the so-called IBM compatible structure (pc/at). This option allows you to select some other architecture. We usually choose PC-compatible.Processor family (386): it will be optimized for each type of CPU, so that it runs fast and sound, generally speaking, you are what type of model, you choose what kind of. I chose 386, so that the kernel saves a lot of spaceThe sixth part: delete all but the following optionsPower management options (ACPI, APM) his power management options[[] Power Management Debug Support power management debugging information support, if not to debug the kernel, power management section, please do not select this item.ACPI Support - - advanced power interface configuration support, if BIOS support, it is recommended to choose this item[]Button this option is used to register the power button based on events, such as power, sleep, when you press the button when the event will happen, a daemon will read /proc/acpi/event, and execute the user defined in these events on the action such as the system shutdown. Can not choose, according to their own needs.The seventh part: in addition to the following options,其它全部删除bus options (pci, pcmcia, eisa, mca, isa) -- > 总线选项pci support. []pci access mode (any) -- > pci外围设备配置, 强列建议选any, 系统将优先使用mmconfig, 然后使用bios, 最后使用direct检测pci 设备.第八部分除以下选项, 其它全部删除.- filing file formats.kernel support for elf binaries elf是开放平台下最常用的二进制文件, 它支持不同的硬件平台.一定要选.第九部分除以下选项, 其它全部删除.networkingnetworking options -- >unix domain sockets []tcp / ip networking []第十部分除以下选项, 其它全部删除.device drivers -- > 设备驱动block devices, 〉compaq smart2 support. []compaq smart array 5xxx support. [][] loopback device support 大部分的人这一个选项都选n, 因为没有必要.但是如果你要mount iso文件的话, 你得选上y.这个选项的意思是说, 可以将一个文件挂成一个文件系统.如果要烧光盘片的, 那么您很有可能在把一个文件烧进去之前, 看看这个文件是否符合is09660的文件系统的内容, 是否符合您的需求.而且, 可以对这个文件系统加以保护.不过, 如果您想做到这点的话, 您必须有最新的mount程序, 版本是在2.5x版以上的.而且如果您希望对这个文件系统加上保护, 则您必须有 des.1.tar.gz 此处与网络无关.建议编译成模块这个程序.注意.ram disk support. []scsi device support - - - > 里面有关于usb支持的, 要选择[] usb要用 scsi device support, 必须选择[] "/ proc / scsi / support usb要用, 必须选择scsi disk support usb要用 [], 必须选择scsi low-level drivers[] serial ata (sata) support[] intel sata hard 这个必须选择 price / ich, 否则无法产生引导文件via sata format. []networking device support - - - > 这个下面是选网卡驱动, 一定要选ethernet (1000mbit) & # 我的电脑是千兆网卡所以就选这个61664.broadcom tigon3support []input device support - - - > 这个里面要设置你的鼠标键盘什么的[] the "/ dev / psaux devicegraphics card - - - "[] support for frame buffer devices 支持frame buffer的, 一定要选择drive support - - - "usb device filesystem 这个好象是用u盘必须的 [][] ehci hcd media (usb 2.0) 有usb2.0就选上把, 编译成模块必须选择 ohci hcd media [], 编译成模块[] uhci hcd (most intel and via support 必须选择, 编译成模块usb mass storage support 用u盘必须选择 []usb human interface device (a device 如果你有一定选上这个必需选里面选择usb鼠标和usb键盘 hid).the support 应该选择 hid inputa hid device / dev / hiddev support如果这里有usb键盘和鼠标选项, 一定要选择第十一部分除以下选项, 其它全部删除.file systems 文件系统 -- >< * > second extended fs support[*] ext2 extended attributes[*] ext2 POSIX访问控制列表[*] ext2安全标签<m> Ext3文件系统支持[*] Ext3扩展属性[*] ext3 POSIX访问控制列表[*] ext3防伪标签以上这些肯定是要选择的,Linux的标准文件系统<m>内核自动支持内核自动挂载的,当然要选<m>内核自动版本4的支持(同时支持V3)当然要选DOS /脂肪/ NT文件系统——>dos支持<m> MSDOS fs的支持<m> VFAT(95)FS支持NTFS文件系统支持本地语言支持和# 61664;语言支持,这里就支持英语和汉语就行了,不多说了[ ] NLS ISO 8859-1必须选择,这个是关于U盘挂载的。
实验5-3 Linux 内核移植实验
实验 5-3 Linux-2.6.28移植实验【实验目的】熟悉Linux-2.6.28移植过程。
【实验步骤】第一步:从/pub/linux/kernel/v2.6下载linux-2.6.28.tar.bz2压缩文件(或光盘中提供);【图5-3-1】第二步:将linux-2.6.28.tar.bz2压缩文件复制到Linux工作目录;第三步:在Linux下利用tar jxvf linux-2.6.28.tar.bz2命令解压linux-2.6.28.tar.bz2压缩文件。
第四步:进入解压后的linux-2.6.28目录下,利用vi编辑工具修改linux-2.6.28目录下的顶层Makefile文件。
第五步:修改linux-2.6.28目录下的顶层Makefile文件,设置编译linux操作系统的CPU体系架构变量ARCH 和所使用的交叉编译工具链变量CROSS_COMPILE(注:实验使用arm-linux交叉编译工具链 4.2.1版本,可从/pub/snapgear/tools/arm-linux/下载arm-linux-tools-20070808.tar.gz压缩文件,解压到/OPT目录下)。
改为ARCH ?= armCROSS_COMPILE ?=/opt/usr/local/bin/arm-linux-【图5-3-2】第六步:将linux-2.6.28目录下的arch/arm/configs/mainstone_defconfig文件复制为xsbase270_defconfig文件。
第七步:在linux-2.6.28/arch/arm/mach-pxa目录下增加一个xsbase270.c文件(实际上从该目录下的mainstone.c复制而来.也可以直接复制实验代码中的文件),然后根据实际平台进行修改。
第八步:修改linux-2.6.28\arch\arm\mach-pxa目录下的Makefile文件,增加编译xsbase270.c 的编译选项,即:obj-$(CONFIG_MACH_XSBASE270) += xsbase270.o。
linux内核的裁剪与移植
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;。
基于ARM的嵌入式linux内核的裁剪与移植.
基于ARM的嵌入式linux内核的裁剪与移植0引言微处理器的产生为价格低廉、结构小巧的CPU和外设的连接提供了稳定可靠的硬件架构,这样,限制嵌入式系统发展的瓶颈就突出表现在了软件方面。
尽管从八十年代末开始,已经陆续出现了一些嵌入式操作系统(比较著名的有Vxwork、pSOS、Neculeus和WindowsCE)。
但这些专用操作系统都是商业化产品,其高昂的价格使许多低端产品的小公司望而却步;而且,源代码封闭性也大大限制了开发者的积极性。
而Linux的开放性,使得许多人都认为Linu0 引言微处理器的产生为价格低廉、结构小巧的CPU和外设的连接提供了稳定可靠的硬件架构,这样,限制嵌入式系统发展的瓶颈就突出表现在了软件方面。
尽管从八十年代末开始,已经陆续出现了一些嵌入式操作系统(比较著名的有Vxwork、pSOS、Nec uleus和Windows CE)。
但这些专用操作系统都是商业化产品,其高昂的价格使许多低端产品的小公司望而却步;而且,源代码封闭性也大大限制了开发者的积极性。
而Linux的开放性,使得许多人都认为Linux 非常适合多数Intemet设备。
Linux操作系统可以支持不同的设备和不同的配置。
Linux对厂商不偏不倚,而且成本极低,因而很快成为用于各种设备的操作系统。
嵌入式linux是大势所趋,其巨大的市场潜力与酝酿的无限商机必然会吸引众多的厂商进入这一领域。
1 嵌入式linux操作系统Linux为嵌入操作系统提供了一个极有吸引力的选择,它是个和Unix 相似、以核心为基础、全内存保护、多任务、多进程的操作系统。
可以支持广泛的计算机硬件,包括X86、Alpha、Sparc、MIPS、PPC、ARM、NEC、MOTOROLA 等现有的大部分芯片。
Linux的程序源码全部公开,任何人都可以根据自己的需要裁剪内核,以适应自己的系统。
文章以将linux移植到ARM920T内核的s3c2410处理器芯片为例,介绍了嵌入式linux内核的裁剪以及移植过程,文中介绍的基本原理与方法技巧也可用于其它芯片。
Linux内核安装、裁剪图文教程
目录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只有一份。
第4章 Linux内核裁剪与移植 Linux系统移植(第2版) 教学课件
4.1 Linux内核结构 4.2 内核配置选项 4.3 内核裁剪及编译 4.4 内 核 升 级
4.1.2 内核源码目录介绍
Linux内核代码以源码树的形式存放,如 果在安装系统的时候已经安装了源码树, 其源码树就在/usr/src/linux下。
1.arch目录
禁用随机heap(heap堆是一个应用层的概念,即堆对CPU是不可见的,它 的实现方式有多种,可以由OS实现,也可以由运行库实现,也可以在一个 栈中来实现一个堆)
Choose SLAB allocator Profiling support Kprobes
选择内存分配管理器,建议选择 支持系统评测,建议不选 探测工具,开发人员可以选择,建议不选
5.init目录
init子目录包含核心的初始化代码(注意, 不是系统的引导代码)。它包含两个文件 main.c和version.c,这是研究核心如何工 作的一个非常好的起点。
6.ipc目录
ipc子目录包含核心进程间的通信代码。 Linux下进程间通信机制主要包括管道、 信号、消息队列、共享内存、信号量、套 接口。
Physical 选择XIP后,内核存放的物理地址
Kexec system call
Kexec系统调用
4.2.4 网络协议支持相关选项
菜单选项(Networking Support)的子菜 单中包含一些网络协议支持的选项。
选项名 Networking options Amateur Radio support
arch子目录包括了所有和体系结构相关的 核心代码。它的每一个子目录都代表一种 支持的体系结构,例如arm子目录是关于 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>编译成模块形式,但不编译进内核;<> 不编译。
实验5-2:交叉编译器安装,内核裁剪,编译
班级:计算机11-1 姓名:洪忠奋学号:11034050116 成绩:实验5-2:嵌入式Linux开发板环境搭建实验目的:熟悉嵌入式Linux开发板环境搭建:交叉编译器安装,u-boot制作,内核裁剪,编译,下载,NFS根文件系统制作。
实验内容:1. 交叉编译器安装2. 内核裁剪3. 内核编译4. 根文件系统制作5. NFS网络配置实验步骤:1.交叉编译器安装。
(1)、复制arm-linux-gcc-4.3.2.tgz到linux系统中。
(2)、执行tar –jxvf arm-linux-gcc-4.3.2.tgz进行解压。
(3)、执行cd usr/local/和cp –rv arm /usr/local/(4)、修改环境变量PATH:(5)、在/etc/bash.bashrc最后添加:2.内核裁剪(1)、执行make menuconfig.(2)、进行操作裁剪3.内核编译(1)、下载linux-2.6.32.2_ok.tar.bz2到Linux系统中。
(2)、执行tar –jxvf linux-2.6.32.2_ok.tar.bz2 –C /usr/src/kernel进行解压。
(3)、make mrproper | make menuconfig.(4)、make dep | make clean | make zImage(5)、make modules | make module_install(6)、make install进行编译。
4.根文件系统制作(1)、建立工作目录并下载busybox到该目录:(2)、建立根目录执行mkdir /root/rootfsmkdir /root/rootfs/{bin,dcv,ctc,usr,lib,sbin,proc,sys,tmp}mkdir /root/rootfs/usr/{bin,sbin,lib}mknod dcv/consolc c 5 1mknod dcv/null c 1 3(3)、拷贝动态链接库执行cd /usr/local/arm/4.3.2/sysroot/libVim cp.shSource cp.shArm-linux-strip –s /root/rootfs/lib/lib*(4)、交叉编译busybox执行tar –jxvf busybox-1.21.1_ok.tar.bz2Mv busybox-1.21.1_ok.tar.bz2 busyboxCd busybox修改Makefile,制定ARCH,CROSS_COMPILE环境变量配置busybox,执行make defconfig | make menuconfigMake && make install5.NFS网络配置(1)、在虚拟PC机上,设置NFS共享目录Vi /etc/exports(2)、添加共享目录/root/rootfs *(rw,sync,no_root_suqash)(3)、设置ip,挂载nfs,重启NFS服务Ifconfig eth0 192.168.2.288 upMount –t nfs –o rw 1992.168.2.288:/export/ /mnt/nfs/etc/init.d/nfs reboot心得体会:通过这个实验,使我熟悉嵌入式Linux开发板环境搭建:交叉编译器安装,u-boot 制作,内核裁剪,编译,下载,NFS根文件系统制作。
linux内核裁剪
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内核裁剪移植交叉编译
内核移植笔记linux-2.6.25.8移植到OK-2440-III
自己学习嵌入式也有一段时间了,但是在大学的时候就一直想学习linux的交叉编译,内核裁剪,内核移植这个过程,但是却一直没有学到手,也从来没有编译出自己的一个内核。
现在工作了,这个问题仍然困扰着我,于是,自己和网友交流,并且学习,参考前辈们的网页问答,终于在十月一前搞定了。
为了共同分享,共同进步的宗旨,我自己做一个截图,供我们同学参考学习,也为了感谢网友的支持和无限帮助。
谢谢你们。
(内容我一步一步来演示,从新建一个虚拟机开始)
注意,我用的linux系统是企业版的,如下:
(我之所以要看这个的原因是因为在创建虚拟机的时候如果选择不正确那么它检测不到设备,所以需要注意)
新建虚拟机的过程:
1.
2
3
(这里注意必须要选择Red Hat EnterpriseLinux5,否则后边出问题,跟你选择的操作系统有关系,我安装的时候总是出问题,结果发现是这出的问题)
4
5
6
7
8
点击ok就可以了,然后启动虚拟机开始安装操作系统:
1.
回车后出现如下界面2
3
点击skip
4
5
6
7
8
9
10
11
12.确定后如下所示:
13
然后我们选中Free空间,点击新建,进行如下设置:
14确定后如下所示:
15
然后我们再点击剩余空间,点击新建,然后进行如下设置
16.
17.
18,然后点击下一步
19
20
21
22。
Linux内核裁剪移植——一般内核配置选项
选项名 Forced module loading Module unloading Forced module unloading
Module versioning support
Source checksum for all modules
ቤተ መጻሕፍቲ ባይዱ说明
允许强制加载模块驱动
允许卸载已经加载的模块,建议选择
Namespace support Initial RAM filesystem and RAM disk (initramfs/initrd) support
说明
内核日志缓冲区大小(16代表64KB, 17代表128KB)
CPU组调度
控制组支持
为旧的用户空间工具创建过时的文件系 统风格
在某些文件系统上(比如debugfs)提 供从内核空间向用户空间传递大量数据 的接口
说明 使用大容量块设备时选择
支持块队列I/O跟踪 支持通用scsi块设备第4版 支持块设备数据完整性 I/O调度器
Linux内核裁剪移植——一般内核配置选项 8
系统类型:菜单选项(System Type)的子菜单中包含一些系统类型选项,在配置内核时直接 选择对应的芯片类型即可。对特定的平台选择相应的支持类型。
选择内存分配管理器,建议选择
支持系统评测,建议不选
探测工具,开发人员可以选择,建议不 选
Linux内核裁剪移植——一般内核配置选项 6
内核模块加载方式支持选项:菜单选项(Loadable module support)的子菜单中包含一些 内核模块加载方式选项。如果对模块的加载方式有特殊要求,如可以强制卸载正在使用的模块 的要求,那么可以配置相关的模块加载方式。
Linux内核裁剪移植——一般内核配置选项 3
Linux内核在ARM上的裁减与移植
总第237期2009年第7期计算机与数字工程Computer &Digital Engineering Vol.37No.781 Linux 内核在A RM 上的裁减与移植3赵明鑫(鞍山师范学院计算中心 鞍山 114005)摘 要 主要介绍Linux 内核以及其在ARM 平台下的裁减、编译与移植过程。
操作系统的移植主要分为配置、裁减源代码、交差编译等步骤。
文章对以上的步骤进行了较为详尽的描述,并描述了具体实现裁减与编译的过程。
操作系统移植是嵌入式系统开发的前提和基础,对嵌入式系统的开发具有重要意义。
关键词 Linux 内核 裁减 交叉编译 系统移植中图分类号 TP311Tailor a nd Tra nspla ntation of L i nux Ker nel Based on A R MZhao Mingxin(Comp uter Ce nter ,A nshan N or mal Collge ,A nsha n 114005) Abs t rac t Mainly int roducesp rune and t ransplantation of t he L inux ker nel at t he platf or m of A RM.Transplantationof op erating syste m can be done in t he f ollowing steps :configuration ,tailor of source code ,cross 2compilation.This p ap er make a detailed descrip tion about items above ,a nd t he realization of it.Tra nspla ntation of operating syste m is t he base of embedded syste m ,so has a imp orta nt significa nce on develop ment of embedded system.Ke y w ords linux ker nel ,tailor ,cross 2compilation ,t ransplantation Class Nu m ber TP 311图1 一个系统的组成1 Linux 系统及Linux 内核简介一个完整的系统主要5部分组成:硬件、Bootloader 、操作系统内核、操作系统服务和用户应用程序,如图1所示。
linux内核的裁剪步骤
linux内核裁剪的具体过程和方法内核功能:能够完成系统的基本功能,上网,收发邮件等,支持xwindows图形界面。
在menuconfig中配置:详细介绍内核配置选项及删改情况第一部分:全部删除Code maturity level options ---> 代码成熟等级选项[]Prompt for development and/or incomplete code/drivers 默认情况下是选择的,这将会在设置界面中显示还在开发或者还没有完成的代码与驱动.不选。
第二部分:除以下选项,其它全部删除General setup—〉System V IPC (IPC:Inter Process Communication)是组系统调用及函数库,它能让程序彼此间同步进行交换信息。
某些程序以及DOS模拟环境都需要它。
为进程提供通信机制,这将使系统中各进程间有交换信息与保持同步的能力。
有些程序只有在选Y的情况下才能运行,所以不用考虑,这里一定要选。
第三部分:除以下选项,其它全部删除Loadable module support ---> 可引导模块支持建议作为模块加入内核[] Enable loadable module support 这个选项可以让你的内核支持模块,模块是什么呢?模块是一小段代码,编译后可在系统内核运行时动态的加入内核,从而为内核增加一些特性或是对某种硬件进行支持。
一般一些不常用到的驱动或特性可以编译为模块以减少内核的体积。
在运行时可以使用modprobe命令来加载它到内核中去(在不需要时还可以移除它)。
一些特性是否编译为模块的原则是,不常使用的,特别是在系统启动时不需要的驱动可以将其编译为模块,如果是一些在系统启动时就要用到的驱动比如说文件系统,系统总线的支持就不要编为模块了,否在无法启动系统。
[]Automatic kernel module loading 一般情况下,如果我们的内核在某些任务中要使用一些被编译为模块的驱动或特性时,我们要先使用modprobe命令来加载它,内核才能使用。
基于ARM的嵌入式linux内核的裁剪与移植
基于ARM的嵌入式linux内核的裁剪与移植前言嵌入式系统一直是计算机行业中的领域之一。
在许多应用程序中,嵌入式系统越来越流行。
嵌入式系统通常使用嵌入式芯片,如ARM芯片,并且它们通常运行Linux内核。
Linux内核是一个开放源代码的操作系统内核。
在嵌入式领域,Linux 内核可以被用于实现各种应用程序。
本文将重点介绍如何基于ARM平台的嵌入式Linux内核进行裁剪和移植。
ARM平台ARM处理器是一种RISC(Reduced Instruction Set Computer)处理器。
这种类型的处理器可用于嵌入式系统开发,因为它具有较低的功耗和高效的性能。
ARM处理器有许多版本,其中包括ARMv6和ARMv7。
ARMv6通常用于嵌入式系统,而ARMv7则用于智能手机和平板电脑等高端设备。
Linux内核的裁剪在嵌入式系统中,Linux内核需要进行裁剪,以适应嵌入式设备的需求。
与桌面计算机相比,嵌入式系统拥有更少的资源,包括RAM、闪存和存储空间。
因此,在将Linux内核移植到嵌入式系统之前,必须将内核进行裁剪。
在裁剪内核之前,您必须确定哪些内核模块是必需的。
一些模块可以从内核中移除,以减少内核的大小。
通常,将不必要的模块和其他功能从内核中移除可以使内核变得更小并具有更好的性能。
另外,裁剪内核时应确保其他组件与内核兼容。
例如,在新内核中可能需要更改驱动程序或实用程序以适应修改后的内核。
裁剪内核可能是一项比较困难的工作,需要深刻了解Linux内核的各个方面,以确保正确地裁剪内核。
移植Linux内核到ARM移植内核是将Linux内核适应新硬件的过程。
在开始移植内核之前,您必须了解嵌入式设备的硬件架构以及所需的内核组件。
移植Linux内核到ARM可以分为以下步骤:1.选择合适的ARM平台和处理器并确定所需的内核选项。
2.下载最新的内核源代码。
3.配置内核选项,并使其适应新硬件。
4.使用交叉编译器编译内核。
linux内核裁剪及编译步骤
linux内核裁剪及编译步骤Linux内核裁剪及编译步骤Linux操作系统的内核是其最重要和核心的组成部分。
用户可以根据自己的需要对内核进行裁剪以减少内核代码的大小,以及支持特定的硬件和功能。
Linux内核的裁剪和编译步骤相对来说比较复杂,需要一定的技术和安装环境的支持。
下面将介绍Linux内核裁剪及编译的具体步骤,以供参考。
一、准备工作在开始进行Linux内核的裁剪及编译之前,需要进行一些准备工作。
首先,需要安装Linux操作系统的开发环境。
其次,需要下载Linux内核的源代码,可以从Linux 的官方网站或者其他开源社区下载。
二、配置内核选项安装好开发环境和下载好源代码之后,就可以开始进行内核的裁剪和编译了。
首先需要进行内核选项的配置。
可以使用make menuconfig命令进入配置界面。
在这个界面中,用户可以对内核进行不同程度的裁剪,包括去掉多余的硬件支持和功能选项。
在配置选项中,用户需要选择一些基本的配置选项,包括文件系统类型、设备驱动、协议栈、安全选项、虚拟化等。
用户可以根据自己的需要,进行选项的选择和配置。
三、编译内核在完成了内核的配置之后,下一步就是进行内核的编译。
可以使用make命令进行编译。
编译过程中需要耗费一定的时间和资源,因此建议在空闲时刻进行编译。
如果出现编译错误,需要根据错误提示进行排查和解决。
编译错误很可能是由配置选项不当造成的,因此要仔细检查配置选项。
四、安装内核编译完成后,就可以安装内核。
可以使用make install命令进行安装。
安装完成后,可以重启系统,以使新的内核生效。
在重启时,需要手动选择新的内核,可以选择自己编译的内核或者系统默认的内核。
五、总结对于不同的用户,对内核的需求和选择是不同的。
因此,在对内核进行裁剪时,需要根据自己的需求进行适当的选择,以提高系统性能和稳定性。
同时,在进行内核的编译时,也需要仔细检查配置选项和随时记录日志以便排除可能出现的问题。
嵌入式Linux内核裁剪和移植
嵌入式linux内核的裁剪和编译
具体配置菜单:(16/26)
• 15 、Plug and Play support 这是对PNP(即插即用)设备的支持.
IT Education & Training
26
嵌入式linux内核的裁剪和编译
12
嵌入式linux内核的裁剪和编译
具体配置菜单:(3/26)
• 3 、 system type 系统类型,主要是CPU 的类型。 S3C2410 的ARM 系列CPU
IT Education & Training
13
嵌入式linux内核的裁剪和编译
具体配置菜单:(4/26)
IT Education & Training
8
嵌入式linux内核的裁剪和编译
IT Education & Training
比如要对USB support进行选择,具体如下图所示: 直接编译进 内核 模块方式编 译进内核 不编译进内 核
9
嵌入式linux内核的裁剪和编译
IT Education & Training
第三步:键入make clean命令,删除已生成的模块和目标文 件,即在编译新内核之前清除干净环境; 第四步:键入make dep命令,编译变量依赖关系等; 第五步:键入make zImage 生成经压缩以后的内核映像文件 zImage ; 第六步:make modules ----编译模块; 第七步:make modules_install ----安装编译完成的模块; 注意:内核映像文件zImage存放在./arch/arm/boot/ 目录下
24
嵌入式linux内核的裁剪和编译
实验室实验2-Linux内核移植
项目二:Linux内核移植1.能力培养目标●了解嵌入式Linux内核的构成●掌握内核裁减定制的方法●掌握内核编译的方法●掌握内核烧写的方法2.项目任务要求(1)项目任务Linux内核的裁剪、编译和烧写。
(2)项目来源及应用对于较复杂的嵌入式系统项目,当硬件平台制作好之后,就需要向其移植操作系统,如果移植的是嵌入式Linux且为GUI应用,那么移植过程一般包含:第一步,移植引导程序(Vivi、Blob、U-Boot等);第二步,移植内核kernel;(本次实验内容)第三步,移植根文件系统;第四步,移植库文件,如QT库;第五步,运行项目程序。
(3)功能需求裁剪一个可用的Linux内核●选择正确的处理器类型●使其支持网卡、小键盘、USB鼠标、声卡等设备●成功编译后烧写到目标机上●内核能正确加载运行●键盘驱动可用(4)项目开发环境需求3.项目预习(1)了解项目目标、项目任务要求、项目设计和项目实施步骤。
(2)下载本次实验所需要的软件和代码。
将kbd_test目录放到Linux虚拟机的up-techpxa270cl目录下。
(3)完成内核裁剪及编译好内核映像。
(4)回答以下问题如何能够在目标机上访问宿主机上的文件?说明使用mount命令进行文件挂载的方法。
说明mount命令执行不成功可能的原因和解决方法。
说明本实验所使用的Linux内核版本。
说明Linux内核裁减定制的方法。
4.项目设计4.1选择Linux内核裁剪方法Linux内核的裁减配置的三种命令:1、make config:命令行模式,一行一行的配置,不推荐使用。
2、make menuconfig:大多人熟悉的menuconfig菜单。
3、make xconfig:基于QT图形化配置,菜单结构清晰。
所有内核裁减配置过程,都是通过Config.in(2.4内核)或Kconfig(2.6内核)经由不同脚本解释器产生.config配置文件。
make menuconfig配置菜单make xconfig配置菜单在配置时,通常有三种选择方式:●Y:将该功能编译进内核;●N:不将该功能编译进内核;●M:以模块方式编译,需要时可以动态插入到内核中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验5 linux内核的裁剪移植
一、实验目的:
学习利用menuconfig配置文件进行裁减内核,编译内核并移植到开发板上。
二、实验内容
一、开发环境
宿主机:ubuntu10.04
开发板:tiny6410
编译器:4.3.2
二、内核移植
1.下载源码
ftp:///pub/linux/kernel/v2.6/linux-2.6.38.tar.bz2
此实验所需的文件放到/home/embedded/11目录下:
linux-2.6.38.tar.bz2, yaffs2.tar.bz2
s3c_nand.c , s3c_nand_mlc.fo ,nand_base.c ,Kconfig ,regs-nand.h
2.解压
(进入根目录下的/home/poplar/expr4/kernel目录,解压源码)# cd /home
# mkdir poplar/expr4/kernel –p
# cd /home/poplar/expr4/kernel
# cp /home/embedded/11/linux-2.6.38.tar.bz2 ./
tar xvfj /home/poplar/expr4/kernel/linux-2.6.38.tar.bz2
3.修改架构,编译器(需要在arm上运行,所以用交叉编译器)解压完进入解压出来的linux-2.6.38目录
#cd linux-2.6.38
#vi Makefile (或者用gedit)
191行改为
ARCH ?= arm //191行CROSS_COMPILE ?= /usr/local/arm/4.3.2/bin/arm-linux- (找到其交叉编译环境,把路径加全) //192行
4.生成默认配置文件
#cp arch/arm/configs/s3c6400_defconfig .config
如省略这个操作的话 后面会找不到System Type Linux内核中已经自带了关于我们6410开发板的配置。
5.修改配置项
#make menuconfig
System Type->[*] MINI6410 选上,
6.拷贝NAND FLASH驱动到根目录下的/home/poplar/expr4/kernel下的linux-2.6.38里相应的文件位置处(以下的文件在实验五文件夹里有)
drivers/mtd/nand/s3c_nand.c
arch/arm/plat-samsung/include/plat/regs-nand.h
drivers/mtd/nand/s3c_nand_mlc.fo
drivers/mtd/nand/nand_base.c
drivers/mtd/nand/Kconfig
执行命令:
#cp /home/embedded/11/s3c_nand.c ./drivers/mtd/nand/
#cp /home/embedded/11/s3c_nand_mlc.fo ./drivers/mtd/nand/ #cp /home/embedded/11/nand_base.c ./drivers/mtd/nand/
#cp /home/embedded/11/Kconfig ./drivers/mtd/nand/
#cp /home/embedded/11/regs-nand.h ./arch/arm/
plat-samsung/include/plat/
7修改nand 驱动makefile
输入指令#cd drivers/mtd/nand
#vi Makefile
drivers/mtd/nand/Makefile中20行增加
obj-$(CONFIG_MTD_NAND_S3C) += s3c_nand.o
末尾再增加
obj-$(CONFIG_MTD_NAND_S3C) += s3c_nand_mlc.fo
8.增加相应选项
输入指令#cd /home/poplar/expr4/kernel/linux-2.6.38
#make menuconfig
Device Drivers--->
<*> Memory Technology Device (MTD) support --->
[*] MTD partitioning support
[*] Command line partition table parsing
<*> Direct char device access to MTD devices <*> Caching block device access to MTD devices <*> NAND Device Support --->
< > NAND Flash support for Samsung S3C SoCs 去掉不要选
<*> NAND Flash support for S3C SoC [*] S3C NAND Hardware ECC
三、添加yaffs2文件系统的支持
首先向内核源代码中加入支持yaffs2的源代码】
解压yaffs2.tar.bz2
#cd /home/poplar/expr4/kernel
#cp /home/embedded/11/yaffs2.tar.bz2 ./
#tar xvfj yaffs2.tar.bz2
进入解压出的目录#cd yaffs2
执行如下命令
./patch-ker.sh c m +内核源码路径# ./patch-ker.sh c m ../linux-2.6.38
然后进入内核源码目录
#cd /home/poplar/expr4/kernel/linux-2.6.38
执行make menuconfig
选择File systems
选择[*] Miscellaneous filesystems --->
选择上<*> yaffs2 file system support以及与yaffs2相关选项。
配置结果如下:
退出保存
四、添加对UBIFS文件系统的支持
1. 配置内核支持UBIFS
#make menuconfig
Device Drivers --->
Memory Technology Device (MTD) support --->
Enable UBI - Unsorted block images --->
2.配置mtd支持UBI接口
File systems --->
Miscellaneous filesystems --->
UBIFS file system support
3.再次make
#make zImage
一、下载到开发板(见实验三操作说明)
先将zImage用DNW下载到开发板,然后将开关拨动到nand方式启动,观察超级终端此时启动会出现如下问题
如果成功,如下图:。