怎样配置tqs3c6410 uboot移植的u-boot

您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
基于TQ6410的Android使用手册.pdf25页
本文档一共被下载:
次 ,您可免费全文在线阅读后下载本文档
文档加载中...广告还剩秒
需要金币:90 &&
你可能关注的文档:
··········
··········
手册使用AndroidAndroid 的TQ基于
(暂无更新)
更新暨更正内容列表
24......................................................................................................................................通过有线网络上网4.3
24.......................................................................................................................................................安装软件4.2
24.......................................................................................................................................................键盘布局4.1
24............................................................................................................................................的使用Android 第四章
22............................................................................................................................Android 启动uboot 设置 3.5
21.............................................................................................................................................解压文件系统 3.4
20................................................................................................................格式UBIFS 格式化文件系统为 3.3
20.............................................................................................................NFS中设置Linux 端的PC
18................................................................................................................启动参数NFS设置uboot
18........
正在加载中,请稍后...原创文章版权所有!如需转载,请注明出处:
谢谢合作!!!!!
有了很好的支持,所以采用
VMWare--Fedora 8
开发板:天嵌
TQM nandflash,
EABI-4.3.3_V0.1
本次移植的功能实现
Nand Flash
Nand Flash/SD
建立自己的开发板项目并测试编译
直接支持,可以查看
目录的一些子目录,如:
board/samsung/
目录下就是对三星一些
处理器的支持,有
,所以我们就在这里建立自己的开发板项目。
的资源差不多,主频和外设有点差别,所以我们就在
board/samsung/
下建立自己开发板的项目,取名叫
#tar -jxvf u-boot-2010.03.tar.bz2&&&
#cd u-boot-2010.03/board/samsung/&&&
#mkdir smdk6410&&&&&&&&&&&&&&&&&&&&&&&
的资源差不多,所以就以
项目的代码作为模板,以后再修改
#cp -rf smdk6400/* smdk6410/&&&
下所有的代码复制到
#cd smdk6410&&&&&&&&&&&&&&&&&&
进入smdk6410
#mv smdk6400.c my6410.c&&&&&
将smdk6410
下的smdk6400.c
改名为smdk6410.c
#cd ../../../&&&&&&&&&&&&&&&&
回到u-boot
cp include/configs/smdk6400.h include/configs/smdk6410.h
配置头文件
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:188223次
积分:2403
积分:2403
排名:第14257名
原创:36篇
转载:109篇
评论:18条
(1)(1)(1)(16)(6)(1)(1)(3)(2)(8)(10)(1)(1)(9)(2)(2)(1)(2)(1)(5)(1)(4)(1)(1)(2)(1)(6)(4)(7)(4)(1)(1)(4)(23)(11)17.U-boot的工作流程分析-6410
时间: 10:20:05
&&&& 阅读:81
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&17.U-boot的工作流程分析-6410
6410开发板:
1.uboot的入口:
要看uboot工程的入口,首先打开顶层目录的Makefile:
Uboot所支持的开发板,在顶层的Makefile中都会有一个配置选项。比如6410,在Makefile中的配置选项是make forlinx_nand_ram256_config:在vim的命令模式按下/,然后输入make forlinx_nand_ram256_config回车会定位到这里:
这是Makefile里的一个目标。这是来配置6410开发板的。看到上图第二行的smdk6410,这个参数决定了开发板的名称。这个名称是有作用的。接下来看看他的作用。
首先是找一下目录:
可以看到这里有很多smdk的子目录,也包括smdk6410,这两个是对应的。该目录存放的就是6410开发板相关的文件。里面有一个叫uboot.lds的文件,前面知道lds文件是连接器脚本。Uboot的整个过程的链接,是通过该脚本来链接控制的。打开该链接器脚本:
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
/*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/
OUTPUT_ARCH(arm)
ENTRY(_start)
????. = 0x;
?????. = ALIGN(4);
cpu/s3c64xx/start.o????(.text) //1可以看到位于代码段前端的文件是start.o,对应的是一个汇编文件。这个汇编文件会最先被运行。但是这个汇编代码里最先执行的代码是哪些呢?
cpu/s3c64xx/s3c6410/cpu_init.o????(.text)
cpu/s3c64xx/onenand_cp.o????(.text)
cpu/s3c64xx/nand_cp.o????(.text)
cpu/s3c64xx/movi.o (.text)
lib_arm/div0.o
?????. = ALIGN(4);
????.rodata : { *(.rodata) }
?????. = ALIGN(4);
????.data : { *(.data) }
?????. = ALIGN(4);
????.got : { *(.got) }
?????__u_boot_cmd_start = .;
????.u_boot_cmd : { *(.u_boot_cmd) }
????__u_boot_cmd_end = .;
?????. = ALIGN(4);
????.mmudata : { *(.mmudata) }
?????. = ALIGN(4);
????__bss_start = .;
????.bss : { *(.bss) }
????_end = .;
?首先是找到该文件:
上面u-boot-lds文件里,在sections的标识之上,有一行:ENTRY(_start)是整个程序的入口。所以就找找start.S文件里有没_start这个标识呢?一搜会马上看到该标号:
到这里,看到这个_start才是整个uboot工程的入口。
?接下来是第一阶段的代码:
在Linux里,打开上一节创建好的,Source Insight里的uboot工程:
然后找到smdk6410的start.S:
接下来看uboot做了什么事,主要是通过注释来分析:
开发板一上电,它会跳转到start.S的中断向量表的开始处执行:
从它的注释:
所以1,:知道上电后是跳到中断向量表来执行。执行的第一条指令是b reset。
Start_code的实在start.S的下面定义的:
从注释知道,这是actual start code。进入之后,set the cpu to svc32 mode,设置cpu为SVC模式。
接着执行的代码是:
3.刷新I/D caches。
4.然后是关闭MMU和cache:
5.对外围的基地址进行初始化。
6.接着到了bl lowlevel_init
点击:,然后在Symbol里输入:lowlevel_init:
会看到出现很多,然后在下面可以看到它们各自的目录。其实每一个开发板都对应一个lowlevel_init.S:
进入该文件:
7看到系统进入该文件做的第一件事是:led初始化:
上面是点亮led,是用来帮助调试程序。
8.接着是关闭开门狗的操作:
我们想到在2440里没有关闭看门狗,是不是忘记了呢?看看2440代码:
可以看到2440里的lowlevel_init.S的lowlevel_init标识有一个初始化系统时钟的:bl system_clock_init函数。进入该函数:
可以看到2440是在初始化系统时钟里关闭看门狗。
9.接着还有屏蔽中断的操作:
10.到这才初始化系统时钟:
11.接着初始化串口:
12.对nand进行简单初始化:
13.初始化内存:
初始完内存之后就返回start.S里:
14.跳转回来之后,由于我们选择的是NandFlash启动,所以是跳转到:
在2440里,是复制NandFlash里的内容到内存当中去。6410也是一样的:
Bl copy_from_nand。
15.接着不管MMU的使能操作:
我们看stack栈的初始化:
16.清除bss段:
?最后同样是跳转到start_armboot:
我们在2440里讲过,start_armboot的代码,两个板子是同一个文件来的。所以6410的第二阶段与2440的一样的。只有board.c里面有。
验证看看是不是一样的:
执行完上面,程序跳转到_start_armboot处执行:
上面的代码,通过伪指令ldr把_start_armboot的值装入pc指针,程序就会跳转到_start_armboot处执行。而此处的地址是start_armboot的地址。就是,程序会跳转到start_armboot函数处执行。就是把我们的pc指针跳转到内存去执行了。
下面看看start_armboot的地址是不是在内存中。
配置uboot:make forlinx_nand_ram256_config,然后执行make。
然后看到生成的文件:
?其中,u-boot是elf文件,u-boot.bin是二进制文件。
接下来对u-boot的elf文件,进行反汇编,看看start_armboot函数的地址:
arm-linux-objdump -D -S u-boot &dump
看到函数的其实地址cfe02ad0的地址是在内存里的。所以start.S里的:
实现了从垫脚石跳转到内存。但是,此时会发现在这里的起始地址被变为了cfe02ad0:
在第一阶段里,不是说启动地址是在0吗?为什么这里是cfe02ad0呢?还有就是为什么是这个地址。
?前面的学习知道,当去链接一个程序的时候,程序由多个文件构成,起始地址是由链接器脚本决定的。在/home/samba/uboot/Uboot/6410/uboot/board/samsung/smdk6410里的u-boot.lds:
起始地址是0:
这里是0,为什么那里会是cfe02ad0呢?我们回到uboot的顶层目录,打开config.mk:
搜索text_base:
在这里-T $(LDSCRIPT)就是定义使用链接器脚本。后面的-Ttext 是制定代码段的基地址的。$(TEXT_BASE)。这里有两个起始地址,然而程序运行的时候以后面的TEXT_BASE的地址为准。它会覆盖掉LDSCRIPT这个地址。
?TEXT_BASE是在board/Samsung/smdk6410/config.mk里定义的:
?接下来就是测试验证一下,把他修改为。然后程序编译:
修改之后,执行make。
arm-linux-objdump -D -S u-boot &dump
上面的起始地址变了,刚才制定的。
?那起始地址为什么不是0呢?下图:
从上图可以看到,ldr PC,=start_armboot的跳转,把地址从垫脚石跳转到内存里。在前面的代码里,有用到b reset等跳转指令,为什么这不会跳转到内存去执行,而是还在垫脚石里呢?
上面的跳转,bl lowlevel_init的跳转地址:
为什么PC指针还是在垫脚石中呢?
?这就得讲两个词了。绝对跳转和相对跳转。
B和bl是相对跳转。
Ldr伪指令是绝对跳转:
?第三阶段:
是从此函数Start_armboot进入的。主要完成的硬件和软件的初始化,只是一些基础的初始化。
该函数里有一个for循环:
在for里首先是让一个指针数组,把里面的函数指针依次调用一次,if里的判断语句就是函数指针。那么指针数组里有哪些函数指针呢。
?指针数组:
可以看到里面都是函数指针。这里软件的初始化就不看了,我们只看硬件的初始化。在这些函数指针里,硬件初始化的有串口初始化。Serial_init。接着是lcd的初始化:
初始化网卡:
初始化led:
接着进入一个主循环:
执行用户输入的命令。例如tftp命令。这里是一个死循环。老是等待执行用户继续输入命令。在第一个阶段,每个开发板可能有不同的地方,但是在这个地方都是一样的。就是,在第二阶段都是跳到start_armboot处执行代码。2440的第一阶段是在start.S的b reset开始。
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&原文:/FORFISH/p/5188721.html
教程昨日排行
&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!& 相关文章 &
6410 UBOOT 支持SD/SDHC卡启动 FAT32文件系统 yaffs2烧录 图片显示烧录状态
6410 UBOOT 支持SD/SDHC卡启动 FAT32文件系统
yaffs2烧录 图片显示烧录状态 开发板: 飞凌6410 256M DDR 2G nand (4K pagesize) 需要csdn帐号和资源分才可以下载,其它朋友有需要可以QQ
或 lxj_ 移植好的uboot下载地址:链接地址 三星IROM boot 文档:链接地址 烧录工具下载:链接地址 Raw data bmp 转换工具(PIC2RAW): 链接地址 移植说明: 1.支持SD
在这里,TQ2416系列----SD启动卡的制作方法
:TQ2416_SD_BOOT_Tool.exe。制作软件位置:TQ2416_CD\Windows平台工具\TQ2416_SD_BOOT_Tool #3、uboot:u-boot_movi_64MB_V1.4.bin。uboot位置:TQ2416_CD\出厂烧录镜像合集\u-boot镜像\SD卡启动 具体制作过程 1、选择启动卡类型:、选择用于制作启动卡的SD卡在window下的盘符 3、显示SD卡容量 4、选择SD卡的类型。注意天嵌只支持SDHC卡,所以必须勾选上SDHC 5、选择uboot的路径。路径位于:TQ2416_CD\出厂烧录镜像合集\u-boot镜像\SD卡启动\u-boot_movi_64MB_V1.4.bin 6、制作启动卡
使uboot支持S3C6410的SD启动
一直以来都不知道SD卡中的uboot和nandflash中的uboot有什么区别?今天终于看到一篇文章,介绍了一下两者的区别,和如何用原生uboot制作SD卡uboot,记录下来以供后面查阅。 找到了原出处: http://blog.chinaunix.net/uid--id-232244.html 6410的手册上说,可以从nandflash、onenand、SD卡启动,没有专用的烧录工具的情况下,只有SD卡启动是可以考虑 的。手册上看到,SD卡启动,实际上是先执行片内
S3C6410 SD卡启动uboot分析(详细)
原文地址: 链接地址 6410的手册上说,可以从nandflash、onenand、SD卡启动,没有专用的烧录工具的情况下,只有SD卡启动是可以考虑 的。手册上看到,SD卡启动,实际上是先执行片内IROM中的一段程序,该程序从SD卡中读取代码,写到stepping stone 中,stepping stone是位于0x0c000000、size为8K的片内内存,代码写入stepping stone后,跳到 0x0c000000处继续执行程序。那么,要实现从SD卡启动,就必须弄清楚:
使uboot支持S3C6410的SD启动(转载)
6410的手册上说,可以从nandflash、onenand、SD卡启动,没有专用的烧录工具的情况下,只有SD卡启动是可以考虑 的。手册上看到,SD卡启动,实际上是先执行片内IROM中的一段程序,该程序从SD卡中读取代码,写到stepping stone 中,stepping stone是位于0x0c000000、size为8K的片内内存,代码写入stepping stone后,跳到 0x0c000000处继续执行程序。那么,要实现从SD卡启动,就必须弄清楚:
1、8K的代码保存在SD卡
和2440)两个版本,得益于廉价的arm7和arm9仿真烧录器,比如hjtag,arm这两个版本是通过hjtag或者jlink或其他工具直接烧录到norflash上的。但s3c6410是arm11的核,这些廉价工具不支持arm11,支持arm11的烧录工具都在数千元以上,这样势必影响大家使用djyos。要让6410执行djyos,必须解决在没有专用烧录工具的情况下,把djyos烧录到启动设备上的问题。
6410一共支持4种启动设备:norflash、nandflash、SD卡、modem
hjtag,arm这两个版本是通过hjtag或者jlink或其他工具直接烧录到norflash上的。但s3c6410是arm11的核,这些廉价工具不支持arm11,支持arm11的烧录工具都在数千元以上,这样势必影响大家使用djyos。要让6410执行djyos,必须解决在没有专用烧录工具的情况下,把djyos烧录到启动设备上的问题。
6410一共支持4种启动设备:norflash、nandflash、SD卡、modem,其中norflash和nandflash必须使用专用烧录工具,modem
使uboot支持S3C6410的SD启动
三、将修改好的UBOOT烧录到SD卡中 生成的uboot-bin是不是直接可以烧录到SD卡中呢? 有现成的工具IROM_Fusing_Tool.exe(开源的,可以找到源代码),但这个工具烧录的是nb0文件 实际上nb0文件的结构是:256k+8k 这样的一个形式,在Linux系统可以通过下面这个脚本来生成nb0文件 [cpp]
view plain copy #!/bin/sh
rm -rf temp x* u-boot_256k.bin
//flash地址,内存地址,长度 这样我们基本上就可以进入目标板的linux了。 输入ls,查看根目录。 可以使用一下自带的应用程序: #insmod 2440camera.o
//把摄像头驱动插入 #./cam2fb 240 320 16 0
//启动摄像头 #./mp3play
/path../*.mp3
//放Mp3 等等。
另外烧录cramfs与jffs2文件系统的方法: 进入uboot状态
对于Freescale MFG编程工具控制文件ucl.xml的分析
/android/u-boot.bin"&Sending U-Boot&/CMD& 将uboot发送到目标机。现在看来,是先在目标机的内存里运行一个ramfs的微内核,这个微操作系统里面包括一些诸如NAND驱动什么的。用于支持烧录操作。哈哈。现在开始才是烧录我们自己的uboot啊。 15、&CMD type="push" body="$ ddif=/dev/zero of=/dev/mmcblk0 bs=512 seek=2 count=2000"&Clean U-Bootenvironment&/CMD
对于Freescale MFG编程工具控制文件ucl.xml的分析
/android/u-boot.bin"&Sending U-Boot&/CMD& 将uboot发送到目标机。现在看来,是先在目标机的内存里运行一个ramfs的微内核,这个微操作系统里面包括一些诸如NAND驱动什么的。用于支持烧录操作。哈哈。现在开始才是烧录我们自己的uboot啊。 15、&CMD type="push" body="$ ddif=/dev/zero of=/dev/mmcblk0 bs=512 seek=2 count=2000"&Clean U-Bootenvironment&/CMD
对于Freescale MFG编程工具控制文件ucl.xml的分析
这一行。 14、&CMDtype="push" body="send"file="files/android/u-boot.bin"&Sending U-Boot&/CMD& 将uboot发送到目标机。现在看来,是先在目标机的内存里运行一个ramfs的微内核,这个微操作系统里面包括一些诸如NAND驱动什么的。用于支持烧录操作。哈哈。现在开始才是烧录我们自己的uboot啊。 15、&CMD type="push" body="$ ddif=/dev/zero of=/dev/mmcblk0 bs
real6410开发板烧写Android系统
0xx3FFFFFFF 烧写ubifs 格式文件系统(真正的文件系统)
1.1 uboot烧写 1.1.1. 烧写SD 启动的uboot 在没有仿真器等程序烧录工具的情况下,对于原本没有任何程序的板子,可以使用 S3C6410 的MMC/SD 启动功能来烧写一个可用的uboot。 注意:本文的实验都是基于512MB 的SD 做的,2G 的金士顿SD 也试过没有问题,建 议读者也使用这种容量的SD,对于2G 以上的SD 的支持并没有经过试验。 烧写过程如下: 在Windows 下,通过
1.平台开发编译
uboot目录 make m6_mbx_v1_make
编译android源码
source ..; make otapackage 2. 固件烧录
做好升级包后,进入uboot,使用命令 run recovery
也可以启动apk,使用update apk 选择固件升级
3.烧录uboot
插入sd卡,fatload mmc 0
在ubuntu下烧写映像文件到nand--基于三星210开发板
第一步:安装编译android系统必要的软件;
第二步:安装交叉编译工具链;
第三步:编译uboot
编译支持nand flash启动的uboot,执行如下指令:
./mk nand 第四步:编译内核
确保内核已支持yaffs文件系统;
第五步:编译android文件系统 将android编译脚本build_android.sh重命名为mk,并做如下修改: KERNEL_DIR=../kernel SEC_PRODUCT='smdkv210' 注意,由于我将
在ubuntu下烧写映像文件到nand--基于三星210开发板
第一步:安装编译android系统必要的软件;
第二步:安装交叉编译工具链;
第三步:编译uboot
编译支持nand flash启动的uboot,执行如下指令:
./mk nand 第四步:编译内核
确保内核已支持yaffs文件系统;
第五步:编译android文件系统 将android编译脚本build_android.sh重命名为mk,并做如下修改: KERNEL_DIR=../kernel SEC_PRODUCT='smdkv210' 注意,由于我将
在ubuntu下烧写映像文件到nand--基于三星210开发板
第一步:安装编译android系统必要的软件;
第二步:安装交叉编译工具链;
第三步:编译uboot
编译支持nand flash启动的uboot,执行如下指令:
./mk nand 第四步:编译内核
确保内核已支持yaffs文件系统;
第五步:编译android文件系统 将android编译脚本build_android.sh重命名为mk,并做如下修改: KERNEL_DIR=../kernel SEC_PRODUCT='smdkv210' 注意,由于我将
S3C6410开发全纪录(一)《还原SD卡启动的真相》
[cpp] view plaincopy 修改UBOOT,让它支持从SD卡读取数据,并将自己自举到内存
当我们设置完CPU的跳线,CPU已经清楚要从哪里去取第一条指,S3C6410到底是怎么工作的呢
之前找到过一篇参考文章 《S3C2450_IROM_ApplicationNote_Rev003.pdf》
这次找到了官方的文档更清楚的说明了这一切《S3C6410_Internal_ROM_Booting.pdf》
在文档中我们看到CPU上电之后的启动过程如下
S3C6410开发全纪录(一)《还原SD卡启动的真相》
,以保证位置的正确性 编译uboot,生成u-boot.bin [cpp] view plain copy make smdk6410_config
三、将修改好的UBOOT烧录到SD卡中 生成的uboot-bin是不是直接可以烧录到SD卡中呢? 有现成的工具IROM_Fusing_Tool.exe(开源的,可以找到源代码),但这个工具烧录的是nb0文件 实际上nb0文件的结构是:256k+8k 这样的一个形式,在Linux系统可以通过下面这个脚本来生成nb0文件 [cpp
S3C6410开发全纪录(一)《还原SD卡启动的真相》
中做了相应的处理,以保证位置的正确性 编译uboot,生成u-boot.bin [cpp]
view plain copy make smdk6410_config
三、将修改好的UBOOT烧录到SD卡中 生成的uboot-bin是不是直接可以烧录到SD卡中呢? 有现成的工具IROM_Fusing_Tool.exe(开源的,可以找到源代码),但这个工具烧录的是nb0文件 实际上nb0文件的结构是:256k+8k 这样的一个形式,在Linux系统可以通过下面这个脚本来
& 2012 - 2016 &
&All Rights Reserved. &
/*爱悠闲图+*/
var cpro_id = "u1888441";

我要回帖

更多关于 s3c6410 uboot 的文章

 

随机推荐