移植Linux-2.6.33内核到TE2440DEV-I
华清远见-嵌入式领域著名讲师 O(∩_∩)O 牛牛猛
点击链接加我好友!
http://student.csdn.net/invite.php?u=111047&c=758a60d66d3a92d1
欢迎大家去我CSDN博客上踩踩
我的个人主页
写在前面:
这篇文章是我的工作笔记整理出来的,里面也参考了很多网络大侠的写的内容,这里我把我的感受记录下来,和更多的嵌入式爱好者分享技。体验嵌入式开发的快乐,快乐中寻找技术的真谛。
同时,下周我就要在csdn学生大本营,开设自己的讲堂了,里面的很多内容是取自这篇文章,我会把他们应用到我们实际的项目中,和大家一起分享工程实践中的点点滴滴。这些文字也能留下来供后来人参考。
宿主机:ubuntu9.04
目标机:中芯优电TE2440DEV-I开发板
交叉编译器:arm-linux-gcc-4.4.2
移植的内核版本:linux-2.6.33.2
文件系统类型: cramfs+yaffs2 (实际项目中最合理的组合方式)
1、准备交叉工具链
通产交叉工具链有三种方式:
(1) 自己通过下载源码,逐个编译,分别制作。
优点:可以根据自己的需求,制作自己的交叉工具链。可以满足自己的求知欲。
缺点:费时、费力、还费电。适合发烧的人,呵呵。
(2) 借助第三方的工具软件,这些工具通常都是网上的大侠们为了,方便人民群众而编写的,通的功能其实就是上面的提及的方法的批处理的脚本文件,而且一旦发现您的linux环境下是否缺少某些软件包,会自动去网络上下载。当然,需要你已经指定了正确的源文件。我们使用最多的是crosstools工具。
优点:很容易制作自己的交叉工具链,省力,简单
缺点:对于的知识理解不会深深刻,由于还是很长时间的编译过程,所以,还是费时、费电。不是党号召的低碳生活。
(3) 最Easy的方法,直接用别人做好的,通常我们的做法都是这样,利用别人做好的做适当的修改就好啦。
优点:省时、省力、省力、还低碳
缺点:对于初学者可能搞不清楚概念。
这里,我们采用上面提到的第三种方法,实际的工程实践中也是采用第三种方法的居多,最多是在上面的基础做些修改。
可以登录http://www.codesourcery.com/sgpp/lite/arm/portal/release1293下载最新的交叉编译器。
也可以在中芯优电的官网上下载和我一样的交叉编译器,与我一起走进嵌入式开发
下载符合EABI标准交叉编译器: arm-linux-gcc-4.3.2 with EABI
下载地址:
注明:
交叉编译器在编译的时候,对于浮点运行会预设硬浮点运算FPA(Float Point Architecture),而没有FPA的CPU,比如SAMSUNG S3C2410/S3C2440,会使用FPE(Float Point Emulation 即软浮点),这样在速度上就会遇到极大的限制,使用EABI(Embedded Application Binary Interface)则可以对此改善处理,ARM EABI有许多革新之处,其中最突出的改进就是Float Point Performance,它使用Vector Float Point(矢量浮点),因此可以极大提高涉及到浮点运算的程序。但是编译内核时,也要开启EABI功能,并且应用程序也要用这个with EABI的编译器重新编译。后面会解释如何在内核中添加EABI功能。
2、下载快速编译内核
首先,从官网上下载linux-2.6.33的内核。ftp://ftp.kernel.org/pub/linux/kernel/v2.6/可以找到。
新建目录/home/topelec/te2440/kernel/Kernel-2.6.33.2-TE2440。将内核源码包拷贝到Kernel-2.6.33.2-TE2440目录下。
解压源码包
tar zxvf linux-2.6.33.tar.gz
得到目录结构和我的一样吗?
topelec@allen-vmdesktop:~/te2440/kernel/Kernel-2.6.33.2-TE2440$ ls
arch fs Makefile samples usr
block include mm scripts virt
COPYING init modules.builtin security vmlinux
CREDITS ipc modules.order sound vmlinux.o
crypto Kbuild Module.symvers System.map
Documentation kernel net te2440_2010-4-17.config
drivers lib README te2440_2010-4-19.config
firmware MAINTAINERS REPORTING-BUGS tools
|
1) 修改Makefile文件,对于搞过Linux开发的人来说,这并不难,
修改成:
ARCH ?= arm
CROSS_COMPILE ?= arm- linux-
|
具体的arm-linux-应该是什么,关键要实际的交叉编译器的名字啦。
我的实际的编译器是用带有EABI的交叉编译器,所以我的Makefile是:
ARCH ?= arm
#CROSS_COMPILE ?= arm-linux-
CROSS_COMPILE ?= /home/topelec/env/usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-
|
2
修改机器码
由于U-boot中已经指定了机器码,是193.
机器码假如不一致,会直接导致系统不能启动。
3) 快速编译爽一把
这一步我们简单配置一下内核,先编译一把爽一下,直接采用我们提供的配置文件,或是采用内核自带的配置文件也可以, Load an Alternate Configuration File
键入配置文件的名字,te2440_2010-4-19.config,这个文件名字根据实际情况修改。就是加载一个配置文件,对于初次接触Linux内核编译的用户来说,这是很好的体验方式,不然,如果自己去配置内核,会直接打击用户的信心,太过的内容要选择了,而且还有很多选项是有依赖关系的。
实际的项目开发中我们也是采用,在原有配置文件上修改的方法来配置内核的。
保存退出后
键入make命令开始编译过程,一般如果你的计算机第一次编译这个版本的内核可能需要10分钟左右,编译过一次后,下次对内核修改后,编译器之编译修改过的内核文件。
在内核源码的arch/arm/boot下会有个zImage文件就是我们要的linux 内核。
这样的内核编译出来几乎是没法用的,最多可以在内存中运行起来,很多问题需要我们去修改,不过不要害怕。Linux2.6.33的内核几乎搞定了我们通常需要的驱动和服务,所以一般只是简单的修改就可以正常工作。
接下来我们就可以一步一步的完善我们小企鹅啦!
3、完善内核
(1) 完善nandflash代码
完善Nand Flash的代码,其实在Linux-2.6.33 里面已经做好了 NandFlash 的驱动,只需要进行简单的分区修改就可以直接使用了。
打开 linux/arch/arm/plat-s3c24xx/common-smdk.c 文件
查找这样的结构体数组,smdk_default_nand_part[],将这个结构体数组修改成下面的样子。不过,建议读者不要直接修改原数组,可以考虑将原数组注释掉,自己仿照它写一个这样的数组。对于您养成良好的编程习惯是有好处的,也让你更加职业,呵呵。
/* NAND parititon for TE2440 */
static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
.name = "UBoot",
.size = 0x00030000, //U-boot所占用的nandflash空间
.offset = 0, //U-boot在nandflash中的起始地址
},
[1] = {
.name = "Param",
.offset = 0x00030000,
.size = 0x00010000,
},
[2] = {
.name = "Kernel",
.offset = 0x00040000, //内核在nandflash中的起始地址
.size = 0x00300000, //内核在nandflash中占用的空间大小
},
[3] = {
.name = "Root",
.offset = 0x00340000,
.size = 0x00a00000,
},
[4] = {
.name = "Yaffs",
.offset = 0x00d40000,
.size = 0x032c0000, //
}
};
这个内核的分区是十分重要的,我们用U-boot部署内核和文件系统时,里面的起始地址都是根据这里的分区信息。
当然,这样基本可以满足我们开发板的64MB的nandflash的需求,后面我们还可以将nandflash扩大成更大的容量,例如,256MB、1G等。同样需要修改这里的代码。
未完待续,尽量每天更新,大家一起来,这周搞定linux内核到电路板上吧!
分享到:
相关推荐
总的来说,基于Linux-2.6.33内核的cs8900网卡驱动开发涉及的知识点包括:C语言编程,Linux内核驱动开发框架,CS8900A硬件特性,中断处理,网络协议栈的接口,设备模型,以及驱动程序的移植技术。通过研究这些内容,...
### Linux 2.6.33 内核移植到 S3C2410 平台详解 #### 一、前言 随着嵌入式系统的不断发展,Linux内核的移植成为了一个重要的研究方向。本文主要介绍了如何将最新的Linux 2.6.33内核移植到S3C2410平台上,包括搭建...
### S3C2410的 Linux2.6.33 内核移植与搭建交叉编译环境 #### 概述 本篇文章旨在详细介绍如何针对S3C2410平台进行Linux2.6.33内核移植,并在此基础上构建交叉编译环境的过程。整个流程分为几个关键步骤,包括环境...
把正在使用中的内核配置文件 `/usr/src/linux-headers-2.6.32-22-generic/.config` 拷到 `/usr/src/linux-2.6.34` 目录下:`cp /usr/src/linux-headers-2.6.32-22-generic/.config /usr/src/linux-2.6.34`。...
《Linux内核学习:深入解析2.6.32-25元代码》 在Linux的世界里,了解和研究内核源代码是提升技术水平的重要途径。"linux-headers-2.6.32-25元代码"这个压缩包为我们提供了一个宝贵的资源,让我们能够深入探索Linux...
disconf-web-2.6.33简化版, 官方地址:https://github.com/knightliao/disconf 简化版主要不用依赖Nginx,部署步骤如下: 1.按照disconf-web.war/sql/readme.md执行...5.把disconf-web.war复制到tomcat等容器下运行。
本篇文档详细介绍了如何将 Linux 2.6.33 内核移植到 S3C2410 平台,并搭建交叉编译环境的过程。此过程主要分为两大部分:首先是搭建交叉编译环境,其次是进行 Vivi 的移植。本文档将针对这两部分提供详细的步骤和...
linux 2.6.33.2源码,官方版本。
linux 2.6.33源码,官方版本。
ethtool-2.6.33-0.3.el6.i686.rpm是lunx工具包 。
本文档将涵盖Linux 3.3、2.6.33以及2.6.37这三个版本的内核编译流程。 #### 1.1 编译linux-3.3内核 **1.1.1 清理内核** 在开始编译之前,首先需要清理之前的编译结果,确保此次编译的纯净性。执行以下命令: ```...
2.6.33-at91.patch.gz arm linux补丁
本文档详尽地阐述了在FL2440开发板上进行Linux内核移植的过程与关键步骤,适用于那些希望深入理解嵌入式系统开发流程的技术人员。FL2440是一款基于ARM920T内核的处理器,广泛应用于各种嵌入式设备中,如移动通信设备...
在基于Linux 2.6.33的SPI Flash驱动移植过程中,主要涉及到了三个关键组件:SPI主机驱动(dm644x上的SPI功能模块驱动)、SPI Flash芯片驱动(w25x80的芯片驱动)以及SPI总线驱动。 **1. SPI主机驱动(dm644x上的SPI...
【FL2440开发板内核移植】是嵌入式Linux系统开发中的一个重要环节,主要涉及将Linux操作系统适应特定硬件平台的过程。在这个过程中,我们需要对目标开发板的硬件特性有深入理解,并熟悉Linux内核配置、编译以及驱动...
在嵌入式Linux开发中,内核移植是一项基础且重要的工作,特别是在使用像飞凌OK2440这样的开发板时。本文将详细介绍如何进行飞凌内核移植,主要涉及以下几个关键步骤: 1. **环境准备**: - **宿主机**:用于开发的...
本教程旨在详细介绍如何在Linux2.6.33环境下配置与使用ZC301USB摄像头,特别是针对中芯优电的TE-2440开发板。文章分为几个部分:编译器配置、内核配置、编译JPEG库以及测试摄像头功能。通过这些步骤,用户可以顺利地...
升级内核到2.6.33或2.6.34的过程中,关键在于正确配置内核以支持现有的硬件和软件环境。这包括选择正确的驱动模块以及解决因内核版本变化带来的兼容性问题。通过遵循上述步骤,可以有效地完成内核的升级并确保系统的...