移植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内核到电路板上吧!
分享到:
相关推荐
这是已经试验成功的代码,希望大家都学习学习,增长自己的知识
内核linux2.6.33内核成功移植s3c2410详细过程
2:arm-linux-gcc-3.4.1.tar.bz2和armv4l-tools-2.95.2.tar.bz2拷贝到虚拟机中 进行安装,两个编译器其实都一样只不过版本高低不同,因为2.6.33是最新版本 我们不知道用何种版本的gcc 所以先装两个,后来经过试验...
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.2源码,官方版本。
linux2.6.33内核移植s3c2410以及交叉环境编译搭建
ethtool-2.6.33-0.3.el6.i686.rpm是lunx工具包 。
linux 2.6.33源码,官方版本。
Linux内核的学习 嵌入式编写与开发 嵌入式 Linux源代码
linux gimp-2.6.4-i686-setup.exe(用亍后期的logo画面转换) FlashFXP.exe(也可直接用虚拟机直接挂在访问) vivioflinux2.6.30.5.tar.gz(vi移植) root1.9oflinux2.6.30.5.tar.gz (root移植)arm-linux-gcc-...
2.6.33-at91.patch.gz arm linux补丁
本文提供了基于 linux-2.6.33 内核的 DSPLINK 双核开发 步骤 包括 dsplink 介绍 配置 编译 例程
Spi驱动包括三部分:dm644x上的spi功能模块驱动(spi主机驱动) (davinci_spi.c);w25x80的芯片驱动(m25p80.c),以及spi总线驱动(spi.c)。
虚拟网卡驱动VirtualMachineNetworkDriver,不需要在安装虚拟机增加网卡
linux-2.6.39内核源码的补丁,和大家分享
V4L2相关资料 Linux2.6.33 下ZC301USB 摄像头使用教程
ndroid的HAL是为了保护一些硬件提供商的知识产权而提出的,是为了...也许也正是因为Android不遵从GPL,所以Greg Kroah-Hartman才在2.6.33内核将Andorid驱动从linux中删除。GPL和硬件厂商目前还是有着无法弥合的裂痕。
关于cs8900驱动移植基于linux2.6.33 s3c2410开发板
这是我在ubuntu10.10编译内核2.6.38的过程,编译过程自己又重新把过程整成书面形式,感兴趣的自己可以下去看看。
便携中文linux操作系统,约35M,以tiny core linux 3.8.4 为基础,内核是2.6.33。集成了常用的基本功能,可进行文件管理,文字、图像处理,简单的网络浏览和下载,硬盘分区维护等,同时支持一些常用的压缩格式。更多...