Linux kernel移植流程

转载 2012年03月25日 01:28:09

Linux kernel简介

Linux内核是linux系统的心脏,它实现了操作系统五大主要功能模块:进程管理、内存管理、文件系统、设备控制和网络。Linux内核的功能模块如图1所示。

Linux Kernel移植流程 - 抵岸科技 - 抵岸科技的博客

图 1

进程管理模块可以说是linux内核的心脏模块,它负责创建和终止进程,并且处理它们和外部的联系(输入和输出)。对整个系统功能来讲,不同进程之间的通信(通过信号、管道、进程间通信原语)是基本的,这也是由内核来处理的。另外,调度器应该是整个操作系统中最关键的全程,是进程管理中的一部分。更广义地说,内核的进程管理活动实现了在一个CPU上多个进程的抽象概念。内在管理模块的作用是确保所有进程安全地共享计算机主内在区,此外,内在管理模块还支持虚拟内在管理方式,使得linux支持进程使用比实际内在空间更多的内在容量,并可以利用文件系统把示用的内在数据块交换到外部存储设备中去,等需要时再交换回来,这样大大提高了内在使用效率,节省了内在空间。文件系统模块用于支持对外部设备的驱动和存储,虚假文件系统通过向所有的外部存储设备提供一个通用的文件系统接口,隐藏了各种硬件设备的不同细节。网络模块提供对多种网络通信标准的访问,并支持许多网络硬件设备。

开发环境

操作系统:Ubuntu 10.4(linux kernel-v2.6.31)

移植Linux内核版本:2.6.30

交叉编译工具:arm-linux-gcc 4.3.2

下载linux-2.6.30源代码及补丁

linux-2.6.30源代码的下载地址:

http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.31.1.tar.bz2

yaffs文件系统补丁的下载地址:

http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/cvs-root.tar.gz?parent=1&view=tar

ATMEL芯片补丁2.6.30-at91.patch.gz的下载地址:

http://maxim.org.za/AT91RM9200/2.6/2.6.30-at91.patch.gz

ATMEL芯片补丁2.6.30-at91-exp.4.tar.gz的下载地址:

ftp://www.linux4sam.org/pub/linux/2.6.30.at91.4/2.6.30.at91.4-exp.patch.gz

解压Kernel并打补丁

> 解压linux-2.6.30

在提示符后输入:

/opt# tar jxf linux-2.6.30.tar.bz2

解压linux代码包到当前目录。如图2所示:

Linux Kernel移植流程 - 抵岸科技 - 抵岸科技的博客

图 2

> 安装2.6.30-at91.patch.gz补丁

/opt# cd linux-2.6.30

/opt/linux-2.6.30# wget http://maxim.org.za/AT91RM9200/2.6/2.6.30-at91.patch.gz

/opt/linux-2.6.30# zcat 2.6.30-at91.patch.gz | patch -p1

若出现如下提示:

gzip: 2.6.30-at91.patch.gz: not in gzip format

The program 'patch' is currently not installed. You can install it by typing:

apt-get install patch

说明patch没有安装,输入以下命令,安装patch:

/opt/linux-2.6.30# sudo apt-get install patch

> 解压安装yaffs2补丁

将yaffs2文件系统补丁复制到linux-2.6.3/目录下,解压并安装补丁。

/opt/linux-2.6.30# tar zxvf yaffs2.tar.gz

/opt/linux-2.6.30# cd cvs/yaffs2/

/opt/linux-2.6.30/cvs/yaffs2# ./patch-ker.sh c ../../

完成之后,将在linux-2.6.30/fs文件夹下看到yaffs2的文件夹,如图3所示:

Linux Kernel移植流程 - 抵岸科技 - 抵岸科技的博客

图 3

配置kernel

> 前期准备

清除冗余文件,在提示符后输入:

/opt/linux-2.6.30# make mrproper

修改Makefile,找到ARCH,CROSS_COMPILE变量并修改,如图4红框所示

Linux Kernel移植流程 - 抵岸科技 - 抵岸科技的博客

图 4

> 根据目标板配置kernel

为了节省时间,我们以at91sam9g20ek_defconfig为蓝本进行修改。

/opt/linux-2.6.30# cp arch/arm/configs/at91sam9g20ek_defconfig .config

/opt/linux-2.6.30# make menuconfig

以下选项需得注意:

Kernel Features --->  

[*] Use the ARM EABI to compile the kernel

因为要支持yaffs2文件系统,所以必须选择“yaffs2文件系统支持”配置

File systems --->

[ * ] Miscellaneous filesystems --->

<*>   YAFFS2 file system support

-*-     512 byte / page devices

[ ]       Use older-style on-NAND data format with pageStatus byte

[ ]          Lets Yaffs do its own ECC

-*-     2048 byte (or larger) / page devices

[ * ]        Autoselect yaffs2 format

[ ]       Disable YAFFS from doing ECC on tags by default

[ ]        Disable lazy loading

[ ]     Turn off wide tnodes

[ ]     Force chunk erase check

[ * ]      Cache short names in RAM

[ ]     Empty lost and found on boot

[ ]     Disable yaffs2 block refreshing

[ ]     Disable yaffs2 background processing

> 编译kernel

配置完后,退出配置菜单,保存刚才的配置。编译kernel并生成uImage:

/opt/linux-2.6.30# make uImage

如图5所示:

Linux Kernel移植流程 - 抵岸科技 - 抵岸科技的博客

图 5

经过漫长的等待后,终于看到如图6所示的提示信息了:

Linux Kernel移植流程 - 抵岸科技 - 抵岸科技的博客

图 6

这时你可以在/opt/linux-2.6.30/arch/arm/boot/目录中发现我们所需要的uImage。

文件历史记录

版本            编制                    日期                        更改内容

-----------------------------------------------------------------------------------

V1.0           抵岸科技              2010-7-4               首发

移植linux kernel,应该怎么做

对于移植kernel的思路我觉得还是很有必要总结下,这里总结不涉及具体代码,而只是说说保证kernel能进入console稳定运行这样一个最小系统,我们需要完成哪些部分的移植呢。 根据这次移植我的思路...
  • skyflying2012
  • skyflying2012
  • 2015年01月31日 20:52
  • 4862

ARM-Linux移植之(一)——内核启动流程分析

ooooooooooooooooooooooooooooo
  • ffmxnjm
  • ffmxnjm
  • 2017年07月31日 16:34
  • 439

Uboot到Kernel到文件系统(Cortex_A9)移植详细文档

处理器:Exynos4412  Cortex_A9 四核 一: 4412 uboot 目录: uboot基本配置编译 make xxx_config 编译结果如上图。 U...
  • liuqingsongmsdn2014
  • liuqingsongmsdn2014
  • 2016年05月18日 09:34
  • 1338

linux kernel启动流程

来源:Linux社区  作者:ce123_zhouwei 本文写的真心不错,层次清晰,内容详略得当,值得一阅,谨做笔记使用。 Linux内核启动流程    arch/arm/kernel/...
  • wyz649296016
  • wyz649296016
  • 2016年08月06日 11:46
  • 753

Linux kernel 关机的底层操作

Linux关机相关命令如:halt,shutdown,poweroff和reboot 其实它们底层都是调用名为reboot的system call,其具体实现是在内核目录的kernel/sys...
  • qq_29729577
  • qq_29729577
  • 2016年07月07日 16:19
  • 1868

Linux内核移植 part3:串口驱动

每日一乐:小美在作文簿里写上长大后的愿望:一、我希望能有一个可爱的孩子;二、我还希望能有一个爱我的丈夫。结果,发现老师写了一句评语:“请注意先后顺序。” 介绍Linux kernel 4.1对exyn...
  • abcamus
  • abcamus
  • 2017年02月28日 22:23
  • 616

嵌入式Linux移植之initramfs

Linux可以将根文件系统编译进内核,称作initramfs。加载内核的时候,真实的内核和根文件系统都加载到内存。这在嵌入式系统中非常普遍,我们通常制作一个最小根文件系统initramfs,并把他编译...
  • huangbin0709
  • huangbin0709
  • 2016年10月01日 22:40
  • 670

Linux kernel版本开发过程

来源:百度质量部 前言 Linux基金会在4月3日公布了Linux开发年报,向我们展示了linux kernel作为世上最大开源合作项目之一的魅力。自2005年以来,共有800家公司7800名开...
  • wangpeihuixyz
  • wangpeihuixyz
  • 2013年10月27日 18:12
  • 1350

Linux开发七_linux内核移植

Linux是一套免费使用和自由传播的操作系统,吸收了来自全世界无数程序员的精华,不断完善壮大。Linux内核高度可移植,其可以运行在各种硬件设备中,如路由器、游戏机、智能手表、手机、台式计算机、超级计...
  • huang20083200056
  • huang20083200056
  • 2016年09月28日 09:54
  • 700

LINUX移植——内核移植(一)

这两天在友善的tiny210的实验板上移植了linux内核,正好和大家分享,同时也算是做个记录吧!首先介绍一下开发环境吧,这个在做移植的时候还是挺重要的。 主机linux:Fedora9   安装在V...
  • xie0812
  • xie0812
  • 2013年09月01日 11:35
  • 6512
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux kernel移植流程
举报原因:
原因补充:

(最多只允许输入30个字)