嵌入式Linux之我行——u-boot-2009_08在2440上的移植详解(五) - Bootloader移植篇 - hbhuanggang

合集下载

U-Boot移植(3)增加对S3C2440的支持

U-Boot移植(3)增加对S3C2440的支持

U-Boot移植(3)增加对S3C2440的⽀持昨天跟张⽼师去打乒乓球了,还没写完今天接着写。

6、S3C2440是S3C2410的改进版,它们的操作基本相似,只是在系统时钟的设置、NAND Flash控制器的操作等⽅⾯有⼀些⼩差别。

⽽下⾯我要做的就是令⼀个U-Boot⼆进制代码既可以在S3C2410上运⾏,也可以在S3C2440上运⾏。

虽说我的板也是S3C2410的,但是增加S3C2440的U-Boot练习,可以提⾼我们的能⼒,为后⾯的学习打下基础。

GSTATUS1寄存器的值:0x32410000表⽰S3C2410,0x32410002表⽰S3C2440。

S3C2410:FCLK=200MHZ;S3C2440:FCLK=400MHZ,UCLK=48MHZ;搞清楚之后,下⾯我们就可以开始了。

⾸先先在board/100ask24x0/100ask24x0.c 中的前⾯定义如下⼀些值:我的开发板输⼊时钟为12MHZ,如果你的开发板时钟和我的不⼀样的话,可以根据以前代码中的公式计算,然后修改系统时钟,这在include/configs/100ask24x0.h中的宏CONFIG_SYS_CLK_FREQ中定义。

接下来,就是使⽤不同的宏设置系统时钟,包括S3C2410、S3C2440。

7、在后⾯设置串⼝波特率时需要获得系统时钟,就是在U-Boot的第⼆个阶段,即是lib_arm/board.c中start_armboot函数调⽤serial_init函数初始化串⼝时,会调⽤get_PCLK、get_HCLK、get_PLLCLK等函数,这需要我们作相应的修改。

⾸先要在board_init函数的开关增加如下⼀⾏,才能使⽤变量gd,因为识别出S3C2410和S3C2440,设置了机器类型ID:gd->bd->bi_arch_number 。

接着在get_PLLCLK函数中增加如下:由于分频系数设置⽅法也不⼀样,get_HCLK、get_PCLK也需要修改。

嵌入式Linux之我行——u-boot-2009.08在2440上的移植详解

嵌入式Linux之我行——u-boot-2009.08在2440上的移植详解

嵌入式Linux之我行——u-boot-2009.08在2440上的移植详解嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤。

一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便。

如有错误之处,谢请指正。

∙共享资源,欢迎转载:一、移植环境∙主机: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/下建立自己开发板的项目,取名叫my24402)因2440和2410的资源差不多,所以就以2410项目的代码作为模板,以后再修改3)修改u-boot跟目录下的Makefile文件。

查找到smdk2410_config的地方,在他下面按照smdk2410_config的格式建立my2440_config的编译选项,另外还要指定交叉编译器4)测试编译新建的my2440开发板项目到此为止,u-boot对自己的my2440开发板还没有任何用处,以上的移植只是搭建了一个my2440开发板u-boot的框架,要使其功能实现,还要根据my2440开发板的具体资源情况来对u-boot源码进行修改。

u-boot在S3C2440上的移植问题及解决方法集锦(三)

u-boot在S3C2440上的移植问题及解决方法集锦(三)

一、移植环境∙主机:VMWare6.5--Fedora 9∙开发板:自制开发板CPU:S3C2440;SDRAM:HY57V561620FTP-H;NOR flash:SST_39VF1601(2M);NAND flash:K9F1G08U0B(128M);网卡芯片:DM9000EP∙编译器:arm-linux-gcc-4.3.2∙u-boot:u-boot-2009.08∙linux kernel:linux-2.6.30∙busybox:busybox-1.13.3二、博客地址/liuqiqi677如有错误,欢迎指正。

三、参考资料主要参考了黄刚的博客/u3/101649/,他的博客写得相当不错,将嵌入式开发各个阶段的知识以边做边学的方式,辅以图片、解释,清晰地呈现给读者,能够让读者把握主线,对嵌入式开发有整体的了解。

强烈推荐!!!四、问题及解决方法7、Fedora9的bug,“No network connection”我的虚拟机采用桥接的方式与Windows连接,并且在Fedora9中能够ping通Windows XP,但是右上角的网络连接图标无论是否手动激活网卡都会一直提示"No network connection",如图7所示,显示一把红色小叉。

图7 网络连接图标显示无连接这个问题之前一直存在,但是没有找到解决方法,就搁置下来了。

后来,我想用tftp将linux内核下载到开发板上,但是一直不能成功,我就怀疑是不是网络部分没有配置好,因此又去仔细研究了一下,终于发现问题所在!这实际上是Fedora 9 的一个bug。

(以前的版本没用过不清楚)造成这个问题的原因是Network Configuration 图形设置界面的默认选项值与/etc/sysconfig/network-scripts/ifcfg-eth0 配置文件的默认值不一致。

刚装完系统的情况下:在Network Configuration 中,编辑Device 下的eth0,会发现"Controlled by NetworkManager" 是不打勾的。

2440超详细U-BOOT(UBoot介绍+H-jtag使用+Uboot使用)

2440超详细U-BOOT(UBoot介绍+H-jtag使用+Uboot使用)

凌FL2440超详细U-BOOT作业(UBoot介绍+H-jtag使用+Uboot使用)Bootloader是高端嵌入式系统开发不可或缺的部分。

它是在操作系统内核启动之前运行的一段小程序。

通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。

现在主流的bootloader有U-BOOT、vivi、Eboot等。

本次作业先做Uboot的烧写吧。

希望通过这个帖子,能让更多的初学者朋友了解一些UBoot的知识,也希望高手朋友对我的不足予以斧正。

首先说一下什么是Uboot:U-Boot,全称Universal Boot Loader,是遵循GPL条款的开放源码项目。

从FAD SROM、8xxROM、PPCBOOT逐步发展演化而来。

其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是相应的Linux内核源程序的简化,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。

但是U-Boot不仅仅支持嵌入式Linu x系统的引导,当前,它还支持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项目的开发目标,即支持尽可能多的嵌入式处理器和嵌入式操作系统。

ARM 2440 uboot移植过程

ARM 2440 uboot移植过程

详细的boorloader的移植(1)北京顶嵌嵌入式培训机构 2009-09-14 16:52:23 作者:赵老师来源:顶嵌技术部文字大小:[大][中][小]一.BootLoader简介简单的说bootloader是一段程序,它的作用就是加载操作系统,BootLoader(引导加载程序)是系统加电后运行的第一段软件代码。

通过这段代码实现硬件的初始化,建立内存空间的映射图,为操作系统内核准备好硬件环境并引导内核的启动。

如右图所示的那样在设备的启动过程中bootloader位于最底层,首先被运行来引导操作系统运行,很容易可以看出 bootloader是底层程序所以它的实现严重地依赖于硬件,特别是在嵌入式世界。

因此,在嵌入式世界里建立一个通用的BootLoader几乎是不可能的。

尽管如此,一些功能强大、支持硬件环境较多的BootLoader也被广大的使用者和爱好者所支持,从而形成了一些被广泛认可的、较为通用的的bootlo ader实现。

简单的介绍几种:1.U-BOOTuboot是一个庞大的公开源码的软件。

他支持一些系列的arm体系,包含常见的外设的驱动,是一个功能强大的板极支持包。

其代码可以从下载U-BOOT是由PPCBO OT发展起来的,是PowerPC、ARM9、Xscale、X86等系统通用的Boot方案,从官方版本0.3.2开始全面支持SC系列单板机。

u-boot是一个开源的bootloader。

2.vivivivi是韩国mizi 公司开发的bootloader, 适用于ARM9处理器。

Vivi有两种工作模式:启动加载模式和下载模式。

启动加载模式可以在一段时间后(这个时间可更改)自行启动linux内核,这是vivi的默认模式。

如果修改或更新需要进入下载模式,在下载模式下,vivi为用户提供一个命令行接口通过接口可以使用vivi提供的一些命令,来实现flash的烧写、管理、操作mtd分区信息、启动系统等功能。

嵌入式Linux在s3c2440上的移植

嵌入式Linux在s3c2440上的移植

到 ¥ C 4 0处 理 器的 目标 板 上 . 出了嵌 入 式 Ln x移 植 的 方 法 与 具 体 实现 过 程 。编译 生 成 的 内核 在 嵌入 式 系统 中 324 提 iu
运 行 稳 定 .制 作 的根 文 件 系统 可 以通 过 R mds 式 正 常加 载 进 内核 。结 果 证 明方 法可 行 ,同 时 对 于 开发 其他 类 型 a i k方
Ke r s mb d e A u ; y wo d :e e d d I n x ARM ;p r n i u o i g L n x;Ra ik t md s
嵌 入 式 系统 是 以应 用 为 中 心 ,以计 算 机 技 术 为 基 础 ,软
2 内核 )
特定 于嵌 入 式 板 子 的定 制 内核 以及 控 制 内核 引
硬件可裁剪 , 用于应用系统 , 功能 、 适 对 可靠 性 、 本 、 积 、 成 体
功 耗 等 方 面 有 特 殊 要 求 的专 用 计 算 机 系 统 【 在 嵌 入 式 系 统 ” 。 里 基 于 A M 的 嵌 入 式 处 理 已经 成 为 市 场 主 流 。 而 Ln x是 R iu
的嵌 入 式 系统 具 有 一 定 的 参 考 意 义 。
关 键 词 :嵌入 式 Ln x A M; iu iu ; R L n x移 植 ; a ds Rm i k方 式
中 图分 类 号 : P 1 T 36
文献标识码 : A
文 章 编 号 :17 — 2 62 1 )5 O 1一 3 6 4 6 3 (0 1 1 一 1 1O
Ab ta t s r c :ARM r c s o a l a y b c me t e l a n te ma k t fe e d d s se P r n p r t g s s m st e p o e s rh s ar d e o h e d i h r e mb d e y tm. ot g o e ai y t i h e o i n e p e o d t n a d t e f u d o o h e eo me to n e e d d s se Ho v r o i g e e d d o e a ig s se rc n i o n h n  ̄in f rt e d v lp n fa mb d e y tm. we e ,p r n mb d e p r t y t m i o t n c n b e y c mp i ae .Ai n o p r e e d d L n x o 3 2 4 a e vr o l td c mi g t o mb d e i u n s c 4 0, d s u s s t e me o n h s p f p r n t ic se h t d a d t e t s o o i g h e t e e d d L n x b o i g e e d d L n x k r e n i e t e tr e o r ¥ C 4 r c s o .T e c mp ld L n x mb d e i u y p r n mb d e iu e l isd h a g t b a d o 3 2 40 p o e s r h o i i u t n f e k r e i u ai g i h mb d e y tm h w S sa i t d t e r o l y tm a e n r l o d d i t e n l b en lcr l t n t e e e d d s se s o t b l y a h o tf e s se c n b omal l a e n o k r e y c n i n i y Ra i . h e u t r v d ta e meh d i o k b e a d h si l ain r t e mb d e p r t g s se md s T e r s l p o e h tt t o sw r a l n a mp i t sf h re e d d o e ai y tm. k h c o o o n

嵌入式Linux之我行——S3C2440上MMCSD卡驱动实例开发讲解(二)-内核、驱动开发篇-

嵌入式Linux之我行——S3C2440上MMCSD卡驱动实例开发讲解(二)-内核、驱动开发篇-

嵌入式Linux之我行——S3C2440上MMCSD卡驱动实例开发讲解(二)-内核、驱动开发篇-嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux 中的每个步骤。

一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便。

如有错误之处,谢请指正。

•共享资源,欢迎转载:一、开发环境•主机:VMWare--Fedora 9•开发板:Mini2440--64MB Nand, Kernel:2.6.30.4•编译器:arm-linux-gcc-4.3.2上接:S3C2440上MMC/SD卡驱动实例开发讲解(一)6. s3cmci_ops SDI主机控制器操作接口函数功能分析:mmc_host_ops结构体定义了对host主机进行操作的各种方法,其定义在Core核心层的host.h中,也就是Core核心层对Host主机层提供的接口函数。

这里各种方法的函数原型如下:从各函数原型上看,他们都将mmc_host结构体作为参数,所以我在刚开始的时候就说过mmc_host结构体是MMC/SD卡驱动中比较重要的数据结构。

可以这样说,他是Core层与Host层进行数据交换的载体。

那么,这些接口函数何时会被调用呢?答案可以在Core 层的core.c和sd.c中找到,我们可以看到如下部分代码:{......//导致s3cmci_card_present被调用if(host->ops->get_cd && host->ops->get_cd(host)== 0)goto out;......}static int mmc_sd_init_card(struct mmc_host *host, u32 ocr, struct mmc_card *oldcard){....../* Check if read-only switch is active.*/if(!oldcard){ //导致s3cmci_get_ro被调用if(!host->ops->get_ro || host->ops->get_ro(host) < 0){printk(KERN_WARNING "%s: host does not ""support reading read-only ""switch. assuming write-enable.\n",mmc_hostname(host));}else{好了,我们开始分析每个接口函数的具体实现吧,从简单的开始吧。

u-boot-2008.10移植到mini2440详解及源代码

u-boot-2008.10移植到mini2440详解及源代码

u-boot-2008.10移植到mini2440详解及源代码u-boot移植到mini2440过程及源代码这篇文章写于2008.12.28日,主要记录了我移植u-boot-2008.10的过程,并附上了移植好的patch文件。

移植好的u-boot-2008.10适用友善公司的mini2440和阳初公司的yc2410。

其它的开发板,可能要根据相应的电路配置做稍许修改。

我的移植是使用非nand-leagcy方法的,移植好的u-boot-2008.10功能除了基本功能外,加上了yaffs1映像的写入功能,加入了从nand flash启动的功能,改善了一些操作感受,往nand写入数据时,可以显示进度。

在使用上要注意的是使用nandwirte.yaffs命令写入yaffs1映像时,文件长度参数一定要与yaffs1映像的大小完全一致,否则有可能产生假坏块。

我的开发环境是vmware,kubuntu8.04。

交叉编译是用crosstool0.43编译生成的arm-linux-gcc 4.1.0,libc2.3.2。

(本人也成功移植了linux2.6.27.9到mini2440开发板上,请看我另一篇文章/rat%5Flinux/blog/item/0275c60155b18a80e950cdfc.html)一直想自已移植一套u-boot,但因为工作忙,一直都没有做,最近时间比较多,买了一套友善之臂的mini2440开发板,此板电路与该公司之前的QQ2440基本一至。

而该开发板自带的u-boot的移植的还不很完善,于是下决心自已移植u-boot。

要移植就用最新版的u-boot 移植,于是决定在u-boot.2008.10版上进行移植,此版是2008年10月的新版,于之前的版本有较大改动,所以版本号也没有延续以前的编号方式,而改为2008.10。

我的移植目的,是要能同时持S3C2440,S3C2410(手中还有一块阳初公司出的S3C2410开发板),从nand flash 启动u-boot,因为目前大多数应用都是只有nand flash的,所以没打算从nor flash启动。

U-boot在mini2440平台上的移植方法

U-boot在mini2440平台上的移植方法

第31卷第8期2010年8月微计算机应用M I CROCOMPUTER APPLI CATI ONSV o l131N o18A ug12010 U-boot在m ini2440平台上的移植方法王海鹏倪远平周佩萱(昆明理工大学自动化系昆明650051)摘要:在li nux主机上建立了交叉编译环境,利用v i m文件编辑工具修改了U-boot的库和M akefil e的源文件,实现了U-boo t在m ini2440开发板上的移植。

移植U-boo t是后期移植li nux内核,做嵌入式li nux系统开发的前期工作,具有实用价值。

关键词:嵌入式系统bootloader移植Porti ngW ay of U-B oot To Platfor m Based On M i n i2440WANG H a i p eng,N I Yuanp i n g,Z HOU Peixuan(K un m i ng U n i ve rs i ty o f Science and T echno:A uto m ation depart m ent,K un m i ng,b50051,Ch i na)Ab stract:In t h i s paper,we had1establis hed a cross-comp iler env iron m ent based on t he li nux PC1T he U-bootM akefile librar i es and source filesw ere m od ifi ed w ith v i m ed iti ng,and transp l anted U-boo t s uccessfull y on the m ini2440board1The transp l antation ofU -boo t i s a pre li m i nary work for li nux kerne l.s graft and the develop m ent o f li nux e mbedded sy stem1It has a practi ca l value1K ey words:e m bedded syste m,boo tloader,po rti ngARM处理器是一种低功耗高性能的32位R I SC处理器,目前ARM微处理器已经深入到工业控制、无线通信、网络应用、消费类电子产品、成像和安全产品各个领域=1>。

uboot2009移植

uboot2009移植

嵌入式Linux之我行——u-boot-2009.08在2440上的移植详解(一)(2009-11-27 10:46)分类:Bootloader移植篇嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤。

一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便。

如有错误之处,谢请指正。

共享资源,欢迎转载:一、移植环境主机:VMWare--Fedora 9开发板:Mini2440--64MB Nand,Kernel:2.6.30.4编译器:arm-linux-gcc-4.3.2.tgzu-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#tar -jxvf u-boot-2009.08.tar.bz2 //解压源码#cd u-boot-2009.08/board/samsung/ //进入目录#mkdir my2440 //创建my2440文件夹2)因2440和2410的资源差不多,所以就以2410项目的代码作为模板,以后再修改#cp -rf smdk2410/* my2440/ //将2410下所有的代码复制到2440下#cd my2440 //进入my2440目录#mv smdk2410.c my2440.c //将my2440下的smdk2410.c改名为my2440.c#cd ../../../ //回到u-boot根目录#cp include/configs/smdk2410.h include/configs/my2440.h//建立2440头文件#gedit board/samsung/my2440/Makefile //修改my2440下Makefile的编译项,如下:COBJS :=my2440.o flash.o //因在my2440下我们将smdk2410.c改名为my2440.c3)修改u-boot跟目录下的Makefile文件。

移植u-boot2009.08到OK2440V3开发板

移植u-boot2009.08到OK2440V3开发板

移植u-boot2009.08到OK2440V3开发板移植u-boot2009.08到OK2440V3开发板(1)---方向与方法开发板到了之后,用的是板子自带的bootloader、linux内核和文件系统,在上面跑了几个小程序知道流程和方法后,就想着用自已移植的这些东西了,因为既然要搞底层的东西,我想这些东西还是要学会的。

刚开始踌躇满志,以为不会有什么困难,网上不都多得是文章吗。

可实际上,下了N多资料,看了N多文章之后,下到flash中一运行,串口控制台中什么都没有,当时真有点蒙了。

其实不成功,倒还没什么,关键是你想继续努力的时候,却没有方向和方法,那真的才是又浪费时间,又郁闷。

不过还得感谢网络,文章看多了,就知道哪些可以直接close,那些可以复制下来慢慢看(我通常都是一气狂搜,一气“另存为”,最后再集中在一起看)。

三五天后,终于找到了方向和方法,而且在sdram中运行,成功地在串口输出里看到了u-boot启动信息。

第一次学做u-boot移植,综合别人的方法,总结归纳如下:1. 先不去考虑nor/nand flash启动,先让u-boot在SDARM中成功运行。

2. 把那个既经典又简单又very useful的调试方法用上,那就是在程序中需要的地方加上led灯指示。

(有时串口没信息,一头雾水,连自己的程序是否在运行都不知道,这里在程序开头加led的代码,最合适不过了)3. u-boot能在SDRAM中运行后,先考虑nor flash中运行(如果有nor flash的话),因为支持nor flash比支持nand flash改动少,较容易一些。

SMDK2410里也是支持nor flash的,那里用的是AMD公司的。

4. 能在flash 中启动后,增加nand支持,看是否能检测到nand,并在u-boot中用些nand的命令验证驱动是否有问题。

5. 增加代码,让u-boot从nand启动。

6. u-boot可是从nand启动后,增加代码,让代码能自动识别跳线的设置,从相应的flash启动。

U-Boot在S3C2440上移植和设置

U-Boot在S3C2440上移植和设置

U-Boot在S3C2440上移植和设置
王之磊;李临生
【期刊名称】《工业控制计算机》
【年(卷),期】2012(025)002
【摘要】BootLoader是嵌入式系统开发的重要环节,是操作系统和硬件平台联系
的桥梁,对嵌入式系统的后继开发十分重要.简介了BootLoader U-Boot目录结构、工作流程及其移植的思路和引导内核的方法;给出了移植uboot-2010-03到ARM微处理器S3C2440上,所需操作环境的搭建、具体代码的修改、具体参数的
设置、所需的操作命令及常见错误的处理方法等要点.最后将编译生成了U-Boot.bin文件下载到ARM微处理器S3C2440上,经过测试U-Boot可以达到设计的功能要求并能够稳定的运行而且通过对其正确的配置成功的引导了内核.
【总页数】3页(P84-86)
【作者】王之磊;李临生
【作者单位】太原科技大学,山西太原030024;太原科技大学,山西太原030024【正文语种】中文
【相关文献】
1.U-Boot在S3C2440上的分析和移植 [J], 夏礼勇;符秀辉;
2.U-Boot在S3C2440上的移植方法 [J], 张徽;张华春
3.基于S3C2440嵌入式系统的U-Boot移植 [J], 李鹏勃;靳伍银
4.U-Boot在S3C2440上的分析与移植 [J], 师磊
5.U-Boot分析及在S3C2440上的移植 [J], 乔铁柱;孙东
因版权原因,仅展示原文概要,查看原文内容请购买。

嵌入式Linux之我行——u-boot-2009_08在2440上的移植详解(二) - Bootloader移植篇 - hbhuanggang

嵌入式Linux之我行——u-boot-2009_08在2440上的移植详解(二) - Bootloader移植篇 - hbhuanggang

嵌入式Linux之我行——u-boot-2009.08在2440上的移植详解(二)嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤。

一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便。

如有错误之处,谢请指正。

•共享资源,欢迎转载:一、移植环境•主机: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二、移植步骤上接:u-boot-2009.08在2440上的移植详解(一)4)准备进入u-boot的第二阶段(在u-boot中添加对我们开发板上Nor Flash的支持)。

通常,在嵌入式bootloader中,有两种方式来引导启动内核:从Nor Flash启动和从Nand Flash启动。

u-boot中默认是从Nor Flash启动,再从上一节这个运行结果图中看,还发现几个问题:第一,我开发板的Nor Flash是2M的,而这里显示的是512kB;第二,出现Warning - bad CRC, using default environment的警告信息。

不是u-boot默认是从Nor Flash启动的吗?为什么会有这些错误信息呢?这是因为我们还没有添加对我们自己的Nor Flash的支持,u-boot默认的是其他型号的Nor Flash,而我们的Nor Flash的型号是SST39VF1601。

另外怎样将命令行提示符前面的SMDK2410变成我自己定义的呢?下面我们一一来解决这些问题,让u-boot完全对我们Nor Flash的支持。

首先我们修改头文件代码如下:#gedit include/configs/my2440.h //修改命令行前的名字和Nor Flash 参数部分的定义#define CONFIG_SYS_PROMPT "[MY2440]#" //将命令行前的名字改成[MY2440]/*-----------------------------------------------------------------------* FLASH and environment organization*/#if 0//注释掉下面两个类型的Nor Flash设置,因为不是我们所使用的型号#define CONFIG_AMD_LV400 1 /* uncomment this if you have a LV400flash */#define CONFIG_AMD_LV800 1 /* uncomment this if you have a LV800 flash */#endif#define CONFIG_SYS_MAX_FLASH_BANKS 1 /* max number of memory banks */#ifdef CONFIG_AMD_LV800#define PHYS_FLASH_SIZE 0x00100000 /* 1MB */#define CONFIG_SYS_MAX_FLASH_SECT (19) /* max number of sectors on one chip */#define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE +0x0F0000)/* addr of environment */#endif#ifdef CONFIG_AMD_LV400#define PHYS_FLASH_SIZE 0x00080000 /* 512KB */#define CONFIG_SYS_MAX_FLASH_SECT (11)/* max number of sectors on one chip */#define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE +0x070000)/* addr of environment */#endif#define CONFIG_SST_39VF1601 1//添加mini2440开发板Nor Flash设置#define PHYS_FLASH_SIZE 0x200000//我们开发板的Nor Flash是2M#define CONFIG_SYS_MAX_FLASH_SECT (512)//根据SST39VF1601的芯片手册描述,对其进行操作有两种方式:块方式和扇区方式。

U_Boot源码分析及在S3C2440的移植过程

U_Boot源码分析及在S3C2440的移植过程

科技广场2009.70引言B oot l oader 是在操作系统内核运行之前运行的一段小程序。

通过这段小程序,我们可以初始化硬件设备,建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境,其功能类似于PC 机的B I O S 。

B oot l oader 的实现非常依赖于具体硬件。

在嵌入式系统中,硬件配置千差万别,不可能有一个B oot l oader 支持所有的C PU 、所有的电路板,所以需要进行一些移植。

嵌入式Li nux 系统中常用的B oot l oader 有U -B oot 、V I V I 、B I ob 、R edB oot 、A R M boot 等,当前比较流行的是U -B oot ,全称为U ni ver sal B oot Loader ,即通用B oot l oad-er 。

它是遵循GPL 条款的开放源代码项目,可以引导多种操作系统,如:Li nux 、N et B SD 、V xW or ks 、Q N X 、R TEM S 、A R TO S 、LynxO S 等;支持多种构架的C PU ,如:Pow er PC 、M I PS 、x86、A R M 、N I O S 、X Scal e 等;还可以烧写EX T2、JFFS2文件系统映像、支持串口下载、网络下载。

虽然使用较复杂,但是可以用来方便地调试程序。

1U-Boot 源码结构本文是在U -B oot -1.1.6的基础上进行分析和移植的。

从sour cef or ge 网站下载U -B oot -1.1.6.t ar.bz2,解压后即得到全部源代码。

U-B oot 的目录结构比较简单,U -B oot -1.1.6根目录下共有26个子目录,可以分为四类:①与平台相关的或者开发板相关;②通用的函数;③通用的设备驱动程序;④U -B oot 工具、示例程序、文档。

U-Boot分析及在S3C2440上的移植

U-Boot分析及在S3C2440上的移植

U-Boot分析及在S3C2440上的移植摘要本文简要介绍Bootloader,分析归纳U-Boot的源码结构及启动过程源码,详细阐述U-Boot在嵌入式开发板S3C2440上的移植过程。

应用结果表明U-Boot在S3C2440上成功移植,为移植Linux操作系统奠定了基础。

关键词Bootloader;U-Boot;S3C2440;移植1 Bootloader简介Bootloader在系统上电时开始执行,初始化硬件设备、准备好软件环境,为调用操作系统内核作好准备。

U-Boot即通用Bootloader是遵循GPL条款的开放源代码项目。

2 U-Boot的源码结构本文在U-Boot-1.1.6的基础上进行分析和移植。

U-Boot-1.1.6根目录下共有26个子目录,可分为4类:平台相关的或开发板相关的;通用的函数;设备的驱动程序;U-Boot工具、示例程序、文档。

3 U-Boot启动过程源码U-Boot属于两阶段的Bootloader。

U-Boot第一段代码分析:硬件设备初始化包括屏蔽所有的中断、设置CPU的速度和时钟频率等;为第二阶段代码准备RAM空间;复制第二阶段代码到RAM空间;设置好堆栈;跳转到第二阶段代码的C入口点。

U-Boot第二段代码分析:初始化本阶段用到得硬件设备;检测系统内存映射;将内核映像和根文件系统映像从FLASH读到RAM空间中;为内核设置启动参数;调用内核。

4 U-Boot移植过程4.1 移植环境硬件环境:CPU:SAMSUNG S3C2440AL;SDRAM内存:64MB SDRAM HY57V561620,地址范围:0x30000000-0x34000000;FLASH存储器:1MB NOR FLASH 芯片AM29LV800;64MB NAND FLASH 芯片K9S1208。

软件环境:RedHat:8.0;U-Boot-1.1.6;交叉编译工具:arm-linux-gcc-3.4.5。

嵌入式linux之我行-linux移植

嵌入式linux之我行-linux移植

Linux-2.6.30.4在2440上的移植之内核嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤。

一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便。

如有错误之处,谢请指正。

∙共享资源,欢迎转载:一、移植环境∙主机:VMWare--Fedora 9∙开发板:Mini2440--64MB Nand∙编译器:arm-linux-gcc-4.3.2二、移植步骤1. 准备工作目录和解压内核源码2. 进入内核根目录修改Makefile使之编译成ARM平台3. 修改机器码,根据友善提供的VIVI里面的机器码是782,所以内核也要改成782才能启动4. 修改系统平台时钟为12MHz(即:12000000)5. 修改Nand Flash分区。

这里只创建三个分区,其他多余的分区屏蔽掉6. 配置内核选项首先加载s3c24xx系列的通用配置,然后在此基础上修改各配置选项如下。

这里只列出了要修改的项,其他的默认配置完后将配置文件保存为.config,这样方便下次make menuconfig时默认加载上次配置过的文件7. 交叉编译内核如果没有任何错误,编译出来的内核在arch/arm/boot/目录下,文件zImage即是。

8. 将内核镜像文件zImage下载到Mini2440上测试新内核2.6.30.4的使用:64MB Nand Flash分区情况:三、结束语Ok,新的内核移植成功,但是现在开发板还不能正常运行,因为还有各种设备的驱动和文件系统没有移植,这些将在后续的篇章中一一讲述。

文件系统嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤。

一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便。

如有错误之处,谢请指正。

∙共享资源,欢迎转载:一、移植环境∙主机:VMWare--Fedora 9∙开发板:Mini2440--64MB Nand∙编译器:arm-linux-gcc-4.3.2∙yaffs补丁:cvs-root.tar.gz 这里下载/cgi-bin/viewcvs.cgi/∙Busybox:busybox-1.13.0.tar.tar∙yaffs制作工具:mkyaffs2image.tgz(友善提供)二、移植步骤1.准备工作目录和进入工作目录2. 给内核打上yaffs补丁,使内核对yaffs的支持3. 配置内核,使其对yaffs2文件系统的支持。

U-Boot在S3C2440上的分析与移植

U-Boot在S3C2440上的分析与移植
关键 词 :嵌 入 式 系统 ;B o la e ;¥ C 4 0;U B o ot dr 3 24 o —o t
Ana y i nd Tr n pl n ato o bo to t l ssa a s a t in fU・ o n he¥ C2 4 3 40
SH ILe i
( l g f e t nc n no mai n Xia oye h i ie s y Xi n7 0 4 , ia Col eo cr isa dI fr t , ’nP ltc ncUnv ri , ’ 1 0 8 Chn ) e El o o t a Ab ta t Bo t a e (o to d r i a otn at f ikn pteo ea n s m n ad r lt r , d sr c: ol d r b o a e) s li ra t r o n igu p rt gs t a dh r waepafm a o l lmp p l h i ye o n
言实现 ,阶段 2用 C语言实现。将依赖于处理器体系
结构的汇编语言部分和通 用的 C语言部分分开 ,这样 有利于 B o L a e 能够支持尽可 能多的嵌入式处理 o to d r
系统 的软 硬件环境 带到一 个合适 的状态 , 以便 为最终
调用操作 系统内核 准备好正确 的环境[。 B o la e 1 ot dr 1 o 是 紧密依赖 于硬件 而实现 的。 别是在嵌入式 系统 中, 特
不 同体 系结构 的处理器 需要不 同 B o la e , o t dr o 即使是
as mp ra tf re b d e y tm f s fwae d v lp e t lo i o n o m e d d s se o o t r e eo m n .Th sp p rd s rb sc aa trsis o t i a e e c e h ce t fa i r i c
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Yaffs 页结构说明 ============================================== 字节 用途
============================================== 0 - 511 512 - 515 516 517 存储数据(分为两个半部) 系统信息 数据状态字 块状态字
*buffer) { int rval; size_t left_to_write = *length; size_t len_incl_bad; u_char *p_buffer = buffer; #if defined(CONFIG_MTD_NAND_YAFFS2) //add yaffs2 file system support if(nand->rw_oob==1) { size_t oobsize = nand->oobsize; size_t datasize = nand->writesize; int datapages = 0; if (((*length)%(nand->oobsize+nand->writesize)) != 0) { printf ("Attempt to write error length data!\n"); return -EINVAL; } datapages = *length/(datasize+oobsize); *length = datapages*datasize; left_to_write = *length; } #endif /* Reject writes, which are not page aligned */ if ((offset & (nand->writesize - 1)) != 0 || (*length & (nand->writesize - 1)) != 0) { printf ("Attempt to write non page aligned data\n"); return -EINVAL; } len_incl_bad = get_len_incl_bad (nand, offset, *length); if ((offset + len_incl_bad) >= nand->size) { printf ("Attempt to write outside the flash area\n"); return -EINVAL; } #if !defined(CONFIG_MTD_NAND_YAFFS2) //add yaffs2 file system support if (len_incl_bad == *length) { rval = nand_write (nand, offset, length, buffer); if (rval != 0) printf ("NAND write to offset %llx failed %d\n", offset, rval); return rval; } #endif while (left_to_write > 0) { size_t block_offset = offset & (nand->erasesize - 1); size_t write_size; WATCHDOG_RESET (); if (nand_block_isbad (nand, offset & ~(nand->erasesize - 1))) { printf ("Skip bad block 0x%08llx\n", offset & ~(nand->erasesize - 1));
④、在第二步关联的 nand_write_skip_bad 函数中添加对 Nand OOB 的相关操作,如下:
#gedit drivers/mtd/nand/nand_util.c //在 nt nand_write_skip_bad(nand_info_t *nand, loff_t offset, size_t *length, u_char
518 - 519 520 - 522 523 - 524 525 - 527
系统信息 后半部 256 字节的 ECC 系统信息 前半部 256 字节的 ECC
==============================================
好了,在了解 Nand Flash 组成和 Yaffs/yaffs2 文件系统结构后,我们再回到 u-boot 中。目前,在 u-boot 中已经有对 Cramfs、Jffs2 等文件系统的读写支持,但与带有数据 校验等功能的 OOB 区的 Yaffs/Yaffs2 文件系统相比,他们是将所有文件数据简单的以线 性表形式组织的。所以,我们只要在此基础上通过修改 u-boot 的 Nand Flash 读写命令, 增加处理 00B 区域数据的功能,即可以实现对 Yaffs/Yaffs2 文件系统的读写支持。
"nand erase [clean] [off size] - erase 'size' bytes from\n" " offset 'off' (entire device if not specified)\n" "nand bad - show bad blocks\n" "nand dump[.oob] off - dump page\n" "nand scrub - really clean NAND erasing bad blocks (UNSAFE)\n" "nand markbad off [...] - mark bad block(s) at offset (UNSAFE)\n" "nand biterr off - make a bit error at offset (UNSAFE)" #ifdef CONFIG_CMD_NAND_LOCK_UNLOCK "\n" "nand lock [tight] [status]\n" " bring nand to lock state or display locked pages\n" "nand unlock [offset] [size] - unlock section" #endif );
一、移植环境
• 主 机: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
二、移植步骤 上接:u-boot-2009.08 在 2440 上的移植详解(四)
nand->skipfirstblk = 1; ret = nand_write_skip_bad(nand,off,&size,(u_char *)addr); nand->skipfirstblk = 0; nand->rw_oob = 0; } #endif else if (!strcmp(s, ".oob")) { /* out-of-band data */ mtd_oob_ops_t ops = { .oobbuf = (u8 *)addr, .ooblen = size, .mode = MTD_OOB_RAW }; if (read) ret = nand->read_oob(nand, off, &ops); else ret = nand->write_oob(nand, off, &ops); } else { printf("Unknown nand command suffix '%s'.\n", s); return 1; } printf(" %zu bytes %s: %s\n", size, read ? "read" : "written", ret ? "ERROR" : "OK"); return ret == 0 ? 0 : 1; }
9)实现 u-boot 对 yaffs/yaffs2 文件系统下载的支持。 注意:此篇对 Nand 的操作是基于 MTD 架构方式,在“u-boot-2009.08 在 2440 上的移 植详解(三)”中讲到过。 通常一个 Nnad Flash 存储设备由若干块组成,1 个块由若干页组成。一般 128MB 以下 容量的 Nand Flash 芯片,一页大小为 528B,被依次分为 2 个 256B 的主数据区和 16B 的额 外空间;128MB 以上容量的 Nand Flash 芯片,一页大小通常为 2KB。由于 Nand Flash 出 现位反转的概率较大,一般在读写时需要使用 ECC 进行错误检验和恢复。 Yaffs/yaffs2 文件系统的设计充分考虑到 Nand Flash 以页为存取单位等的特点,将 文件组织成固定大小的段(Chunk)。以 528B 的页为例,Yaffs/yaffs2 文件系统使用前 512B 存储数据和 16B 的额外空间存放数据的 ECC 和文件系统的组织信息等(称为 OOB 数 据)。通过 OOB 数据,不但能实现错误检测和坏块处理,同时还可以避免加载时对整个存 储介质的扫描,加快了文件系统的加载速度。以下是 Yaffs/yaffs2 文件系统页的结构说 明:
" to/from memory address 'addr', skipping bad blocks.\n" //注意:这里只添加了 yaffs2 的写命令,因为我们只用 u-boot 下载(即写)功能,所以我们没有添 加 yaffs2 读的命令 #if defined(CONFIG_MTD_NAND_YAFFS2) "nand write[.yaffs2] - addr off|partition size - write `size' byte yaffs image\n" " starting at offset off' from memory address addr' (.yaffs2 for 512+16 NAND)\n" #endif
相关文档
最新文档