linux kernel 移植步骤

来源:互联网 发布:sql相加函数 编辑:程序博客网 时间:2024/05/21 07:15

linux kernel 移植步骤


linux kernel 移植步骤


1.准备

准备:linux-2.6.32 kernel(linux-2.6.32.tar.bz2)

下载地址:http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.tar.bz2

2.目录结构

认清kernel的目录结构,了解目录的作用。

2.1 根目录目录文件

解压并查看:

$ tar -xvf linux-2.6.32.tar.bz2                                                                                                                                                                                                                                                                 

$ cd linux-2.6.32

$ ls

2.2 目录的作用

arch:

硬件体系结构相关的代码,支持的每种体系结构在arch目录下都有对应的子目录。

crypto:

内核本身所用的加密API,实现了常用的加密和散列算法,还有一些压缩和CRC校验算法。

fs:

虚拟文件系统(VFS,Virtual FileSystem)的代码,包含所有的文件系统代码和各种类型的文件操作代码,它的每一个子目录支持一个文件系统。

sound:

声卡驱动以及其他声音相关的代码。

block:

block层的实现。最初block层的代码一部分位于drivers目录,一部分位于fs目录,从2.6.15 开始,block层的核心代码被提取出来放在了顶层的block目录。

Documentation:

存放了与内核相关的文档。

include:

目录包含了内核中大部分的头文件,与平台无关的头文件在include/linux子目录下,include/scsi目录则是有关scsi 设备的头文件目录

kernel:

主要的核心代码,此目录下的文件是内核的最核心部分,包括进程调度、定时器等,实现了大多数Linux 系统的内核函数。同样,和体系结构相关的代码在 arch/*/kernel 中。

mm:

包含了体系结构无关部分的内存管理代码,体系相关的部分位于 arch/*/mm 目录下。

samples:

tools:

drivers:

linux 支持的外围设备或总线的驱动程序,每个不同的驱动占用一个子目录

init:

内核的初始化代码。包括main.c、创建早期用户空间的代码以及其他初始化代码。

lib:

放置核心库代码,实现了一个标准 C 库的通用子集,与arch/lib 下的代码不同,这里的库代码都是使用C 编写的,在内核新的移植版本中可以直接使用。

net:

网络相关代码,实现了各种常见的网络协议

scripts:

该目录下没有内核代码,只包含了用来配置内核的脚本文件。当运行 make menuconfig 或者make xconfig 之类的命令配置内核时,用户就是和位于这个目录下的脚本进行交互的。

usr:

实现了用于打包和压缩的的cpio 等。

firmware:

ipc:

IPC,即进程间通信(interprocess communication)。核心的进程间通讯的代码,它包含了共享内存、信号量以及其他形式IPC的代码。

security:

这个目录包括了不同的Linux 安全模型的代码,比如NSA Security-Enhanced Linux。

virt:

3.编译

大概三个步骤:

make xxxxxxx_defconfig   //生成对应平台的的配置信息,如s3c2410则为s3c2410_defconfig

make menuconfig        //配置内核

make zImage            //编译生成zImage文件                                                                                                                                                                                                                                       

3.1 生成配置文件

首先确定平台和编译器,如果没有确定平台,就执行make s3c2410_defconfig时会默认平台为当前系统的平台(一般开发用的PC为x86),这有可能与自己的目标平台不一致,就会报错,我的开发平台报错如下:

linux@linux-vm:~/kernel/linux-2.6.32$ make s3c2410_defconfig

***

*** Can't find default configuration "arch/x86/configs/s3c2410_defconfig"!                                                                                                                                                                               

***

make[1]: *** [s3c2410_defconfig] Error 1

make: *** [s3c2410_defconfig] Error 2

linux@linux-vm:~/kernel/linux-2.6.32$

所以首先确定平台和编译器,方法是修改内核顶层目录下的Makefile文件(ARM平台):

修改前:

ARCH                 ?= $(SUBARCH)

CROSS_COMPILE     ?=

修改后:

ARCH                 ?= arm

CROSS_COMPILE     ?= arm-linux-                                                                                                                                                                                                                                                   

然后执行make s3c2410_defconfig:

linux@linux-vm:~/kernel/linux-2.6.32$ make s3c2410_defconfig                                                                                                                                                                                                

这样就生成了.config配置文件。

3.2 配置内核

运行make menuconfig,根据实际需要制定内核。

linux@linux-vm:~/kernel/linux-2.6.32$ make menuconfig                                                                                                                                                                                                             

最后保存退出。

3.3 编译内核

执行make zImage,完成后会在对应平台的boot目录下生成zImage文件,对ARM平台,该路径为arch/arm/boot/。

linux@linux-vm:~/kernel/linux-2.6.32$ make zImage                                                                                                                                                                                                                      

在arch/arm/boot/下生成zImage就完成了。

4.错误信息及处理

4.1平台信息不匹配

执行make s3c2410_defconfig时报错,报错信息:

linux@linux-vm:~/kernel/linux-2.6.32$ make s3c2410_defconfig

***

*** Can't find default configuration "arch/x86/configs/s3c2410_defconfig"!                                                                                                                                                                               

***

make[1]: *** [s3c2410_defconfig] Error 1

make: *** [s3c2410_defconfig] Error 2

linux@linux-vm:~/kernel/linux-2.6.32$

缺少平台信息,应先修改顶层Makefile文件:

修改前:

ARCH                 ?= $(SUBARCH)

CROSS_COMPILE     ?=

修改后:

ARCH                 ?= arm

CROSS_COMPILE     ?= arm-linux-                                                                                                                                                                                                                                                   

然后再执行make s3c2410_defconfig命令。

4.2缺少库文件

执行make menuconfig时报错,报错信息:

inux@linux-vm:~/kernel/linux-2.6.32$ make menuconfig

 *** Unable to find the ncurses libraries or the

 *** required header files.

 *** 'make menuconfig' requires the ncurses libraries.                                                                                                                                                                                                                 

 ***

 *** Install ncurses (ncurses-devel) and try again.

 ***

make[1]: *** [scripts/kconfig/dochecklxdialog] Error 1

make: *** [menuconfig] Error 2

根据提示,需要安装ncurses-devel的库,解决方法:

sudo apt-get install libncurses5-dev                                                                                                                                                                                                                                                 

 

 

0 0
原创粉丝点击