u(boot中NANDflash的MTD驱动移植)-

u(boot中NANDflash的MTD驱动移植)-
u(boot中NANDflash的MTD驱动移植)-

u(boot中NANDflash的MTD驱动移植)-

u-boot

u-boot中的“与非”闪存的MTD驱动程序迁移移植了linux中的MTD 驱动程序源代码,以支持“与非”闪存擦除、刻录写入和读取驱动程序内存技术设备内存技术设备是Linux的一个子系统,用于访问闪存设备MTD的主要目的是简化新存储设备的驱动,并提供通用接口功能。MTD驱动可以支持CFI接口的非闪存驱动和非闪存驱动。众所周知,“与非”闪存的访问接口不像“非”闪存那样提供标准的CFI访问接口,但“与非”闪存制造商已经对不同品牌和型号的“与非”闪存芯片的访问接口制定了一些常规规定,如命令字、地址序列、命令序列、坏块标记位置、oob区域格式等。

值得注意的是,在工艺方面有两种类型的“与非”闪存:MLC和SLCMLC和SLC属于两种不同类型的NAND闪存SLC的全称是单级单元,即单级单元闪存,而MLC的全称是多级单元,即多级单元闪存。它们的区别在于,SLC的每个单元只能存储一位数据,而MLC 的每个单元只能存储两位数据,MLC的数据密度是SLC的两倍。就页容量而言,还有两种类型的与非:大页与非闪存(例如HY27UF082G2B)和小页与非闪存(例如K9F1G08U0A)这两种类型在页面容量、命令序列、地址序列、页面内访问和坏块识别方面非常不同,并且遵循不同的约定,因此在移植驱动程序时应该特别注意。在下,以大页面NAND flash: HY27UF082G2B为例,介绍NAND flash 的一些基本情况,然后介绍MTD驱动程序的基本结构和流程分析。

最后,介绍了在u-boot中迁移MTD驱动程序的详细步骤:

3 .

4 . 1)nandflash的一些基本信息

fl2400开发板上的NAND Flash芯片型号是现代HY27UF082G2B。英特尔于1988年首次开发了或非闪存技术。它最重要的特点是支持片上执行,彻底改变了EPROM和EEPROM主宰非易失性闪存世界的局面。然后,在1989年,东芝发布了NAND闪存结构,它具有较低的单位成本、较高的容量,并且可以像磁盘一样通过接口轻松升级。“或非”闪存更适合存储少量的关键代码和数据,而“与非”闪存更适合存储大量的高密度数据。

下表说明了非闪存与非闪存的区别:非闪存非闪存性能项目的容量通常为1~4MB,片上支持的最大容量为32MB 8MB~512MB。它可以直接在芯片上启动。它不受支持,需要驱动读取。只有三星芯片支持步进式引导加载器技术,其他芯片必须配备norflash以启动具有较高可靠性、较低位反转概率、常见位反转的引导加载器,并且必须采取验证措施。ECC椭圆曲线算法被推荐用于错误检查和恢复,这导致1/10的非闪存使得非闪存的管理和驱动程序写入更加复杂。存取接口与随机存取存储器和可编程只读存储器相同。地址线地址、数据和命令通过每个使能引脚区和输入/输出线与数据线分开。访问接口可分为地址、数据和命令以及串行访问。随机存取8K-64K块大小(擦除64K~128K单位)必须按顺序存取。擦除时间为5S,慢3毫秒,快速读写速度慢。快速读取,快速读取,刻录和写入可以快速擦除10 ~ 100,000次和100 ~ 100万次。主要用途保存代码和关键数据保存大

量高密度数据Jffs2 yaffs文件系统支持价格高低下面我们将根据HY27UF082G2B数据表从以下几个方面详细说明:3..)HY27UF082G2B概述

HY27UF082G2B,48引脚TSOP1封装,2G位(256MB)容量,8位宽,地址、数据和命令多路复用输入/输出0~7芯片封装图如下(HY27UF082G2B数据手册截图):

从上图可以看出,48个引脚大部分是无用的(NC)。由于数据线路复用,hy27uf082g2b没有太多真正需要的连接引脚下表是HY27UF082G2B连接引脚功能表:

引脚名称引脚功能输入/输出0 ~输入/输出7数据输入/输出CLE命令锁存使能ALE数据锁存使能CE芯片选择使能WE写使能RE读使能WP写保护R/B就绪/繁忙信号输出的NC VCC电源VSS未连接到。从上表可以看出,HY27UF082G2B和S3C2440之间的连接相对较小:8个输入/输出引脚、5个使能引脚(CLE、ALE、CE、we、RE)、1个写保护引脚(WP)和1个状态引脚(R/B)地址、数据和命令通过8个输入/输出引脚与这些使能信号协同传输。当写入地址、数据和命令时,CE和WE信号必须为低电平,并在WE信号的上升沿锁存命令锁存使能信号CLE和

(总数据锁存信号ALE用于区分命令或地址是否在输入/输出引脚上传输其它总线操作

线操作)在数据表的第11页有详细描述,在此不再重复。

从上面可以看出,芯片的总线操作必须有各种使能信号的配合,但是这些使能信号的控制不需要用户驱动器的干预。S3C2440中的“与非”闪存控制器将根据用户对“与非”闪存控制寄存器(写命令寄存器NFCMD、地址寄存器NFADDR、读数据寄存器NFDATA等)的读写,在“与非”闪存控制相关的引脚上自动输出正确的使能信号。)。用户只需将S3C2440上的与非门闪光控制相关引脚正确连接到HY27UF082G2B的使能引脚。S3C2440上的与非闪存控制相关引脚见下图:

除了5个使能信号外,HY27UF082G2B的状态引脚也应连接到s3c2440上的与非闪存控制相关引脚FRnB“与非”闪存芯片与S3C2440之间的硬件连接如下图所示。凌飞提供的官方硬件连接示意图如下:

。这里,还介绍了与S3C2440的与非门闪存控制器相关的寄存器:1。NFCONF:与非门闪存配置寄存器1

设置时序参数TACLS、TWRPH0、TWRPH0;2.ONT:与非门闪存配置寄存器2

使能禁用与非门控制器,使能禁用引脚信号nFCE,初始化纠错码;;

3.写寄存器时,“与非”闪存命令寄存器

向“与非”闪存芯片发送命令信号;4.写该寄存器时,“与非”闪存地址寄存器

向“与非”闪存芯片发送地址信号;5.nfdata:当读取和写入寄存器时,与非门闪存数据寄存器

读取或写入数据信号到与非门闪存芯片;6.NFS状态:与非门闪存状态寄存器

仅用于位0,0:忙碌,1:读取

。这里只简要介绍一些重要的寄存器,而没有介绍许多其他寄存器例如,与非闪存控制器提供的纠错码硬件生产功能相关的寄存器,请参考S3C2440数据表了解详情。

3..HY27UF082G2B的存储单元

与非闪存的组织结构不同于非闪存,因为与非闪存是基于页来读取和烧录的,而非基于字节或字。擦除以块为单位

与非门闪存由块组成,块的基本单位是页每页还包含一个数据区和一个备用区。小页NAND闪存设备在每页中包含512字节的数据区和16字节的备用区。大页面NAND闪存设备在每页中包含2048字节的数据区和64字节的备用区。HY27UF082G2B是一个大页面的nandfast。下图显示了HY27UF082G2B存储单元的组织结构:HY27UF082G2B存储单元的组织结构在

图中的红线处为8位宽。可以看出,一个芯片包含2048个块,一个块包含64个页面,一个页面包含2048字节的数据存储区和64字节

的备用区

下图以图形方式显示了HY27UF082G2B的存储单元的组织结构(注意:此图中只有1024个块):

可以看出,HY27UF082G2B芯片包括1gb(256 MB)的数据存储区和256Mbit(32MB)的备用区。

1,HY27UF082G2B访问地址序列

HY27UF082G2B总容量为288MB(256MB+32MB),8位宽,需要29位访问地址然而,该芯片仅提供8条地址线(多路复用),这显然是不够的。因此,当访问HY27UF082G2B时,访问地址被分成五个地址序列,其中前两个是页内地址,后三个是页地址。两个页内地址序列的有效地址位是12位,以满足对页中2048+64字节空间的访问;最后三个地址序列的有效地址是17位,以满足对芯片中2048(块)*64(页)页的访问。

HY27UF082G2B地址序列表如下图所示:上图中的l

表示无效地址设置为低电平在编程实际驱动程序时,用户必须严格按照这五个地址序列将每个序列的地址写入NFADDR寄存器。换句话说,用户必须写5次NFADDR寄存器才能发出完整的访问地址。

值得注意的是,小页与非门闪存仅提供一个地址序列和八个访问地址位来访问512+16字节的页内空间,这显然是足够的因此,小页面NAND闪存将页面中的地址分为a、b和c三个区域,分别用不同的

读取命令进行访问,以弥补页面中访问地址序列中地址位不足的缺陷相比之下,大页面与非闪存为页面内地址访问提供了足够的地址序列和访问地址位(12位地址访问2048+64字节空间就足够了),因此大页面与非闪存对页面内地址的访问也更加简洁。

2,HY27UF082G2B操作命令序列和前面提到的操作实现

:与非门闪存在页面基础上被读取和烧录,并在块基础上被擦除然后,在“与非”闪存上有三个基本操作:读取页面、刻录页面和擦除块。这三个基本操作有它们自己的命令序列。事实上,除了这三个基本操作之外,大多数与非门闪存还提供许多其他操作和操作命令序列。例如,HY27UF082G2B提供多平面

程序(多层预烧)、多平面擦除(多层擦除)、回写程序(同层页面拷贝)、多平面回写程序(多层同层页面拷贝)、多平面擦除、edc操作、复位等上面提到的

涉及到层的概念,什么是层?层是将每个芯片块平均分成块组,例如,块号为奇数的芯片块被分成一组,块号为偶数的芯片块被分成一组。这种块组称为层。图层具有这样的特性,用户可以同时擦除、刻录甚至复制不同图层中的块。HY27UF082G2B中的块分为2层,一些NAND闪存分为4层显然,分层操作可以使写入和擦除的速度加倍。

下图是HY27UF082G2B每次操作的命令顺序:红线

是HY27UF 082G2 B的五个基本操作以下是五种基本操作中的页面

读取操作的顺序号

Tiny6410_Uboot移植步骤详解

Uboot_for_Tiny6410_移植步骤详解 一、设计要求 1.目的 1)掌握U-boot剪裁编写 2)掌握交叉编译环境的配置 3)掌握U-boot的移植 2.实现的功能 1)U-boot编译成功 2)移植U-boot,使系统支持从NAND FLASH启动 二、设计方案 1.硬件资源 1)ARM处理器:ARM11芯片(Samsung S3C6410A),基于ARM1176JZF-S核设 计,运行频率533Mhz,最高可达 667Mhz 2)存储器:128M DDR RAM,可升级至 256M;MLC NAND Flash(2GB) 3)其他资源:具有三LCD接口、4线电阻 触摸屏接口、100M标准网络接口、标准DB9 五线串口、Mini USB2.0接口、USB Host 1.1、3.5mm音频输入输出口、标准TV-OUT

接口、SD卡座、红外接收等常用接口;另外 还引出4路TTL串口,另1路TV-OUT、 SDIO2接口(可接SD WiFi)接口等;在板的 还有蜂鸣器、I2C-EEPROM、备份电池、A D 可调电阻、8个中断式按键等。 2.软件资源 1)arm-linux-gcc-4.5.1(交叉编译) 2)u-boot-2010.09.tar.gz arm-linux-gcc-4.5.1-v6-vfp-20101103.t gz 三、移植过程 1.环境搭建 1)建立交叉编译环境 2)去这2个网站随便下载都可以下载得到最 新或者你想要的u-boot。( https://www.360docs.net/doc/4a13698312.html,/batch.viewl ink.php?itemid=1694 ftp://ftp.denx.de/pub/u-boot/ )

UBoot移植详解

u-boot 移植步骤详解 1 U-Boot简介 U-Boot,全称Universal Boot Loader,是遵循GPL条款的开放源码项目。从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是相应的Linux内核源程序的简化,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。但是U-Boot不仅仅支持嵌入式Linux 系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系统。其目前要支持的目标操作系统是OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks, LynxOS, pSOS, QNX, RTEMS, ARTOS。这是U-Boot中Universal的一层含义,另外一层含义则是U-Boot除了支持PowerPC系列的处理器外,还能支持MIPS、x86、ARM、NIOS、XScale等诸多常用系列的处理器。这两个特点正是U-Boot项目的开发目标,即支持尽可能多的嵌入式处理器和嵌入式操作系统。就目前来看,U-Boot对PowerPC系列处理器支持最为丰富,对Linux的支持最完善。其它系列的处理器和操作系统基本是在2002年11 月PPCBOOT 改名为U-Boot后逐步扩充的。从PPCBOOT向U-Boot的顺利过渡,很大程度上归功于U-Boot的维护人德国DENX软件工程中心Wolfgang Denk[以下简称W.D]本人精湛专业水平和持着不懈的努力。当前,U-Boot项目正在他的领军之下,众多有志于开放源码BOOT LOADER移植工作的嵌入式开发人员正如火如荼地将各个不同系列嵌入式处理器的移植工作不断展开和深入,以支持更多的嵌入式操作系统的装载与引导。 选择U-Boot的理由: ①开放源码; ②支持多种嵌入式操作系统内核,如Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS; ③支持多个处理器系列,如PowerPC、ARM、x86、MIPS、XScale; ④较高的可靠性和稳定性; ④较高的可靠性和稳定性; ⑤高度灵活的功能设置,适合U-Boot调试、操作系统不同引导要求、产品发布等; ⑥丰富的设备驱动源码,如串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、键盘等; ⑦较为丰富的开发调试文档与强大的网络技术支持; 2 U-Boot主要目录结构 - board 目标板相关文件,主要包含SDRAM、FLASH驱动; - common 独立于处理器体系结构的通用代码,如内存大小探测与故障检测;

uboot移植实验

一、移植环境 ?主机:UBUNTU ?开发板:飞凌2440 ?编译器:arm-linux-gcc-4.3.2.tgz ?u-boot:u-boot-2009.03.tar.bz2

3)修改u-boot根目录下的Makefile文件。查找到smdk2410_config的地方,在他下面按照smdk2410_config的格式建立mini2440_config的编译选项,另外还要指定交叉编译器 4)测试编译新建的mini2440开发板项目

到此为止,u-boot对自己的mini2440开发板还没有任何用处,以上的移植只是搭建了一个mini2440开发板u-boot的框架,要使其功能实现,还要根据mini2440开发板的具体资源情况来对u-boot源码进行修改。 3. 根据u-boot启动流程图的步骤来分析或者修改添加u-boot源码,使之适合mini2440开发板(注:修改或添加的地方都用红色表示)。 1)mini2440开发板u-boot的stage1入口点分析。 一般在嵌入式系统软件开发中,在所有源码文件编译完成之后,链接器要读取一个链接分配文件,在该文件中定义了程序的入口点,代码段、数据段等分配情况等。那么我们的my2440开发板u-boot的这个链接文件就是cpu/arm920t/u-boot.lds,打开该文件部分代码如下:

知道了程序的入口点是_start,那么我们就打开mini2440开发板u-boot第一个要运行的程序cpu/arm920t/start.S(即u-boot的stage1部分),查找到_start的位置如下: 从这个汇编代码可以看到程序又跳转到start_code处开始执行,那么再查找到start_code 处的代码如下:

嵌入式Linux之我行 史上最牛最详细的uboot移植,不看别后悔

嵌入式Linux之我行——u-boot-2009.08在2440上的移植详解(一) 嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤。一为总结经验,二希望能给想入门嵌入式Linux 的朋友提供方便。如有错误之处,谢请指正。 ?共享资源,欢迎转载:https://www.360docs.net/doc/4a13698312.html, 一、移植环境 ?主机:VMWare--Fedora 9 ?开发板:Mini2440--64MB Nand,Kernel:2.6.30.4 ?编译器:arm-linux-gcc-4.3.2.tgz ?u-boot:u-boot-2009.08.tar.bz2 二、移植步骤 本次移植的功能特点包括: ?支持Nand Flash读写 ?支持从Nor/Nand Flash启动 ?支持CS8900或者DM9000网卡 ?支持Yaffs文件系统 ?支持USB下载(还未实现) 1.了解u-boot主要的目录结构和启动流程,如下图。

u-boot的stage1代码通常放在cpu/xxxx/start.S文件中,他用汇编语言写成;u-boot的stage2代码通常放在lib_xxxx/board.c文件中,他用C语言写成。各个部分的流程图如下:

2. 建立自己的开发板项目并测试编译。 目前u-boot对很多CPU直接支持,可以查看board目录的一些子目录,如:board/samsung/目录下就是对三星一些ARM 处理器的支持,有smdk2400、smdk2410和smdk6400,但没有2440,所以我们就在这里建立自己的开发板项目。 1)因2440和2410的资源差不多,主频和外设有点差别,所以我们就在board/samsung/下建立自己开发板的项目,取名叫my2440 2)因2440和2410的资源差不多,所以就以2410项目的代码作为模板,以后再修改

u_boot移植(五)之分析uboot源码中nand flash操作

u_boot移植(五)之分析uboot源码中nand flash操作 一、OneNand 和Nand Flash 我们已经能从Nand Flash启动了,启动之后,大家会看到如下效果: 可以看出,我们的uboot默认使用的是OneNand。需要注意的是我们的FSC100上面是没有OneNand的,有的是K9F2G08U0B 型号的NAND FLASH。 前面我们了解过Nor Flash 和Nand Flash,那OneNand Flash又是什么呢?

二、uboot 源码中Nand Flash部分代码分析 我们从Nand Flash初始化看起,打开lib_arm/board.c文件,为了紧抓主 线,以下代码只列举出了主线代码。

可以看出,我们可以通过CONFIG_CMD_NAND和 CONFIG_CMD_ONENAND两个宏来选择NAND FLASH初始化还是 ONENAND FLASH初始化。 uboot 中默认定义了宏CONFIG_CMD_ONENAND,所以选择的是ONENAND FLASH初始化。我们的FSC100上面使用的是 NAND FLASH,所以我们要定义CONFIG_CMD_NAND宏,取消CONFIG_CMD_ONENAND宏的定义。 嗯!先做个记录: 修改include/configs/fsc100.h,定义宏CONFIG_CMD_NAND,取消宏CONFIG_CMD_ONENAND。 好了,接下我们看看nand_init()函数时如何实现的。

看以看出,这段代码调用根据CONFIG_SYS_MAX_NAND_DEVICE宏[默认没有定义]的值来决定系统中Nand Flash设备的个数。接着调 用nand_init_chip()函数完成Nand Flash初始化,然后计算出每块Nand Flash的大小。最终会输出Nand Flash总的容量。 嗯!做个记录: 修改include/configs/fsc100.h,定义 宏CONFIG_SYS_MAX_NAND_DEVICE,值为1 没有看明白的地方是给nand_init_chip()函数传递的参数,接下来我们来看看他们是如何定义的。 哈哈,终于到了让人头疼的地方了。先来看看struct nand_chip和struct mtd_info两个结构体,这两个结构体的成员有很多很多,很多初学者一看到就晕头转向了,为了让大家不被吓到,我对这两个结构体的成员做了精简,只保留我们关心的成员,其它的都去掉了。 (1)struct nand_chip

uboot移植笔记

u-boot-2015-01移植笔记 一、修改编译器路径 修改顶层Makefile文件,查找CROSS_COMPILE =,注释掉if判断,增加一行CROSS_CMPILE = arm-linux- (根据编译器不同这个自行添加,在这里感谢胡茂晓同学)。 二、复制平台相近board 1、进入board子目录下的samsung子目录,复制trats2文件夹为自己平台名字的文件夹(这里笔者使用iTop4412)。 2、进入iTop4412子目录,修改为。 3、修改Makefile,将trats2改为iTop4412。 三、修改板子相应配置 1、从源码根目录下进入include/configs目录,复制为。 2、从源码根目录下进入configs目录,复制trats2_defconfig为iTop4412_defconfig。 3、修改iTop4412_defconfig,将CONFIG_DEFAULT_DEVICE_TREE="exynos4412-trats2"改为CONFIG_DEFAULT_DEVICE_TREE="exynos4412-iTop4412"。

四、增加自己的Device Tree Source 1、从源码根目录下进入arch/arm/Dts目录,复制 exynos4412- 。 2、修改当前目录下的Makefile文件,将 dtb-$(CONFIG_EXYNOS4) += \ \ \ \ \ 修改成 dtb-$(CONFIG_EXYNOS4) += \ \ \ \ \ \

五、制作顶层.config文件 1、在源码根目录下使用命令make menuconfig(貌似刚支持图形界面配置)。 2、先配置基本的,Architecture select 选项选择ARM architecture,architecture选项的子选项Target select选择Samsun EXYNOS;EXYNOS board select选项选择Exynos4412 Trat2 board。 3、在Device Tree Control选项下,y(yes)Run-time configuration via Device Tree,选择Provider of DTB for control 为Embedded DTB for DT control,在Default Device Tree for DT control选项下输入exynos4412-iTop4412,退出。 4、保存退出,在源码根目录下会生成.config文件,需要用命令ls –a 查看。 5、在源码根目录下使用命令vim .config,修改.config文件。将CONFIG_SYS_BOARD="trats2" 修改成CONFIG_SYS_BOARD="iTop4412";将CONFIG_SYS_CONFIG_NAME="trats2"修改成CONFIG_SYS_CONFIG_NAME="iTop4412";将CONFIG_DEFAULT_DEVICE_TREE=""修改成CONFIG_DEFAULT_DEVICE_TREE="exynos4412-iTop4412"。(注意:每次使用make menuconfig后都要修改本条)

Uboot_for_mini6410_移植步骤详解

这是u-boot-2010.09 针对友善之臂MINI6410移植的最基础版本,只包含了就基本的系统引导,NAND读写,DM9000网卡等等。但是这个足够开发的方便使用。今后会陆续添加原先我为mini2440添加的所有功能。 但是此次移植并非我的功劳,首先基本的移植是由Alex Ling 完成的,你可以在这里看到他提交的补丁,但是编译后无法使用,可能是因为host系统不同,对脚本的解析不同,使得spl部分的生成出现问题,只需修改一下nand_spl目录下目标板目录的中config.mk中的 PAD_TO := $(shell expr $$[$(TEXT_BASE) + 4096]) 即可。 DM9000的驱动没有太大的问题(修改了一点可能出现问题的地方,感谢肖工指教),但是原本的u-boot并没有调整所有SROM控制器的配置(其中包括连接DM9000所使用的bank1的总线),我使用了友善带的u-boot的参数配置了一下就好了。 一:https://www.360docs.net/doc/4a13698312.html,/batch.viewlink.php?itemid=1694 ftp://ftp.denx.de/pub/u-boot/ 去这2个网站随便下载都可以下载得到最新或者你想要的u-boot。现在我将下载u-boot-2010-09,这个也就是最新的版本啦。 下载后把它解压,然后得到u-boot-2010-09的文件夹,然后进去,并且做下面几件事情:1:进入arch这个文件夹,把出arm外的前部文件夹删掉 2:进入board这个文件夹,把除samsung外前部文件夹删掉 3:进入include/configs,把除smdk6400.h外的所有文件删除。 4: 把顶层目录下有一个叫onenand_ipl的文件夹删除掉,因为没有用到。 5:进入nand_spl/board,把除samsung外全部文件删除掉。 6:再进入arch/arm/cpu文件夹,把除arm1176外其他文件夹删除掉。 7:再进入arch/arm/include/asm文件夹,把除arch-s3c64xx文件外带arch-XX的文件夹删除8:再进入board/samsung文价夹下,把除smdk6400外其他文价夹删除掉。 至此已经把没用到或者不想见到它的文件夹跟文件删除掉了。爽吧。 二: 1:在顶层的目录下找到Makefile文件,并且打开,因为vi或者vim没用习惯而是改用gedit。lwf@lwf-desktop:/home/u-boot-2010.12$ sudo gedit Makefile 在这个Makefile你会找到: ######################################################################### ## ARM1176 Systems ######################################################################### smdk6400_noUSB_config \ smdk6400_config : unconfig @mkdir -p $(obj)include $(obj)board/samsung/smdk6400 @mkdir -p $(obj)nand_spl/board/samsung/smdk6400

韦东山u-boot移植笔记

一:准备移植 1、从下面的官网下载最新的U-boot。用google英文版搜索最新的u-boot源码 ftp://ftp.denx.de/pub/u-boot/ 2、建立sourceinsight工程 a、解压并在E:\colin weidongshan\transplant_u-boot-2012.04.01\u-boot-2012.04.01建立SI b、添加文件到SI工程 1、点击"Add All",选中“Include top level sub-directories”和“Recursively add lower sub-directories”点击“OK” 2、选中“Board”目录,点击“Remove Tree”,去掉总个目录 进入“Board\Samsung\Smdk2410\”,点击"Add All" 3、选中“Arch”目录,点击“Remove Tree”,去掉总个目录 进入“Arch\Arm\Cpu\Arm920t\”,双击选中“Cpu.c”“Interrupts.c”“start.S”。 进入“Arch\Arm\Cpu\Arm920t\S3c24x0\”,点击"Add All" 进入“Arch\Arm\”,选中"Dts"目录,点击"Add Tree" 进入“Arch\Arm\Include\Asm\Arch_s3c24x0”,点击"Add All" 进入“Arch\Arm\Include\Asm\”,点击"Add All",去掉“Include top level sub-directories”和“Recursively add lower sub-directories”前面的勾,表示只加顶层目录的文件 进入“Arch\Arm\Include\Asm\”,单击选中"Proc-armv",点击"Add Tree" 进入“Arch\Arm\Lib\”,点击"Add All" 4、选中“Include”目录,点击“Remove Tree”,去掉总个目录 进入“Include\”,点击"Add All",去掉“Include top level sub-directories”和“Recursively add lower sub-directories”前面的勾,表示只加顶层目录的文件 进入“Include\”,单击选中"Andestech",点击"Add Tree" 进入“Include\”,单击选中"Asm-generic",点击"Add Tree" 进入“Include\”,同上选中除"Configs"目录外的所有目录,点击"Add Tree"。"Configs"目录先不加,下面再议 进入“Include\Configs\”,双击选中“Smdk2410.h” 5、同步文件,完成 3、编译 尝试编译 解压:book@book-desktop:/work/system$ tar xjf u-boot-2012.04.01.tar.bz2 book@book-desktop:/work/system$ cd u-boot-2012.04.01/ 配置:book@book-desktop:/work/system/u-boot-2012.04.01$ make smdk2410_config 编译:book@book-desktop:/work/system/u-boot-2012.04.01$ make

最新Uboot移植步骤 5:NorFlash

最新Uboot移植步骤5:NorFlash 显示Flash:***failed***,说明norflash未识别,我们搜索“Flash:” 进入第一个查看 找到这个判断条件,如果flash_size>0则输出flash大小,否则输出 *** failed *** ### ERROR ### Please RESET the board ###

其中hang函数导致程序无法继续向下执行,我们只实现了nand启动肯定在这会卡住,所以我们不用这个hang 函数,直接输出flash未识别的信息就好了,改动如下: 现在来找norflash未识别的原因,进入flash_init函数 看见这样一段代码 可知,有2个函数可以检测flash的大小如果flash_detect_legacy函数不行再使用flash_get_size函数,先进入flash_detect_legacy函数看下,其结构如下: 该函数有2个,使用哪一个由宏CONFIG_FLASH_CFI_LEGACY决定,搜索该宏:

很明显,前面我们都是使用该函数进行大小检测的,而该函数无法识别flash,那我们使用新方法进行检测,进入新方法查看: 发现有很多可用调试信息,我们看看如何起用这些调试信息: 发现只要定义了_DEBUG即可启用调试信息,我们定义该宏: 在文件开始发现注释: 我们直接定义DEBUG即可,

配置,编译,下载到板子norflash: 重新上电从norflash启动,输出如下: 我们查看JEDEC PROBE:从哪来

查看norflash手册,看读取的设备ID是否正确 可以看到输出的厂家设备ID是正确的, 说明下面这个函数读取正确 那就是 函数出现错误,我们进入该函数查看:

jz2440-uboot移植

第一部分,移植uboot2015支持JZ2440串口 前言 本人入手JZ2440半个月,以前未接触过linux,但在校接触过许多不跑linux系统的CPU,具有LPC1114,LPC1343,STM32,blackfin等处理器的编程经验,对微处理器的原理以及运行方式具有一定的了解。靠着这点小经验,以及新学习的知识,自己动手移植了最新的uboot,绝对原创,得益于韦老师的书籍以及开发板,能让我们这个小白可以踏进linux的世界,但本人毕竟在linux方面只是个类似小白的学生,许多不对之处,希望大家不吝指教! 说明:阅读本文需要一点的ARM以及S3C2440的基础知识,建议先阅读《嵌入式Linux 应用开发完全手册》,此书对对ARM以及JZ2440有很好的介绍和说明,在阅读中有不懂的也可以再去翻看此书,查漏补缺。 JZ2440移植最新u-boot-2015.04-rc4.tar 1,配置uboot 去官网下载最新uboot源代码u-boot-2015.04-rc4.tar,开发环境采用JZ2440光盘上的vmware虚拟机ubuntu9.10。 本次采用smdk2410的默认配置来配置uboot,然后启动类似linux一样的menuconfig菜单进行配置,然后make,并烧写进JZ2440看效果,然后根据现象一步步修改。 我们移植uboot的基本原则是:因为我们刚上手,可能什么都不知道,更加不知需要更改什么,这个时候我们就先尽量什么都不改,直接烧写进去看现象,然后根据现象或者提示信息一步步更改,从而移植完成。 配置命令如下: book@book-desktop:~/uboot/u-boot-2015.04-rc4$ tar jxvf u-boot-2015.04-rc4.tar.bz2 book@book-desktop:~/uboot/u-boot-2015.04-rc4$ cd u-boot-2015.04-rc4/ book@book-desktop:~/uboot/u-boot-2015.04-rc4$ make smdk2410_defconfig book@book-desktop:~/uboot/u-boot-2015.04-rc4$ make menuconfig 3,在uboot根目录执行 book@book-desktop:~/uboot/u-boot-2015.04-rc4$ make 报错: cc1: error: bad value (armv4) for -march= switch cc1: error: bad value (armv4) for -mtune= switch make[2]: *** [include/autoconf.mk] Error 1 make[1]: *** [silentoldconfig] Error 1 make: *** No rule to make target `include/config/auto.conf', needed by `include/config/ubo ot.release'. Stop. 错误并不可怕,学会看错误提示,根据提示进行下一步工作。错误提示意思好像是说机器平台不对,那么我们就来指定,打开顶层Makefile,指定交叉编译器和架构平台: book@book-desktop:~/uboot/u-boot-2015.04-rc4$ vim Makefile

S3C2440移植uboot过程全解+移植记录

一、Uboot移植前的准备 1、修改makefile、配置文件 在配置文件之前,需要修改makeflie相关内容:修改如下: (1)修改编译器,这里我们的makefile已经设置为arm-linux-无需再修改,如下所示: ifeq ($(ARCH),arm) CROSS_COMPILE = arm-linux- Endif (2)添加fl2440的配置项,如下所示: fl2440_config:unconfig @$(MKCONFIG) $(@:_config=) arm arm920t fl2440 step s3c24x0 注意:在添加的fl2440_config的第二行,必须以Table开头,不能有任何多余的符号,否则极易导致编译错误。 Uboot支持多种处理器和平台,在编译uboot之前需要对其进行配置,使其支持我们自己的开发平台。在执行编译make之前,需要进行配置即make fl2440_config。通过查看顶层目录的makeflie文件,通过以下语句:MKCONFIG := $(SRCTREE)/mkconfig得出实际执行的命令为: ./mkconfig fl2440 arm arm920t fl2440 step s3c24x0 执行完这句后,产生如下结果: (1)开发板名称为fl2440; (2)将include中的头文件连接到同平台相关的头文件中,这里的连接为: asm->asm-arm arch->arch-s3c24x0 proc->proc-armv (3)创建顶层Makefile包含的文件inclued/config.mk,该文件内容如下 ARCH = arm CPU = arm920t BOARD = fl2440 VENDOR = step

uboot移植整理

1.Make 编译uboot出错: …… …… board.c:138: error: inline function 'coloured_LED_init' cannot be declared weak board.c:140: error: inline function 'red_LED_on' cannot be declared weak board.c:142: error: inline function 'red_LED_off' cannot be declared weak board.c:144: error: inline function 'green_LED_on' cannot be declared weak board.c:146: error: inline function 'green_LED_off' cannot be declared weak board.c:148: error: inline function 'yellow_LED_on' cannot be declared weak board.c:150: error: inline function 'yellow_LED_off' cannot be declared weak make[1]: *** [board.o] 错误1 make[1]:正在离开目录`/opt/u-boot-1.3.4/lib_arm' make: *** [lib_arm/libarm.a] 错误2 开始编译的时候会出现上面的错误,继续移植操作这个错误将消失。或者注释掉出错行。 ****挂载文件系统时候的错误:************ …… …… TCP cubic registered NET: Registered protocol family 17 drivers/rtc/hctosys.c: unable to open rtc device (rtc0) VFS: Unable to mount root fs via NFS, trying floppy. VFS: Cannot open root device "nfs" or unknown-block(2,0) Please append a correct "root=" boot option; here are the available partitions: 1f00 16 mtdblock0 (driver?) 1f01 2048 mtdblock1 (driver?) 1f02 4096 mtdblock2 (driver?) 1f03 2048 mtdblock3 (driver?) 1f04 4096 mtdblock4 (driver?) 1f05 10240 mtdblock5 (driver?) 1f06 24576 mtdblock6 (driver?) 1f07 16384 mtdblock7 (driver?) Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0) [] (unwind_backtrace+0x0/0xf0) from [] (panic+0x54/0x17c) 解决方法:保证传入的命令行参数正确无误,保证NFS配置成功,rootfs正确,可以重启机器试试。 错误:error: common/libcommon.a(main.o) uses FPA instructions, whereas u-boot does not /opt/opt/FriendlyARM/toolschain/4.4.3/bin/.arm-none-linux-gnueabi-ld: failed to merge target specific data of file common/libcommon.a(main.o)

LINUX-2.6.32内核移植学习笔记

Linux-2.6.30内核的移植及调试运行 【开发的软件、硬件交代】 内核:linux-2.6.32.tar.gz 下载网址: https://www.360docs.net/doc/4a13698312.html,/pub/linux/kernel/v2.6/ 补丁:2.6.32-at91.patch.gz 下载地址:https://www.360docs.net/doc/4a13698312.html,.za/at91_26.html 开发硬件平台:AT91RM9200 同为嵌入式开发板 【内核移植过程】 step1:下载内核极其补丁;我的内核及补丁压缩包是放在了LINUX操作系统主文件夹flymz/myprog/core文件下; (郑重声明:下载的内核必须要和补丁是配套的) step2:解压内核,打补丁; 在DZ中输入:tar -zxvf myprog/core/linux-2.6.32.tar.gz进行内核解压 然后进入内核:cd linux-2.6.32 接着,打补丁:zcat ../myprog/core/2.6.32-at91rm.patch.gz | patch -p1 (附:若linux系统没有安装patch命令时,这里就会提示出错。所以要先安装个patch命令包,在ZD:sudo apt-get install patch 安装好了就不会报错了) step3:内核配置; (1)修改makefile文件 将linux-2.6.32文件夹下的makefile修改如下: 183:ARCH ?= $(SUBARCH) 184:CROSS_COMPILE ?= 修改为 183:ARCH ?= arm

184:CROSS_COMPILE ?= /usr/local/arm/gcc-3.4.5/bin/arm-linux- 因为我采用的编译器为gcc-3.4.5,并且放在了文件系统 /usr/local/arm/gcc-3.4.5/bin (2)在ZD(以下都是在linux-2.6.32路径):make clean (3)然后:make at91rm9200dk_defconfig 进行默认配置 (附:若出现一些报错(这里错误就不列举出来了),可能是有些命令包有没有预先装好:在ZD中(主文件夹路径)sudo apt-get install libncurse5 -dev 及sudo apt-get install ncurses-devel) 若出现以下错误: 由于该版本内核不支持dataflash,所以要干掉此项,如(4)所示: (4)make menuconfig 进行更进一步的列表配置,主要是修改dataflash 步骤如下(图): 首先进入的界面如下:

最新最可靠的UBOOT移植

一. 1、到ftp://ftp.denx.de/pub/u-boot/下载u-boot-2010.06.tar.bz2 2、解压tar jxvf u-boot-2010.06.tar.bz2 3、进入uboot cd u-boot-2010.06 4、删减uboot 进入/board,留下samsung,其它全部删除 ls | grep -v "^samsung$" | xargs rm -rf 进入/arch,留下arm,其它全部删除 ls | grep -v "^arm$" | xargs rm -rf 进入/arch/arm/cpu,留下arm920t,其它全部删除 ls | grep -v "920" | xargs rm –rf 二. 1、建立自己的DEMO板 cd /board/samsung mkdir smdk2440 cp -rf smdk2410/* smdk2440///将2410下所有的代码复制到2440下 cd smdk2440//进入smdk2440目录 mv smdk2410.c smdk2440.c//将smdk2440下的smdk2410.c改名为smdk2440.c 然后在文件夹samsung里留下smdk2440,其它全部删除 cp include/configs/smdk2410.h include/configs/smdk2440.h//建立2440头文件在include/configs下留下smdk2440.h, 其它全部删除 vi board/samsung/smdk2440/Makefile//修改smdk2440下Makefile的编译项,如下: COBJS := smdk2440.o flash.o//修改第28行因在smdk2440下我们将smdk2410.c改名为smdk2440.c 2、顶层Makefile文件。查找到smdk2410_config的地方,在他下面按照smdk2410_config 的格式建立my2440_config的编译选项,另外还要指定交叉编译器,修改159行 CROSS_COMPILE ?= arm-linux-//指定交叉编译器为arm-linux-gcc smdk2410_config:unconfig//2410编译选项格式 @$(MKCONFIG) $(@:_config=)arm arm920t smdk2410 samsung s3c24x0 smdk2440_config:unconfig//修改蒂3054行,2440编译选项格式 @$(MKCONFIG) $(@:_config=)arm arm920t smdk2440 samsung s3c24x0

uboot移植心得

最近跑完裸机之后,便开始跑系统,但想着裸机与系统之间隔着个Bootloader,反正以前也没怎么深入研究,便说花一到两周时间来搞搞U-BOOT。 参考了fzb和赵春江两位大牛的,也研究了2010.06版本的和2011.06版本两个经典版本,也对比了TQ(我买的板是天嵌的)自己写的U-BOOT,学到了不少,也发现了很多东西,以下便记录以下自己的心得吧,以便以后可以自己参考下。 U-BOOT的两个阶段启动过程:(2010.06经典版来说) 第一阶段:start.S的路径位于arch\arm\cpu\arm920t\这段汇编代码一般被称作第一阶段初始化代码。主要作用是初始化运行环境;初始化内存;重新放置UBOOT代码到内存中;跳入到内存中执行第二段初始化代码 1、关闭开门狗,屏蔽所有中断 2、设置分频比 3、bl cpu_init_crit() 关MMU,初始化内存 bl lowlevel_init() 配置内存,修改内存刷新率参数等 4、relocate判断当前代码是在NORFLASH还是RAM copy_loop循环将FLASH代码复制至RAM中 5、stack_setup栈设置 clear_bss_bss_start到_bss_end之间的数据清0 6、ldr pc , start_armboot 跳转到第二阶段 //===================================================================== 第二阶段:board.c的路径位于arch/arm/lib/board.c,这段代码为U-BOOT的第二阶段初始化代码。主要作用是初始化两个重要数据结构,对SDRAM的内存分配设置,对各种需要用到的外设进行初始化,最后循环跳入main_loop()函数 二阶段start_armboot分为board_init_f 和 board_init_r两部分 先执行的board_init_f部分: 1、为gd数据结构分配地址,并清零 2、执行init_fnc_ptr函数指针数组中的各个初始化函数,如下 board_early_init_f ,timer_init ,env_init init_baudrate serial_init console_init_f display_banner dram_init 3、A、分配SDRAM高64KB为TLB,用于U-BOOT B、分配SDRAM下一单元为U-BOOT代码段,数据段,BSS段 (这里插一句,原来BSS段是用来存放未初始化的全局变量与静态变量) C、接着开辟malloc空间,存bd , gd , 3个字大小的异常堆空间 4、将relorate的地址值赋给gd结构体相应变量(2011.06版本的,用于返回start.S) 后执行的board_init_r部分: 1、对gd , bd 数据结构赋值初始化 2、各种外设初始化: 初始化NORFLASH, NANDFLASH,初始化ONENAND FLASH

uboot移植初步成功啦

uboot移植初步成功啦 哈哈,真高兴啊,就在晚饭前,终于在SDRAM中 调试uboot1.4取得初步成功,晚饭后,就在写前,把uboot烧写到flash中,重启后,在超级终端中看到了正常显示,只是蜂鸣器一直想,哈哈,移植算是初步成功了,兴奋啊~~~ 明天再弄弄就可取得完胜了吧 现在回过头来看uboot移植才发现,移植是这么滴简单,HOHO~~` 先说说移植吧,代码上的移植:只是基于代码的改动,而不包括知道代码改动的背后~~ 移植的uboot版本为1.4版,用的编译工具链为 arm-elf-。不能用arm-linux编译,原因是用的c库不同。简单的说就是arm-linux是为有MMU硬件单元的处理器配置的,如ARM9器件,而arm-elf-则是用于无MMU的cpu 的,如ARM7。(也试了一下,用arm-linux-编译得到的uboot.bin加载到SDRAM中运行后无显示)。arm-elf-gcc 版本为2.93版本的(有点低,还需要修改 cpu\s3c44b0\config.mk,后面提到)。在uboot1.4版本中符合s3c44b0内核的板子为dave\B2板,移植就是基于该板子的,当然实际板子有很多硬件情况与它不同,需 要修改。

现在就分别讲讲所要修改的文件和具体修改吧:"uboot\"表示uboot的根目录 uboot\Makefile:在uboot中,默认的编译器为arm-linux-,所以首先要修改的就是把编译器改为 arm-elf-: ifeq ($(ARCH),arm) CROSS_COMPILE = arm-linux- endif 只需要把arm-linux-改为arm-elf-就行 同时,要增加自己的板子在Makefile中的配置:B2_config : unconfig @./mkconfig $(@:_config=) arm s3c44b0 B2 dave 该句增加了B2板子在Makefile中的配置,其中向编译器传递了四个参数:cpu体系 cpu类型板子公司可仿造该板子增加自己板子的设置,其中板子和公司可自取,为了文件,都取为44b0,增加配置如下: 44b0_config:unconfig @./mkconfig $(@:_config=) arm s3c44b0 44b0 44b0 uboot\board:该文件夹放置了所有uboot支持的板子。故要在此文件夹中增加自己的板子。移植嘛,就是在原有的基础上修改成符合自己的就行了。于是可以把

相关主题
相关文档
最新文档