linux驱动移植(nand,yaffs2)

原文:http://blog.sina.com.cn/s/blog_7090b8670101b0bi.html

linux驱动移植(nand,yaffs2)

在linux操作系统的顺利移植之后,linux的内核虽然在板子上跑了起来,但是此时linux还不支持板子的的各个硬件,比如说lcd,摄像头,声卡,usb等模块,我们必须要在板子上装入驱动程序后,才能上这些硬件在linux操作系统下工作。

这些驱动在内核中都有驱动的源码,我们要做的就是将这些驱动源码编译到内核中,当然在编译之前是需要对驱动源码做相关的修改的,因为我们的硬件和内核中的驱动很有可能是不匹配的。在对驱动进行编译的时候,我们还要有选择的去挑选一些我们需要的驱动,把我们不需要的驱动舍弃,称之为裁剪内核。

首先必须要开发板的linux操作系统支持nandflash和挂载上yaffs2文件系统,只有挂载了yaffs2文件系统的操作系统才能算是完整的操作系统。

为什么驱动是在内核中修改的呢?那是因为内核就操作系统,就是用来管理各硬件设施的。

(一)   支持nandflash的驱动:

Linux新版本的内核中提供了支持大页nand的驱动。这对我们nand驱动的移植就很方便了,我们只要在内核中找到相应的驱动并进行一些修改即可。

(1)       修改内核中nand的分区(MTD分区)表

修改:arch/arm/plat-s3c24xx/common-smdk.c文件,在第110行:

这里我们要使nandflash同时支持64M,256M或更高容量。

[0] = {

.name = "boot",             name就是分区名,可以随便取。

.offset = 0,                offset是偏移量,就是分区的起始地址。

.size = SZ_1M,              size就是此分区的大小

},

[1] = {

.name = "kernel",

.offset = SZ_1M + SZ_128K,

.size = SZ_4M,

},

[2] = {

.name = "yaffs2",

.offset = SZ_1M + SZ_128K + SZ_4M,

.size = SZ_256M - SZ_4M - SZ_1M – SZ_128K, }

#endif

};

第一个分区是boot分区(1M),就是存放uboot的。第二个分区是kernel分区(4M),是存放os内核的。第三个分区是yaffs2(根文件系统分区)。

现在来说下分区的概念:分区有两种意义上的分区,一个是内核的MTD分区,一个是uboot的分区。两者都是和nand的分区相关的,但却不能等同。在内核中,Nand上面划分了一些分区,这些分区称之为MTD分区,都可以通过linux系统中的设备文件来访问。所以在内核中必须有MTD对uboot,内核映像,文件系统在nand上的分区信息。而uboot的分区则是nand的实际分区,在系统上电后通过sram将uboot放到内存中运行,并初始化各引导程序,和空间地址。这时的空间地址是nandflash的真实地址。而内核启动后所执行的不说从uboot中去读地址,而是从内核MTD分区地址中在读地址,因此内核MTD分区与uboot的分区必须相同。

(2)     修改nand的匹配时间(查芯片手册)

(3)     修改Kconfig文件,在配置时选择NAND类型。让内核选择支持哪种容量的nandflash

(4)     配置内核,支持nandflash。

这些过程实际上就是在修改内核中的nand驱动源码,然后在修改编译选项,最后自己用make menuconfig来配置,最后在linux的集成开发环境下编译内核生成映像文件,下载到arm开发板上。这样的内核就支持nand的了啦。

(二)  yaffs2文件系统移植

(1)下载yaffs2源码(在光盘资料/源码包/其他软件源码/目录下)

解压,进入yaffs2目录:

#tar xzvf yaffs2.tar.gz

#cd cvs/yaffs2/

(2)给内核打上yaffs2文件系统的补丁,执行:

#./patch-ker.sh c /………/linux-2.6.31/ ?这个是你的内核源码的目录

这时内核源码fs目录下多了一个yaffs2目录,同时Makefile文件和Kconfig文件也增加了yaffs2的配置和编译条件。

(3)最后利用uboot烧如写好的yaffs2文件系统

linux驱动移植(nand,yaffs2),布布扣,bubuko.com

时间: 2024-10-21 15:07:29

linux驱动移植(nand,yaffs2)的相关文章

I.MX6 SHT20 Linux 驱动移植

/*********************************************************************** * I.MX6 SHT20 Linux 驱动移植 * 说明: * 本来打算使用SHT10来做湿度检测,发现其并不是I2C接口,当然也使用 * GPIO能获取到相关数据了,不过由于不小心将其烧坏了,所以换成SHT20. * * 2016-10-10 深圳 南山平山村 曾剑锋 ****************************************

linux驱动移植step by step

驱动程序的作用: 简单来说 驱动程序就是使计算机与设备通信的特殊的代码,在作单片机时候(无OS)我们自己定义接口及自定义的结构来操作相关硬件, 而在有OS的模式下我们操作的硬件是去实现对应的接口(这些接口是已定义好的,我们需要实现这些接口)而无需自己定义接口,这样既能正确的控制设备. 又能很好的维护(如果需要升级驱动,上边的应用程序不需要改变) 驱动分类: 字符设备:能够像字节流(类似文件)一样被访问的设备(至少实现open, close, read ,write等功能) 快设备:    用户空

linux系统移植和根文件系统制作

1.1 Linux内核基础知识 在动手进行Linux内核移植之前,非常有必要对Linux内核进行一定的了解,下面从Linux内核的版本和分类说起. 1.1.1  Linux版本 Linux内核的版本号可以从源代码的顶层目录下的Makefile中看到,比如2.6.29.1内核的Makefile中: VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 29 EXTRAVERSION = .1 其中的“VERSION”和“PATCHLEVEL”组成主版本号,比如2.4.2.5.

linux 内核移植和根文件系统的制作

1.1 Linux内核基础知识 在动手进行Linux内核移植之前,非常有必要对Linux内核进行一定的了解,下面从Linux内核的版本和分类说起. 1.1.1  Linux版本 Linux内核的版本号可以从源代码的顶层目录下的Makefile中看到,比如2.6.29.1内核的Makefile中: VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 29 EXTRAVERSION = .1 其 中的“VERSION”和“PATCHLEVEL”组成主版本号,比如2.4.2.5

【转】 linux内核移植和网卡驱动(二)

原文网址:http://blog.chinaunix.net/uid-29589379-id-4708911.html 一,内核移植步骤: 1, 修改顶层目录下的Makefile ARCH            ?= $(SUBARCH) CROSS_COMPILE   ?= $(CONFIG_CROSS_COMPILE:"%"=%) 修改为: ARCH :=arm CROSS_COMPILE :=/usr/local/arm/4.4.3/bin/arm-linux- 2, 拷贝配置文

Linux驱动学习之Linux-2.6.20.4内核移植

最近一段时间一直在学习向TQ2440开发板移植内核.移植驱动.真心觉得这方面的知识有很大的难度.但是从另一角度去看,难度越大,能力提升的空间就越大!! 1.解压源码 从网上下载一个Linux 内核,我是用的是Linux-2.6.20.4.然后用命令解压.建议解压到"/home/用户名"目录下.我的内核源码存放在: 2.添加对ARM的支持 因为所用的是TQ2440开发板,属于ARM9.因此要在系统中添加对ARM的支持. 方法:进入内核源码目录, 修改"Makefile"

linux-2.6.32在mini2440开发板上移植(1)之移植Nand驱动并修改分区信息

编者:linux中的nand的移植由于使用了MTD技术,所以就没有想象的那么复杂了. 1 Linux-2.6.32.2 内核所支持的Nand Flash 类型 Linux2.6.32.2 已经自带了大部分Nand Flash 驱动, 在linux-2.6.32.2/drivers/mtd/nand/nand_ids.c 文件中,定义了所支持的各种Nand Flash 类型. 2 修改Nand Flash 分区表 但是系统默认的分区不是我们所需的,所以要自已修改,除此之外,还有Nand Flash

AM335x(TQ335x)学习笔记——Nand&&网卡驱动移植

移植完成声卡驱动之后本想再接再励,移植网卡驱动,但没想到的是TI维护的内核太健壮,移植网卡驱动跟之前移植按键驱动一样简单,Nand驱动也是如此,于是,本人将Nand和网卡放在同一篇文章中介绍.介绍之前先感慨一下:TI的维护的内核真的很健壮,DTS真的很强大. 1. Nand驱动移植 阅读TQ335x的原理图可知,TQ335x的Nand连接到了GPMC上,且都是使用的相应引脚的MODE0复用功能,AM335x上上电复位后这些引脚的默认状态就处于MODE0模式,故无需进行pinmux设置,原始的DT

AM335x(TQ335x)学习笔记——Nand&&网卡驱动移植

移植完毕声卡驱动之后本想再接再励,移植网卡驱动,但没想到的是TI维护的内核太健壮,移植网卡驱动跟之前移植按键驱动一样简单,Nand驱动也是如此,于是,本人将Nand和网卡放在同一篇文章中介绍.介绍之前先感慨一下:TI的维护的内核真的非常健壮,DTS真的非常强大. 1. Nand驱动移植 阅读TQ335x的原理图可知,TQ335x的Nand连接到了GPMC上,且与DTS中默认的配置吻合,此处不做不论什么改动,详情例如以下: nandflash_pins_s0: nandflash_pins_s0