嵌入式Linux之我行——u-boot-2009_08在2440上的移植详解(五) - Bootloader移植篇 - hbhuanggang
- 格式:pdf
- 大小:269.28 KB
- 文档页数:20
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之我行,主要讲述和总结了本人在学习嵌入式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源码进行修改。
一、移植环境∙主机: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" 是不打勾的。
凌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项目的开发目标,即支持尽可能多的嵌入式处理器和嵌入式操作系统。
详细的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上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移植到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启动。
第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>。
嵌入式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文件。