嵌入式Linux之我行——u-boot-2009_08在2440上的移植详解(六) - Bootloader移植篇 - hbhuanggang
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之我行,主要讲述和总结了本人在学习嵌入式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上的移植问题及解决方法集锦(三)

一、移植环境∙主机: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使用)

凌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移植过程

详细的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上的移植

到 ¥ 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之我行,主要讲述和总结了本人在学习嵌入式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移植到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平台上的移植方法

第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移植

嵌入式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开发板(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上移植和设置
王之磊;李临生
【期刊名称】《工业控制计算机》
【年(卷),期】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上的移植详解(二)嵌入式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的移植过程

科技广场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上的移植摘要本文简要介绍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-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上的分析与移植

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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
嵌入式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上的移植详解(五)10)u-boot利用tftp服务下载内核和利用nfs服务挂载nfs文件系统。
知识点:1.tftp服务的安装与配置及测试;2.nfs服务的安装与配置及测试;3.u-boot到kernel的参数传递(重点)。
我们知道使用tftp下载内核和使用nfs挂载文件系统的好处是,当我们重新编译内核或文件系统后不用重新把这些镜像文件再烧录到flash上,而是把这些镜像文件放到开发主机的tftp或nfs服务的主目录下,通过网络来加载他们,不用频繁的往flash上烧,这样一可以保护flash的使用寿命,二可以方便的调试内核或文件系统,提高开发效率。
可见,让u-boot实现这个功能是一件很有意义的事情。
实现这样的功能很简单,网上也有很多资料。
但有很多细节的东西如果稍不注意就导致失败,这里就结合本人实现的过程进行讲述和一些问题的分析。
•tftp服务的安装与配置及测试要使用tftp服务及测试它要安装两个软件包,一个就是tftp服务器,另外一个就是tftp客户端,这里安装客户端只是用于在主机本地测试tftp服务器是否正常运行的,来确保u-boot能够访问tftp服务(u-boot中已有tftp客户端的功能,其实在前面几篇中都已经使用了tftp下载内核或文件系统到开发板上,如果那里都做到了,这里就可以直接跳过)。
首先使用rpm命令查看你的主机上是否已经安装了tftp服务器和客户端,如果没有安装就去下载这两个软件包进行安装或者可以使用yum命令进行在线安装,yum会自动的去搜索适合你主机平台的最新软件包进行下载安装,如果主机已经安装了,则会提示软件包已经安装了最新的版本。
如下图所示:配置tftp服务器,主要是配置tftp的主目录及访问权限。
因tftp服务依赖于xinetd服务,所以一般tftp服务安装好后其配置文件一般会在/etc/xinetd.d/目录下:[root@localhost home]# vi /etc/xinetd.d/tftpservice tftp{disable =nosocket_type = dgramprotocol = udpwait= yesuser = rootserver =/usr/sbin/in.tftpdserver_args =-s /home/tftp-root -c //主要是修改这里,指定tftp服务器的主目录,-c选项是指可以创建文件per_source = 11cps = 100 2flags = IPv4}创建刚才指定的tftp服务器主目录,也要注意主目录的可读可写的权限:[root@localhost home]#mkdir /home/tftp-root[root@localhost home]#chmod 777 /home/tftp-root启动和测试tftp服务:[root@localhost home]#service xinetd restart //重启xinetd服务就会启动其下的所有服务,也包括tftp服务[root@localhost home]#service iptables stop //关闭防火墙[root@localhost home]#tftp 主机IP地址tftp>get 要下载的文件tftp>put 要上传的文件tftp>q[root@localhost home]#•nfs服务的安装与配置及测试以root的身份在控制台输入setup,在系统服务选项中选中nfs服务,如下图:配置NFS服务器的共享主目录,也要注意权限问题:[root@localhost home]# vi /etc/exports //如果没有这个文件就创建它,添加下面一行配置信息,注意格式一定要正确,否则导致服务不正常/home/filesystem *(rw,no_root_squash,sync)注释:“/home/filesystem”是NFS服务器的主目录,注意目录的权限“*”表示所有的IP都可以访问NFS主目录“rw”表示可读可写”no_root_squash“表示登入到NFS主机的用户如果是ROOT用户,他就拥有ROOT的权限“sync”表示同步[root@localhost home]# service nfs restart //重新启动NFS服务,使配置文件生效测试NFS服务是否正常。
将事先准备好的文件系统放到NFS主目录下,如下:[root@localhost home]# ls /home/filesystem/bin dev home lib mnt root sum100 tmp vardebug etc hostname linuxrc proc sbin sys usr[root@localhost home]#//在主机本地测试NFS服务,将NFS主目录下的文件系统挂载到/mnt目录下,192.168.1.101是主机的IP[root@localhost home]#mount -o nolock -t nfs 192.168.1.101:/home/filesystem /mnt可以看到/mnt目录下的内容和NFS主目录/home/filesystem下的内容完全一致,说明NFS 服务正常:•u-boot到kernel的参数传递我们知道,在kernel配置选项Boot options中有一个Default kernel command string参数项,而在u-boot参数中也有一个bootargs参数项,他们都是供内核启动用的,那他们又有什么区别呢,内核启动时到底是用哪一个呢?两种参数项分别如下图所示(kernel中的参数指定是从开发板Flash分区上挂载文件系统,u-boot中的参数指定的是从NFS挂载文件系统):实际上,内核中的参数项是内核默认提供的,在内核配置时去指定,而u-boot提供的则在u-boot启动时传递到内核中取代内核提供的参数。
所以当u-boot没有提供bootargs参数时,内核启动就是用内核配置时指定的参数,当u-boot提供了bootargs参数时就使用u-boot的参数。
那么,u-boot是如果将参数信息传递到内核中的呢?而内核又是怎么接收u-boot传递过来的参数呢?这就涉及到一点点ARM寄存器的知识了。
我们知道,ARM有7种工作模式和37个寄存器(31个通用寄存器和6个状态寄存器),如下图:ARM工作模式之间的转换就是利用这些寄存器进行,而u-boot参数的传递也利用了三个通用寄存器R0、R1和R2。
关于ARM工作模式和寄存器在这里就不做讲叙了,以后再讲,这里你就理解成u-boot在启动的时候把参数存放到这三个寄存器中,到内核启动时再把寄存器中的参数取出,当然,他们并不是就这样简单的操作。
下面我们看代码一一分析。
首先,我们来分析一下u-boot是怎样处理和发送要传递的参数,而u-boot要传递的参数又有哪些呢?除了我们最容易知道的bootargs(即内核commandline)参数项外,要传递的参数还有MACH_TYPE(即我们所说的机器码)、系统根设备信息(标志,页面大小)、内存信息(起始地址,大小)、RAMDISK信息(起始地址,大小)、压缩的RAMDISK根文件系统信息(起始地址,大小)。
由此可见要传递的参数很多,这时候,u-boot就提供一种叫做参数链表(tagged list)的方式把这些参数组织起来,链表结构体定义在:include/asm-arm/setup.h中,而实现链表的组织在lib_arm/bootm.c中:我们可以看到,链表的组织是由一系列函数实现,u-boot规定,链表必须以ATAG_CORE标记开始,以ATAG_NONE标记结束,中间就是一些参数标记项,这点从代码中可以体现出来。
那么在这些函数中有一个bd的参数是至关重要的,它是一个bd_info类型的结构体,定义在include/asm-arm/u-boot.h中,而这个结构体又被一个global_data类型的结构体所引用,定义在include/asm-arm/global_data.h中,如下:那么,那个bd参数到底是做什么用的呢?从定义中可以得知,bd记录了机器码、u-boot参数链表在内存中的地址等信息,那又问,它在什么地方进行记录的呢?它就在我们自己开发板初始化代码中记录的,如:board/samsung/my2440/my2440.c中注意:bd_t被gd_t所引用,而在global_data.h中我们可以看到,u-boot定义了一个gd_t的全局指针变量*gd,所以在这里就可以直接使用gd来设置bd了。
好了,我们还是接着分析这个参数链表是如何被传递的,组织参数链表的系列函数在一个叫do_bootm_linux的函数中被调用的,还是定义在lib_arm/bootm.c中从这个函数中我们可以看到,要使参数传递生效必须需要CONFIG_SETUP_MEMORY_TAGS和CONFIG_CMDLINE_TAG这两个宏的支持,所以需要在include/configs/my2440.h中定义它们。
原来我就是没定义它们,在使用NFS挂载文件系统时就出现问题。
同时,theKernel这个函数指针是u-boot参数传递的至关点,我们知道,函数在内存中执行的时候其实就是一个地址,而在代码中首先将这个函数指针指向kernel的入口地址,最后还将0、机器码和u-boot参数项在内存中的地址带给这个入口地址,故执行这个入口地址的时候即kernel启动的时候可以有这三个参数进行接收。
那么,这个入口地址(kernel启动地址或者说kernel入口地址)是怎么来的是谁指定的,又是多少呢?看代码,是从一个bootm_headers_t类型的结构体的成员ep取得的,而这个结构体是从调用do_bootm_linux的地方传递过来的。
bootm_headers_t定义在include/image.h 中,do_bootm_linux在common/cmd_bootm.c中被调用,如下:从代码中可以清楚的看到对bootm_headers_t的成员ep进行了赋值,但是还是不够直观这个入口地址到底是多少?只知道是使用image_get_ep函数从bootm_headers_t中的legacy_hdr_os_copy上取得的,那它在什么地方被赋值的呢?原来在image_set_ep函数中,定义在tools/mkimage.c中,如下:我们再想想,这个mkimage.c是做什么用的?原来是用它来制作u-boot格式的内核——uImage,还记得怎样使用mkimage来制作uImage吧,在“u-boot-2009.08在2440上的移植详解(四)”中讲到,如下:mkimage [-x]-A arch -O os -T type -C comp -a addr -e ep -n name -d data_file[:data_file...] image选项:-A:set architecture to 'arch'//用于指定CPU类型,比如ARM-O:set operating system to 'os'//用于指定操作系统,比如Linux-T:set image type to 'type'//用于指定image类型,比如Kernel-C:set compression type 'comp'//指定压缩类型-a:set load address to 'addr'(hex)//指定image的载入地址-e:set entry point to 'ep'(hex)//内核的入口地址,一般为image的载入地址+0x40(信息头的大小)-n:set image name to 'name'//image在头结构中的命名-d:use image data from 'datafile'//无头信息的image文件名-x:set XIP (execute in place)//设置执行位置例如:mkimage -n 'linux-2.6.30.4'-A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008000 -d zImage uImage.img呵呵,相信此时的你拨云见日,茅塞顿开了吧!这个入口地址就是0x30008000,这也正是为什么u-boot一定要使用uImage的格式来启动内核的原因之一。