当前位置:文档之家› 嵌入式Linux系统裁剪与微内核化

嵌入式Linux系统裁剪与微内核化

嵌入式Linux系统裁剪与微内核化
嵌入式Linux系统裁剪与微内核化

嵌入式Linux系统裁剪与编译

1 构建交叉编译环境

1.1 交叉编译原理简介

嵌入式开发一般都是使用交叉编译环境。交叉编译就是在一台计算机上编译软件,其生成的软件在另一台不同类型处理器的机器上运行。因为嵌入式硬件性能一般无法和家用计算机相比,无法构建开发和编译环境。所以我们只能“借”家用计算机来对目标平台的软件进行开发和编译。此时称家用计算机为宿主机,而目标平台机器为目标机。

每一个软件。在编译过程中。都要经过一系列处理,才能从源代码变成可执行目标代码。这一系列处理包括,预编译、高级语言编译、汇编、连接及其重定位。这一套流程里面用到的工具和库的组合,就称为工具链。Linux 上常用的开发工具GCC,它包含预编译器cpp,c语言编译器gcc,汇编器as 和连接器ld。这个工具链中,还有用于处理二进制包的工具包binutils,整个工具链应该是GCC+binutils+Glibc。

为了编译在目标机上运行嵌入式Linux内核,首先我们必须编译目标平台的编译链,而这个链是存放在主机上,故名为交叉编译链。

1.2 下载构建交叉编译链的工具及其补丁

Binutils-2.19.1 Busybox-1.13.0 GCC-4.3.3 GMP-4.2.4

MPFR-2.4.1 uClibc-0.9.30.1

制作交叉编译链

定义环境变量

定义MYSYS变量为嵌入式系统主目录变量、MYSYS_TARGET变量为目标平

台、MYSYS_HOST为主机平台。使用export命令或者将此变量添加.bashrc文件中。

cat > ~/.bashrc << “EOF”

set +h

umask 022

MYSYS=/mnt/mysys

LC_ALL=POSIX

PATH=${MYSYS}/ctools/bin:/bin:/usr/bin

export MYSYS LC_ALL PATH

EOF

这样我们设置了生成系统的根目录变量。

export MYSYS_HOST=”${MACHTYPE}”

export MYSYS_TARGET=”[XXX]-ulibc-linux-gnu”

这两个变量都是编译过程需要使用的.XXX是目标平台,如arm平台,可写为arm-ulibc-linux-gun。

首先需要安装内核头文件。

make mrproper

make ARCH=${MYSYS_ARCH} headers_check

make ARCH=${MYSYS_ARCH} INSTALL_HDR_PATH=dest headers_install 制作工具链的时候需要使用部分内核头文件。

编译GMP。

../configure --prefix=/ctools --enabled-mpbsd

make

make install

编译MPFR。

LDFLAGS="-Wl,-rpath,/ctools/lib" \

./configure --prefix=/ctools --enable-shared \ --with-gmp=/ctools

cp -rv dest/include/* ${MYSYS}/usr/include

make

make install

第一次编译GCC

AR=ar LDFLAGS="-Wl,-rpath,/ctools/lib" \

../gcc-4.3.3/configure

--prefix=${MYSYS}/ctools \

--build=${MYSYS_HOST} --host=${MYSYS_HOST}\

--target=${MYSYS_TARGET} --with-sysroot=${MYSYS} --disable-nls --disable-shared \

--with-mpfr=/ctools --with-gmp=/ctools \

--without-headers --with-newlib

--disable-decimal-float \

--disable-libgomp

--disable-libmudflap --disable-libssp \

--disable-threads --enable-languages=c

make

make install

此时的编译出来的gcc,是不可以编译c程序的。因为没有连接库。同时安装的Linux头文件也是这一步被使用。GCC必须掌握目标体系的全部细节,这由Linux的内核头文件给出。

编译uclibc库,当然也可以编译glibc库。

编译最终版gcc

../gcc-4.3.3/configure --prefix=${CLFS}/cross-tools \ --build=${CLFS_HOST} --target=${CLFS_TARGET} \

--host=${CLFS_HOST} --with-sysroot=${CLFS} \

--disable-nls --enable-shared

--enable-languages=c

--enable-c99

--enable-long-long

--with-mpfr=/cross-tools \

--with-gmp=/cross-tools

make

make install

这样就得到了交叉编译链。

1.3 下载Linux内核并进行裁剪

Linux-2.6.30.5

2 Linux内核编译与裁剪

2.1 配置内核的几种命令:

make config:基于文本的最为传统的配置界面,不推荐使用。

make menuconfig:基于文本选单的配置界面,字符终端下推荐使用。

make xconfig:基于图形窗口模式的配置界面,Xwindow下推荐使用。

make oldconfig:如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦。

make ARCH=${CLFS_ARCH} CROSS_COMPILE=${CLFS_TARGET}- menuconfig 通过对嵌入式需求分析,通过必要的勾选,即可完成对linux内核裁剪和重编译。

2.2讲解一些内核选项:

2.2.1 General setup常规设置

子选项Prompt for development and /or incomplete code/drivers是测试版本代码。

Support for paging of anonymous memory(swap)选择是否支持内存随机页面支持(SWAP),如果嵌入式存储空间过小,可以去掉。可以提高运行速

度。

Auditing support审计支持,SELinux会需要用到它。

Initial RAM filesystem and RAM disk support初始化RAM文件系统和RAM磁盘支持,初始RAM文件系统是一种ram文件系统,它被启动器装载,在启动程序前以root形式挂载。

Initramfs source files初始ram文件系统源文件。有.cpio后缀的压缩包。

Optimize for size 尺寸优化,可以得到更小的内核。

Configure standard kernel features(for small sysytems)为小系统配置标准内核特性。

2.2.2 Loadable module support 可加载模块支持

Enable loadable module support允许可装载模块支持。此选项可以让你的内核支持模块。模块是一小段代码,编译后可在系统运行动态加入内核,从而为内核增加一些特性或是对某种硬件进行支持。一般一些不常用到的驱动或特性可以编译为模块以减小内核的体积。在运行时可以用modprobe命令来加载它到内核中去。

Module unloading模块卸载,能卸载不再使用的模块。可以使内核尺寸减小一些。 Forced module unloading强制内核模块卸载,强行卸载模块,即使内核认为不安全,内核会理解卸载模块

2.2.3 Enable the block layer 允许块设备

Support for Large Block Devices 提供对2TB活着更大的块设备支持。 Support for Large Single File提供对大文件支持,为大于2TB的文件。 Deadline I/O scheduler Deadline I/O调度简单紧密,在单进程的I/O 磁盘调度上,它的工作方式几乎和抢先式调度器相同,因此也是一个好的选择。

2.2.4 Processor type and features处理器类型及特性(此处可以针对嵌入式芯片进行裁剪)

Symmetric multi-processing support(SMP)多处理器支持。

RDC R-321x Soc RDC R-321x系列芯片

Processor family及其子选项,可以针对选择处理器。

Generic X86 support对X86 CPU类型进行优化。

Maximum number of CPUs 最大支持的CPU数量。

Multi-core scheduler support多核调度器支持。

Preemptible Kernel可抢先式内核,这个选项通过使所有内核代码编译为“可抢先”来降低内核延迟。这个非常适合嵌入式编译内核。

High Memory Support高容量内存支持。如果内核不会运行在高于1G内存的机器上,就去掉。

Timer frequency时钟频率的设置。

Built-in kernel command line内嵌内核命令行,允许编译内核的时候指定

2.2.5 Power management options 电源管理选项

Suspend to RAM and standby内存挂起和待机功能。允许系统休眠,主内

存仍带电保存相关信息。

Hibernation 休眠

AC Adapter AC交流电源适配器

Battery电池 Button 风扇

ARM BIOS support高级电源管理支持。

2.2.6 Bus options 总线选项

2.2.7 Executable file formants 可执行文件格式

Kernel support for ELF Binaries ELF二进制文件内核支持

2.2.8 Networking support 网络支持

Packet socket包套接字

Unix domain sockets UNIX域套接字

THE IPv6 protocol IPv6协议。

Security Marking给网络套接字提供安全标志。

Network packet filtering framework 网络包过滤框架。

Asynchronous Transer Mode(ATM)异步传输模式,如果有ATM网卡,可选。

Appletalk protocol support苹果电脑用于连接网络的协议。

ld Ethernet Bridging 802.ld以太网桥接。

802.1Q VLAN support 802.1Q VLAN接口支持。

The IPX protocol IPX协议,这是对Novell网络的协议,这个驱动会使内核增大16KB.

Bluetooth subsystem support 蓝牙子系统支持。

Phonet protocols family 网络电话协议家族。 Wireless无线支持。 IrDA(infrared) subsystem support红外子系统支持。

2.2.9Device Drivers 设备驱动

MTD partitioning support如果有一个设备,需要将他分成几个分区。

Parallel port support并行端口支持。

Plug and Play support即插即用设备。 Block devices块设备。

Normal floppy disk support普通软盘支持。

Network block device support网络块设备。

Low Performance USB Block driver低端USB块驱动设备。

RAM block device support RAM块设备支持

Packet writing on CD/DVD media CD/DVD媒体包写入。

ATA over Ethernet support 以太网ATA支持。

ATA/ATAPI/MFM/RLL support如果系统是纯种SCSI,那么可以选择N。

Support for DATA支持。

SCSI device support SCSI设备支持。

SCSI disk support SCSI磁盘支持。

RAID support RAID支持。

Network device support网络设备支持。

Input device support 输入设备支持。

Graphics support 图形支持。

Sound 声音。

HID Devices HID设备。

USB Human Interface Device supports 人性化接口设备。 USB support USB支持。

MMC/SD card support MMC/SD卡支持。

可以从选项知,这是进行嵌入式裁剪非常重要的一个选项。我们可以为嵌入式环境量身打造我们需要的驱动,去掉我们不需要的驱动,那么Linux 内核将减小很多。

2.2.10 Firmware Divers 固件驱动

2.2.11File systems 文件系统

Second extended fs support 第二次扩展文件支持,既Ext2文件系统。

Ext3 journalling file system support Ext3日志文件系统。

Ext3 extended attributes Ext3扩展属性。

The Extended 4(ext4) filesystem ext4扩展文件系统。

JFS filesystem support JFS文件系统支持。

XFS filesystem support XFS文件系统支持。

OCFS2 file system support OCFS2文件系统。

Kernel automounter support 内核自动挂载支持。

CD-ROM/DVD Filesystems CD-ROM/DVD文件系统。

DOS/FAT/NT Filessystems DOS/FAT/NT文件系统。

VFAT fs support VFAT文件系统支持。

NTFS file system support NTFS文件系统支持。

/proc file system support /proc文件系统支持,提供系统状态信息。

Virtual memory file system support 虚拟文件系统支持。

Tmpfs是一个把所有文件保持在虚拟内存里面的文件系统。

Journalling Flash File Systme V2(JFFS2) support日志闪存文件系统支持。

Compressed ROM file system support 压缩ROM文件系统支持。

Network File Systems 网络文件系统。

对嵌入式文件系统进行定制和裁剪是必要的,根据需求选择合适的文件系统。然后在此选项进行配置,能有效裁剪linux。

2.2.12Kernel hacking 内核调试

2.2.13Security options 安全选项

3 内核裁剪结束,编译内核源码。

对内核配置完毕,即可进行内核源代码编译。

Make ARCH=${MYSYS_ARCH} CROSS_COMPILE=${MYSYS_TARGET}-

INSTALL_MOD_PATH=${MYSYS} module_install 编译结束,可以得到Linux内核镜像VMlinux。

嵌入式Linux内核移植详解(顶嵌)

内核移植阶段 内核是操作系统最基本的部分。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序在什么时候对某部分硬件操作多长时间。直接对硬件操作是非常复杂的,所以内核通常提供一种硬件抽象的方法来完成这些操作。硬件抽象隐藏了复杂性,为应用软件和硬件提供了一套简洁,统一的接口,使程序设计更为简单。 内核和用户界面共同为用户提供了操作计算机的方便方式。也就是我们在windows下看到的操作系统了。由于内核的源码提供了非常广泛的硬件支持,通用性很好,所以移植起来就方便了许多,我们需要做的就是针对我们要移植的对象,对内核源码进行相应的配置,如果出现内核源码中不支持的硬件这时就需要我们自己添加相应的驱动程序了。 一.移植准备 1. 目标板 我们还是选用之前bootloader移植选用的开发板参数请参考上文的地址: https://www.doczj.com/doc/3d13726958.html,/thread-80832-5-1.html。bootloader移植准备。 2. 内核源码 这里我们选用比较新的内核源码版本linux-2.6.25.8,他的下载地址是 ftp://https://www.doczj.com/doc/3d13726958.html,/pub/linux/kernel/v2.6/linux-2.6.25.8.tar.bz2。 3. 烧写工具 我们选用网口进行烧写这就需要内核在才裁剪的时候要对网卡进行支持 4. 知识储备 要进行内核裁剪不可缺少的是要对内核源码的目录结构有一定的了解这里进 行简单介绍。 (1)arch/: arch子目录包括了所有和体系结构相关的核心代码。它的每一个子 目录都代表一种支持的体系结构,例如i386就是关于intel cpu及与之相兼容体 系结构的子目录。PC机一般都基于此目录。 (2)block/:部分块设备驱动程序。 (3)crypto:常用加密和散列算法(如AES、SHA等),还有一些压缩和CRC校验 算法。 (4) documentation/:文档目录,没有内核代码,只是一套有用的文档。 (5) drivers/:放置系统所有的设备驱动程序;每种驱动程序又各占用一个子目 录:如,/block 下为块设备驱动程序,比如ide(ide.c)。 (6)fs/:所有的文件系统代码和各种类型的文件操作代码,它的每一个子目录支持 一个文件系统, 例如fat和ext2。

实验四Linux内核移植实验

合肥学院 嵌入式系统设计实验报告 (2013- 2014第二学期) 专业: 实验项目:实验四 Linux内核移植实验 实验时间: 2014 年 5 月 12 实验成员: _____ 指导老师:干开峰 电子信息与电气工程系 2014年4月制

一、实验目的 1、熟悉嵌入式Linux的内核相关代码分布情况。 2、掌握Linux内核移植过程。 3、学会编译和测试Linux内核。 二、实验内容 本实验了解Linux2.6.32代码结构,基于S3C2440处理器,完成Linux2.6.32内核移植,并完成编译和在目标开发板上测试通过。 三、实验步骤 1、使用光盘自带源码默认配置Linux内核 ⑴在光盘linux文件夹中找到linux-2.6.32.2-mini2440.tar.gz源码文件。 输入命令:#tar –jxvf linux-2.6.32.2-mini2440-20110413.tar对其进行解压。 ⑵执行以下命令来使用缺省配置文件config_x35 输入命令#cp config_mini2440_x35 .config;(注意:x35后面有个空格,然后有个“.”开头的 config ) 然后执行“make menuconfig”命令,但是会出现出现缺少ncurses libraries的错误,如下图所示: 解决办法:输入sudo apt-get install libncurses5-dev 命令进行在线安装ncurses libraries服务。

安装好之后在make menuconfig一下就会出现如下图所示。 ⑶配置内核界面,不用做任何更改,在主菜单里选择退出,并选“Yes”保存设置返回到刚命令行界面,生成相应配置的头文件。 编译内核: #make clean #make zImage 在执行#make zImage命令时会出现如下错误: 错误:arch/arm/mach-s3c2440/mach-mini2440.c:156: error: unknown field 'sets' specified in initializer 通过网上查找资料 于是在自己的mach-mini2440.c中加入 #include

Linux内核裁剪实例

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 了。

内核配置与裁剪

内核配置与裁剪 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)

嵌入式Linux之Kernel(裁减移植)启动调试、打印技术 printascii(补充)、内核调试

嵌入式系统搭建过程中,对于系统平台搭建工程师在完成Bootloader 的调试之后就进入Kernel 裁减移植的阶段,其中最重要的一步是Kernel 启动的调试,在调试Kernel 过程中通常遇到最常见的问题是启动异常: Uncompressing Linux............................................................ ........................... done, booting the kernel.( 挂死在此处) 注意:这里是arch/arm/boot/compressed/head.S的解压过程,调用了decompress_kernel()(同目录下的misc.c)->include/asm-arm/arch-xxx/uncompress.h的putc()实现。这是在uboot中初始化的,用的是物理地址,因为此时内核还没有起来。 而printascii则是调用了汇编。printascii()位于arch/arm/kernel/debug.S,他需要调用虚拟地址,此虚拟地址通过machine_start提供,而相关的宏在include/asm/arch-xxx/debug-macro.S实现,这下明白了。 10-05-14添加:debug.s里面需要判断一下当前是否打开了mmu,然后指定uart的基址。在解压阶段的head.s,mmu是1:1映射,目的是加快速度。到了内核的head.s,就是真正的mmu了,此时就是虚拟地址了。 导致驱动异常(启动挂死)的原因有很多,如基于EVM 板的硬件做了修改(如更改了FLASH 空间大小、地址和型号,更改了SDRAM 、DDR SDRAM 空间大小、地址和型号,更改了晶振频率等),板卡ID号不支持等。那么如何进行调试那,其实有两种调试技术比较有效。 Kernel 启动调试技术- 使用printascii() 函数跟踪start_kernel() 有没运行,在booting the kernel 之后Kernel 最先执行的是start_kernel() 函数,确认start_kernel() 有否执行就是在其开始代码段添加printascii("start_kernel …") ,如果串口没有打印出start_kernel …,说明start_kernel() 没有运行,那么可能的原因有Bootloader 配置的启动参数错误、 Kernel 加载到(DDR) SDRAM 的地址不正确, Kernel 编译时指定的(DDR) SDRAM 运行地址不正确等。这样就需要一项一项排查错误,当错误被排查完毕,通常打印出start_kernel …是种必然,如果打印出这仪信息说明 Kernel已进入到start_kernel() 执行,如果此时有串口启动打印就比较成功了,如果仍然没有打印启动信息,就需要另外一种调试技术。 附代码修改:init/main.c <<- … extern void printascii(const char*); // Modify asmlinkage void __init start_kernel(void)

基于ARM的嵌入式linux内核的裁剪与移植.

基于ARM的嵌入式linux内核的裁剪与 移植 0引言微处理器的产生为价格低廉、结构小巧的CPU和外设的连接提供了稳定可靠的硬件架构,这样,限制嵌入式系统发展的瓶颈就突出表现在了软件方面。尽管从八十年代末开始,已经陆续出现了一些嵌入式操作系统(比较著名的有Vxwork、pSOS、Neculeus和WindowsCE)。但这些专用操作系统都是商业化产品,其高昂的价格使许多低端产品的小公司望而却步;而且,源代码封闭性也大大限制了开发者的积极性。而Linux的开放性,使得许多人都认为Linu 0 引言 微处理器的产生为价格低廉、结构小巧的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内核的裁剪以及移植过程,文中介绍的基本原理与方法技巧也可用于其它芯片。 2 内核移植过程 2.1 建立交叉编译环境 交叉编译的任务主要是在一个平台上生成可以在另一个平台上执行的程序代码。不同的CPU需要有不同的编译器,交叉编译如同翻译一样,它可以把相同的程序代码翻译成不同的CPU对应语言。 交叉编译器完整的安装涉及到多个软件安装,最重要的有binutils、gcc、glibc三个。其中,binutils主要用于生成一些辅助工具;gcc则用来生成交叉编译器,主要生成arm—linux—gcc交叉编译工具;glibc主要是提供用户程序所使用的一些基本的函数库。 自行搭建交叉编译环境通常比较复杂,而且很容易出错。本文使用的是

实验5 linux内核的裁剪移植

实验5 linux内核的裁剪移植 一、实验目的: 学习利用menuconfig配置文件进行裁减内核,编译内核并移植到开发板上。 二、实验内容 一、开发环境 宿主机:ubuntu10.04 开发板:tiny6410 编译器:4.3.2 二、内核移植 1.下载源码 ftp://https://www.doczj.com/doc/3d13726958.html,/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行

在menuconfig中配置Linux内核裁剪的具体步骤

在menuconfig中配置Linux内核裁剪的具体步骤 在men UC onfig中配置,可以对进行Linux内核配置选项及删改。本文介绍详细配置方法。第一部分:全部删除 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命令来加载它,内核才能使用。不过,如果你选择了这个选项,在内核需要一些模块时它可以自动调用modprobe命令来加载需要的模块,这是个很棒的特性,当然要选Y喽。 第四部分:全部删除 Block layer-----〉块设备 第五部分:除以下选项,其它全部删除 Processor type and features ---> 处理器类型 Subarchitecture Type (PC-compatible) ---> 这选项的主要的目的,是使Linux可以支持多种PC标准,一般我们使用的PC机是遵循所谓IBM兼容结构(pc/at)。这个选项可以让你选择一些其它架构。我们一般选择PC-compatible就可以了。 Processor family(386): 它会对每种CPU做最佳化,让它跑的好又快,一般来说,你是什么型号的就选什么型号的就好。我选的是386,这样内核会省下不少空间 第六部分:除以下选项,其它全部删除 Power management options (ACPI, APM) ---> 电源管理选项 [ ] Power Management Debug Support 电源管理的调试信息支持,如果不是要调试内核有关电源管理部份,请不要选择这项。 ACPI Support ---〉高级电源接口配置支持,如果BIOS支持,建议选上这项 [ ]Button 这个选项用于注册基于电源按钮的事件,比如power, sleep等,当你按下按钮时事件将发生,一个守护程序将读取/proc/acpi/event,并执行用户在这些事件上定义的动作比如让系统关机。可以不选择,根据自己的需求。 第七部分:除以下选项,其它全部删除

基于ARM的嵌入式linux 内核的裁剪与移植.

基于ARM的嵌入式linux 内核的裁剪 与移植 摘要:实现了一种全集成可变带宽中频宽带低通滤波器,讨论分析了跨导放大器-电容(OTA—C)连续时间型滤波器的结构、设计和具体实现,使用外部可编程电路对所设计滤波器带宽进行控制,并利用ADS软件进行电路设计和仿真验证。仿真结果表明,该滤波器带宽的可调范围为1~26 MHz,阻带抑制率大于35 dB,带内波纹小于0.5 dB,采用1.8 V电源,TSMC 0.18μm CMOS工艺库仿真,功耗小于21 mW,频响曲线接近理想状态。关键词:Butte 0 引言 微处理器的产生为价格低廉、结构小巧的CPU和外设的连接提供了稳定可靠的硬件架构,这样,限制嵌入式系统发展的瓶颈就突出表现在了软件方面。尽管从八十年代末开始,已经陆续出现了一些嵌入式操作系统(比较著名的有Vxwork、pSOS、Neculeus和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内核的裁剪以及移植过程,文中介绍的基本原理与方法技巧也可用于其它芯片。 2 内核移植过程 2.1 建立交叉编译环境 交叉编译的任务主要是在一个平台上生成可以在另一个平台上执行的程序代码。不同的CPU需要有不同的编译器,交叉编译如同翻译一样,它可以把相同的程序代码翻译成不同的CPU对应语言。 交叉编译器完整的安装涉及到多个软件安装,最重要的有binutils、gcc、glibc三个。其中,binutils主要用于生成一些辅助工具;gcc则用来生成交叉编译器,主要生成arm—linux—gcc交叉编译工具;glibc主要是提供用户程序所使用的一些基本的函数库。 自行搭建交叉编译环境通常比较复杂,而且很容易出错。本文使用的是

基于Linux内核定制X86平台的微操作系统(很完整详尽文章)

基于Linux内核定制X86平台的微操作系统摘要:1 0 前言2 0.1 Linux系统简介2 0.2 Linux的基本思想2 0.3 Linux内核2 0.4 Linux内核版本命名3 0.5 Linux文件系统3 0.6Linux内核引导4 0.7Linux系统组成4 1 平台的搭建4 1.1 硬件平台4 1.2 软件平台4 1.2.1 Ubuntu系统的下载4 1.2.2 Ubuntu系统的安装4 1.2.3 Ubuntu系统的配置4 2 Linux内核的编译5 2.1 内核的下载5 2.2 内核的定制5 2.3 内核的编译5 2.4 内核的制作6 3 BusyBox的编译6 3.1 BusyBox的下载6 3.2 BusyBox的配置6 3.3 BusyBox的编译7 4 Linux文件系统的制作7 4.1 文件系统的制作7 4.2 文件系统的配置9 4.3 文件系统的压缩7 5 Linux引导程序配置10 5.1 ISOLINUX的下载10 5.2 ISOLINUX的配置10 6 LinuxCD-ROM的制作10 7 Linux定制系统的运行11 7.1 VirtualBox下的运行11 7.2 U盘引导在X86平台下的运行12 8定制系统过程中的问题12 8.1 平台搭建中的问题12 8.2 内核编译中的问题12

8.3 BusyBox编译中的问题12 8.4 文件系统制作中的问题12 8.5 引导程序制作中的问题12 8.6 CD-ROM制作中的问题13 8.7 定制系统运行的问题13 参考13 基于Linux内核定制X86平台的微操作系统 王林强 (河南大学物理与电子学院通信专业,河南开封,475004) 摘要: Linux是一种自由和开放,用C语言和汇编语言写成,并符合POSIX标准的类Unix操作系统。并且由于其可定制、可裁剪的特性,不仅在桌面操作系统中有重要的地位,而且在手机、平板电脑、路由器和视频游戏控制台等嵌入式设备有其巨大的优势。 为了更好、更深入的了解及掌握Linux系统。本文详细的讲述并实践,如何从Linux内核源码,经过定制、裁剪、编译、制作文件系统、内核引导,iso光盘制作到最终完整的基于Linux内核定制的微操作系统。 通过基于Linux内核定制的微操作系统的制作,深入的理解Linux内核的工作原理、文件系统结构、内核引导等,从而精通嵌入式开发。 关键词: Linux;定制;嵌入式;微系统 An implementation of micro-operating system based on the x86 platform Linux kernel customization Wang Lin-qiang (School of Physics and Electronics, Henan University, Henan Kaifeng 475004, China) Abstract: Linux is a free and open, and POSIX-compliant Unix-like operating system written in C and assembly language. And can be cut because of its customizable features, not only in the desktop o perating system in an important position, and its huge advantage in the embedded devices, mobile phones, tablet PCs, routers, and video game consoles. In order to better and deeper understanding of and master Linux system. This article tells in d etail and practice, from the Linux kernel source code has been customized, cutting, compiling, pro

嵌入式Linux的体系结构及其内核分析

嵌入式Linux的体系结构及其内核分析 1 嵌入式Linux系统的体系结构 1.1 嵌入式硬件 1.2 嵌入式软件 2 Linux操作系统内核 2.1 Linux内核的组成 2.2 Linux内核进程状态分析 2.3 嵌入式Linux系统内核的裁减和移植 1 嵌入式Linux系统的体系结构 由于Linux的独特优势,使越来越多的企业和科研机构把目光转向嵌入式Linux的开发和研究上。嵌入式Linux(Embeded Linux)是指对Linux经过小型化裁剪后,能够固化在容量只有几十万字节或几十亿字节的存储器芯片或单片机中,应用于特定嵌入式场合的专用Linux操作系统。嵌入式系统主要分为两大部分:嵌入式硬件和嵌入式软件。嵌入式硬件部分主要由嵌入式处理器、储存器、I/O端口和外围设备构成,嵌入式软件部分主要由嵌入式操作系统、设备驱动和嵌入式应用软件构成。嵌入式Linux系统有两层含义,狭义的嵌入式Linux系统指的是嵌入式Linux操作系统,广义的嵌入式Linux系统指的是基于嵌入式Linux操作系统构建的嵌入式系统。 嵌入式的体系结构如图1所示:

图 1 1.1 嵌入式硬件 嵌入式系统的核心是各种类型的嵌入式处理器,嵌入式处理器与通用处理器相比,具有很高的效率和可靠性,嵌入式系统趋于小型化。嵌入式处理器可以分为以下几类: ●嵌入式微处理器(Embedded Microprocessor Unit, EMU)。嵌入式微处理器目前主要有ARM, Power PC, MIPS,Am 186/88,386EX, 68000等系列,嵌入式微处理器的基础是通用计算机中的CPU。将微处理器装配在专门设计的电路板上,只保留和嵌入式应用有关的母板功能,这样可以大幅度减小系统体积和功耗。 ●嵌入式微控制器(Microcontroller Unit, MCU)。嵌入式微控制器目前主要有8051, P51XA, MCS-96/196/296, C166/167,MC68HC05/11/12/16等系列。嵌入式微控制器一般以某一种微处理器内核为核心,芯片内部集成ROM/EPROM、RAM、I/O、串口、脉宽调制输出、A/D、D/A,、Flash RAM等各种必要功能和外设。 ●DSP处理器(Digital Signal Processor, DSP) 。嵌入式DSP处理器比较有代表性的产品是TI的TMS320系列和Motorola的DSP56000系列。DSP处理器对系统结构和指令进行了特殊设计,使其适合十执行DSP算法,编译效率较高,指令执 行速度也较高,在数字滤波、FFT、频谱分析等方面得到了大量的应用。 ●嵌入式片上系统(System On Chip)。通用的SOC系列包括Infineon的

Linux内核裁剪课程设计

Linux程序设计课程设计报告 题目:linux内核裁剪的设计与实现 姓名:xx 学号:123 专业: 院系: 指导老师: 完成时间:

目录 ⒈引言 (1) ⒉需求分析 (1) 2.1前期准备 (1) 2.2 开发工具 (2) 3.详细设计 (2) 3.1 内核和交叉编译环境的搭建 (2) 1.内核版本的选择 (2) 2.交叉编译环境的搭建 (2) 3.2导入内核并解包 (3) 3.3建立符号链接并进入工作目录 (5) 3.4启动内核编辑图形界面 (5) 3.5 配置系统内核 (5) 3.6编译内核 (13) 3.7建立文件目录 (15) 3.8编译动态载入内存的模块 (15) 3.9拷贝到/lib/modules/2.6.10中 (16) 3.10安装新内核 (17) 3.11解决BusLogic错误 (17) 3.12生成initrd.img文件 (17) 3.13升级内核 (18) 4. 课程设计总结与体会 (19) 参考文献 (19)

⒈引言 Linux是一类Unix计算机操作系统的统称,也是自由软件和开放源代码发展中最著名的例子。Linux作为一个免费、自由软件,内核版本不断升级。新的内核修订了旧内核的bug,并增加了许多新的特性。同时也使得Linux系统更加稳定、更加安全,进一步满足用户的功能需求。 Linux内核裁剪是根据用户的需要进行删除和保留相关的模块。Linux内核裁剪完成后在进行编译,使之后的Linux系统为用户所需要的操作系统。Linux 内核升级是为了弥补较低版本的漏洞,使得Linux系统安全系数更高;另外使Linux系统的性能更稳定;最后是增加新功能,满足用户的功能需求。 本次课程设计是通过相关操作来实现将Linux内核进行裁剪和编译,并Linux2.4内核升级到2.6内核。如果用户想要使用这些新特性,或想根据自己的系统度身定制一个更高效,更稳定的内核,就需要根据自己的需要进行重新裁剪、编译内核以及内核升级。 ⒉需求分析 2.1前期准备 本次实验所需使用的系统是Red Hat Linux,而Red Hat Linux是安装在威睿工作站中的。如图1.1所示:

Linux内核裁剪的具体过程和方法

Linux内核裁剪的具体过程和方法 根据部分网摘资料和实际烧录结果进行整理: 内核功能: 在能够实现AT91SAM9260开发板基本功能的基础上,通过串口连接上读卡器后能进行一系列的操作和控制功能等,将读卡器的相应数据进行存储或者通过网络传输到远程的PC 机上。远程PC机能够通过网络方式在开发板上对所连接的读卡器参数进行更新配置,如设置天线接口、设置读卡方式等。(待与读卡器配套使用后再对内核的功能描述进行补充和完善。) 编译环境: 源代码解压完成后,进入linux 2.6.19目录下,使用VI命令编辑Makefile。确定编译环境为arm交叉编译工具与本机的安装路径一致ARCH = arm CROSS_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。有一些默认的符号其含义如下:"[ ]"表示该选项有两种选择方式;[*] 直接编译进内核;[] 不编译;"<>"表示该选项有三种选择方式; <*>直接编译进内核; 编译成模块形式,但不编译进内核;<> 不编译。 在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)支持,许多程序需要这个功能.必选,

嵌入式Linux系统开发教程答案_已

参考答案 第一章 一、填空题。 1、嵌入式系统主要融合了计算机软硬件技术、通信技术和微电子技术,它是将计算机直接嵌入到应用系统中,利用计算机的高速处理能力以实现某些特定的功能。 2、目前国内对嵌入式系统普遍认同的定义是:以应用为中心、以计算机技术为基础、软硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 3、嵌入式系统一般由嵌入式计算机和执行部件组成,其中嵌入式计算机主要由四个部分组成,它们分别是:硬件层、中间层、系统软件层以及应用软件层。 4、嵌入式处理器目前主要有ARM、MIPS、Power PC、68K等,其中arm处理器有三大特点:体积小、低功耗、的成本和高性能,16/32位双指令集,全球合作伙伴众多。 5、常见的嵌入式操作系统有:Linux、Vxworks、WinCE、Palm、uc/OS-II和eCOS。 6、嵌入式系统开发的一般流程主要包括系统需求分析、体系结构设计、软硬件及机械系统设计、系统集成、系统测试,最后得到最终产品。 二、选择题 1、嵌入式系统中硬件层主要包含了嵌入式系统重要的硬件设备:、存储器(SDRAM、ROM等)、设备I/O接口等。(A) A、嵌入式处理器 B、嵌入式控制器 C、单片机 D、集成芯片 2、20世纪90年代以后,随着系统应用对实时性要求的提高,系统软件规模不断上升,实时核逐渐发展为,并作为一种软件平台逐步成为目前国际嵌入式系统的主流(D)A、分时多任务操作系统B、多任务操作系统 C、实时操作系统 D、实时多任务操作系统 3、由于其高可靠性,在美国的火星表面登陆的火星探测器上也使用的嵌入式操作系统是。(B) A、Palm B、VxWorks C、Linux D、WinCE 4、嵌入式系统设计过程中一般需要考虑的因素不包括:(D) A、性能 B、功耗 C、价格 D、大小 5、在嵌入式系统中比较流行的主流程序有:(A) A、Angel B、Blob C、Red Boot D、U-Boot

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命令来加载它,内核才能使用。不过,如果你选择了这个选项,在内核需要一些模块时它可以自动调用modprobe命令来加载需要的 模块,这是个很棒的特性,当然要选Y喽。 第四部分:全部删除 Block layer-----〉块设备 第五部分:除以下选项,其它全部删除 Processor type and features ---> 处理器类型 Subarchitecture Type (PC-compatible) ---> 这选项的主要的目的,是使Linux可以支持多种PC标准,一般我们使用的PC机是遵循所谓 IBM兼容结构(pc/at)。这个选项可以让你选择一些其它架构。我们一般选择PC-compatible 就可以了。 Processor family(386): 它会对每种CPU做最佳化,让它跑的好又快,一般来说,你是什么型号的就选什么型号的就好。我选的是386 ,这样内核会省下不少空间

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-编译不通过,原因暂时不明,因此将整个的编译器执行文件的路径给出。 2、修改系统晶振频率,根据硬件平台上连接的晶振频率修改/arch/arm/mach-at91/Board-sam9x5cm.c中的第50行:/* Initialize processor: 12.000 MHz crystal */ at91sam9x5_initialize(12000000); 3、使用root用户登录终端进入源码根目录下,运行make menuconfig命令,即可看到配置linux内核的图形界面。 4、主要是配置一下选项,其中部分默认选项功能不明,选择默认即可:

相关主题
文本预览
相关文档 最新文档