嵌入式嵌入式linux内核裁剪与移植步骤教程内核裁剪与移植步骤教程
本文以将linux移植到ARM920T内核的s3c2410处理器芯片为例,介绍了嵌入式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主要是提供用户程序所使用的一些基本的函数
库。
自行搭建交叉编译环境通常比较复杂,而且很容易出错。本文使用的是开发板自带的交叉编译器,即CROSS一3.3.4.交
叉编译器,该编译只需将光盘中的 arm—linux一3.3.4.bar.bz2用tar ixvf arm—linux一3.3.4.bar.bz2命令解压到/
usr/local/arm下即可。
2.2 修改Makefile
修改内核目录树根下的Makefile时,可先指明交叉编译器。设计时,可向Makefile中添加如下内容:
ARCH ?=arm
CROSS_COMPILE?=arm-linux-然后设置PATH环境变量,使其可以找到其交叉编译工具链,然后运行vi~/.bashrc,再添
加如下内容:
export PATH=/usr/local/arln—linux一3.4.4/bin:$PATH
2.3 设置Flash分区
此处一共要修改3个文件,分别如下:
(1)在arch/arm/machs3c2410/devs.c文件中添加如下内容:
#include<linux/mtd/partitions.h>
#include<linux/mtd/nand.h>
#include<asm/arch/nand.h>
然后再建立Nand Flash分区表;同时建立Nand F1ash芯片支持,最后加入Nand Flash芯片并支持到Nand Flash驱动。
另外,还要修改arch/arm/machs3c2410/devs.C文件中的s3c_device_nand结构体变量,同时添加对dev成员的赋值。
(2)指定启动时初始化
内核启动时,可以依据对分区的设置进行初始配置,然后修改arch/am4mach—s3c2410/machsmdk2410.e文件下的
smdk2410_devices[],指明初始化时包括在前面所设置的flash分区信息,并添加如下语句:
&s3c_device_nand,
(3)禁止Flash ECC校验
内核一般都是通过UBOOT写到Nand Flash的。UBOOT则通过软件ECC算法来产生ECC校验码,这与内核校验的ECC码不一
样,内核中的ECC码是由S3C2410中Nand Flash控制器产生的。所以,这里选择禁止内核ECC校验。
修改drivers/mtd/nand/s3c2410.C 下的s3c2410_nand_init_chip ()函数,可在该函数体最后加上如下一条语句:
chip->eccmode=NAND_ECC_NONE;
评论0